From 95b900c9c84fa757de7bf220ffcd509f334fd152 Mon Sep 17 00:00:00 2001 From: bglacial Date: Mon, 14 Jan 2019 23:20:32 +0100 Subject: [PATCH] Ajout du module "coverage" pour les tests --- .coverage | 1 + htmlcov/api___init___py.html | 89 +++ htmlcov/api_settings_py.html | 341 ++++++++++ htmlcov/api_urls_py.html | 141 +++++ htmlcov/api_wsgi_py.html | 121 ++++ htmlcov/coverage_html.js | 584 ++++++++++++++++++ htmlcov/index.html | 329 ++++++++++ htmlcov/jquery.ba-throttle-debounce.min.js | 9 + htmlcov/jquery.hotkeys.js | 99 +++ htmlcov/jquery.isonscreen.js | 53 ++ htmlcov/jquery.min.js | 5 + htmlcov/jquery.tablesorter.min.js | 2 + htmlcov/keybd_closed.png | Bin 0 -> 112 bytes htmlcov/keybd_open.png | Bin 0 -> 112 bytes htmlcov/manage_py.html | 133 ++++ htmlcov/status.json | 1 + htmlcov/style.css | 375 +++++++++++ htmlcov/timelaps___init___py.html | 89 +++ htmlcov/timelaps_admin_py.html | 117 ++++ htmlcov/timelaps_apps_py.html | 105 ++++ .../timelaps_migrations_0001_initial_py.html | 253 ++++++++ ...migrations_0002_auto_20190112_0858_py.html | 123 ++++ ...migrations_0003_auto_20190112_0903_py.html | 147 +++++ ...migrations_0004_auto_20190112_0906_py.html | 125 ++++ ...migrations_0005_auto_20190112_0907_py.html | 125 ++++ ...migrations_0006_auto_20190112_0912_py.html | 145 +++++ ...migrations_0007_auto_20190112_0930_py.html | 143 +++++ ...migrations_0008_auto_20190112_0934_py.html | 137 ++++ ...migrations_0009_auto_20190112_0938_py.html | 155 +++++ ...migrations_0010_auto_20190112_1005_py.html | 145 +++++ ...migrations_0011_auto_20190112_1017_py.html | 125 ++++ ...migrations_0012_auto_20190112_1019_py.html | 255 ++++++++ htmlcov/timelaps_migrations___init___py.html | 89 +++ htmlcov/timelaps_models_py.html | 233 +++++++ htmlcov/timelaps_serializers_py.html | 175 ++++++ htmlcov/timelaps_tests_py.html | 185 ++++++ htmlcov/timelaps_urls_py.html | 115 ++++ htmlcov/timelaps_views_py.html | 223 +++++++ .../__pycache__/serializers.cpython-36.pyc | Bin 2495 -> 2495 bytes timelaps/__pycache__/tests.cpython-36.pyc | Bin 232 -> 483 bytes timelaps/__pycache__/urls.cpython-36.pyc | Bin 592 -> 592 bytes timelaps/__pycache__/views.cpython-36.pyc | Bin 2450 -> 2582 bytes 42 files changed, 5492 insertions(+) create mode 100644 .coverage create mode 100644 htmlcov/api___init___py.html create mode 100644 htmlcov/api_settings_py.html create mode 100644 htmlcov/api_urls_py.html create mode 100644 htmlcov/api_wsgi_py.html create mode 100644 htmlcov/coverage_html.js create mode 100644 htmlcov/index.html create mode 100644 htmlcov/jquery.ba-throttle-debounce.min.js create mode 100644 htmlcov/jquery.hotkeys.js create mode 100644 htmlcov/jquery.isonscreen.js create mode 100644 htmlcov/jquery.min.js create mode 100644 htmlcov/jquery.tablesorter.min.js create mode 100644 htmlcov/keybd_closed.png create mode 100644 htmlcov/keybd_open.png create mode 100644 htmlcov/manage_py.html create mode 100644 htmlcov/status.json create mode 100644 htmlcov/style.css create mode 100644 htmlcov/timelaps___init___py.html create mode 100644 htmlcov/timelaps_admin_py.html create mode 100644 htmlcov/timelaps_apps_py.html create mode 100644 htmlcov/timelaps_migrations_0001_initial_py.html create mode 100644 htmlcov/timelaps_migrations_0002_auto_20190112_0858_py.html create mode 100644 htmlcov/timelaps_migrations_0003_auto_20190112_0903_py.html create mode 100644 htmlcov/timelaps_migrations_0004_auto_20190112_0906_py.html create mode 100644 htmlcov/timelaps_migrations_0005_auto_20190112_0907_py.html create mode 100644 htmlcov/timelaps_migrations_0006_auto_20190112_0912_py.html create mode 100644 htmlcov/timelaps_migrations_0007_auto_20190112_0930_py.html create mode 100644 htmlcov/timelaps_migrations_0008_auto_20190112_0934_py.html create mode 100644 htmlcov/timelaps_migrations_0009_auto_20190112_0938_py.html create mode 100644 htmlcov/timelaps_migrations_0010_auto_20190112_1005_py.html create mode 100644 htmlcov/timelaps_migrations_0011_auto_20190112_1017_py.html create mode 100644 htmlcov/timelaps_migrations_0012_auto_20190112_1019_py.html create mode 100644 htmlcov/timelaps_migrations___init___py.html create mode 100644 htmlcov/timelaps_models_py.html create mode 100644 htmlcov/timelaps_serializers_py.html create mode 100644 htmlcov/timelaps_tests_py.html create mode 100644 htmlcov/timelaps_urls_py.html create mode 100644 htmlcov/timelaps_views_py.html diff --git a/.coverage b/.coverage new file mode 100644 index 0000000..a41b5c3 --- /dev/null +++ b/.coverage @@ -0,0 +1 @@ +!coverage.py: This is a private format, don't read it directly!{"lines":{"/mnt/d/Dev/Applications/timelaps_api/manage.py":[2,3,5,6,7,8,22],"/mnt/d/Dev/Applications/timelaps_api/api/__init__.py":[1],"/mnt/d/Dev/Applications/timelaps_api/api/settings.py":[11,13,16,23,26,28,34,35,36,37,38,39,40,41,45,46,47,48,49,50,51,54,58,59,60,62,63,64,65,66,72,79,80,81,82,83,84,85,95,98,101,104,112,114,116,118,120,126],"/mnt/d/Dev/Applications/timelaps_api/timelaps/__init__.py":[1],"/mnt/d/Dev/Applications/timelaps_api/timelaps/models.py":[2,4,8,10,12,16,18,19,21,24,26,28,30,32,34,36,38,40,41,43,45,47,49,52,54,55,56,57,60,62,64,66,68,70,72],"/mnt/d/Dev/Applications/timelaps_api/timelaps/admin.py":[2,4,5,9,10,11,12,13,14],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/__init__.py":[1],"/mnt/d/Dev/Applications/timelaps_api/timelaps/tests.py":[2,4,7,8,9,10,11,48],"/mnt/d/Dev/Applications/timelaps_api/timelaps/serializers.py":[1,2,4,5,6,7,9,10,11,12,14,15,16,17,19,20,21,22,24,25,26,27,29,30,31,32,34,35,36,38,42],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0001_initial.py":[3,4,7,9,11,15,16,18,19,20,23,24,26,27,28,29,30,31,34,35,37,38,39,40,41,42,45,46,48,49,50,51,52,53,56,57,59,60,63,64,66,67,68,69,72,73,74,75,77,78,79,80],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0005_auto_20190112_0907.py":[3,6,9,13,14,15,16],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0008_auto_20190112_0934.py":[3,4,7,10,14,15,16,18,19,20,21,22],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0006_auto_20190112_0912.py":[3,6,9,13,14,15,16,18,19,20,21,23,24,25,26],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0009_auto_20190112_0938.py":[3,6,9,13,14,15,16,18,19,20,21,23,24,25,26,28,29,30,31],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0011_auto_20190112_1017.py":[3,6,9,13,14,15,16],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0012_auto_20190112_1019.py":[3,6,9,13,14,15,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55,56,58,59,60,61,63,64,65,66,68,69,70,71,73,74,75,76,78,79,80,81],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0002_auto_20190112_0858.py":[3,6,9,13,14,15],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0003_auto_20190112_0903.py":[3,4,7,10,14,15,16,18,19,20,21,22,24,25,26,27],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0007_auto_20190112_0930.py":[3,6,9,13,14,15,16,18,19,20,22,23,24,25],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0004_auto_20190112_0906.py":[3,6,9,13,14,15,16],"/mnt/d/Dev/Applications/timelaps_api/timelaps/migrations/0010_auto_20190112_1005.py":[3,6,9,13,14,15,16,18,19,20,21,23,24,25,26],"/mnt/d/Dev/Applications/timelaps_api/api/urls.py":[15,16,17,18,19,20,24,25],"/mnt/d/Dev/Applications/timelaps_api/timelaps/urls.py":[1,2,3,6,7,8,9,10,11,12],"/mnt/d/Dev/Applications/timelaps_api/timelaps/views.py":[2,4,5,6,7,12,15,16,17,19,22,23,24,26,29,30,31,33,36,37,38,40,43,44,45,47,50,51,52,54,58,59,60,61,63],"/mnt/d/Dev/Applications/timelaps_api/api/wsgi.py":[],"/mnt/d/Dev/Applications/timelaps_api/timelaps/apps.py":[]}} \ No newline at end of file diff --git a/htmlcov/api___init___py.html b/htmlcov/api___init___py.html new file mode 100644 index 0000000..999388b --- /dev/null +++ b/htmlcov/api___init___py.html @@ -0,0 +1,89 @@ + + + + + + + + + + + Coverage for api/__init__.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+ + + +
+
+ + + + + diff --git a/htmlcov/api_settings_py.html b/htmlcov/api_settings_py.html new file mode 100644 index 0000000..86334e1 --- /dev/null +++ b/htmlcov/api_settings_py.html @@ -0,0 +1,341 @@ + + + + + + + + + + + Coverage for api/settings.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

41

+

42

+

43

+

44

+

45

+

46

+

47

+

48

+

49

+

50

+

51

+

52

+

53

+

54

+

55

+

56

+

57

+

58

+

59

+

60

+

61

+

62

+

63

+

64

+

65

+

66

+

67

+

68

+

69

+

70

+

71

+

72

+

73

+

74

+

75

+

76

+

77

+

78

+

79

+

80

+

81

+

82

+

83

+

84

+

85

+

86

+

87

+

88

+

89

+

90

+

91

+

92

+

93

+

94

+

95

+

96

+

97

+

98

+

99

+

100

+

101

+

102

+

103

+

104

+

105

+

106

+

107

+

108

+

109

+

110

+

111

+

112

+

113

+

114

+

115

+

116

+

117

+

118

+

119

+

120

+

121

+

122

+

123

+

124

+

125

+

126

+ +
+

""" 

+

Django settings for api project. 

+

 

+

Generated by 'django-admin startproject' using Django 1.11.18. 

+

 

+

For more information on this file, see 

+

https://docs.djangoproject.com/en/1.11/topics/settings/ 

+

 

+

For the full list of settings and their values, see 

+

https://docs.djangoproject.com/en/1.11/ref/settings/ 

+

""" 

+

 

+

import os 

+

 

+

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 

+

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

+

 

+

 

+

# Quick-start development settings - unsuitable for production 

+

# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ 

+

 

+

# SECURITY WARNING: keep the secret key used in production secret! 

+

SECRET_KEY = 'kn^0_9ho(9(gs)6c(z!@82s5=94ye$^6q&i4h57)ds61=7vsge' 

+

 

+

# SECURITY WARNING: don't run with debug turned on in production! 

+

DEBUG = True 

+

 

+

ALLOWED_HOSTS = [] 

+

 

+

 

+

# Application definition 

+

 

+

INSTALLED_APPS = [ 

+

'django.contrib.admin', 

+

'django.contrib.auth', 

+

'django.contrib.contenttypes', 

+

'django.contrib.sessions', 

+

'django.contrib.messages', 

+

'django.contrib.staticfiles', 

+

'rest_framework', 

+

'timelaps', 

+

] 

+

 

+

MIDDLEWARE = [ 

+

'django.middleware.security.SecurityMiddleware', 

+

'django.contrib.sessions.middleware.SessionMiddleware', 

+

'django.middleware.common.CommonMiddleware', 

+

'django.middleware.csrf.CsrfViewMiddleware', 

+

'django.contrib.auth.middleware.AuthenticationMiddleware', 

+

'django.contrib.messages.middleware.MessageMiddleware', 

+

'django.middleware.clickjacking.XFrameOptionsMiddleware', 

+

] 

+

 

+

ROOT_URLCONF = 'api.urls' 

+

 

+

TEMPLATES = [ 

+

{ 

+

'BACKEND': 'django.template.backends.django.DjangoTemplates', 

+

'DIRS': [], 

+

'APP_DIRS': True, 

+

'OPTIONS': { 

+

'context_processors': [ 

+

'django.template.context_processors.debug', 

+

'django.template.context_processors.request', 

+

'django.contrib.auth.context_processors.auth', 

+

'django.contrib.messages.context_processors.messages', 

+

], 

+

}, 

+

}, 

+

] 

+

 

+

WSGI_APPLICATION = 'api.wsgi.application' 

+

 

+

 

+

# Database 

+

# https://docs.djangoproject.com/en/1.11/ref/settings/#databases 

+

 

+

DATABASES = { 

+

'default': { 

+

'ENGINE': 'django.db.backends.postgresql_psycopg2', 

+

'NAME': 'timelaps2', 

+

'USER': 'timelaps', 

+

'PASSWORD': 'Dpz9jou99', 

+

'HOST': '127.0.0.1', 

+

'PORT': '5432', 

+

} 

+

} 

+

 

+

 

+

# Password validation 

+

# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators 

+

 

+

AUTH_PASSWORD_VALIDATORS = [ 

+

{ 

+

'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 

+

}, 

+

{ 

+

'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 

+

}, 

+

{ 

+

'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 

+

}, 

+

{ 

+

'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 

+

}, 

+

] 

+

 

+

 

+

# Internationalization 

+

# https://docs.djangoproject.com/en/1.11/topics/i18n/ 

+

 

+

LANGUAGE_CODE = 'en-us' 

+

 

+

TIME_ZONE = 'UTC' 

+

 

+

USE_I18N = True 

+

 

+

USE_L10N = True 

+

 

+

USE_TZ = True 

+

 

+

 

+

# Static files (CSS, JavaScript, Images) 

+

# https://docs.djangoproject.com/en/1.11/howto/static-files/ 

+

 

+

STATIC_URL = '/static/' 

+ +
+
+ + + + + diff --git a/htmlcov/api_urls_py.html b/htmlcov/api_urls_py.html new file mode 100644 index 0000000..22b7ed1 --- /dev/null +++ b/htmlcov/api_urls_py.html @@ -0,0 +1,141 @@ + + + + + + + + + + + Coverage for api/urls.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+ +
+

"""api URL Configuration 

+

 

+

The `urlpatterns` list routes URLs to views. For more information please see: 

+

https://docs.djangoproject.com/en/1.11/topics/http/urls/ 

+

Examples: 

+

Function views 

+

1. Add an import: from my_app import views 

+

2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 

+

Class-based views 

+

1. Add an import: from other_app.views import Home 

+

2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 

+

Including another URLconf 

+

1. Import the include() function: from django.conf.urls import url, include 

+

2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 

+

""" 

+

from django.conf.urls import url 

+

from django.contrib import admin 

+

from django.urls import path 

+

from django.urls import re_path 

+

from django.urls import include 

+

 

+

 

+

urlpatterns = [ 

+

url(r'^admin/', admin.site.urls), 

+

re_path('api/', include('timelaps.urls')) 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/api_wsgi_py.html b/htmlcov/api_wsgi_py.html new file mode 100644 index 0000000..ffa3599 --- /dev/null +++ b/htmlcov/api_wsgi_py.html @@ -0,0 +1,121 @@ + + + + + + + + + + + Coverage for api/wsgi.py: 0% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+ +
+

""" 

+

WSGI config for api project. 

+

 

+

It exposes the WSGI callable as a module-level variable named ``application``. 

+

 

+

For more information on this file, see 

+

https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ 

+

""" 

+

 

+

import os 

+

 

+

from django.core.wsgi import get_wsgi_application 

+

 

+

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "api.settings") 

+

 

+

application = get_wsgi_application() 

+ +
+
+ + + + + diff --git a/htmlcov/coverage_html.js b/htmlcov/coverage_html.js new file mode 100644 index 0000000..f6f5de2 --- /dev/null +++ b/htmlcov/coverage_html.js @@ -0,0 +1,584 @@ +// Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +// For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt + +// Coverage.py HTML report browser code. +/*jslint browser: true, sloppy: true, vars: true, plusplus: true, maxerr: 50, indent: 4 */ +/*global coverage: true, document, window, $ */ + +coverage = {}; + +// Find all the elements with shortkey_* class, and use them to assign a shortcut key. +coverage.assign_shortkeys = function () { + $("*[class*='shortkey_']").each(function (i, e) { + $.each($(e).attr("class").split(" "), function (i, c) { + if (/^shortkey_/.test(c)) { + $(document).bind('keydown', c.substr(9), function () { + $(e).click(); + }); + } + }); + }); +}; + +// Create the events for the help panel. +coverage.wire_up_help_panel = function () { + $("#keyboard_icon").click(function () { + // Show the help panel, and position it so the keyboard icon in the + // panel is in the same place as the keyboard icon in the header. + $(".help_panel").show(); + var koff = $("#keyboard_icon").offset(); + var poff = $("#panel_icon").position(); + $(".help_panel").offset({ + top: koff.top-poff.top, + left: koff.left-poff.left + }); + }); + $("#panel_icon").click(function () { + $(".help_panel").hide(); + }); +}; + +// Create the events for the filter box. +coverage.wire_up_filter = function () { + // Cache elements. + var table = $("table.index"); + var table_rows = table.find("tbody tr"); + var table_row_names = table_rows.find("td.name a"); + var no_rows = $("#no_rows"); + + // Create a duplicate table footer that we can modify with dynamic summed values. + var table_footer = $("table.index tfoot tr"); + var table_dynamic_footer = table_footer.clone(); + table_dynamic_footer.attr('class', 'total_dynamic hidden'); + table_footer.after(table_dynamic_footer); + + // Observe filter keyevents. + $("#filter").on("keyup change", $.debounce(150, function (event) { + var filter_value = $(this).val(); + + if (filter_value === "") { + // Filter box is empty, remove all filtering. + table_rows.removeClass("hidden"); + + // Show standard footer, hide dynamic footer. + table_footer.removeClass("hidden"); + table_dynamic_footer.addClass("hidden"); + + // Hide placeholder, show table. + if (no_rows.length > 0) { + no_rows.hide(); + } + table.show(); + + } + else { + // Filter table items by value. + var hidden = 0; + var shown = 0; + + // Hide / show elements. + $.each(table_row_names, function () { + var element = $(this).parents("tr"); + + if ($(this).text().indexOf(filter_value) === -1) { + // hide + element.addClass("hidden"); + hidden++; + } + else { + // show + element.removeClass("hidden"); + shown++; + } + }); + + // Show placeholder if no rows will be displayed. + if (no_rows.length > 0) { + if (shown === 0) { + // Show placeholder, hide table. + no_rows.show(); + table.hide(); + } + else { + // Hide placeholder, show table. + no_rows.hide(); + table.show(); + } + } + + // Manage dynamic header: + if (hidden > 0) { + // Calculate new dynamic sum values based on visible rows. + for (var column = 2; column < 20; column++) { + // Calculate summed value. + var cells = table_rows.find('td:nth-child(' + column + ')'); + if (!cells.length) { + // No more columns...! + break; + } + + var sum = 0, numer = 0, denom = 0; + $.each(cells.filter(':visible'), function () { + var ratio = $(this).data("ratio"); + if (ratio) { + var splitted = ratio.split(" "); + numer += parseInt(splitted[0], 10); + denom += parseInt(splitted[1], 10); + } + else { + sum += parseInt(this.innerHTML, 10); + } + }); + + // Get footer cell element. + var footer_cell = table_dynamic_footer.find('td:nth-child(' + column + ')'); + + // Set value into dynamic footer cell element. + if (cells[0].innerHTML.indexOf('%') > -1) { + // Percentage columns use the numerator and denominator, + // and adapt to the number of decimal places. + var match = /\.([0-9]+)/.exec(cells[0].innerHTML); + var places = 0; + if (match) { + places = match[1].length; + } + var pct = numer * 100 / denom; + footer_cell.text(pct.toFixed(places) + '%'); + } + else { + footer_cell.text(sum); + } + } + + // Hide standard footer, show dynamic footer. + table_footer.addClass("hidden"); + table_dynamic_footer.removeClass("hidden"); + } + else { + // Show standard footer, hide dynamic footer. + table_footer.removeClass("hidden"); + table_dynamic_footer.addClass("hidden"); + } + } + })); + + // Trigger change event on setup, to force filter on page refresh + // (filter value may still be present). + $("#filter").trigger("change"); +}; + +// Loaded on index.html +coverage.index_ready = function ($) { + // Look for a cookie containing previous sort settings: + var sort_list = []; + var cookie_name = "COVERAGE_INDEX_SORT"; + var i; + + // This almost makes it worth installing the jQuery cookie plugin: + if (document.cookie.indexOf(cookie_name) > -1) { + var cookies = document.cookie.split(";"); + for (i = 0; i < cookies.length; i++) { + var parts = cookies[i].split("="); + + if ($.trim(parts[0]) === cookie_name && parts[1]) { + sort_list = eval("[[" + parts[1] + "]]"); + break; + } + } + } + + // Create a new widget which exists only to save and restore + // the sort order: + $.tablesorter.addWidget({ + id: "persistentSort", + + // Format is called by the widget before displaying: + format: function (table) { + if (table.config.sortList.length === 0 && sort_list.length > 0) { + // This table hasn't been sorted before - we'll use + // our stored settings: + $(table).trigger('sorton', [sort_list]); + } + else { + // This is not the first load - something has + // already defined sorting so we'll just update + // our stored value to match: + sort_list = table.config.sortList; + } + } + }); + + // Configure our tablesorter to handle the variable number of + // columns produced depending on report options: + var headers = []; + var col_count = $("table.index > thead > tr > th").length; + + headers[0] = { sorter: 'text' }; + for (i = 1; i < col_count-1; i++) { + headers[i] = { sorter: 'digit' }; + } + headers[col_count-1] = { sorter: 'percent' }; + + // Enable the table sorter: + $("table.index").tablesorter({ + widgets: ['persistentSort'], + headers: headers + }); + + coverage.assign_shortkeys(); + coverage.wire_up_help_panel(); + coverage.wire_up_filter(); + + // Watch for page unload events so we can save the final sort settings: + $(window).unload(function () { + document.cookie = cookie_name + "=" + sort_list.toString() + "; path=/"; + }); +}; + +// -- pyfile stuff -- + +coverage.pyfile_ready = function ($) { + // If we're directed to a particular line number, highlight the line. + var frag = location.hash; + if (frag.length > 2 && frag[1] === 'n') { + $(frag).addClass('highlight'); + coverage.set_sel(parseInt(frag.substr(2), 10)); + } + else { + coverage.set_sel(0); + } + + $(document) + .bind('keydown', 'j', coverage.to_next_chunk_nicely) + .bind('keydown', 'k', coverage.to_prev_chunk_nicely) + .bind('keydown', '0', coverage.to_top) + .bind('keydown', '1', coverage.to_first_chunk) + ; + + $(".button_toggle_run").click(function (evt) {coverage.toggle_lines(evt.target, "run");}); + $(".button_toggle_exc").click(function (evt) {coverage.toggle_lines(evt.target, "exc");}); + $(".button_toggle_mis").click(function (evt) {coverage.toggle_lines(evt.target, "mis");}); + $(".button_toggle_par").click(function (evt) {coverage.toggle_lines(evt.target, "par");}); + + coverage.assign_shortkeys(); + coverage.wire_up_help_panel(); + + coverage.init_scroll_markers(); + + // Rebuild scroll markers after window high changing + $(window).resize(coverage.resize_scroll_markers); +}; + +coverage.toggle_lines = function (btn, cls) { + btn = $(btn); + var hide = "hide_"+cls; + if (btn.hasClass(hide)) { + $("#source ."+cls).removeClass(hide); + btn.removeClass(hide); + } + else { + $("#source ."+cls).addClass(hide); + btn.addClass(hide); + } +}; + +// Return the nth line div. +coverage.line_elt = function (n) { + return $("#t" + n); +}; + +// Return the nth line number div. +coverage.num_elt = function (n) { + return $("#n" + n); +}; + +// Return the container of all the code. +coverage.code_container = function () { + return $(".linenos"); +}; + +// Set the selection. b and e are line numbers. +coverage.set_sel = function (b, e) { + // The first line selected. + coverage.sel_begin = b; + // The next line not selected. + coverage.sel_end = (e === undefined) ? b+1 : e; +}; + +coverage.to_top = function () { + coverage.set_sel(0, 1); + coverage.scroll_window(0); +}; + +coverage.to_first_chunk = function () { + coverage.set_sel(0, 1); + coverage.to_next_chunk(); +}; + +coverage.is_transparent = function (color) { + // Different browsers return different colors for "none". + return color === "transparent" || color === "rgba(0, 0, 0, 0)"; +}; + +coverage.to_next_chunk = function () { + var c = coverage; + + // Find the start of the next colored chunk. + var probe = c.sel_end; + var color, probe_line; + while (true) { + probe_line = c.line_elt(probe); + if (probe_line.length === 0) { + return; + } + color = probe_line.css("background-color"); + if (!c.is_transparent(color)) { + break; + } + probe++; + } + + // There's a next chunk, `probe` points to it. + var begin = probe; + + // Find the end of this chunk. + var next_color = color; + while (next_color === color) { + probe++; + probe_line = c.line_elt(probe); + next_color = probe_line.css("background-color"); + } + c.set_sel(begin, probe); + c.show_selection(); +}; + +coverage.to_prev_chunk = function () { + var c = coverage; + + // Find the end of the prev colored chunk. + var probe = c.sel_begin-1; + var probe_line = c.line_elt(probe); + if (probe_line.length === 0) { + return; + } + var color = probe_line.css("background-color"); + while (probe > 0 && c.is_transparent(color)) { + probe--; + probe_line = c.line_elt(probe); + if (probe_line.length === 0) { + return; + } + color = probe_line.css("background-color"); + } + + // There's a prev chunk, `probe` points to its last line. + var end = probe+1; + + // Find the beginning of this chunk. + var prev_color = color; + while (prev_color === color) { + probe--; + probe_line = c.line_elt(probe); + prev_color = probe_line.css("background-color"); + } + c.set_sel(probe+1, end); + c.show_selection(); +}; + +// Return the line number of the line nearest pixel position pos +coverage.line_at_pos = function (pos) { + var l1 = coverage.line_elt(1), + l2 = coverage.line_elt(2), + result; + if (l1.length && l2.length) { + var l1_top = l1.offset().top, + line_height = l2.offset().top - l1_top, + nlines = (pos - l1_top) / line_height; + if (nlines < 1) { + result = 1; + } + else { + result = Math.ceil(nlines); + } + } + else { + result = 1; + } + return result; +}; + +// Returns 0, 1, or 2: how many of the two ends of the selection are on +// the screen right now? +coverage.selection_ends_on_screen = function () { + if (coverage.sel_begin === 0) { + return 0; + } + + var top = coverage.line_elt(coverage.sel_begin); + var next = coverage.line_elt(coverage.sel_end-1); + + return ( + (top.isOnScreen() ? 1 : 0) + + (next.isOnScreen() ? 1 : 0) + ); +}; + +coverage.to_next_chunk_nicely = function () { + coverage.finish_scrolling(); + if (coverage.selection_ends_on_screen() === 0) { + // The selection is entirely off the screen: select the top line on + // the screen. + var win = $(window); + coverage.select_line_or_chunk(coverage.line_at_pos(win.scrollTop())); + } + coverage.to_next_chunk(); +}; + +coverage.to_prev_chunk_nicely = function () { + coverage.finish_scrolling(); + if (coverage.selection_ends_on_screen() === 0) { + var win = $(window); + coverage.select_line_or_chunk(coverage.line_at_pos(win.scrollTop() + win.height())); + } + coverage.to_prev_chunk(); +}; + +// Select line number lineno, or if it is in a colored chunk, select the +// entire chunk +coverage.select_line_or_chunk = function (lineno) { + var c = coverage; + var probe_line = c.line_elt(lineno); + if (probe_line.length === 0) { + return; + } + var the_color = probe_line.css("background-color"); + if (!c.is_transparent(the_color)) { + // The line is in a highlighted chunk. + // Search backward for the first line. + var probe = lineno; + var color = the_color; + while (probe > 0 && color === the_color) { + probe--; + probe_line = c.line_elt(probe); + if (probe_line.length === 0) { + break; + } + color = probe_line.css("background-color"); + } + var begin = probe + 1; + + // Search forward for the last line. + probe = lineno; + color = the_color; + while (color === the_color) { + probe++; + probe_line = c.line_elt(probe); + color = probe_line.css("background-color"); + } + + coverage.set_sel(begin, probe); + } + else { + coverage.set_sel(lineno); + } +}; + +coverage.show_selection = function () { + var c = coverage; + + // Highlight the lines in the chunk + c.code_container().find(".highlight").removeClass("highlight"); + for (var probe = c.sel_begin; probe > 0 && probe < c.sel_end; probe++) { + c.num_elt(probe).addClass("highlight"); + } + + c.scroll_to_selection(); +}; + +coverage.scroll_to_selection = function () { + // Scroll the page if the chunk isn't fully visible. + if (coverage.selection_ends_on_screen() < 2) { + // Need to move the page. The html,body trick makes it scroll in all + // browsers, got it from http://stackoverflow.com/questions/3042651 + var top = coverage.line_elt(coverage.sel_begin); + var top_pos = parseInt(top.offset().top, 10); + coverage.scroll_window(top_pos - 30); + } +}; + +coverage.scroll_window = function (to_pos) { + $("html,body").animate({scrollTop: to_pos}, 200); +}; + +coverage.finish_scrolling = function () { + $("html,body").stop(true, true); +}; + +coverage.init_scroll_markers = function () { + var c = coverage; + // Init some variables + c.lines_len = $('td.text p').length; + c.body_h = $('body').height(); + c.header_h = $('div#header').height(); + c.missed_lines = $('td.text p.mis, td.text p.par'); + + // Build html + c.resize_scroll_markers(); +}; + +coverage.resize_scroll_markers = function () { + var c = coverage, + min_line_height = 3, + max_line_height = 10, + visible_window_h = $(window).height(); + + $('#scroll_marker').remove(); + // Don't build markers if the window has no scroll bar. + if (c.body_h <= visible_window_h) { + return; + } + + $("body").append("
 
"); + var scroll_marker = $('#scroll_marker'), + marker_scale = scroll_marker.height() / c.body_h, + line_height = scroll_marker.height() / c.lines_len; + + // Line height must be between the extremes. + if (line_height > min_line_height) { + if (line_height > max_line_height) { + line_height = max_line_height; + } + } + else { + line_height = min_line_height; + } + + var previous_line = -99, + last_mark, + last_top; + + c.missed_lines.each(function () { + var line_top = Math.round($(this).offset().top * marker_scale), + id_name = $(this).attr('id'), + line_number = parseInt(id_name.substring(1, id_name.length)); + + if (line_number === previous_line + 1) { + // If this solid missed block just make previous mark higher. + last_mark.css({ + 'height': line_top + line_height - last_top + }); + } + else { + // Add colored line in scroll_marker block. + scroll_marker.append('
'); + last_mark = $('#m' + line_number); + last_mark.css({ + 'height': line_height, + 'top': line_top + }); + last_top = line_top; + } + + previous_line = line_number; + }); +}; diff --git a/htmlcov/index.html b/htmlcov/index.html new file mode 100644 index 0000000..bfa02a7 --- /dev/null +++ b/htmlcov/index.html @@ -0,0 +1,329 @@ + + + + + + + + Coverage report + + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ n + s + m + x + + c   change column sorting +

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Modulestatementsmissingexcludedcoverage
Total21921090%
api/__init__.py000100%
api/settings.py1800100%
api/urls.py600100%
api/wsgi.py4400%
manage.py136054%
timelaps/__init__.py000100%
timelaps/admin.py900100%
timelaps/apps.py4400%
timelaps/migrations/0001_initial.py600100%
timelaps/migrations/0002_auto_20190112_0858.py400100%
timelaps/migrations/0003_auto_20190112_0903.py500100%
timelaps/migrations/0004_auto_20190112_0906.py400100%
timelaps/migrations/0005_auto_20190112_0907.py400100%
timelaps/migrations/0006_auto_20190112_0912.py400100%
timelaps/migrations/0007_auto_20190112_0930.py400100%
timelaps/migrations/0008_auto_20190112_0934.py500100%
timelaps/migrations/0009_auto_20190112_0938.py400100%
timelaps/migrations/0010_auto_20190112_1005.py400100%
timelaps/migrations/0011_auto_20190112_1017.py400100%
timelaps/migrations/0012_auto_20190112_1019.py400100%
timelaps/migrations/__init__.py000100%
timelaps/models.py383092%
timelaps/serializers.py3100100%
timelaps/tests.py800100%
timelaps/urls.py400100%
timelaps/views.py324088%
+ +

+ No items found using the specified filter. +

+
+ + + + + diff --git a/htmlcov/jquery.ba-throttle-debounce.min.js b/htmlcov/jquery.ba-throttle-debounce.min.js new file mode 100644 index 0000000..648fe5d --- /dev/null +++ b/htmlcov/jquery.ba-throttle-debounce.min.js @@ -0,0 +1,9 @@ +/* + * jQuery throttle / debounce - v1.1 - 3/7/2010 + * http://benalman.com/projects/jquery-throttle-debounce-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); diff --git a/htmlcov/jquery.hotkeys.js b/htmlcov/jquery.hotkeys.js new file mode 100644 index 0000000..09b21e0 --- /dev/null +++ b/htmlcov/jquery.hotkeys.js @@ -0,0 +1,99 @@ +/* + * jQuery Hotkeys Plugin + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Based upon the plugin by Tzury Bar Yochay: + * http://github.com/tzuryby/hotkeys + * + * Original idea by: + * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/ +*/ + +(function(jQuery){ + + jQuery.hotkeys = { + version: "0.8", + + specialKeys: { + 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause", + 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home", + 37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del", + 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7", + 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/", + 112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8", + 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta" + }, + + shiftNums: { + "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&", + "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<", + ".": ">", "/": "?", "\\": "|" + } + }; + + function keyHandler( handleObj ) { + // Only care when a possible input has been specified + if ( typeof handleObj.data !== "string" ) { + return; + } + + var origHandler = handleObj.handler, + keys = handleObj.data.toLowerCase().split(" "); + + handleObj.handler = function( event ) { + // Don't fire in text-accepting inputs that we didn't directly bind to + if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || + event.target.type === "text") ) { + return; + } + + // Keypress represents characters, not special keys + var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ], + character = String.fromCharCode( event.which ).toLowerCase(), + key, modif = "", possible = {}; + + // check combinations (alt|ctrl|shift+anything) + if ( event.altKey && special !== "alt" ) { + modif += "alt+"; + } + + if ( event.ctrlKey && special !== "ctrl" ) { + modif += "ctrl+"; + } + + // TODO: Need to make sure this works consistently across platforms + if ( event.metaKey && !event.ctrlKey && special !== "meta" ) { + modif += "meta+"; + } + + if ( event.shiftKey && special !== "shift" ) { + modif += "shift+"; + } + + if ( special ) { + possible[ modif + special ] = true; + + } else { + possible[ modif + character ] = true; + possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true; + + // "$" can be triggered as "Shift+4" or "Shift+$" or just "$" + if ( modif === "shift+" ) { + possible[ jQuery.hotkeys.shiftNums[ character ] ] = true; + } + } + + for ( var i = 0, l = keys.length; i < l; i++ ) { + if ( possible[ keys[i] ] ) { + return origHandler.apply( this, arguments ); + } + } + }; + } + + jQuery.each([ "keydown", "keyup", "keypress" ], function() { + jQuery.event.special[ this ] = { add: keyHandler }; + }); + +})( jQuery ); diff --git a/htmlcov/jquery.isonscreen.js b/htmlcov/jquery.isonscreen.js new file mode 100644 index 0000000..0182ebd --- /dev/null +++ b/htmlcov/jquery.isonscreen.js @@ -0,0 +1,53 @@ +/* Copyright (c) 2010 + * @author Laurence Wheway + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * @version 1.2.0 + */ +(function($) { + jQuery.extend({ + isOnScreen: function(box, container) { + //ensure numbers come in as intgers (not strings) and remove 'px' is it's there + for(var i in box){box[i] = parseFloat(box[i])}; + for(var i in container){container[i] = parseFloat(container[i])}; + + if(!container){ + container = { + left: $(window).scrollLeft(), + top: $(window).scrollTop(), + width: $(window).width(), + height: $(window).height() + } + } + + if( box.left+box.width-container.left > 0 && + box.left < container.width+container.left && + box.top+box.height-container.top > 0 && + box.top < container.height+container.top + ) return true; + return false; + } + }) + + + jQuery.fn.isOnScreen = function (container) { + for(var i in container){container[i] = parseFloat(container[i])}; + + if(!container){ + container = { + left: $(window).scrollLeft(), + top: $(window).scrollTop(), + width: $(window).width(), + height: $(window).height() + } + } + + if( $(this).offset().left+$(this).width()-container.left > 0 && + $(this).offset().left < container.width+container.left && + $(this).offset().top+$(this).height()-container.top > 0 && + $(this).offset().top < container.height+container.top + ) return true; + return false; + } +})(jQuery); diff --git a/htmlcov/jquery.min.js b/htmlcov/jquery.min.js new file mode 100644 index 0000000..3ed8b47 --- /dev/null +++ b/htmlcov/jquery.min.js @@ -0,0 +1,5 @@ +(function(global,factory){"use strict";if(typeof module==="object"&&typeof module.exports==="object"){module.exports=global.document?factory(global,true):function(w){if(!w.document){throw new Error("jQuery requires a window with a document")}return factory(w)}}else{factory(global)}})(typeof window!=="undefined"?window:this,function(window,noGlobal){var arr=[];var document=window.document;var getProto=Object.getPrototypeOf;var slice=arr.slice;var concat=arr.concat;var push=arr.push;var indexOf=arr.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var fnToString=hasOwn.toString;var ObjectFunctionString=fnToString.call(Object);var support={};function DOMEval(code,doc){doc=doc||document;var script=doc.createElement("script");script.text=code;doc.head.appendChild(script).parentNode.removeChild(script)}var version="3.2.1",jQuery=function(selector,context){return new jQuery.fn.init(selector,context)},rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,rmsPrefix=/^-ms-/,rdashAlpha=/-([a-z])/g,fcamelCase=function(all,letter){return letter.toUpperCase()};jQuery.fn=jQuery.prototype={jquery:version,constructor:jQuery,length:0,toArray:function(){return slice.call(this)},get:function(num){if(num==null){return slice.call(this)}return num<0?this[num+this.length]:this[num]},pushStack:function(elems){var ret=jQuery.merge(this.constructor(),elems);ret.prevObject=this;return ret},each:function(callback){return jQuery.each(this,callback)},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem)}))},slice:function(){return this.pushStack(slice.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j0&&length-1 in obj}var Sizzle=function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,expando="sizzle"+1*new Date,preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function(a,b){if(a===b){hasDuplicate=true}return 0},hasOwn={}.hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice,indexOf=function(list,elem){var i=0,len=list.length;for(;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={ID:new RegExp("^#("+identifier+")"),CLASS:new RegExp("^\\.("+identifier+")"),TAG:new RegExp("^("+identifier+"|[*])"),ATTR:new RegExp("^"+attributes),PSEUDO:new RegExp("^"+pseudos),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),bool:new RegExp("^(?:"+booleans+")$","i"),needsContext:new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function(_,escaped,escapedWhitespace){var high="0x"+escaped-65536;return high!==high||escapedWhitespace?escaped:high<0?String.fromCharCode(high+65536):String.fromCharCode(high>>10|55296,high&1023|56320)},rcssescape=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fcssescape=function(ch,asCodePoint){if(asCodePoint){if(ch==="\0"){return"�"}return ch.slice(0,-1)+"\\"+ch.charCodeAt(ch.length-1).toString(16)+" "}return"\\"+ch},unloadHandler=function(){setDocument()},disabledAncestor=addCombinator(function(elem){return elem.disabled===true&&("form"in elem||"label"in elem)},{dir:"parentNode",next:"legend"});try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);arr[preferredDoc.childNodes.length].nodeType}catch(e){push={apply:arr.length?function(target,els){push_native.apply(target,slice.call(els))}:function(target,els){var j=target.length,i=0;while(target[j++]=els[i++]){}target.length=j-1}}}function Sizzle(selector,context,results,seed){var m,i,elem,nid,match,groups,newSelector,newContext=context&&context.ownerDocument,nodeType=context?context.nodeType:9;results=results||[];if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results}if(!seed){if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context)}context=context||document;if(documentIsHTML){if(nodeType!==11&&(match=rquickExpr.exec(selector))){if(m=match[1]){if(nodeType===9){if(elem=context.getElementById(m)){if(elem.id===m){results.push(elem);return results}}else{return results}}else{if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results}}}else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results}else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results}}if(support.qsa&&!compilerCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))){if(nodeType!==1){newContext=context;newSelector=selector}else if(context.nodeName.toLowerCase()!=="object"){if(nid=context.getAttribute("id")){nid=nid.replace(rcssescape,fcssescape)}else{context.setAttribute("id",nid=expando)}groups=tokenize(selector);i=groups.length;while(i--){groups[i]="#"+nid+" "+toSelector(groups[i])}newSelector=groups.join(",");newContext=rsibling.test(selector)&&testContext(context.parentNode)||context}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results}catch(qsaError){}finally{if(nid===expando){context.removeAttribute("id")}}}}}}return select(selector.replace(rtrim,"$1"),context,results,seed)}function createCache(){var keys=[];function cache(key,value){if(keys.push(key+" ")>Expr.cacheLength){delete cache[keys.shift()]}return cache[key+" "]=value}return cache}function markFunction(fn){fn[expando]=true;return fn}function assert(fn){var el=document.createElement("fieldset");try{return!!fn(el)}catch(e){return false}finally{if(el.parentNode){el.parentNode.removeChild(el)}el=null}}function addHandle(attrs,handler){var arr=attrs.split("|"),i=arr.length;while(i--){Expr.attrHandle[arr[i]]=handler}}function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&a.sourceIndex-b.sourceIndex;if(diff){return diff}if(cur){while(cur=cur.nextSibling){if(cur===b){return-1}}}return a?1:-1}function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type}}function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type}}function createDisabledPseudo(disabled){return function(elem){if("form"in elem){if(elem.parentNode&&elem.disabled===false){if("label"in elem){if("label"in elem.parentNode){return elem.parentNode.disabled===disabled}else{return elem.disabled===disabled}}return elem.isDisabled===disabled||elem.isDisabled!==!disabled&&disabledAncestor(elem)===disabled}return elem.disabled===disabled}else if("label"in elem){return elem.disabled===disabled}return false}}function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j])}}})})}function testContext(context){return context&&typeof context.getElementsByTagName!=="undefined"&&context}support=Sizzle.support={};isXML=Sizzle.isXML=function(elem){var documentElement=elem&&(elem.ownerDocument||elem).documentElement;return documentElement?documentElement.nodeName!=="HTML":false};setDocument=Sizzle.setDocument=function(node){var hasCompare,subWindow,doc=node?node.ownerDocument||node:preferredDoc;if(doc===document||doc.nodeType!==9||!doc.documentElement){return document}document=doc;docElem=document.documentElement;documentIsHTML=!isXML(document);if(preferredDoc!==document&&(subWindow=document.defaultView)&&subWindow.top!==subWindow){if(subWindow.addEventListener){subWindow.addEventListener("unload",unloadHandler,false)}else if(subWindow.attachEvent){subWindow.attachEvent("onunload",unloadHandler)}}support.attributes=assert(function(el){el.className="i";return!el.getAttribute("className")});support.getElementsByTagName=assert(function(el){el.appendChild(document.createComment(""));return!el.getElementsByTagName("*").length});support.getElementsByClassName=rnative.test(document.getElementsByClassName);support.getById=assert(function(el){docElem.appendChild(el).id=expando;return!document.getElementsByName||!document.getElementsByName(expando).length});if(support.getById){Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId}};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var elem=context.getElementById(id);return elem?[elem]:[]}}}else{Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return node&&node.value===attrId}};Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var node,i,elems,elem=context.getElementById(id);if(elem){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem]}elems=context.getElementsByName(id);i=0;while(elem=elems[i++]){node=elem.getAttributeNode("id");if(node&&node.value===id){return[elem]}}}return[]}}}Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(tag)}else if(support.qsa){return context.querySelectorAll(tag)}}:function(tag,context){var elem,tmp=[],i=0,results=context.getElementsByTagName(tag);if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem)}}return tmp}return results};Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!=="undefined"&&documentIsHTML){return context.getElementsByClassName(className)}};rbuggyMatches=[];rbuggyQSA=[];if(support.qsa=rnative.test(document.querySelectorAll)){assert(function(el){docElem.appendChild(el).innerHTML=""+"";if(el.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")")}if(!el.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")")}if(!el.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=")}if(!el.querySelectorAll(":checked").length){rbuggyQSA.push(":checked")}if(!el.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]")}});assert(function(el){el.innerHTML=""+"";var input=document.createElement("input");input.setAttribute("type","hidden");el.appendChild(input).setAttribute("name","D");if(el.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=")}if(el.querySelectorAll(":enabled").length!==2){rbuggyQSA.push(":enabled",":disabled")}docElem.appendChild(el).disabled=true;if(el.querySelectorAll(":disabled").length!==2){rbuggyQSA.push(":enabled",":disabled")}el.querySelectorAll("*,:x");rbuggyQSA.push(",.*:")})}if(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(el){support.disconnectedMatch=matches.call(el,"*");matches.call(el,"[s!='']:x");rbuggyMatches.push("!=",pseudos)})}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));hasCompare=rnative.test(docElem.compareDocumentPosition);contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16))}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true}}}return false};sortOrder=hasCompare?function(a,b){if(a===b){hasDuplicate=true;return 0}var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare}compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1;if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){if(a===document||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1}if(b===document||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1}return sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}return compare&4?-1:1}:function(a,b){if(a===b){hasDuplicate=true;return 0}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];if(!aup||!bup){return a===document?-1:b===document?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0}else if(aup===bup){return siblingCheck(a,b)}cur=a;while(cur=cur.parentNode){ap.unshift(cur)}cur=b;while(cur=cur.parentNode){bp.unshift(cur)}while(ap[i]===bp[i]){i++}return i?siblingCheck(ap[i],bp[i]):ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0};return document};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements)};Sizzle.matchesSelector=function(elem,expr){if((elem.ownerDocument||elem)!==document){setDocument(elem)}expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&!compilerCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);if(ret||support.disconnectedMatch||elem.document&&elem.document.nodeType!==11){return ret}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0};Sizzle.contains=function(context,elem){if((context.ownerDocument||context)!==document){setDocument(context)}return contains(context,elem)};Sizzle.attr=function(elem,name){if((elem.ownerDocument||elem)!==document){setDocument(elem)}var fn=Expr.attrHandle[name.toLowerCase()],val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null};Sizzle.escape=function(sel){return(sel+"").replace(rcssescape,fcssescape)};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i)}}while(j--){results.splice(duplicates[j],1)}}sortInput=null;return results};getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){while(node=elem[i++]){ret+=getText(node)}}else if(nodeType===1||nodeType===9||nodeType===11){if(typeof elem.textContent==="string"){return elem.textContent}else{for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem)}}}else if(nodeType===3||nodeType===4){return elem.nodeValue}return ret};Expr=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(match){match[1]=match[1].replace(runescape,funescape);match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" "}return match.slice(0,4)},CHILD:function(match){match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){if(!match[3]){Sizzle.error(match[0])}match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd")}else if(match[3]){Sizzle.error(match[0])}return match},PSEUDO:function(match){var excess,unquoted=!match[6]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null}if(match[3]){match[2]=match[4]||match[5]||""}else if(unquoted&&rpseudo.test(unquoted)&&(excess=tokenize(unquoted,true))&&(excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess)}return match.slice(0,3)}},filter:{TAG:function(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName}},CLASS:function(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!=="undefined"&&elem.getAttribute("class")||"")})},ATTR:function(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!="}if(!operator){return true}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false}},CHILD:function(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?function(elem){return!!elem.parentNode}:function(elem,context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=false;if(parent){if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false}}start=dir=type==="only"&&!start&&"nextSibling"}return true}start=[forward?parent.firstChild:parent.lastChild];if(forward&&useCache){node=parent;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if(node.nodeType===1&&++diff&&node===elem){uniqueCache[type]=[dirruns,nodeIndex,diff];break}}}else{if(useCache){node=elem;outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex}if(diff===false){while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){if(useCache){outerCache=node[expando]||(node[expando]={});uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});uniqueCache[type]=[dirruns,diff]}if(node===elem){break}}}}}diff-=last;return diff===first||diff%first===0&&diff/first>=0}}},PSEUDO:function(pseudo,argument){var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);if(fn[expando]){return fn(argument)}if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i])}}):function(elem){return fn(elem,0,args)}}return fn}},pseudos:{not:markFunction(function(selector){var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem)}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);input[0]=null;return!results.pop()}}),has:markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0}}),contains:markFunction(function(text){text=text.replace(runescape,funescape);return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1}}),lang:markFunction(function(lang){if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang)}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0}}while((elem=elem.parentNode)&&elem.nodeType===1);return false}}),target:function(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id},root:function(elem){return elem===docElem},focus:function(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex)},enabled:createDisabledPseudo(false),disabled:createDisabledPseudo(true),checked:function(elem){var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected},selected:function(elem){if(elem.parentNode){elem.parentNode.selectedIndex}return elem.selected===true},empty:function(elem){for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false}}return true},parent:function(elem){return!Expr.pseudos["empty"](elem)},header:function(elem){return rheader.test(elem.nodeName)},input:function(elem){return rinputs.test(elem.nodeName)},button:function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button"},text:function(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&((attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text")},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(matchIndexes,length){return[length-1]}),eq:createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument]}),even:createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i)}return matchIndexes}),gt:createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false}}return true}:matchers[0]}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem)}}}}else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml)}else{push.apply(results,matcherOut)}}})}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,matchContext=addCombinator(function(elem){return elem===checkContext},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1},implicitRelative,true),matchers=[function(elem,context,xml){var ret=!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));checkContext=null;return ret}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,elems=seed||byElement&&Expr.find["TAG"]("*",outermost),dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||.1,len=elems.length;if(outermost){outermostContext=context===document||context||outermost}for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;if(!context&&elem.ownerDocument!==document){setDocument(elem);xml=!documentIsHTML}while(matcher=elementMatchers[j++]){if(matcher(elem,context||document,xml)){results.push(elem);break}}if(outermost){dirruns=dirrunsUnique}}if(bySet){if(elem=!matcher&&elem){matchedCount--}if(seed){unmatched.push(elem)}}}matchedCount+=i;if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml)}if(seed){if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results)}}}setMatched=condense(setMatched)}push.apply(results,setMatched);if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results)}}if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup}return unmatched};return bySet?markFunction(superMatcher):superMatcher}compile=Sizzle.compile=function(selector,match){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){if(!match){match=tokenize(selector)}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached)}else{elementMatchers.push(cached)}}cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));cached.selector=selector}return cached};select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];if(match.length===1){tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results}else if(compiled){context=context.parentNode}selector=selector.slice(tokens.shift().value.length)}i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];if(Expr.relative[type=token.type]){break}if(find=Expr.find[type]){if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results}break}}}}(compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context);return results};support.sortStable=expando.split("").sort(sortOrder).join("")===expando;support.detectDuplicates=!!hasDuplicate;setDocument();support.sortDetached=assert(function(el){return el.compareDocumentPosition(document.createElement("fieldset"))&1});if(!assert(function(el){el.innerHTML="";return el.firstChild.getAttribute("href")==="#"})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2)}})}if(!support.attributes||!assert(function(el){el.innerHTML="";el.firstChild.setAttribute("value","");return el.firstChild.getAttribute("value")===""})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue}})}if(!assert(function(el){return el.getAttribute("disabled")==null})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null}})}return Sizzle}(window);jQuery.find=Sizzle;jQuery.expr=Sizzle.selectors;jQuery.expr[":"]=jQuery.expr.pseudos;jQuery.uniqueSort=jQuery.unique=Sizzle.uniqueSort;jQuery.text=Sizzle.getText;jQuery.isXMLDoc=Sizzle.isXML;jQuery.contains=Sizzle.contains;jQuery.escapeSelector=Sizzle.escape;var dir=function(elem,dir,until){var matched=[],truncate=until!==undefined;while((elem=elem[dir])&&elem.nodeType!==9){if(elem.nodeType===1){if(truncate&&jQuery(elem).is(until)){break}matched.push(elem)}}return matched};var siblings=function(n,elem){var matched=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){matched.push(n)}}return matched};var rneedsContext=jQuery.expr.match.needsContext;function nodeName(elem,name){return elem.nodeName&&elem.nodeName.toLowerCase()===name.toLowerCase()}var rsingleTag=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;var risSimple=/^.[^:#\[\.,]*$/;function winnow(elements,qualifier,not){if(jQuery.isFunction(qualifier)){return jQuery.grep(elements,function(elem,i){return!!qualifier.call(elem,i,elem)!==not})}if(qualifier.nodeType){return jQuery.grep(elements,function(elem){return elem===qualifier!==not})}if(typeof qualifier!=="string"){return jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem)>-1!==not})}if(risSimple.test(qualifier)){return jQuery.filter(qualifier,elements,not)}qualifier=jQuery.filter(qualifier,elements);return jQuery.grep(elements,function(elem){return indexOf.call(qualifier,elem)>-1!==not&&elem.nodeType===1})}jQuery.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")"}if(elems.length===1&&elem.nodeType===1){return jQuery.find.matchesSelector(elem,expr)?[elem]:[]}return jQuery.find.matches(expr,jQuery.grep(elems,function(elem){return elem.nodeType===1}))};jQuery.fn.extend({find:function(selector){var i,ret,len=this.length,self=this;if(typeof selector!=="string"){return this.pushStack(jQuery(selector).filter(function(){for(i=0;i1?jQuery.uniqueSort(ret):ret},filter:function(selector){return this.pushStack(winnow(this,selector||[],false))},not:function(selector){return this.pushStack(winnow(this,selector||[],true))},is:function(selector){return!!winnow(this,typeof selector==="string"&&rneedsContext.test(selector)?jQuery(selector):selector||[],false).length}});var rootjQuery,rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,init=jQuery.fn.init=function(selector,context,root){var match,elem;if(!selector){return this}root=root||rootjQuery;if(typeof selector==="string"){if(selector[0]==="<"&&selector[selector.length-1]===">"&&selector.length>=3){match=[null,selector,null]}else{match=rquickExpr.exec(selector)}if(match&&(match[1]||!context)){if(match[1]){context=context instanceof jQuery?context[0]:context;jQuery.merge(this,jQuery.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,true));if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){for(match in context){if(jQuery.isFunction(this[match])){this[match](context[match])}else{this.attr(match,context[match])}}}return this}else{elem=document.getElementById(match[2]);if(elem){this[0]=elem;this.length=1}return this}}else if(!context||context.jquery){return(context||root).find(selector)}else{return this.constructor(context).find(selector)}}else if(selector.nodeType){this[0]=selector;this.length=1;return this}else if(jQuery.isFunction(selector)){return root.ready!==undefined?root.ready(selector):selector(jQuery)}return jQuery.makeArray(selector,this)};init.prototype=jQuery.fn;rootjQuery=jQuery(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,guaranteedUnique={children:true,contents:true,next:true,prev:true};jQuery.fn.extend({has:function(target){var targets=jQuery(target,this),l=targets.length;return this.filter(function(){var i=0;for(;i-1:cur.nodeType===1&&jQuery.find.matchesSelector(cur,selectors))){matched.push(cur);break}}}}return this.pushStack(matched.length>1?jQuery.uniqueSort(matched):matched)},index:function(elem){if(!elem){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1}if(typeof elem==="string"){return indexOf.call(jQuery(elem),this[0])}return indexOf.call(this,elem.jquery?elem[0]:elem)},add:function(selector,context){return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(),jQuery(selector,context))))},addBack:function(selector){return this.add(selector==null?this.prevObject:this.prevObject.filter(selector))}});function sibling(cur,dir){while((cur=cur[dir])&&cur.nodeType!==1){}return cur}jQuery.each({parent:function(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null},parents:function(elem){return dir(elem,"parentNode")},parentsUntil:function(elem,i,until){return dir(elem,"parentNode",until)},next:function(elem){return sibling(elem,"nextSibling")},prev:function(elem){return sibling(elem,"previousSibling")},nextAll:function(elem){return dir(elem,"nextSibling")},prevAll:function(elem){return dir(elem,"previousSibling")},nextUntil:function(elem,i,until){return dir(elem,"nextSibling",until)},prevUntil:function(elem,i,until){return dir(elem,"previousSibling",until)},siblings:function(elem){return siblings((elem.parentNode||{}).firstChild,elem)},children:function(elem){return siblings(elem.firstChild)},contents:function(elem){if(nodeName(elem,"iframe")){return elem.contentDocument}if(nodeName(elem,"template")){elem=elem.content||elem}return jQuery.merge([],elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var matched=jQuery.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until}if(selector&&typeof selector==="string"){matched=jQuery.filter(selector,matched)}if(this.length>1){if(!guaranteedUnique[name]){jQuery.uniqueSort(matched)}if(rparentsprev.test(name)){matched.reverse()}}return this.pushStack(matched)}});var rnothtmlwhite=/[^\x20\t\r\n\f]+/g;function createOptions(options){var object={};jQuery.each(options.match(rnothtmlwhite)||[],function(_,flag){object[flag]=true});return object}jQuery.Callbacks=function(options){options=typeof options==="string"?createOptions(options):jQuery.extend({},options);var firing,memory,fired,locked,list=[],queue=[],firingIndex=-1,fire=function(){locked=locked||options.once;fired=firing=true;for(;queue.length;firingIndex=-1){memory=queue.shift();while(++firingIndex-1){list.splice(index,1);if(index<=firingIndex){firingIndex--}}});return this},has:function(fn){return fn?jQuery.inArray(fn,list)>-1:list.length>0},empty:function(){if(list){list=[]}return this},disable:function(){locked=queue=[];list=memory="";return this},disabled:function(){return!list},lock:function(){locked=queue=[];if(!memory&&!firing){list=memory=""}return this},locked:function(){return!!locked},fireWith:function(context,args){if(!locked){args=args||[];args=[context,args.slice?args.slice():args];queue.push(args);if(!firing){fire()}}return this},fire:function(){self.fireWith(this,arguments);return this},fired:function(){return!!fired}};return self};function Identity(v){return v}function Thrower(ex){throw ex}function adoptValue(value,resolve,reject,noValue){var method;try{if(value&&jQuery.isFunction(method=value.promise)){method.call(value).done(resolve).fail(reject)}else if(value&&jQuery.isFunction(method=value.then)){method.call(value,resolve,reject)}else{resolve.apply(undefined,[value].slice(noValue))}}catch(value){reject.apply(undefined,[value])}}jQuery.extend({Deferred:function(func){var tuples=[["notify","progress",jQuery.Callbacks("memory"),jQuery.Callbacks("memory"),2],["resolve","done",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),0,"resolved"],["reject","fail",jQuery.Callbacks("once memory"),jQuery.Callbacks("once memory"),1,"rejected"]],state="pending",promise={state:function(){return state},always:function(){deferred.done(arguments).fail(arguments);return this},catch:function(fn){return promise.then(null,fn)},pipe:function(){var fns=arguments;return jQuery.Deferred(function(newDefer){jQuery.each(tuples,function(i,tuple){var fn=jQuery.isFunction(fns[tuple[4]])&&fns[tuple[4]];deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&jQuery.isFunction(returned.promise)){returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject)}else{newDefer[tuple[0]+"With"](this,fn?[returned]:arguments)}})});fns=null}).promise()},then:function(onFulfilled,onRejected,onProgress){var maxDepth=0;function resolve(depth,deferred,handler,special){return function(){var that=this,args=arguments,mightThrow=function(){var returned,then;if(depth=maxDepth){if(handler!==Thrower){that=undefined;args=[e]}deferred.rejectWith(that,args)}}};if(depth){process()}else{if(jQuery.Deferred.getStackHook){process.stackTrace=jQuery.Deferred.getStackHook()}window.setTimeout(process)}}}return jQuery.Deferred(function(newDefer){tuples[0][3].add(resolve(0,newDefer,jQuery.isFunction(onProgress)?onProgress:Identity,newDefer.notifyWith));tuples[1][3].add(resolve(0,newDefer,jQuery.isFunction(onFulfilled)?onFulfilled:Identity));tuples[2][3].add(resolve(0,newDefer,jQuery.isFunction(onRejected)?onRejected:Thrower))}).promise()},promise:function(obj){return obj!=null?jQuery.extend(obj,promise):promise}},deferred={};jQuery.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[5];promise[tuple[1]]=list.add;if(stateString){list.add(function(){state=stateString},tuples[3-i][2].disable,tuples[0][2].lock)}list.add(tuple[3].fire);deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?undefined:this,arguments);return this};deferred[tuple[0]+"With"]=list.fireWith});promise.promise(deferred);if(func){func.call(deferred,deferred)}return deferred},when:function(singleValue){var remaining=arguments.length,i=remaining,resolveContexts=Array(i),resolveValues=slice.call(arguments),master=jQuery.Deferred(),updateFunc=function(i){return function(value){resolveContexts[i]=this;resolveValues[i]=arguments.length>1?slice.call(arguments):value;if(!--remaining){master.resolveWith(resolveContexts,resolveValues)}}};if(remaining<=1){adoptValue(singleValue,master.done(updateFunc(i)).resolve,master.reject,!remaining);if(master.state()==="pending"||jQuery.isFunction(resolveValues[i]&&resolveValues[i].then)){return master.then()}}while(i--){adoptValue(resolveValues[i],updateFunc(i),master.reject)}return master.promise()}});var rerrorNames=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;jQuery.Deferred.exceptionHook=function(error,stack){if(window.console&&window.console.warn&&error&&rerrorNames.test(error.name)){window.console.warn("jQuery.Deferred exception: "+error.message,error.stack,stack)}};jQuery.readyException=function(error){window.setTimeout(function(){throw error})};var readyList=jQuery.Deferred();jQuery.fn.ready=function(fn){readyList.then(fn).catch(function(error){jQuery.readyException(error)});return this};jQuery.extend({isReady:false,readyWait:1,ready:function(wait){if(wait===true?--jQuery.readyWait:jQuery.isReady){return}jQuery.isReady=true;if(wait!==true&&--jQuery.readyWait>0){return}readyList.resolveWith(document,[jQuery])}});jQuery.ready.then=readyList.then;function completed(){document.removeEventListener("DOMContentLoaded",completed);window.removeEventListener("load",completed);jQuery.ready()}if(document.readyState==="complete"||document.readyState!=="loading"&&!document.documentElement.doScroll){window.setTimeout(jQuery.ready)}else{document.addEventListener("DOMContentLoaded",completed);window.addEventListener("load",completed)}var access=function(elems,fn,key,value,chainable,emptyGet,raw){var i=0,len=elems.length,bulk=key==null;if(jQuery.type(key)==="object"){chainable=true;for(i in key){access(elems,fn,i,key[i],true,emptyGet,raw)}}else if(value!==undefined){chainable=true;if(!jQuery.isFunction(value)){raw=true}if(bulk){if(raw){fn.call(elems,value);fn=null}else{bulk=fn;fn=function(elem,key,value){return bulk.call(jQuery(elem),value)}}}if(fn){for(;i1,null,true)},removeData:function(key){return this.each(function(){dataUser.remove(this,key)})}});jQuery.extend({queue:function(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=dataPriv.get(elem,type);if(data){if(!queue||Array.isArray(data)){queue=dataPriv.access(elem,type,jQuery.makeArray(data))}else{queue.push(data)}}return queue||[]}},dequeue:function(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=jQuery._queueHooks(elem,type),next=function(){jQuery.dequeue(elem,type)};if(fn==="inprogress"){fn=queue.shift();startLength--}if(fn){if(type==="fx"){queue.unshift("inprogress")}delete hooks.stop;fn.call(elem,next,hooks)}if(!startLength&&hooks){hooks.empty.fire()}},_queueHooks:function(elem,type){var key=type+"queueHooks";return dataPriv.get(elem,key)||dataPriv.access(elem,key,{empty:jQuery.Callbacks("once memory").add(function(){dataPriv.remove(elem,[type+"queue",key])})})}});jQuery.fn.extend({queue:function(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--}if(arguments.length\x20\t\r\n\f]+)/i;var rscriptType=/^$|\/(?:java|ecma)script/i;var wrapMap={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;function getAll(context,tag){var ret;if(typeof context.getElementsByTagName!=="undefined"){ret=context.getElementsByTagName(tag||"*")}else if(typeof context.querySelectorAll!=="undefined"){ret=context.querySelectorAll(tag||"*")}else{ret=[]}if(tag===undefined||tag&&nodeName(context,tag)){return jQuery.merge([context],ret)}return ret}function setGlobalEval(elems,refElements){var i=0,l=elems.length;for(;i-1){if(ignored){ignored.push(elem)}continue}contains=jQuery.contains(elem.ownerDocument,elem);tmp=getAll(fragment.appendChild(elem),"script");if(contains){setGlobalEval(tmp)}if(scripts){j=0;while(elem=tmp[j++]){if(rscriptType.test(elem.type||"")){scripts.push(elem)}}}}return fragment}(function(){var fragment=document.createDocumentFragment(),div=fragment.appendChild(document.createElement("div")),input=document.createElement("input");input.setAttribute("type","radio");input.setAttribute("checked","checked");input.setAttribute("name","t");div.appendChild(input);support.checkClone=div.cloneNode(true).cloneNode(true).lastChild.checked;div.innerHTML="";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue})();var documentElement=document.documentElement;var rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true}function returnFalse(){return false}function safeActiveElement(){try{return document.activeElement}catch(err){}}function on(elem,types,selector,data,fn,one){var origFn,type;if(typeof types==="object"){if(typeof selector!=="string"){data=data||selector;selector=undefined}for(type in types){on(elem,type,selector,data,types[type],one)}return elem}if(data==null&&fn==null){fn=selector;data=selector=undefined}else if(fn==null){if(typeof selector==="string"){fn=data;data=undefined}else{fn=data;data=selector;selector=undefined}}if(fn===false){fn=returnFalse}else if(!fn){return elem}if(one===1){origFn=fn;fn=function(event){jQuery().off(event);return origFn.apply(this,arguments)};fn.guid=origFn.guid||(origFn.guid=jQuery.guid++)}return elem.each(function(){jQuery.event.add(this,types,fn,data,selector)})}jQuery.event={global:{},add:function(elem,types,handler,data,selector){ +var handleObjIn,eventHandle,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.get(elem);if(!elemData){return}if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.selector}if(selector){jQuery.find.matchesSelector(documentElement,selector)}if(!handler.guid){handler.guid=jQuery.guid++}if(!(events=elemData.events)){events=elemData.events={}}if(!(eventHandle=elemData.handle)){eventHandle=elemData.handle=function(e){return typeof jQuery!=="undefined"&&jQuery.event.triggered!==e.type?jQuery.event.dispatch.apply(elem,arguments):undefined}}types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;special=jQuery.event.special[type]||{};handleObj=jQuery.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&jQuery.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn);if(!(handlers=events[type])){handlers=events[type]=[];handlers.delegateCount=0;if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){if(elem.addEventListener){elem.addEventListener(type,eventHandle)}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid}}if(selector){handlers.splice(handlers.delegateCount++,0,handleObj)}else{handlers.push(handleObj)}jQuery.event.global[type]=true}},remove:function(elem,types,handler,selector,mappedTypes){var j,origCount,tmp,events,t,handleObj,special,handlers,type,namespaces,origType,elemData=dataPriv.hasData(elem)&&dataPriv.get(elem);if(!elemData||!(events=elemData.events)){return}types=(types||"").match(rnothtmlwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();if(!type){for(type in events){jQuery.event.remove(elem,type+types[t],handler,selector,true)}continue}special=jQuery.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;handlers=events[type]||[];tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)");origCount=j=handlers.length;while(j--){handleObj=handlers[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!tmp||tmp.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.delegateCount--}if(special.remove){special.remove.call(elem,handleObj)}}}if(origCount&&!handlers.length){if(!special.teardown||special.teardown.call(elem,namespaces,elemData.handle)===false){jQuery.removeEvent(elem,type,elemData.handle)}delete events[type]}}if(jQuery.isEmptyObject(events)){dataPriv.remove(elem,"handle events")}},dispatch:function(nativeEvent){var event=jQuery.event.fix(nativeEvent);var i,j,ret,matched,handleObj,handlerQueue,args=new Array(arguments.length),handlers=(dataPriv.get(this,"events")||{})[event.type]||[],special=jQuery.event.special[event.type]||{};args[0]=event;for(i=1;i=1)){for(;cur!==this;cur=cur.parentNode||this){if(cur.nodeType===1&&!(event.type==="click"&&cur.disabled===true)){matchedHandlers=[];matchedSelectors={};for(i=0;i-1:jQuery.find(sel,this,null,[cur]).length}if(matchedSelectors[sel]){matchedHandlers.push(handleObj)}}if(matchedHandlers.length){handlerQueue.push({elem:cur,handlers:matchedHandlers})}}}}cur=this;if(delegateCount\x20\t\r\n\f]*)[^>]*)\/>/gi,rnoInnerhtml=/\s*$/g;function manipulationTarget(elem,content){if(nodeName(elem,"table")&&nodeName(content.nodeType!==11?content:content.firstChild,"tr")){return jQuery(">tbody",elem)[0]||elem}return elem}function disableScript(elem){elem.type=(elem.getAttribute("type")!==null)+"/"+elem.type;return elem}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);if(match){elem.type=match[1]}else{elem.removeAttribute("type")}return elem}function cloneCopyEvent(src,dest){var i,l,type,pdataOld,pdataCur,udataOld,udataCur,events;if(dest.nodeType!==1){return}if(dataPriv.hasData(src)){pdataOld=dataPriv.access(src);pdataCur=dataPriv.set(dest,pdataOld);events=pdataOld.events;if(events){delete pdataCur.handle;pdataCur.events={};for(type in events){for(i=0,l=events[type].length;i1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value)){return collection.each(function(index){var self=collection.eq(index);if(isFunction){args[0]=value.call(this,index,self.html())}domManip(self,args,callback,ignored)})}if(l){fragment=buildFragment(args,collection[0].ownerDocument,false,collection,ignored);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first}if(first||ignored){scripts=jQuery.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;for(;i")},clone:function(elem,dataAndEvents,deepDataAndEvents){var i,l,srcElements,destElements,clone=elem.cloneNode(true),inPage=jQuery.contains(elem.ownerDocument,elem);if(!support.noCloneChecked&&(elem.nodeType===1||elem.nodeType===11)&&!jQuery.isXMLDoc(elem)){destElements=getAll(clone);srcElements=getAll(elem);for(i=0,l=srcElements.length;i0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"))}return clone},cleanData:function(elems){var data,elem,type,special=jQuery.event.special,i=0;for(;(elem=elems[i])!==undefined;i++){if(acceptData(elem)){if(data=elem[dataPriv.expando]){if(data.events){for(type in data.events){if(special[type]){jQuery.event.remove(elem,type)}else{jQuery.removeEvent(elem,type,data.handle)}}}elem[dataPriv.expando]=undefined}if(elem[dataUser.expando]){elem[dataUser.expando]=undefined}}}}});jQuery.fn.extend({detach:function(selector){return remove(this,selector,true)},remove:function(selector){return remove(this,selector)},text:function(value){return access(this,function(value){return value===undefined?jQuery.text(this):this.empty().each(function(){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){this.textContent=value}})},null,value,arguments.length)},append:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem)}})},prepend:function(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild)}})},before:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this)}})},after:function(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling)}})},empty:function(){var elem,i=0;for(;(elem=this[i])!=null;i++){if(elem.nodeType===1){jQuery.cleanData(getAll(elem,false));elem.textContent=""}}return this},clone:function(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function(value){return access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined&&elem.nodeType===1){return elem.innerHTML}if(typeof value==="string"&&!rnoInnerhtml.test(value)&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=jQuery.htmlPrefilter(value);try{for(;i1)}});function Tween(elem,options,prop,end,easing){return new Tween.prototype.init(elem,options,prop,end,easing)}jQuery.Tween=Tween;Tween.prototype={constructor:Tween,init:function(elem,options,prop,end,easing,unit){this.elem=elem;this.prop=prop;this.easing=easing||jQuery.easing._default;this.options=options;this.start=this.now=this.cur();this.end=end;this.unit=unit||(jQuery.cssNumber[prop]?"":"px")},cur:function(){var hooks=Tween.propHooks[this.prop];return hooks&&hooks.get?hooks.get(this):Tween.propHooks._default.get(this)},run:function(percent){var eased,hooks=Tween.propHooks[this.prop];if(this.options.duration){this.pos=eased=jQuery.easing[this.easing](percent,this.options.duration*percent,0,1,this.options.duration)}else{this.pos=eased=percent}this.now=(this.end-this.start)*eased+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this)}if(hooks&&hooks.set){hooks.set(this)}else{Tween.propHooks._default.set(this)}return this}};Tween.prototype.init.prototype=Tween.prototype;Tween.propHooks={_default:{get:function(tween){var result;if(tween.elem.nodeType!==1||tween.elem[tween.prop]!=null&&tween.elem.style[tween.prop]==null){return tween.elem[tween.prop]}result=jQuery.css(tween.elem,tween.prop,"");return!result||result==="auto"?0:result},set:function(tween){if(jQuery.fx.step[tween.prop]){jQuery.fx.step[tween.prop](tween)}else if(tween.elem.nodeType===1&&(tween.elem.style[jQuery.cssProps[tween.prop]]!=null||jQuery.cssHooks[tween.prop])){jQuery.style(tween.elem,tween.prop,tween.now+tween.unit)}else{tween.elem[tween.prop]=tween.now}}}};Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(tween){if(tween.elem.nodeType&&tween.elem.parentNode){tween.elem[tween.prop]=tween.now}}};jQuery.easing={linear:function(p){return p},swing:function(p){return.5-Math.cos(p*Math.PI)/2},_default:"swing"};jQuery.fx=Tween.prototype.init;jQuery.fx.step={};var fxNow,inProgress,rfxtypes=/^(?:toggle|show|hide)$/,rrun=/queueHooks$/;function schedule(){if(inProgress){if(document.hidden===false&&window.requestAnimationFrame){window.requestAnimationFrame(schedule)}else{window.setTimeout(schedule,jQuery.fx.interval)}jQuery.fx.tick()}}function createFxNow(){window.setTimeout(function(){fxNow=undefined});return fxNow=jQuery.now()}function genFx(type,includeWidth){var which,i=0,attrs={height:type};includeWidth=includeWidth?1:0;for(;i<4;i+=2-includeWidth){which=cssExpand[i];attrs["margin"+which]=attrs["padding"+which]=type}if(includeWidth){attrs.opacity=attrs.width=type}return attrs}function createTween(value,prop,animation){var tween,collection=(Animation.tweeners[prop]||[]).concat(Animation.tweeners["*"]),index=0,length=collection.length;for(;index1)},removeAttr:function(name){return this.each(function(){jQuery.removeAttr(this,name)})}});jQuery.extend({attr:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return}if(typeof elem.getAttribute==="undefined"){return jQuery.prop(elem,name,value)}if(nType!==1||!jQuery.isXMLDoc(elem)){hooks=jQuery.attrHooks[name.toLowerCase()]||(jQuery.expr.match.bool.test(name)?boolHook:undefined)}if(value!==undefined){if(value===null){jQuery.removeAttr(elem,name);return}if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}elem.setAttribute(name,value+"");return value}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}ret=jQuery.find.attr(elem,name);return ret==null?undefined:ret},attrHooks:{type:{set:function(elem,value){if(!support.radioValue&&value==="radio"&&nodeName(elem,"input")){var val=elem.value;elem.setAttribute("type",value);if(val){elem.value=val}return value}}}},removeAttr:function(elem,value){var name,i=0,attrNames=value&&value.match(rnothtmlwhite);if(attrNames&&elem.nodeType===1){while(name=attrNames[i++]){elem.removeAttribute(name)}}}});boolHook={set:function(elem,value,name){if(value===false){jQuery.removeAttr(elem,name)}else{elem.setAttribute(name,name)}return name}};jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g),function(i,name){var getter=attrHandle[name]||jQuery.find.attr;attrHandle[name]=function(elem,name,isXML){var ret,handle,lowercaseName=name.toLowerCase();if(!isXML){handle=attrHandle[lowercaseName];attrHandle[lowercaseName]=ret;ret=getter(elem,name,isXML)!=null?lowercaseName:null;attrHandle[lowercaseName]=handle}return ret}});var rfocusable=/^(?:input|select|textarea|button)$/i,rclickable=/^(?:a|area)$/i;jQuery.fn.extend({prop:function(name,value){return access(this,jQuery.prop,name,value,arguments.length>1)},removeProp:function(name){return this.each(function(){delete this[jQuery.propFix[name]||name]})}});jQuery.extend({prop:function(elem,name,value){var ret,hooks,nType=elem.nodeType;if(nType===3||nType===8||nType===2){return}if(nType!==1||!jQuery.isXMLDoc(elem)){name=jQuery.propFix[name]||name;hooks=jQuery.propHooks[name]}if(value!==undefined){if(hooks&&"set"in hooks&&(ret=hooks.set(elem,value,name))!==undefined){return ret}return elem[name]=value}if(hooks&&"get"in hooks&&(ret=hooks.get(elem,name))!==null){return ret}return elem[name]},propHooks:{tabIndex:{get:function(elem){var tabindex=jQuery.find.attr(elem,"tabindex");if(tabindex){return parseInt(tabindex,10)}if(rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href){return 0}return-1}}},propFix:{for:"htmlFor",class:"className"}});if(!support.optSelected){jQuery.propHooks.selected={get:function(elem){var parent=elem.parentNode;if(parent&&parent.parentNode){parent.parentNode.selectedIndex}return null},set:function(elem){var parent=elem.parentNode;if(parent){parent.selectedIndex;if(parent.parentNode){parent.parentNode.selectedIndex}}}}}jQuery.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){jQuery.propFix[this.toLowerCase()]=this});function stripAndCollapse(value){var tokens=value.match(rnothtmlwhite)||[];return tokens.join(" ")}function getClass(elem){return elem.getAttribute&&elem.getAttribute("class")||""}jQuery.fn.extend({addClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).addClass(value.call(this,j,getClass(this)))})}if(typeof value==="string"&&value){classes=value.match(rnothtmlwhite)||[];while(elem=this[i++]){curValue=getClass(elem);cur=elem.nodeType===1&&" "+stripAndCollapse(curValue)+" ";if(cur){j=0;while(clazz=classes[j++]){if(cur.indexOf(" "+clazz+" ")<0){cur+=clazz+" "}}finalValue=stripAndCollapse(cur);if(curValue!==finalValue){elem.setAttribute("class",finalValue)}}}}return this},removeClass:function(value){var classes,elem,cur,curValue,clazz,j,finalValue,i=0;if(jQuery.isFunction(value)){return this.each(function(j){jQuery(this).removeClass(value.call(this,j,getClass(this)))})}if(!arguments.length){return this.attr("class","")}if(typeof value==="string"&&value){classes=value.match(rnothtmlwhite)||[];while(elem=this[i++]){curValue=getClass(elem);cur=elem.nodeType===1&&" "+stripAndCollapse(curValue)+" ";if(cur){j=0;while(clazz=classes[j++]){while(cur.indexOf(" "+clazz+" ")>-1){cur=cur.replace(" "+clazz+" "," ")}}finalValue=stripAndCollapse(cur);if(curValue!==finalValue){elem.setAttribute("class",finalValue)}}}}return this},toggleClass:function(value,stateVal){var type=typeof value;if(typeof stateVal==="boolean"&&type==="string"){return stateVal?this.addClass(value):this.removeClass(value)}if(jQuery.isFunction(value)){return this.each(function(i){jQuery(this).toggleClass(value.call(this,i,getClass(this),stateVal),stateVal)})}return this.each(function(){var className,i,self,classNames;if(type==="string"){i=0;self=jQuery(this);classNames=value.match(rnothtmlwhite)||[];while(className=classNames[i++]){if(self.hasClass(className)){self.removeClass(className)}else{self.addClass(className)}}}else if(value===undefined||type==="boolean"){className=getClass(this);if(className){dataPriv.set(this,"__className__",className)}if(this.setAttribute){this.setAttribute("class",className||value===false?"":dataPriv.get(this,"__className__")||"")}}})},hasClass:function(selector){var className,elem,i=0;className=" "+selector+" ";while(elem=this[i++]){if(elem.nodeType===1&&(" "+stripAndCollapse(getClass(elem))+" ").indexOf(className)>-1){return true}}return false}});var rreturn=/\r/g;jQuery.fn.extend({val:function(value){var hooks,ret,isFunction,elem=this[0];if(!arguments.length){if(elem){hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()];if(hooks&&"get"in hooks&&(ret=hooks.get(elem,"value"))!==undefined){return ret}ret=elem.value;if(typeof ret==="string"){return ret.replace(rreturn,"")}return ret==null?"":ret}return}isFunction=jQuery.isFunction(value);return this.each(function(i){var val;if(this.nodeType!==1){return}if(isFunction){val=value.call(this,i,jQuery(this).val())}else{val=value}if(val==null){val=""}else if(typeof val==="number"){val+=""}else if(Array.isArray(val)){val=jQuery.map(val,function(value){return value==null?"":value+""})}hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()];if(!hooks||!("set"in hooks)||hooks.set(this,val,"value")===undefined){this.value=val}})}});jQuery.extend({valHooks:{option:{get:function(elem){var val=jQuery.find.attr(elem,"value");return val!=null?val:stripAndCollapse(jQuery.text(elem))}},select:{get:function(elem){var value,option,i,options=elem.options,index=elem.selectedIndex,one=elem.type==="select-one",values=one?null:[],max=one?index+1:options.length;if(index<0){i=max}else{i=one?index:0}for(;i-1){optionSet=true}}if(!optionSet){elem.selectedIndex=-1}return values}}}});jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={set:function(elem,value){if(Array.isArray(value)){return elem.checked=jQuery.inArray(jQuery(elem).val(),value)>-1}}};if(!support.checkOn){jQuery.valHooks[this].get=function(elem){return elem.getAttribute("value")===null?"on":elem.value}}});var rfocusMorph=/^(?:focusinfocus|focusoutblur)$/;jQuery.extend(jQuery.event,{trigger:function(event,data,elem,onlyHandlers){var i,cur,tmp,bubbleType,ontype,handle,special,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];cur=tmp=elem=elem||document;if(elem.nodeType===3||elem.nodeType===8){return}if(rfocusMorph.test(type+jQuery.event.triggered)){return}if(type.indexOf(".")>-1){namespaces=type.split(".");type=namespaces.shift();namespaces.sort()}ontype=type.indexOf(":")<0&&"on"+type;event=event[jQuery.expando]?event:new jQuery.Event(type,typeof event==="object"&&event);event.isTrigger=onlyHandlers?2:3;event.namespace=namespaces.join(".");event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;event.result=undefined;if(!event.target){event.target=elem}data=data==null?[event]:jQuery.makeArray(data,[event]);special=jQuery.event.special[type]||{};if(!onlyHandlers&&special.trigger&&special.trigger.apply(elem,data)===false){return}if(!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){bubbleType=special.delegateType||type;if(!rfocusMorph.test(bubbleType+type)){cur=cur.parentNode}for(;cur;cur=cur.parentNode){eventPath.push(cur);tmp=cur}if(tmp===(elem.ownerDocument||document)){eventPath.push(tmp.defaultView||tmp.parentWindow||window)}}i=0;while((cur=eventPath[i++])&&!event.isPropagationStopped()){event.type=i>1?bubbleType:special.bindType||type;handle=(dataPriv.get(cur,"events")||{})[event.type]&&dataPriv.get(cur,"handle");if(handle){handle.apply(cur,data)}handle=ontype&&cur[ontype];if(handle&&handle.apply&&acceptData(cur)){event.result=handle.apply(cur,data);if(event.result===false){event.preventDefault()}}}event.type=type;if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(eventPath.pop(),data)===false)&&acceptData(elem)){if(ontype&&jQuery.isFunction(elem[type])&&!jQuery.isWindow(elem)){tmp=elem[ontype];if(tmp){elem[ontype]=null}jQuery.event.triggered=type;elem[type]();jQuery.event.triggered=undefined;if(tmp){elem[ontype]=tmp}}}}return event.result},simulate:function(type,elem,event){var e=jQuery.extend(new jQuery.Event,event,{type:type,isSimulated:true});jQuery.event.trigger(e,null,elem)}});jQuery.fn.extend({trigger:function(type,data){return this.each(function(){jQuery.event.trigger(type,data,this)})},triggerHandler:function(type,data){var elem=this[0];if(elem){return jQuery.event.trigger(type,data,elem,true)}}});jQuery.each(("blur focus focusin focusout resize scroll click dblclick "+"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave "+"change select submit keydown keypress keyup contextmenu").split(" "),function(i,name){jQuery.fn[name]=function(data,fn){return arguments.length>0?this.on(name,null,data,fn):this.trigger(name)}});jQuery.fn.extend({hover:function(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)}});support.focusin="onfocusin"in window;if(!support.focusin){jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){var handler=function(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event))};jQuery.event.special[fix]={setup:function(){var doc=this.ownerDocument||this,attaches=dataPriv.access(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true)}dataPriv.access(doc,fix,(attaches||0)+1)},teardown:function(){var doc=this.ownerDocument||this,attaches=dataPriv.access(doc,fix)-1;if(!attaches){doc.removeEventListener(orig,handler,true);dataPriv.remove(doc,fix)}else{dataPriv.access(doc,fix,attaches)}}}})}var location=window.location;var nonce=jQuery.now();var rquery=/\?/;jQuery.parseXML=function(data){var xml;if(!data||typeof data!=="string"){return null}try{xml=(new window.DOMParser).parseFromString(data,"text/xml")}catch(e){xml=undefined}if(!xml||xml.getElementsByTagName("parsererror").length){jQuery.error("Invalid XML: "+data)}return xml};var rbracket=/\[\]$/,rCRLF=/\r?\n/g,rsubmitterTypes=/^(?:submit|button|image|reset|file)$/i,rsubmittable=/^(?:input|select|textarea|keygen)/i;function buildParams(prefix,obj,traditional,add){var name;if(Array.isArray(obj)){jQuery.each(obj,function(i,v){if(traditional||rbracket.test(prefix)){add(prefix,v)}else{buildParams(prefix+"["+(typeof v==="object"&&v!=null?i:"")+"]",v,traditional,add)}})}else if(!traditional&&jQuery.type(obj)==="object"){for(name in obj){buildParams(prefix+"["+name+"]",obj[name],traditional,add)}}else{add(prefix,obj)}}jQuery.param=function(a,traditional){var prefix,s=[],add=function(key,valueOrFunction){var value=jQuery.isFunction(valueOrFunction)?valueOrFunction():valueOrFunction;s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value==null?"":value)};if(Array.isArray(a)||a.jquery&&!jQuery.isPlainObject(a)){jQuery.each(a,function(){add(this.name,this.value)})}else{for(prefix in a){buildParams(prefix,a[prefix],traditional,add)}}return s.join("&")};jQuery.fn.extend({serialize:function(){return jQuery.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var elements=jQuery.prop(this,"elements");return elements?jQuery.makeArray(elements):this}).filter(function(){var type=this.type;return this.name&&!jQuery(this).is(":disabled")&&rsubmittable.test(this.nodeName)&&!rsubmitterTypes.test(type)&&(this.checked||!rcheckableType.test(type))}).map(function(i,elem){var val=jQuery(this).val();if(val==null){return null}if(Array.isArray(val)){return jQuery.map(val,function(val){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}})}return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}});var r20=/%20/g,rhash=/#.*$/,rantiCache=/([?&])_=[^&]*/,rheaders=/^(.*?):[ \t]*([^\r\n]*)$/gm,rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,prefilters={},transports={},allTypes="*/".concat("*"),originAnchor=document.createElement("a");originAnchor.href=location.href;function addToPrefiltersOrTransports(structure){return function(dataTypeExpression,func){if(typeof dataTypeExpression!=="string"){func=dataTypeExpression;dataTypeExpression="*"}var dataType,i=0,dataTypes=dataTypeExpression.toLowerCase().match(rnothtmlwhite)||[];if(jQuery.isFunction(func)){while(dataType=dataTypes[i++]){if(dataType[0]==="+"){dataType=dataType.slice(1)||"*";(structure[dataType]=structure[dataType]||[]).unshift(func)}else{(structure[dataType]=structure[dataType]||[]).push(func)}}}}}function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR){var inspected={},seekingTransport=structure===transports;function inspect(dataType){var selected;inspected[dataType]=true;jQuery.each(structure[dataType]||[],function(_,prefilterOrFactory){var dataTypeOrTransport=prefilterOrFactory(options,originalOptions,jqXHR);if(typeof dataTypeOrTransport==="string"&&!seekingTransport&&!inspected[dataTypeOrTransport]){options.dataTypes.unshift(dataTypeOrTransport);inspect(dataTypeOrTransport);return false}else if(seekingTransport){return!(selected=dataTypeOrTransport)}});return selected}return inspect(options.dataTypes[0])||!inspected["*"]&&inspect("*")}function ajaxExtend(target,src){var key,deep,flatOptions=jQuery.ajaxSettings.flatOptions||{};for(key in src){if(src[key]!==undefined){(flatOptions[key]?target:deep||(deep={}))[key]=src[key]}}if(deep){jQuery.extend(true,target,deep)}return target}function ajaxHandleResponses(s,jqXHR,responses){var ct,type,finalDataType,firstDataType,contents=s.contents,dataTypes=s.dataTypes;while(dataTypes[0]==="*"){dataTypes.shift();if(ct===undefined){ct=s.mimeType||jqXHR.getResponseHeader("Content-Type")}}if(ct){for(type in contents){if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}}}if(dataTypes[0]in responses){finalDataType=dataTypes[0]}else{for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}if(!firstDataType){firstDataType=type}}finalDataType=finalDataType||firstDataType}if(finalDataType){if(finalDataType!==dataTypes[0]){dataTypes.unshift(finalDataType)}return responses[finalDataType]}}function ajaxConvert(s,response,jqXHR,isSuccess){var conv2,current,conv,tmp,prev,converters={},dataTypes=s.dataTypes.slice();if(dataTypes[1]){for(conv in s.converters){converters[conv.toLowerCase()]=s.converters[conv]}}current=dataTypes.shift();while(current){if(s.responseFields[current]){jqXHR[s.responseFields[current]]=response}if(!prev&&isSuccess&&s.dataFilter){response=s.dataFilter(response,s.dataType)}prev=current;current=dataTypes.shift();if(current){if(current==="*"){current=prev}else if(prev!=="*"&&prev!==current){conv=converters[prev+" "+current]||converters["* "+current];if(!conv){for(conv2 in converters){tmp=conv2.split(" ");if(tmp[1]===current){conv=converters[prev+" "+tmp[0]]||converters["* "+tmp[0]];if(conv){if(conv===true){conv=converters[conv2]}else if(converters[conv2]!==true){current=tmp[0];dataTypes.unshift(tmp[1])}break}}}}if(conv!==true){if(conv&&s.throws){response=conv(response)}else{try{response=conv(response)}catch(e){return{state:"parsererror",error:conv?e:"No conversion from "+prev+" to "+current}}}}}}}return{state:"success",data:response}}jQuery.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:location.href,type:"GET",isLocal:rlocalProtocol.test(location.protocol),global:true,processData:true,async:true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":allTypes,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":JSON.parse,"text xml":jQuery.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(target,settings){return settings?ajaxExtend(ajaxExtend(target,jQuery.ajaxSettings),settings):ajaxExtend(jQuery.ajaxSettings,target)},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),ajax:function(url,options){if(typeof url==="object"){options=url;url=undefined}options=options||{};var transport,cacheURL,responseHeadersString,responseHeaders,timeoutTimer,urlAnchor,completed,fireGlobals,i,uncached,s=jQuery.ajaxSetup({},options),callbackContext=s.context||s,globalEventContext=s.context&&(callbackContext.nodeType||callbackContext.jquery)?jQuery(callbackContext):jQuery.event,deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),statusCode=s.statusCode||{},requestHeaders={},requestHeadersNames={},strAbort="canceled",jqXHR={readyState:0,getResponseHeader:function(key){var match;if(completed){if(!responseHeaders){responseHeaders={};while(match=rheaders.exec(responseHeadersString)){responseHeaders[match[1].toLowerCase()]=match[2]}}match=responseHeaders[key.toLowerCase()]}return match==null?null:match},getAllResponseHeaders:function(){return completed?responseHeadersString:null},setRequestHeader:function(name,value){if(completed==null){name=requestHeadersNames[name.toLowerCase()]=requestHeadersNames[name.toLowerCase()]||name;requestHeaders[name]=value}return this},overrideMimeType:function(type){if(completed==null){s.mimeType=type}return this},statusCode:function(map){var code;if(map){if(completed){jqXHR.always(map[jqXHR.status])}else{for(code in map){statusCode[code]=[statusCode[code],map[code]]}}}return this},abort:function(statusText){var finalText=statusText||strAbort;if(transport){transport.abort(finalText)}done(0,finalText);return this}};deferred.promise(jqXHR);s.url=((url||s.url||location.href)+"").replace(rprotocol,location.protocol+"//");s.type=options.method||options.type||s.method||s.type;s.dataTypes=(s.dataType||"*").toLowerCase().match(rnothtmlwhite)||[""];if(s.crossDomain==null){urlAnchor=document.createElement("a");try{urlAnchor.href=s.url;urlAnchor.href=urlAnchor.href;s.crossDomain=originAnchor.protocol+"//"+originAnchor.host!==urlAnchor.protocol+"//"+urlAnchor.host}catch(e){s.crossDomain=true}}if(s.data&&s.processData&&typeof s.data!=="string"){s.data=jQuery.param(s.data,s.traditional)}inspectPrefiltersOrTransports(prefilters,s,options,jqXHR);if(completed){return jqXHR}fireGlobals=jQuery.event&&s.global;if(fireGlobals&&jQuery.active++===0){jQuery.event.trigger("ajaxStart")}s.type=s.type.toUpperCase();s.hasContent=!rnoContent.test(s.type);cacheURL=s.url.replace(rhash,"");if(!s.hasContent){uncached=s.url.slice(cacheURL.length);if(s.data){cacheURL+=(rquery.test(cacheURL)?"&":"?")+s.data;delete s.data}if(s.cache===false){cacheURL=cacheURL.replace(rantiCache,"$1");uncached=(rquery.test(cacheURL)?"&":"?")+"_="+nonce+++uncached}s.url=cacheURL+uncached}else if(s.data&&s.processData&&(s.contentType||"").indexOf("application/x-www-form-urlencoded")===0){s.data=s.data.replace(r20,"+")}if(s.ifModified){if(jQuery.lastModified[cacheURL]){jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[cacheURL])}if(jQuery.etag[cacheURL]){jqXHR.setRequestHeader("If-None-Match",jQuery.etag[cacheURL])}}if(s.data&&s.hasContent&&s.contentType!==false||options.contentType){jqXHR.setRequestHeader("Content-Type",s.contentType)}jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+(s.dataTypes[0]!=="*"?", "+allTypes+"; q=0.01":""):s.accepts["*"]);for(i in s.headers){jqXHR.setRequestHeader(i,s.headers[i])}if(s.beforeSend&&(s.beforeSend.call(callbackContext,jqXHR,s)===false||completed)){return jqXHR.abort()}strAbort="abort";completeDeferred.add(s.complete);jqXHR.done(s.success);jqXHR.fail(s.error);transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR);if(!transport){done(-1,"No Transport")}else{jqXHR.readyState=1;if(fireGlobals){globalEventContext.trigger("ajaxSend",[jqXHR,s])}if(completed){return jqXHR}if(s.async&&s.timeout>0){timeoutTimer=window.setTimeout(function(){jqXHR.abort("timeout")},s.timeout)}try{completed=false;transport.send(requestHeaders,done)}catch(e){if(completed){throw e}done(-1,e)}}function done(status,nativeStatusText,responses,headers){var isSuccess,success,error,response,modified,statusText=nativeStatusText;if(completed){return}completed=true;if(timeoutTimer){window.clearTimeout(timeoutTimer)}transport=undefined;responseHeadersString=headers||"";jqXHR.readyState=status>0?4:0;isSuccess=status>=200&&status<300||status===304;if(responses){response=ajaxHandleResponses(s,jqXHR,responses)}response=ajaxConvert(s,response,jqXHR,isSuccess);if(isSuccess){if(s.ifModified){modified=jqXHR.getResponseHeader("Last-Modified");if(modified){jQuery.lastModified[cacheURL]=modified}modified=jqXHR.getResponseHeader("etag");if(modified){jQuery.etag[cacheURL]=modified}}if(status===204||s.type==="HEAD"){statusText="nocontent"}else if(status===304){statusText="notmodified"}else{statusText=response.state;success=response.data;error=response.error;isSuccess=!error}}else{error=statusText;if(status||!statusText){statusText="error";if(status<0){status=0}}}jqXHR.status=status;jqXHR.statusText=(nativeStatusText||statusText)+"";if(isSuccess){deferred.resolveWith(callbackContext,[success,statusText,jqXHR])}else{deferred.rejectWith(callbackContext,[jqXHR,statusText,error])}jqXHR.statusCode(statusCode);statusCode=undefined;if(fireGlobals){globalEventContext.trigger(isSuccess?"ajaxSuccess":"ajaxError",[jqXHR,s,isSuccess?success:error])}completeDeferred.fireWith(callbackContext,[jqXHR,statusText]);if(fireGlobals){globalEventContext.trigger("ajaxComplete",[jqXHR,s]);if(!--jQuery.active){jQuery.event.trigger("ajaxStop")}}}return jqXHR},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json")},getScript:function(url,callback){return jQuery.get(url,undefined,callback,"script")}});jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){if(jQuery.isFunction(data)){type=type||callback;callback=data;data=undefined}return jQuery.ajax(jQuery.extend({url:url,type:method,dataType:type,data:data,success:callback},jQuery.isPlainObject(url)&&url))}});jQuery._evalUrl=function(url){return jQuery.ajax({url:url,type:"GET",dataType:"script",cache:true,async:false,global:false,throws:true})};jQuery.fn.extend({wrapAll:function(html){var wrap;if(this[0]){if(jQuery.isFunction(html)){html=html.call(this[0])}wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){wrap.insertBefore(this[0])}wrap.map(function(){var elem=this;while(elem.firstElementChild){elem=elem.firstElementChild}return elem}).append(this)}return this},wrapInner:function(html){if(jQuery.isFunction(html)){return this.each(function(i){jQuery(this).wrapInner(html.call(this,i))})}return this.each(function(){var self=jQuery(this),contents=self.contents();if(contents.length){contents.wrapAll(html)}else{self.append(html)}})},wrap:function(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html)})},unwrap:function(selector){this.parent(selector).not("body").each(function(){jQuery(this).replaceWith(this.childNodes)});return this}});jQuery.expr.pseudos.hidden=function(elem){return!jQuery.expr.pseudos.visible(elem)};jQuery.expr.pseudos.visible=function(elem){return!!(elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length)};jQuery.ajaxSettings.xhr=function(){try{return new window.XMLHttpRequest}catch(e){}};var xhrSuccessStatus={0:200,1223:204},xhrSupported=jQuery.ajaxSettings.xhr();support.cors=!!xhrSupported&&"withCredentials"in xhrSupported;support.ajax=xhrSupported=!!xhrSupported;jQuery.ajaxTransport(function(options){var callback,errorCallback;if(support.cors||xhrSupported&&!options.crossDomain){return{send:function(headers,complete){var i,xhr=options.xhr();xhr.open(options.type,options.url,options.async,options.username,options.password);if(options.xhrFields){for(i in options.xhrFields){xhr[i]=options.xhrFields[i]}}if(options.mimeType&&xhr.overrideMimeType){xhr.overrideMimeType(options.mimeType)}if(!options.crossDomain&&!headers["X-Requested-With"]){headers["X-Requested-With"]="XMLHttpRequest"}for(i in headers){xhr.setRequestHeader(i,headers[i])}callback=function(type){return function(){if(callback){callback=errorCallback=xhr.onload=xhr.onerror=xhr.onabort=xhr.onreadystatechange=null;if(type==="abort"){xhr.abort()}else if(type==="error"){if(typeof xhr.status!=="number"){complete(0,"error")}else{complete(xhr.status,xhr.statusText)}}else{complete(xhrSuccessStatus[xhr.status]||xhr.status,xhr.statusText,(xhr.responseType||"text")!=="text"||typeof xhr.responseText!=="string"?{binary:xhr.response}:{text:xhr.responseText},xhr.getAllResponseHeaders())}}}};xhr.onload=callback();errorCallback=xhr.onerror=callback("error");if(xhr.onabort!==undefined){xhr.onabort=errorCallback}else{xhr.onreadystatechange=function(){if(xhr.readyState===4){window.setTimeout(function(){if(callback){errorCallback()}})}}}callback=callback("abort");try{xhr.send(options.hasContent&&options.data||null)}catch(e){if(callback){throw e}}},abort:function(){if(callback){callback()}}}}});jQuery.ajaxPrefilter(function(s){if(s.crossDomain){s.contents.script=false}});jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, "+"application/ecmascript, application/x-ecmascript"},contents:{ +script:/\b(?:java|ecma)script\b/},converters:{"text script":function(text){jQuery.globalEval(text);return text}}});jQuery.ajaxPrefilter("script",function(s){if(s.cache===undefined){s.cache=false}if(s.crossDomain){s.type="GET"}});jQuery.ajaxTransport("script",function(s){if(s.crossDomain){var script,callback;return{send:function(_,complete){script=jQuery(" + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+ +
+

#!/usr/bin/env python 

+

import os 

+

import sys 

+

 

+

if __name__ == "__main__": 

+

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "api.settings") 

+

try: 

+

from django.core.management import execute_from_command_line 

+

except ImportError: 

+

# The above import may fail for some other reason. Ensure that the 

+

# issue is really that Django is missing to avoid masking other 

+

# exceptions on Python 2. 

+

try: 

+

import django 

+

except ImportError: 

+

raise ImportError( 

+

"Couldn't import Django. Are you sure it's installed and " 

+

"available on your PYTHONPATH environment variable? Did you " 

+

"forget to activate a virtual environment?" 

+

) 

+

raise 

+

execute_from_command_line(sys.argv) 

+ +
+
+ + + + + diff --git a/htmlcov/status.json b/htmlcov/status.json new file mode 100644 index 0000000..0033371 --- /dev/null +++ b/htmlcov/status.json @@ -0,0 +1 @@ +{"format":1,"version":"4.5.2","settings":"b3a0bff7154d5bbec34fcac359c54f68","files":{"api___init___py":{"hash":"182b2dca469bf063cbcf996d517b03da","index":{"nums":[1,0,0,0,0,0,0],"html_filename":"api___init___py.html","relative_filename":"api/__init__.py"}},"api_settings_py":{"hash":"9367750c4c4aac1ceb07d5a7637a685d","index":{"nums":[1,18,0,0,0,0,0],"html_filename":"api_settings_py.html","relative_filename":"api/settings.py"}},"api_urls_py":{"hash":"1d6a4035a00000e0993056d1f7646b12","index":{"nums":[1,6,0,0,0,0,0],"html_filename":"api_urls_py.html","relative_filename":"api/urls.py"}},"api_wsgi_py":{"hash":"e046871c8a8aa948f9b2948bc1a9ddcf","index":{"nums":[1,4,0,4,0,0,0],"html_filename":"api_wsgi_py.html","relative_filename":"api/wsgi.py"}},"manage_py":{"hash":"3f0809aafda2dc04d2283cfb398dfea6","index":{"nums":[1,13,0,6,0,0,0],"html_filename":"manage_py.html","relative_filename":"manage.py"}},"timelaps___init___py":{"hash":"182b2dca469bf063cbcf996d517b03da","index":{"nums":[1,0,0,0,0,0,0],"html_filename":"timelaps___init___py.html","relative_filename":"timelaps/__init__.py"}},"timelaps_admin_py":{"hash":"e55e7f62862bbebea0f544cc078fc2f3","index":{"nums":[1,9,0,0,0,0,0],"html_filename":"timelaps_admin_py.html","relative_filename":"timelaps/admin.py"}},"timelaps_apps_py":{"hash":"aef0b0858e130b3691e44bc9aafbf508","index":{"nums":[1,4,0,4,0,0,0],"html_filename":"timelaps_apps_py.html","relative_filename":"timelaps/apps.py"}},"timelaps_migrations_0001_initial_py":{"hash":"9e9aafe2340c13fbfd6d8f50368bf8d8","index":{"nums":[1,6,0,0,0,0,0],"html_filename":"timelaps_migrations_0001_initial_py.html","relative_filename":"timelaps/migrations/0001_initial.py"}},"timelaps_migrations_0002_auto_20190112_0858_py":{"hash":"5a75f8a276e78f1187655deab1905caf","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0002_auto_20190112_0858_py.html","relative_filename":"timelaps/migrations/0002_auto_20190112_0858.py"}},"timelaps_migrations_0003_auto_20190112_0903_py":{"hash":"05596169ce28f52f0eaeee254043dee8","index":{"nums":[1,5,0,0,0,0,0],"html_filename":"timelaps_migrations_0003_auto_20190112_0903_py.html","relative_filename":"timelaps/migrations/0003_auto_20190112_0903.py"}},"timelaps_migrations_0004_auto_20190112_0906_py":{"hash":"a5ac695e1ff736699614b3ec475ac022","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0004_auto_20190112_0906_py.html","relative_filename":"timelaps/migrations/0004_auto_20190112_0906.py"}},"timelaps_migrations_0005_auto_20190112_0907_py":{"hash":"7e06561d64bb8ed7000fb5648420e335","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0005_auto_20190112_0907_py.html","relative_filename":"timelaps/migrations/0005_auto_20190112_0907.py"}},"timelaps_migrations_0006_auto_20190112_0912_py":{"hash":"f5a2f881562a9c84d3f3f6a031bfdb34","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0006_auto_20190112_0912_py.html","relative_filename":"timelaps/migrations/0006_auto_20190112_0912.py"}},"timelaps_migrations_0007_auto_20190112_0930_py":{"hash":"d33932120b626fb4a4259e1b060ef610","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0007_auto_20190112_0930_py.html","relative_filename":"timelaps/migrations/0007_auto_20190112_0930.py"}},"timelaps_migrations_0008_auto_20190112_0934_py":{"hash":"504a4ef4989651331d702a1a5678f187","index":{"nums":[1,5,0,0,0,0,0],"html_filename":"timelaps_migrations_0008_auto_20190112_0934_py.html","relative_filename":"timelaps/migrations/0008_auto_20190112_0934.py"}},"timelaps_migrations_0009_auto_20190112_0938_py":{"hash":"db2fba2739d01eb714b0a198cd1d69e8","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0009_auto_20190112_0938_py.html","relative_filename":"timelaps/migrations/0009_auto_20190112_0938.py"}},"timelaps_migrations_0010_auto_20190112_1005_py":{"hash":"79db67c4389b0d5e9d9cc68d95c3ad6a","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0010_auto_20190112_1005_py.html","relative_filename":"timelaps/migrations/0010_auto_20190112_1005.py"}},"timelaps_migrations_0011_auto_20190112_1017_py":{"hash":"3bc8aec216b91412a8e552872abcc3e9","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0011_auto_20190112_1017_py.html","relative_filename":"timelaps/migrations/0011_auto_20190112_1017.py"}},"timelaps_migrations_0012_auto_20190112_1019_py":{"hash":"78114f04a3e43a6d64a225be5c4c1a6c","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_migrations_0012_auto_20190112_1019_py.html","relative_filename":"timelaps/migrations/0012_auto_20190112_1019.py"}},"timelaps_migrations___init___py":{"hash":"182b2dca469bf063cbcf996d517b03da","index":{"nums":[1,0,0,0,0,0,0],"html_filename":"timelaps_migrations___init___py.html","relative_filename":"timelaps/migrations/__init__.py"}},"timelaps_models_py":{"hash":"92586a6ab2210769cbfc754cc59d5841","index":{"nums":[1,38,0,3,0,0,0],"html_filename":"timelaps_models_py.html","relative_filename":"timelaps/models.py"}},"timelaps_serializers_py":{"hash":"3cbad4ec2aab640b733ba34458febe6f","index":{"nums":[1,31,0,0,0,0,0],"html_filename":"timelaps_serializers_py.html","relative_filename":"timelaps/serializers.py"}},"timelaps_tests_py":{"hash":"5a0447f33154a5521830c838a75b7532","index":{"nums":[1,8,0,0,0,0,0],"html_filename":"timelaps_tests_py.html","relative_filename":"timelaps/tests.py"}},"timelaps_urls_py":{"hash":"94ca3042eeef9f44ee766489cdbc2e42","index":{"nums":[1,4,0,0,0,0,0],"html_filename":"timelaps_urls_py.html","relative_filename":"timelaps/urls.py"}},"timelaps_views_py":{"hash":"c9b1f434b548866b1e276c67c38ac062","index":{"nums":[1,32,0,4,0,0,0],"html_filename":"timelaps_views_py.html","relative_filename":"timelaps/views.py"}}}} \ No newline at end of file diff --git a/htmlcov/style.css b/htmlcov/style.css new file mode 100644 index 0000000..86b8209 --- /dev/null +++ b/htmlcov/style.css @@ -0,0 +1,375 @@ +/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */ +/* For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt */ + +/* CSS styles for coverage.py. */ + +/* Page-wide styles */ +html, body, h1, h2, h3, p, table, td, th { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; + } + +/* Set baseline grid to 16 pt. */ +body { + font-family: georgia, serif; + font-size: 1em; + } + +html>body { + font-size: 16px; + } + +/* Set base font size to 12/16 */ +p { + font-size: .75em; /* 12/16 */ + line-height: 1.33333333em; /* 16/12 */ + } + +table { + border-collapse: collapse; + } +td { + vertical-align: top; +} +table tr.hidden { + display: none !important; + } + +p#no_rows { + display: none; + font-size: 1.2em; + } + +a.nav { + text-decoration: none; + color: inherit; + } +a.nav:hover { + text-decoration: underline; + color: inherit; + } + +/* Page structure */ +#header { + background: #f8f8f8; + width: 100%; + border-bottom: 1px solid #eee; + } + +#source { + padding: 1em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + } + +.indexfile #footer { + margin: 1em 3em; + } + +.pyfile #footer { + margin: 1em 1em; + } + +#footer .content { + padding: 0; + font-size: 85%; + font-family: verdana, sans-serif; + color: #666666; + font-style: italic; + } + +#index { + margin: 1em 0 0 3em; + } + +/* Header styles */ +#header .content { + padding: 1em 3em; + } + +h1 { + font-size: 1.25em; + display: inline-block; +} + +#filter_container { + display: inline-block; + float: right; + margin: 0 2em 0 0; +} +#filter_container input { + width: 10em; +} + +h2.stats { + margin-top: .5em; + font-size: 1em; +} +.stats span { + border: 1px solid; + padding: .1em .25em; + margin: 0 .1em; + cursor: pointer; + border-color: #999 #ccc #ccc #999; +} +.stats span.hide_run, .stats span.hide_exc, +.stats span.hide_mis, .stats span.hide_par, +.stats span.par.hide_run.hide_par { + border-color: #ccc #999 #999 #ccc; +} +.stats span.par.hide_run { + border-color: #999 #ccc #ccc #999; +} + +.stats span.run { + background: #ddffdd; +} +.stats span.exc { + background: #eeeeee; +} +.stats span.mis { + background: #ffdddd; +} +.stats span.hide_run { + background: #eeffee; +} +.stats span.hide_exc { + background: #f5f5f5; +} +.stats span.hide_mis { + background: #ffeeee; +} +.stats span.par { + background: #ffffaa; +} +.stats span.hide_par { + background: #ffffcc; +} + +/* Help panel */ +#keyboard_icon { + float: right; + margin: 5px; + cursor: pointer; +} + +.help_panel { + position: absolute; + background: #ffffcc; + padding: .5em; + border: 1px solid #883; + display: none; +} + +.indexfile .help_panel { + width: 20em; height: 4em; +} + +.pyfile .help_panel { + width: 16em; height: 8em; +} + +.help_panel .legend { + font-style: italic; + margin-bottom: 1em; +} + +#panel_icon { + float: right; + cursor: pointer; +} + +.keyhelp { + margin: .75em; +} + +.keyhelp .key { + border: 1px solid black; + border-color: #888 #333 #333 #888; + padding: .1em .35em; + font-family: monospace; + font-weight: bold; + background: #eee; +} + +/* Source file styles */ +.linenos p { + text-align: right; + margin: 0; + padding: 0 .5em; + color: #999999; + font-family: verdana, sans-serif; + font-size: .625em; /* 10/16 */ + line-height: 1.6em; /* 16/10 */ + } +.linenos p.highlight { + background: #ffdd00; + } +.linenos p a { + text-decoration: none; + color: #999999; + } +.linenos p a:hover { + text-decoration: underline; + color: #999999; + } + +td.text { + width: 100%; + } +.text p { + margin: 0; + padding: 0 0 0 .5em; + border-left: 2px solid #ffffff; + white-space: pre; + position: relative; + } + +.text p.mis { + background: #ffdddd; + border-left: 2px solid #ff0000; + } +.text p.run, .text p.run.hide_par { + background: #ddffdd; + border-left: 2px solid #00ff00; + } +.text p.exc { + background: #eeeeee; + border-left: 2px solid #808080; + } +.text p.par, .text p.par.hide_run { + background: #ffffaa; + border-left: 2px solid #eeee99; + } +.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par, +.text p.hide_run.hide_par { + background: inherit; + } + +.text span.annotate { + font-family: georgia; + color: #666; + float: right; + padding-right: .5em; + } +.text p.hide_par span.annotate { + display: none; + } +.text span.annotate.long { + display: none; + } +.text p:hover span.annotate.long { + display: block; + max-width: 50%; + white-space: normal; + float: right; + position: absolute; + top: 1.75em; + right: 1em; + width: 30em; + height: auto; + color: #333; + background: #ffffcc; + border: 1px solid #888; + padding: .25em .5em; + z-index: 999; + border-radius: .2em; + box-shadow: #cccccc .2em .2em .2em; + } + +/* Syntax coloring */ +.text .com { + color: green; + font-style: italic; + line-height: 1px; + } +.text .key { + font-weight: bold; + line-height: 1px; + } +.text .str { + color: #000080; + } + +/* index styles */ +#index td, #index th { + text-align: right; + width: 5em; + padding: .25em .5em; + border-bottom: 1px solid #eee; + } +#index th { + font-style: italic; + color: #333; + border-bottom: 1px solid #ccc; + cursor: pointer; + } +#index th:hover { + background: #eee; + border-bottom: 1px solid #999; + } +#index td.left, #index th.left { + padding-left: 0; + } +#index td.right, #index th.right { + padding-right: 0; + } +#index th.headerSortDown, #index th.headerSortUp { + border-bottom: 1px solid #000; + white-space: nowrap; + background: #eee; + } +#index th.headerSortDown:after { + content: " ↓"; +} +#index th.headerSortUp:after { + content: " ↑"; +} +#index td.name, #index th.name { + text-align: left; + width: auto; + } +#index td.name a { + text-decoration: none; + color: #000; + } +#index tr.total, +#index tr.total_dynamic { + } +#index tr.total td, +#index tr.total_dynamic td { + font-weight: bold; + border-top: 1px solid #ccc; + border-bottom: none; + } +#index tr.file:hover { + background: #eeeeee; + } +#index tr.file:hover td.name { + text-decoration: underline; + color: #000; + } + +/* scroll marker styles */ +#scroll_marker { + position: fixed; + right: 0; + top: 0; + width: 16px; + height: 100%; + background: white; + border-left: 1px solid #eee; + } + +#scroll_marker .marker { + background: #eedddd; + position: absolute; + min-height: 3px; + width: 100%; + } diff --git a/htmlcov/timelaps___init___py.html b/htmlcov/timelaps___init___py.html new file mode 100644 index 0000000..809d1e3 --- /dev/null +++ b/htmlcov/timelaps___init___py.html @@ -0,0 +1,89 @@ + + + + + + + + + + + Coverage for timelaps/__init__.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+ + + +
+
+ + + + + diff --git a/htmlcov/timelaps_admin_py.html b/htmlcov/timelaps_admin_py.html new file mode 100644 index 0000000..ae6c711 --- /dev/null +++ b/htmlcov/timelaps_admin_py.html @@ -0,0 +1,117 @@ + + + + + + + + + + + Coverage for timelaps/admin.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+ +
+

# -*- coding: utf-8 -*- 

+

from __future__ import unicode_literals 

+

 

+

from django.contrib import admin 

+

from .models import * 

+

 

+

# Register your models here. 

+

 

+

admin.site.register(Driver) 

+

admin.site.register(Race) 

+

admin.site.register(Relay) 

+

admin.site.register(Rules) 

+

admin.site.register(Team) 

+

admin.site.register(TeamPilot) 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_apps_py.html b/htmlcov/timelaps_apps_py.html new file mode 100644 index 0000000..2a05ce7 --- /dev/null +++ b/htmlcov/timelaps_apps_py.html @@ -0,0 +1,105 @@ + + + + + + + + + + + Coverage for timelaps/apps.py: 0% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+ +
+

# -*- coding: utf-8 -*- 

+

from __future__ import unicode_literals 

+

 

+

from django.apps import AppConfig 

+

 

+

 

+

class TimelapsConfig(AppConfig): 

+

name = 'timelaps' 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0001_initial_py.html b/htmlcov/timelaps_migrations_0001_initial_py.html new file mode 100644 index 0000000..b90026e --- /dev/null +++ b/htmlcov/timelaps_migrations_0001_initial_py.html @@ -0,0 +1,253 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0001_initial.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

41

+

42

+

43

+

44

+

45

+

46

+

47

+

48

+

49

+

50

+

51

+

52

+

53

+

54

+

55

+

56

+

57

+

58

+

59

+

60

+

61

+

62

+

63

+

64

+

65

+

66

+

67

+

68

+

69

+

70

+

71

+

72

+

73

+

74

+

75

+

76

+

77

+

78

+

79

+

80

+

81

+

82

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 08:54 

+

 

+

from django.db import migrations, models 

+

import django.db.models.deletion 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

initial = True 

+

 

+

dependencies = [ 

+

] 

+

 

+

operations = [ 

+

migrations.CreateModel( 

+

name='Driver', 

+

fields=[ 

+

('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 

+

('first_name', models.CharField(max_length=30)), 

+

('last_name', models.CharField(max_length=30)), 

+

], 

+

), 

+

migrations.CreateModel( 

+

name='Race', 

+

fields=[ 

+

('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 

+

('name', models.CharField(max_length=30)), 

+

('start_date', models.DateField()), 

+

('end_date', models.DateField(null=True)), 

+

('duration', models.IntegerField()), 

+

('comment', models.CharField(max_length=256)), 

+

], 

+

), 

+

migrations.CreateModel( 

+

name='Relay', 

+

fields=[ 

+

('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 

+

('relay_start', models.DateField()), 

+

('relay_end', models.DateField(null=True)), 

+

('has_refuel', models.BooleanField(default=False)), 

+

('pilot_chrono', models.IntegerField(null=True)), 

+

('comment', models.CharField(max_length=256, null=True)), 

+

], 

+

), 

+

migrations.CreateModel( 

+

name='Rule', 

+

fields=[ 

+

('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 

+

('min_stand_duration', models.IntegerField()), 

+

('max_autonomy_dry', models.IntegerField()), 

+

('max_autonomy_wet', models.IntegerField()), 

+

('max_driving_duration', models.IntegerField(null=True)), 

+

('relay_default_duration', models.IntegerField(null=True)), 

+

], 

+

), 

+

migrations.CreateModel( 

+

name='Team', 

+

fields=[ 

+

('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 

+

('name', models.CharField(max_length=30)), 

+

], 

+

), 

+

migrations.CreateModel( 

+

name='TeamPilot', 

+

fields=[ 

+

('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 

+

('pilot', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='timelaps.Driver')), 

+

('race', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='timelaps.Race')), 

+

('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='timelaps.Team')), 

+

], 

+

), 

+

migrations.AddField( 

+

model_name='relay', 

+

name='team', 

+

field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='timelaps.Team'), 

+

), 

+

migrations.AddField( 

+

model_name='race', 

+

name='fk_rules', 

+

field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='timelaps.Rule'), 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0002_auto_20190112_0858_py.html b/htmlcov/timelaps_migrations_0002_auto_20190112_0858_py.html new file mode 100644 index 0000000..862951c --- /dev/null +++ b/htmlcov/timelaps_migrations_0002_auto_20190112_0858_py.html @@ -0,0 +1,123 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0002_auto_20190112_0858.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 08:58 

+

 

+

from django.db import migrations 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0001_initial'), 

+

] 

+

 

+

operations = [ 

+

migrations.RenameModel( 

+

old_name='Rule', 

+

new_name='Rules', 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0003_auto_20190112_0903_py.html b/htmlcov/timelaps_migrations_0003_auto_20190112_0903_py.html new file mode 100644 index 0000000..abaf9d7 --- /dev/null +++ b/htmlcov/timelaps_migrations_0003_auto_20190112_0903_py.html @@ -0,0 +1,147 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0003_auto_20190112_0903.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 09:03 

+

 

+

from django.db import migrations, models 

+

import django.db.models.deletion 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0002_auto_20190112_0858'), 

+

] 

+

 

+

operations = [ 

+

migrations.RemoveField( 

+

model_name='relay', 

+

name='team', 

+

), 

+

migrations.AddField( 

+

model_name='relay', 

+

name='team_pilot_id', 

+

field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='timelaps.TeamPilot'), 

+

preserve_default=False, 

+

), 

+

migrations.AddField( 

+

model_name='teampilot', 

+

name='order', 

+

field=models.IntegerField(null=True), 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0004_auto_20190112_0906_py.html b/htmlcov/timelaps_migrations_0004_auto_20190112_0906_py.html new file mode 100644 index 0000000..237949d --- /dev/null +++ b/htmlcov/timelaps_migrations_0004_auto_20190112_0906_py.html @@ -0,0 +1,125 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0004_auto_20190112_0906.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 09:06 

+

 

+

from django.db import migrations, models 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0003_auto_20190112_0903'), 

+

] 

+

 

+

operations = [ 

+

migrations.AlterField( 

+

model_name='race', 

+

name='comment', 

+

field=models.CharField(max_length=256, null=True), 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0005_auto_20190112_0907_py.html b/htmlcov/timelaps_migrations_0005_auto_20190112_0907_py.html new file mode 100644 index 0000000..449b2a5 --- /dev/null +++ b/htmlcov/timelaps_migrations_0005_auto_20190112_0907_py.html @@ -0,0 +1,125 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0005_auto_20190112_0907.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 09:07 

+

 

+

from django.db import migrations 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0004_auto_20190112_0906'), 

+

] 

+

 

+

operations = [ 

+

migrations.RenameField( 

+

model_name='driver', 

+

old_name='last_name', 

+

new_name='name', 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0006_auto_20190112_0912_py.html b/htmlcov/timelaps_migrations_0006_auto_20190112_0912_py.html new file mode 100644 index 0000000..8c48e73 --- /dev/null +++ b/htmlcov/timelaps_migrations_0006_auto_20190112_0912_py.html @@ -0,0 +1,145 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0006_auto_20190112_0912.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 09:12 

+

 

+

from django.db import migrations 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0005_auto_20190112_0907'), 

+

] 

+

 

+

operations = [ 

+

migrations.RenameField( 

+

model_name='teampilot', 

+

old_name='pilot', 

+

new_name='pilot_id', 

+

), 

+

migrations.RenameField( 

+

model_name='teampilot', 

+

old_name='race', 

+

new_name='race_id', 

+

), 

+

migrations.RenameField( 

+

model_name='teampilot', 

+

old_name='team', 

+

new_name='team_id', 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0007_auto_20190112_0930_py.html b/htmlcov/timelaps_migrations_0007_auto_20190112_0930_py.html new file mode 100644 index 0000000..64f45f6 --- /dev/null +++ b/htmlcov/timelaps_migrations_0007_auto_20190112_0930_py.html @@ -0,0 +1,143 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0007_auto_20190112_0930.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 09:30 

+

 

+

from django.db import migrations, models 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0006_auto_20190112_0912'), 

+

] 

+

 

+

operations = [ 

+

migrations.RenameField( 

+

model_name='driver', 

+

old_name='name', 

+

new_name='last_name', 

+

), 

+

migrations.RemoveField( 

+

model_name='relay', 

+

name='team_pilot_id', 

+

), 

+

migrations.AddField( 

+

model_name='relay', 

+

name='team_pilot_id', 

+

field=models.ManyToManyField(to='timelaps.TeamPilot'), 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0008_auto_20190112_0934_py.html b/htmlcov/timelaps_migrations_0008_auto_20190112_0934_py.html new file mode 100644 index 0000000..512508f --- /dev/null +++ b/htmlcov/timelaps_migrations_0008_auto_20190112_0934_py.html @@ -0,0 +1,137 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0008_auto_20190112_0934.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 09:34 

+

 

+

from django.db import migrations, models 

+

import django.db.models.deletion 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0007_auto_20190112_0930'), 

+

] 

+

 

+

operations = [ 

+

migrations.RemoveField( 

+

model_name='relay', 

+

name='team_pilot_id', 

+

), 

+

migrations.AddField( 

+

model_name='relay', 

+

name='team_pilot_id', 

+

field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='timelaps.TeamPilot'), 

+

preserve_default=False, 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0009_auto_20190112_0938_py.html b/htmlcov/timelaps_migrations_0009_auto_20190112_0938_py.html new file mode 100644 index 0000000..4153134 --- /dev/null +++ b/htmlcov/timelaps_migrations_0009_auto_20190112_0938_py.html @@ -0,0 +1,155 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0009_auto_20190112_0938.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 09:38 

+

 

+

from django.db import migrations, models 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0008_auto_20190112_0934'), 

+

] 

+

 

+

operations = [ 

+

migrations.AlterField( 

+

model_name='race', 

+

name='end_date', 

+

field=models.DateTimeField(null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='race', 

+

name='start_date', 

+

field=models.DateTimeField(), 

+

), 

+

migrations.AlterField( 

+

model_name='relay', 

+

name='relay_end', 

+

field=models.DateTimeField(null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='relay', 

+

name='relay_start', 

+

field=models.DateTimeField(), 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0010_auto_20190112_1005_py.html b/htmlcov/timelaps_migrations_0010_auto_20190112_1005_py.html new file mode 100644 index 0000000..b6f327a --- /dev/null +++ b/htmlcov/timelaps_migrations_0010_auto_20190112_1005_py.html @@ -0,0 +1,145 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0010_auto_20190112_1005.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 10:05 

+

 

+

from django.db import migrations 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0009_auto_20190112_0938'), 

+

] 

+

 

+

operations = [ 

+

migrations.RenameField( 

+

model_name='teampilot', 

+

old_name='pilot_id', 

+

new_name='pilot', 

+

), 

+

migrations.RenameField( 

+

model_name='teampilot', 

+

old_name='race_id', 

+

new_name='race', 

+

), 

+

migrations.RenameField( 

+

model_name='teampilot', 

+

old_name='team_id', 

+

new_name='team', 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0011_auto_20190112_1017_py.html b/htmlcov/timelaps_migrations_0011_auto_20190112_1017_py.html new file mode 100644 index 0000000..cf7b276 --- /dev/null +++ b/htmlcov/timelaps_migrations_0011_auto_20190112_1017_py.html @@ -0,0 +1,125 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0011_auto_20190112_1017.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 10:17 

+

 

+

from django.db import migrations 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0010_auto_20190112_1005'), 

+

] 

+

 

+

operations = [ 

+

migrations.RenameField( 

+

model_name='relay', 

+

old_name='team_pilot_id', 

+

new_name='team_pilot', 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations_0012_auto_20190112_1019_py.html b/htmlcov/timelaps_migrations_0012_auto_20190112_1019_py.html new file mode 100644 index 0000000..330fc54 --- /dev/null +++ b/htmlcov/timelaps_migrations_0012_auto_20190112_1019_py.html @@ -0,0 +1,255 @@ + + + + + + + + + + + Coverage for timelaps/migrations/0012_auto_20190112_1019.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

41

+

42

+

43

+

44

+

45

+

46

+

47

+

48

+

49

+

50

+

51

+

52

+

53

+

54

+

55

+

56

+

57

+

58

+

59

+

60

+

61

+

62

+

63

+

64

+

65

+

66

+

67

+

68

+

69

+

70

+

71

+

72

+

73

+

74

+

75

+

76

+

77

+

78

+

79

+

80

+

81

+

82

+

83

+ +
+

# Generated by Django 2.1.5 on 2019-01-12 10:19 

+

 

+

from django.db import migrations, models 

+

 

+

 

+

class Migration(migrations.Migration): 

+

 

+

dependencies = [ 

+

('timelaps', '0011_auto_20190112_1017'), 

+

] 

+

 

+

operations = [ 

+

migrations.AlterField( 

+

model_name='driver', 

+

name='first_name', 

+

field=models.CharField(blank=True, default=None, max_length=30, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='driver', 

+

name='last_name', 

+

field=models.CharField(blank=True, default=None, max_length=30, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='race', 

+

name='comment', 

+

field=models.CharField(blank=True, default=None, max_length=256, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='race', 

+

name='end_date', 

+

field=models.DateTimeField(blank=True, default=None, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='race', 

+

name='name', 

+

field=models.CharField(blank=True, default=None, max_length=30, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='race', 

+

name='start_date', 

+

field=models.DateTimeField(blank=True, default=None, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='relay', 

+

name='comment', 

+

field=models.CharField(blank=True, default=None, max_length=256, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='relay', 

+

name='pilot_chrono', 

+

field=models.IntegerField(blank=True, default=None, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='relay', 

+

name='relay_end', 

+

field=models.DateTimeField(blank=True, default=None, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='rules', 

+

name='max_driving_duration', 

+

field=models.IntegerField(blank=True, default=None, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='rules', 

+

name='min_stand_duration', 

+

field=models.IntegerField(blank=True, default=None, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='rules', 

+

name='relay_default_duration', 

+

field=models.IntegerField(blank=True, default=None, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='team', 

+

name='name', 

+

field=models.CharField(blank=True, default=None, max_length=30, null=True), 

+

), 

+

migrations.AlterField( 

+

model_name='teampilot', 

+

name='order', 

+

field=models.IntegerField(blank=True, default=None, null=True), 

+

), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_migrations___init___py.html b/htmlcov/timelaps_migrations___init___py.html new file mode 100644 index 0000000..0f250ec --- /dev/null +++ b/htmlcov/timelaps_migrations___init___py.html @@ -0,0 +1,89 @@ + + + + + + + + + + + Coverage for timelaps/migrations/__init__.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+ + + +
+
+ + + + + diff --git a/htmlcov/timelaps_models_py.html b/htmlcov/timelaps_models_py.html new file mode 100644 index 0000000..24e35ca --- /dev/null +++ b/htmlcov/timelaps_models_py.html @@ -0,0 +1,233 @@ + + + + + + + + + + + Coverage for timelaps/models.py: 92% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

41

+

42

+

43

+

44

+

45

+

46

+

47

+

48

+

49

+

50

+

51

+

52

+

53

+

54

+

55

+

56

+

57

+

58

+

59

+

60

+

61

+

62

+

63

+

64

+

65

+

66

+

67

+

68

+

69

+

70

+

71

+

72

+ +
+

# -*- coding: utf-8 -*- 

+

from __future__ import unicode_literals 

+

 

+

from django.db import models 

+

 

+

# Create your models here. 

+

 

+

class Team(models.Model): 

+

# Name of the team 

+

name = models.CharField(max_length=30, default=None, blank=True, null=True) 

+

 

+

def __str__(self): 

+

return self.name 

+

 

+

 

+

class Driver(models.Model): 

+

# Name of the pilot 

+

first_name = models.CharField(max_length=30, default=None, blank=True, null=True) 

+

last_name = models.CharField(max_length=30, default=None, blank=True, null=True) 

+

 

+

def __str__(self): 

+

return self.last_name 

+

 

+

class Rules(models.Model): 

+

#Minimum time in the pitlane 

+

min_stand_duration = models.IntegerField(default=None, blank=True, null=True) 

+

#Maximum autonomy of the kart in dry condition (In seconds) 

+

max_autonomy_dry = models.IntegerField() 

+

#Maximum autonomy of the kart in wet condition (In seconds) 

+

max_autonomy_wet = models.IntegerField() 

+

#Maximum driving time by driver(In seconds) 

+

max_driving_duration = models.IntegerField(default=None, blank=True, null=True) 

+

#Start and end date of the race 

+

relay_default_duration = models.IntegerField(default=None, blank=True, null=True) 

+

 

+

class Race(models.Model): 

+

# Name of the race 

+

name = models.CharField(max_length=30, default=None, blank=True, null=True) 

+

#Start and end date of the race 

+

start_date = models.DateTimeField(default=None, blank=True, null=True) 

+

end_date = models.DateTimeField(default=None, blank=True, null=True) 

+

#Lenth of th race in seconds 

+

duration = models.IntegerField() 

+

#Link to the rules of the race 

+

fk_rules = models.ForeignKey(Rules, on_delete=models.CASCADE) 

+

#Comment the race 

+

comment = models.CharField(max_length=256, default=None, blank=True, null=True) 

+

 

+

def __str__(self): 

+

return self.name 

+

 

+

class TeamPilot(models.Model): 

+

# Foreign keys to the team pilot and race 

+

team = models.ForeignKey(Team, on_delete=models.CASCADE) 

+

pilot = models.ForeignKey(Driver, on_delete=models.CASCADE) 

+

race = models.ForeignKey(Race, on_delete=models.CASCADE) 

+

order = models.IntegerField(default=None, blank=True, null=True) 

+

 

+

 

+

class Relay(models.Model): 

+

# Name of the team 

+

team_pilot = models.ForeignKey(TeamPilot, on_delete=models.CASCADE) 

+

#Starting timestamp for the relay 

+

relay_start = models.DateTimeField() 

+

#ending timestamp for the relay 

+

relay_end = models.DateTimeField(default=None, blank=True, null=True) 

+

#Does the pilot did refuel 

+

has_refuel = models.BooleanField(default=False) 

+

#Average chrono for the pulot on this relay 

+

pilot_chrono = models.IntegerField(default=None, blank=True, null=True) 

+

#comment the relay 

+

comment = models.CharField(max_length=256, default=None, blank=True, null=True) 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_serializers_py.html b/htmlcov/timelaps_serializers_py.html new file mode 100644 index 0000000..b0d8a9b --- /dev/null +++ b/htmlcov/timelaps_serializers_py.html @@ -0,0 +1,175 @@ + + + + + + + + + + + Coverage for timelaps/serializers.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

41

+

42

+

43

+ +
+

from rest_framework import serializers 

+

from .models import * 

+

 

+

class DriverSerializer(serializers.ModelSerializer): 

+

class Meta: 

+

model = Driver 

+

fields = '__all__' 

+

 

+

class RaceSerializer(serializers.ModelSerializer): 

+

class Meta: 

+

model = Race 

+

fields = '__all__' 

+

 

+

class RelaySerializer(serializers.ModelSerializer): 

+

class Meta: 

+

model = Relay 

+

fields = '__all__' 

+

 

+

class RulesSerializer(serializers.ModelSerializer): 

+

class Meta: 

+

model = Rules 

+

fields = '__all__' 

+

 

+

class TeamSerializer(serializers.ModelSerializer): 

+

class Meta: 

+

model = Team 

+

fields = '__all__' 

+

 

+

class TeamPilotSerializer(serializers.ModelSerializer): 

+

class Meta: 

+

model = TeamPilot 

+

fields = '__all__' 

+

 

+

class RelayPilotSerializer(serializers.ModelSerializer): 

+

class Meta: 

+

model = Relay 

+

#fields = ('relay_start','relay_end','has_refuel','pilot_chrono','comment','team_pilot','race') 

+

fields = '__all__' 

+

''' 

+

To get linked elements référenced by a foreign key, use depth to adjust the depth of the request. 

+

''' 

+

depth = 2 

+

 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_tests_py.html b/htmlcov/timelaps_tests_py.html new file mode 100644 index 0000000..42ab515 --- /dev/null +++ b/htmlcov/timelaps_tests_py.html @@ -0,0 +1,185 @@ + + + + + + + + + + + Coverage for timelaps/tests.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

41

+

42

+

43

+

44

+

45

+

46

+

47

+

48

+ +
+

# -*- coding: utf-8 -*- 

+

from __future__ import unicode_literals 

+

 

+

from django.test import TestCase 

+

 

+

# Create your tests here. 

+

from django.urls import reverse 

+

from rest_framework.test import APITestCase, APIClient 

+

from rest_framework.views import status 

+

from .models import * 

+

from .serializers import DriverSerializer 

+

 

+

""" 

+

# tests for views 

+

class BaseViewTest(APITestCase): 

+

client = APIClient() 

+

 

+

@staticmethod 

+

def create_song(title="", artist=""): 

+

if title != "" and artist != "": 

+

Songs.objects.create(title=title, artist=artist) 

+

 

+

def setUp(self): 

+

# add test data 

+

self.create_song("like glue", "sean paul") 

+

self.create_song("simple song", "konshens") 

+

self.create_song("love is wicked", "brick and lace") 

+

self.create_song("jam rock", "damien marley") 

+

 

+

 

+

class GetAllSongsTest(BaseViewTest): 

+

 

+

def test_get_all_songs(self): 

+

 

+

#This test ensures that all songs added in the setUp method 

+

#exist when we make a GET request to the songs/ endpoint 

+

 

+

# hit the API endpoint 

+

response = self.client.get( 

+

reverse("songs-all", kwargs={"version": "v1"}) 

+

) 

+

# fetch the data from db 

+

expected = Songs.objects.all() 

+

serialized = SongsSerializer(expected, many=True) 

+

self.assertEqual(response.data, serialized.data) 

+

self.assertEqual(response.status_code, status.HTTP_200_OK) 

+

 

+

""" 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_urls_py.html b/htmlcov/timelaps_urls_py.html new file mode 100644 index 0000000..eb57ff4 --- /dev/null +++ b/htmlcov/timelaps_urls_py.html @@ -0,0 +1,115 @@ + + + + + + + + + + + Coverage for timelaps/urls.py: 100% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+ +
+

from django.urls import path 

+

from django.conf.urls import url 

+

from .views import * 

+

 

+

urlpatterns = [ 

+

path('drivers/', ListDriverView.as_view()), 

+

path('races/', ListRaceView.as_view()), 

+

path('relays/', ListRelayView.as_view()), 

+

path('rules/', ListRulesView.as_view()), 

+

path('teams/', ListTeamView.as_view()), 

+

path('teampilots/', ListTeamPilotView.as_view()), 

+

url('race/(?P<raceid>\d+)/team/(?P<teamid>\d+)/relays', ListRelaysByRaceView.as_view()), 

+

] 

+ +
+
+ + + + + diff --git a/htmlcov/timelaps_views_py.html b/htmlcov/timelaps_views_py.html new file mode 100644 index 0000000..e491a4c --- /dev/null +++ b/htmlcov/timelaps_views_py.html @@ -0,0 +1,223 @@ + + + + + + + + + + + Coverage for timelaps/views.py: 88% + + + + + + + + + + + + +
+ Hide keyboard shortcuts +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

41

+

42

+

43

+

44

+

45

+

46

+

47

+

48

+

49

+

50

+

51

+

52

+

53

+

54

+

55

+

56

+

57

+

58

+

59

+

60

+

61

+

62

+

63

+

64

+

65

+

66

+

67

+ +
+

# -*- coding: utf-8 -*- 

+

from __future__ import unicode_literals 

+

 

+

from django.shortcuts import render 

+

from rest_framework import generics 

+

from .models import * 

+

from .serializers import * 

+

 

+

 

+

# Create your views here. 

+

 

+

class ListDriverView(generics.ListAPIView): 

+

""" 

+

Provides a get method handler. 

+

""" 

+

queryset = Driver.objects.all() 

+

serializer_class = DriverSerializer 

+

 

+

class ListRaceView(generics.ListAPIView): 

+

"""  

+

Provides a get method handler. 

+

""" 

+

queryset = Race.objects.all() 

+

serializer_class = RaceSerializer 

+

 

+

class ListRelayView(generics.ListAPIView): 

+

"""  

+

Provides a get method handler. 

+

""" 

+

queryset = Relay.objects.all() 

+

serializer_class = RelaySerializer 

+

 

+

class ListRulesView(generics.ListAPIView): 

+

"""  

+

Provides a get method handler. 

+

""" 

+

queryset = Rules.objects.all() 

+

serializer_class = RulesSerializer 

+

 

+

class ListTeamView(generics.ListAPIView): 

+

"""  

+

Provides a get method handler. 

+

""" 

+

queryset = Team.objects.all() 

+

serializer_class = TeamSerializer 

+

 

+

class ListTeamPilotView(generics.ListAPIView): 

+

"""  

+

Provides a get method handler. 

+

""" 

+

queryset = TeamPilot.objects.all() 

+

serializer_class = TeamPilotSerializer 

+

 

+

class ListRelaysByRaceView(generics.ListAPIView): 

+

''' 

+

Getting the params from the url with the "self.kwargs.get"  

+

and filter with thoses in the relays relation 

+

''' 

+

serializer_class = RelayPilotSerializer 

+

lookup_url_raceid = "raceid" 

+

lookup_url_teamid = "teamid" 

+

 

+

def get_queryset(self): 

+

raceid = self.kwargs.get(self.lookup_url_raceid) 

+

teamid = self.kwargs.get(self.lookup_url_teamid) 

+

relays = Relay.objects.filter(team_pilot__team=teamid).filter(team_pilot__race=raceid) 

+

return relays 

+ +
+
+ + + + + diff --git a/timelaps/__pycache__/serializers.cpython-36.pyc b/timelaps/__pycache__/serializers.cpython-36.pyc index f3ebb663ecd36df6ab9a26b24cc5f1a425ed9166..84b25436ad0ace3af5972a1645244efe24c42c12 100644 GIT binary patch delta 24 gcmdllykD5pn3tDp<~N&|O&d9%axk(?e$R0M0A{TSe2@xb-83l9W^uMRQ6mcBG@++}&eW z_LP@A@<8a#tVCfGEr%sBG;djQM5yMGNRqEt;Dh}c_D@2 zz@$blTySlsOmoBm@HGd7P8Uxe?*5dnkI7UDUKuR%wPB{!JNoNM&#mzc1m2u;5KM}9 z4)>!$7Zt^-H7)R>06Sn;Kq!Yw_C%_*Ops zC$9zHXb7yAuW&M{yI3E(&=8@rB`~xGHhf=Zsxn!b&GsHXW<*`-%m~FLYjnXH iaY!=Tsvb9QU3iW5t>ia$5IEkCkAx&sVld~U>L51o7 delta 104 zcmaFN{DRTNn3tF9jEZSYEdv9?V<3hDCLqfJh>K-_L<&O+V-7sW=u}yAg^kM^a)E{2n3tD}pWAjLyC)L>A@u`c delta 16 Xcmcb>a)E{2n3tDJ>x<1sc26b%C?f=9 diff --git a/timelaps/__pycache__/views.cpython-36.pyc b/timelaps/__pycache__/views.cpython-36.pyc index 633f3a84a48c9d3d1c72b8e7be4514aadd0a89c1..381ccc247760f8e5d3c80837b096b614f60f3b18 100644 GIT binary patch delta 239 zcmbOvJWYhln3tF9_cxmu7WR!?kJ#!}7#J8*8KM|d7^0X`7^9d|S)y1|n4;KHn4{QJ zSW;M97@{~**n$}}*>8#XWEPhMrRF477CTi2B_^kaWu}%_m2)WofqQC6NoHQULP1CHE7Nr;KrKehzC@FvqNX$!7NXyJA zNiBk@%`Z+ZR>;f)>nZ}