--- a/.hgignore Fri Nov 16 18:12:05 2012 +0100
+++ b/.hgignore Tue Jun 17 10:25:33 2014 +0200
@@ -26,4 +26,8 @@
syntax: regexp
^web/hdalab/\.htaccess$
syntax: regexp
-^\.settings$
\ No newline at end of file
+^\.settings$
+syntax: regexp
+^run$
+syntax: regexp
+^src/hdabo/config\.py$
\ No newline at end of file
--- a/.settings/org.eclipse.core.resources.prefs Fri Nov 16 18:12:05 2012 +0100
+++ b/.settings/org.eclipse.core.resources.prefs Tue Jun 17 10:25:33 2014 +0200
@@ -1,48 +1,48 @@
eclipse.preferences.version=1
encoding//data/villes.csv=ISO-8859-1
-encoding//web/hdabo/forms.py=utf-8
-encoding//web/hdabo/management/commands/clean_tags.py=utf-8
-encoding//web/hdabo/management/commands/diff_csv.py=utf-8
-encoding//web/hdabo/management/commands/import_csv.py=utf-8
-encoding//web/hdabo/management/commands/import_tag_popularity.py=utf-8
-encoding//web/hdabo/management/commands/query_wikipedia.py=utf-8
-encoding//web/hdabo/management/utils.py=utf-8
-encoding//web/hdabo/migrations/0001_initial.py=utf-8
-encoding//web/hdabo/migrations/0002_backport_hdabo_sf.py=utf-8
-encoding//web/hdabo/migrations/0003_update_redirection.py=utf-8
-encoding//web/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py=utf-8
-encoding//web/hdabo/models.py=utf-8
-encoding//web/hdabo/search/french_whoosh_backend.py=utf-8
-encoding//web/hdabo/tests/models.py=utf-8
-encoding//web/hdabo/utils.py=utf-8
-encoding//web/hdabo/views.py=utf-8
-encoding//web/hdabo/wp_utils.py=utf-8
-encoding//web/hdalab/__init__.py=utf-8
+encoding//src/hdabo/forms.py=utf-8
+encoding//src/hdabo/management/commands/clean_tags.py=utf-8
+encoding//src/hdabo/management/commands/diff_csv.py=utf-8
+encoding//src/hdabo/management/commands/import_csv.py=utf-8
+encoding//src/hdabo/management/commands/import_tag_popularity.py=utf-8
+encoding//src/hdabo/management/commands/query_wikipedia.py=utf-8
+encoding//src/hdabo/management/utils.py=utf-8
+encoding//src/hdabo/migrations/0001_initial.py=utf-8
+encoding//src/hdabo/migrations/0002_backport_hdabo_sf.py=utf-8
+encoding//src/hdabo/migrations/0003_update_redirection.py=utf-8
+encoding//src/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py=utf-8
+encoding//src/hdabo/models.py=utf-8
+encoding//src/hdabo/search/french_whoosh_backend.py=utf-8
+encoding//src/hdabo/tests/models.py=utf-8
+encoding//src/hdabo/utils.py=utf-8
+encoding//src/hdabo/views.py=utf-8
+encoding//src/hdabo/wp_utils.py=utf-8
+encoding//src/hdalab/__init__.py=utf-8
+encoding//src/hdalab/manage.py=utf-8
+encoding//src/hdalab/management/commands/export_tags_csv.py=utf-8
+encoding//src/hdalab/management/commands/export_wpcategory_csv.py=utf-8
+encoding//src/hdalab/management/commands/fill_tag_years.py=utf-8
+encoding//src/hdalab/management/commands/geojson_transform.py=utf-8
+encoding//src/hdalab/management/commands/import_hda_insee_csv.py=utf-8
+encoding//src/hdalab/management/commands/import_hdabo_db.py=utf-8
+encoding//src/hdalab/management/commands/import_insee_csv.py=utf-8
+encoding//src/hdalab/management/commands/query_category_inclusion.py=utf-8
+encoding//src/hdalab/management/commands/query_dbpedia.py=utf-8
+encoding//src/hdalab/management/commands/query_geo_inclusion.py=utf-8
+encoding//src/hdalab/management/commands/query_wikipedia_category.py=utf-8
+encoding//src/hdalab/management/utils.py=utf-8
+encoding//src/hdalab/migrations/0001_initial.py=utf-8
+encoding//src/hdalab/migrations/0002_dataviz.py=utf-8
+encoding//src/hdalab/migrations/0003_hdasession.py=utf-8
+encoding//src/hdalab/migrations/0005_rename_end_year.py=utf-8
+encoding//src/hdalab/migrations/0006_dbpedia_fields_one_to_one.py=utf-8
+encoding//src/hdalab/migrations/0007_geographic_inclusion.py=utf-8
+encoding//src/hdalab/migrations/0008_datasheet_insee.py=utf-8
+encoding//src/hdalab/models/dataviz.py=utf-8
+encoding//src/hdalab/settings.py=utf-8
+encoding//src/hdalab/urls.py=utf-8
+encoding//src/hdalab/utils.py=utf-8
+encoding//src/hdalab/views/ajax.py=utf-8
+encoding//src/hdalab/views/pages.py=utf-8
encoding//web/hdalab/config.py=utf-8
-encoding//web/hdalab/manage.py=utf-8
-encoding//web/hdalab/management/commands/export_tags_csv.py=utf-8
-encoding//web/hdalab/management/commands/export_wpcategory_csv.py=utf-8
encoding//web/hdalab/management/commands/fill_country_codes.py=utf-8
-encoding//web/hdalab/management/commands/fill_tag_years.py=utf-8
-encoding//web/hdalab/management/commands/geojson_transform.py=utf-8
-encoding//web/hdalab/management/commands/import_hda_insee_csv.py=utf-8
-encoding//web/hdalab/management/commands/import_hdabo_db.py=utf-8
-encoding//web/hdalab/management/commands/import_insee_csv.py=utf-8
-encoding//web/hdalab/management/commands/query_category_inclusion.py=utf-8
-encoding//web/hdalab/management/commands/query_dbpedia.py=utf-8
-encoding//web/hdalab/management/commands/query_geo_inclusion.py=utf-8
-encoding//web/hdalab/management/commands/query_wikipedia_category.py=utf-8
-encoding//web/hdalab/management/utils.py=utf-8
-encoding//web/hdalab/migrations/0001_initial.py=utf-8
-encoding//web/hdalab/migrations/0002_dataviz.py=utf-8
-encoding//web/hdalab/migrations/0003_hdasession.py=utf-8
-encoding//web/hdalab/migrations/0005_rename_end_year.py=utf-8
-encoding//web/hdalab/migrations/0006_dbpedia_fields_one_to_one.py=utf-8
-encoding//web/hdalab/migrations/0007_geographic_inclusion.py=utf-8
-encoding//web/hdalab/migrations/0008_datasheet_insee.py=utf-8
-encoding//web/hdalab/models/dataviz.py=utf-8
-encoding//web/hdalab/settings.py=utf-8
-encoding//web/hdalab/urls.py=utf-8
-encoding//web/hdalab/utils.py=utf-8
-encoding//web/hdalab/views/ajax.py=utf-8
-encoding//web/hdalab/views/pages.py=utf-8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/.htaccess.mod_python.tmpl Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,11 @@
+SetHandler python-program
+PythonHandler ldt.core.handlers.modpython
+SetEnv DJANGO_SETTINGS_MODULE ldtplatform.settings
+PythonInterpreter platform
+PythonOption django.root /~wakimd/platform/ldtplatform
+PythonOption virtualenv.activate_path /iridata/users/wakimd/Env/Efculture/bin/activate_this.py
+PythonDebug on
+PythonPath "['/iridata/users/wakimd/Env/Efculture/lib/python2.6/sites-packages'] + sys.path"
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/.htaccess.mod_wsgi.tmpl Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,20 @@
+
+SetEnv DJANGO_SETTINGS_MODULE hdabo.settings
+SetEnv PROJECT_PATH /Users/ymh/dev/workspace/hdabo/web
+SetEnv PYTHON_PATH /Users/ymh/dev/workspace/hdabo/virtualenv/web/env/hdabo/lib/python2.6/site-packages:/Applications/Dev/eclipse/plugins/org.python.pydev.debug_2.2.0.2011062419/pysrc/
+SetEnv PYDEV_DEBUG False
+
+Options ExecCGI FollowSymLinks
+SetHandler wsgi-script
+
+#if defined in global definition
+#defined with WSGIDaemonProcess
+#WSGIProcessGroup platform
+
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^(.*)$ /~ymh/hdabo/hdabo/modwsgi.wsgi/$1 [QSA,PT,L]
+
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/__init__.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,16 @@
+VERSION = (2, 13, 0, "final", 0)
+
+
+def get_version():
+ version = '%s.%s' % (VERSION[0], VERSION[1])
+ if VERSION[2]:
+ version = '%s.%s' % (version, VERSION[2])
+ if VERSION[3:] == ('alpha', 0):
+ version = '%s pre-alpha' % version
+ else:
+ if VERSION[3] != 'final':
+ version = '%s %s %s' % (version, VERSION[3], VERSION[4])
+ return version
+
+
+__version__ = get_version()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/admin.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,16 @@
+from django.contrib import admin
+from hdabo.models import (Author, Datasheet, DocumentFormat, Domain, Organisation,
+ Tag, TagCategory, TaggedSheet, TimePeriod)
+
+
+admin.site.register(Author)
+admin.site.register(Datasheet)
+admin.site.register(DocumentFormat)
+admin.site.register(Domain)
+admin.site.register(Organisation)
+admin.site.register(Tag)
+admin.site.register(TagCategory)
+admin.site.register(TaggedSheet)
+admin.site.register(TimePeriod)
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/config.py.tmpl Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,47 @@
+import os
+
+BASE_DIR = os.path.dirname(os.path.abspath(__file__)).rstrip("/")+"/"
+BASE_URL = '/~ymh/hdabo/'
+WEB_URL = 'http://localhost'
+
+# Absolute filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = os.path.abspath(BASE_DIR + "../static/media/")
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = BASE_URL + "static/media/"
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = os.path.abspath(BASE_DIR + "../static/site/")
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = BASE_URL + "static/site/"
+
+# Additional locations of static files
+STATICFILES_DIRS = (
+ # Put strings here, like "/home/html/static" or "C:/www/django/static".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+)
+
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+ 'NAME': 'hdabo', # Or path to database file if using sqlite3.
+ 'USER': 'iri', # Not used with sqlite3.
+ 'PASSWORD': 'iri', # Not used with sqlite3.
+ 'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
+ 'PORT': '5432', # Set to empty string for default. Not used with sqlite3.
+ }
+}
+
+HAYSTACK_SEARCH_ENGINE = 'whoosh'
+HAYSTACK_WHOOSH_PATH = os.path.abspath(BASE_DIR + "../index/").rstrip("/")+"/"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/context_processors.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,5 @@
+import hdabo
+
+def version(request):
+ return { 'VERSION': hdabo.get_version() }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/django_wsgi.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,9 @@
+import os
+
+import django.core.handlers.wsgi
+
+application = django.core.handlers.wsgi.WSGIHandler()
+
+if os.environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
+ import pydevd #@UnresolvedImport
+ pydevd.settrace(suspend=False)
Binary file src/hdabo/fixtures/datasheet_10.yaml.bz2 has changed
Binary file src/hdabo/fixtures/datasheet_347.yaml.bz2 has changed
Binary file src/hdabo/fixtures/datasheet_all.yaml.bz2 has changed
Binary file src/hdabo/fixtures/initial_data.yaml.bz2 has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/forms.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+from django import forms
+from django.db.models.query import QuerySet
+
+
+class SortedMultipleChoiceField(forms.ModelMultipleChoiceField):
+ def clean(self, value):
+ queryset = super(SortedMultipleChoiceField, self).clean(value)
+ if value is None or not isinstance(queryset, QuerySet):
+ return queryset
+ object_list = dict((
+ (unicode(key), value)
+ for key, value in queryset.in_bulk(value).iteritems()))
+ return [object_list[unicode(pk)] for pk in value]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/clean_tags.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jun 20, 2012
+
+@author: ymh
+'''
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from django.db import transaction,connection
+from django.db.models import Count
+from hdabo.models import Tag
+from hdabo.utils import show_progress
+from optparse import make_option
+import math
+import sys
+
+
+class Command(NoArgsCommand):
+ '''
+ remove orphan tags and merge duplicates (the key is the dbpedia uri)
+ '''
+
+
+ def handle_noargs(self, **options):
+ '''
+ do the work
+ '''
+
+ # merge duplicate tags
+ cursor = connection.cursor()
+ cursor.execute("select label, dbpedia_uri from hdabo_tag group by label,dbpedia_uri having count(label) > 1")
+
+ for label,_ in cursor:
+ qs = Tag.objects.filter(label=label).annotate(num_ds=Count('datasheet')).order_by('-num_ds')
+ ref_tag = None
+ for t in qs:
+ print("label : %d : %s, num_ds: %d"%(t.id,t.label, t.num_ds))
+ if ref_tag is None:
+ ref_tag = t
+ else:
+ for ts in t.taggedsheet_set.all():
+ pass
+ print("changing tag %d to %d" %(ts.tag.id, ref_tag.id) )
+ ts.tag = ref_tag
+ ts.save()
+
+ # remove ophans tags
+
+ orphans_tags = Tag.objects.annotate(num_ds=Count('datasheet')).filter(num_ds=0)
+
+ print("nb Orphans : %d" % orphans_tags.count())
+
+ #delete
+ orphans_tags.delete()
+
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/diff_csv.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,147 @@
+# -*- coding: utf-8 -*-
+'''
+Created on May 25, 2011
+
+@author: ymh
+'''
+#Auteur,Chemin,Comment,Controle,Datcre,Datmaj,Desc,Domaine,Format,ID,Insee,Org,Org_Home,OrgID,Periode1,Periode2,Periode3,Satut,Sousdom,Tag,Theme2,Theme3,Titre,Url,Vignette,Ville
+#"Auteur","Chemin","Comment","Controle","Datcre","Datmaj","Desc","Domaine","Format","ID","Insee","Org","Org_Home","OrgID","Periode1","Periode2","Periode3","Satut","Sousdom","Tag","Theme2","Theme3","Titre","Url","Vignette","Ville",
+
+from django.core.management.base import BaseCommand, CommandError
+from django.db import transaction
+from hdabo.models import Datasheet
+from optparse import make_option
+import csv
+import math
+import sys
+
+class Command(BaseCommand):
+ '''
+ Command to diff datasheets content from csv content
+ '''
+ args = '<path_to_csv_file path_to_csv_file ...>'
+ options = '[--do-delete] [--encoding] [--delimiter] [--dialect]'
+ help = """Import of a csv file for hdabo
+Options:
+ --do-delete : ignore existing datasheets
+ --encoding : files encoding. default to latin-1
+ --delimiter : scv delimiter
+ --dialect : csv dialect
+ --fieldnames : csv columns
+ """
+
+ option_list = BaseCommand.option_list + (
+ make_option('--encoding',
+ action='store',
+ type='string',
+ dest='encoding',
+ default="latin-1",
+ help='fix the file encoding. default to latin-1'),
+ make_option('--delimiter',
+ action='store',
+ type='string',
+ dest='delimiter',
+ default=";",
+ help='csv file delimiter'),
+ make_option('--dialect',
+ action='store',
+ type='string',
+ dest='dialect',
+ default="excel",
+ help='csv dialect'),
+ make_option('--fieldnames',
+ action='store',
+ type='string',
+ dest='fieldnames',
+ default=None,
+ help='fields list (comma separated)'),
+ make_option('--do-delete',
+ action='store_true',
+ dest='do_delete',
+ default=False,
+ help='delete datasheets'),
+
+ )
+
+ def show_progress(self, current_line, total_line, width):
+
+ percent = (float(current_line) / float(total_line)) * 100.0
+
+ marks = math.floor(width * (percent / 100.0))
+ spaces = math.floor(width - marks)
+
+ loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
+
+ sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
+ if percent >= 100:
+ sys.stdout.write("\n")
+ sys.stdout.flush()
+
+
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0:
+ raise CommandError("Gives at lat one csv file to import")
+
+ self.encoding = options.get('encoding', "latin-1")
+ self.do_delete = options.get('do_delete', False)
+ fieldnames = options.get('fieldnames', None)
+
+ for csv_path in args:
+ print "Processing %s " % (csv_path)
+ with open(csv_path, 'rU') as csv_file:
+
+ # get the number of lines if necessary
+ for i, l in enumerate(csv_file): #@UnusedVariable
+ pass
+ total_line = i + 1
+ if fieldnames:
+ total_line = total_line + 1
+ csv_file.seek(0)
+
+ delimiter = options.get('delimiter', ";")
+ if delimiter == "TAB" or delimiter == "\\t":
+ delimiter = '\t'
+
+ dr_kwargs = {'delimiter':delimiter}
+ if fieldnames is not None:
+ dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
+ dialect = options.get('dialect', "excel")
+ if dialect is not None:
+ dr_kwargs['dialect'] = dialect
+
+ reader = csv.DictReader(csv_file, **dr_kwargs)
+
+ ids = []
+
+ for row in reader:
+ line_num = reader.line_num if fieldnames is None else reader.line_num + 1
+ self.show_progress(line_num, total_line, 60)
+ def safe_decode(val, encoding):
+ if val:
+ return val.decode(encoding)
+ else:
+ return val
+
+ row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
+
+ ids.append(row['ID'])
+
+ qs = Datasheet.objects.exclude(hda_id__in = ids).order_by("hda_id")
+
+ qs_count = qs.count()
+
+ if qs_count == 0:
+ print("No datasheet to delete : exit")
+ return
+
+ print("The following datasheets are in the database and not in the csv file")
+ for i,ds in enumerate(qs):
+ print("%*d- %4s : %s" % (len(str(qs_count+1)), i+1, ds.hda_id, ds.title.strip() if ds.title is not None else ""))
+
+
+ if self.do_delete:
+ print("deleting datasheets")
+ qs.delete()
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/import_csv.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,267 @@
+# -*- coding: utf-8 -*-
+'''
+Created on May 25, 2011
+
+@author: ymh
+'''
+#Auteur,Chemin,Comment,Controle,Datcre,Datmaj,Desc,Domaine,Format,ID,Insee,Org,Org_Home,OrgID,Periode1,Periode2,Periode3,Satut,Sousdom,Tag,Theme2,Theme3,Titre,Url,Vignette,Ville
+#"Auteur","Chemin","Comment","Controle","Datcre","Datmaj","Desc","Domaine","Format","ID","Insee","Org","Org_Home","OrgID","Periode1","Periode2","Periode3","Satut","Sousdom","Tag","Theme2","Theme3","Titre","Url","Vignette","Ville",
+
+from django.core.management.base import BaseCommand, CommandError
+from django.db import transaction
+from hdabo.models import (Author, Datasheet, DocumentFormat, Domain, Organisation,
+ Tag, TaggedSheet, TimePeriod, Location)
+from hdabo.wp_utils import normalize_tag
+from optparse import make_option
+import csv
+import datetime
+import math
+import sys
+
+class Command(BaseCommand):
+ '''
+ Command to import csvfile
+ '''
+ args = '<path_to_csv_file path_to_csv_file ...>'
+ options = '[--ignore-existing] [--lines] [--encoding]'
+ help = """Import of a csv file for hdabo
+Options:
+ --ignore-existing : ignore existing datasheets
+ --lines : max number of lines to load (for each file). 0 means all.
+ --encoding : files encoding. default to latin-1"""
+
+ option_list = BaseCommand.option_list + (
+ make_option('--encoding',
+ action='store',
+ type='string',
+ dest='encoding',
+ default="latin-1",
+ help='fix the file encoding. default to latin-1'),
+ make_option('--delimiter',
+ action='store',
+ type='string',
+ dest='delimiter',
+ default=";",
+ help='csv file delimiter'),
+ make_option('--dialect',
+ action='store',
+ type='string',
+ dest='dialect',
+ default="excel",
+ help='csv dialect'),
+ make_option('--fieldnames',
+ action='store',
+ type='string',
+ dest='fieldnames',
+ default=None,
+ help='fields list (comma separated)'),
+ make_option('--lines',
+ action='store',
+ type='int',
+ dest='lines',
+ default=0,
+ help='Number of lines to read. 0 means all.'),
+ make_option('--ignore-existing',
+ action='store_true',
+ dest='ignore_existing',
+ default=False,
+ help='force insertion'),
+
+ )
+
+ def show_progress(self, current_line, total_line, width):
+
+ percent = (float(current_line) / float(total_line)) * 100.0
+
+ marks = math.floor(width * (percent / 100.0))
+ spaces = math.floor(width - marks)
+
+ loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
+
+ sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
+ if percent >= 100:
+ sys.stdout.write("\n")
+ sys.stdout.flush()
+
+
+ def create_domain_period(self, row_value, klass, school_period):
+ res_list = []
+ if not row_value:
+ return res_list
+ for label_str in [dstr.strip() for dstr in row_value.split('\x0b')]:
+ if label_str:
+ res_obj, created = klass.objects.get_or_create(label=label_str, school_period=school_period, defaults={"label":label_str, "school_period":school_period}) #@UnusedVariable
+ res_list.append(res_obj)
+ return res_list
+
+ def create_datasheet(self, row):
+
+ if self.ignore_existing and Datasheet.objects.filter(hda_id=row[u"ID"]).count() > 0:
+ return
+
+ author_str = row[u'Auteur']
+ if author_str:
+ author_array = author_str.split(" ")
+ if len(author_array) == 0:
+ firstname = ""
+ lastname = ""
+ elif len(author_array) == 1:
+ firstname = ""
+ lastname = author_array[0]
+ elif len(author_array) == 2:
+ firstname = author_array[0]
+ lastname = author_array[1]
+
+ author, created = Author.objects.get_or_create(hda_id=author_str, defaults={"firstname":firstname, "lastname":lastname}) #@UnusedVariable
+ else:
+ author = None
+
+ org_str = row[u"Org"]
+ if org_str:
+ url_str = row[u'Org_Home']
+ if url_str is not None:
+ url_str = url_str.strip()
+ org, created = Organisation.objects.get_or_create(hda_id=org_str, defaults={"name":org_str, "website" : url_str}) #@UnusedVariable
+ else:
+ org = None
+
+ town_str = row[u"Ville"]
+ if town_str:
+ insee_str = row[u'Insee'].strip() if row[u'Insee'] else row[u'Insee']
+ if len(insee_str) > 5:
+ insee_str = ""
+ loc, created = Location.objects.get_or_create(insee=insee_str, defaults={"name": town_str, "insee": insee_str}) #@UnusedVariable
+ else:
+ loc = None
+
+ format_str = row[u"Format"]
+ if format_str:
+ format, created = DocumentFormat.objects.get_or_create(label=format_str, defaults={"label": format_str}) #@UnusedVariable
+ else:
+ format = None
+
+ domains = self.create_domain_period(row[u"Domaine"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Global'])
+
+ primary_periods = self.create_domain_period(row[u"Periode1"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Primaire'])
+ college_periods = self.create_domain_period(row[u"Periode2"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Collège'])
+ highschool_periods = self.create_domain_period(row[u"Periode3"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Lycée'])
+
+ primary_themes = self.create_domain_period(row[u"Sousdom"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Primaire'])
+ college_themes = self.create_domain_period(row[u"Theme2"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Collège'])
+ highschool_themes = self.create_domain_period(row[u"Theme3"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Lycée'])
+
+ url = row[u"Url"]
+ if url is not None:
+ url = url.strip()
+
+ datasheet = Datasheet.objects.create(
+ hda_id=row[u"ID"],
+ author=author,
+ organisation=org,
+ title=row[u"Titre"],
+ description=row[u"Desc"],
+ url=url,
+ town=loc,
+ format=format,
+ original_creation_date=datetime.datetime.strptime(row[u"Datcre"], "%d/%m/%Y").date(),
+ original_modification_date=datetime.datetime.strptime(row[u"Datmaj"], "%d/%m/%Y").date(),
+ validated=False
+ )
+
+ datasheet.save()
+
+ datasheet.set_domains(domains)
+ datasheet.set_primary_periods(primary_periods)
+ datasheet.set_college_periods(college_periods)
+ datasheet.set_highschool_periods(highschool_periods)
+ datasheet.set_primary_themes(primary_themes)
+ datasheet.set_college_themes(college_themes)
+ datasheet.set_highschool_themes(highschool_themes)
+
+
+ if row[u'Tag']:
+ for i, tag in enumerate([t.strip() for t in row[u'Tag'].split(u";")]):
+ if len(tag) == 0:
+ continue
+ tag_label = normalize_tag(tag)
+ tag_obj = None
+ for t in Tag.objects.filter(label__iexact=tag_label):
+ if tag_obj is None or t.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
+ tag_obj = t
+ if tag_obj.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
+ break
+
+ if tag_obj is None:
+ tag_obj = Tag(label=tag_label, original_label=tag)
+ tag_obj.save()
+
+ tagged_ds = TaggedSheet(datasheet=datasheet, tag=tag_obj, original_order=i + 1, order=i + 1)
+ tagged_ds.save()
+
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0:
+ raise CommandError("Gives at lat one csv file to import")
+
+ self.encoding = options.get('encoding', "latin-1")
+ lines = options.get('lines', 0)
+ self.ignore_existing = options.get('ignore_existing', False)
+ fieldnames = options.get('fieldnames', None)
+
+ transaction.commit_unless_managed()
+ transaction.enter_transaction_management()
+ transaction.managed(True)
+
+ try:
+ for csv_path in args:
+ try:
+ print "Processing %s " % (csv_path)
+ with open(csv_path, 'rU') as csv_file:
+
+ # get the number of lines if necessary
+ if not lines:
+ for i, l in enumerate(csv_file): #@UnusedVariable
+ pass
+ total_line = i + 1
+ if fieldnames:
+ total_line = total_line + 1
+ csv_file.seek(0)
+ else:
+ total_line = lines + 1
+
+ delimiter = options.get('delimiter', ";")
+ if delimiter == "TAB" or delimiter == "\\t":
+ delimiter = '\t'
+
+ dr_kwargs = {'delimiter':delimiter}
+ if fieldnames is not None:
+ dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
+ dialect = options.get('dialect', "excel")
+ if dialect is not None:
+ dr_kwargs['dialect'] = dialect
+
+ reader = csv.DictReader(csv_file, **dr_kwargs)
+
+ for j, row in enumerate(reader):
+ if lines and j >= lines:
+ break
+ line_num = reader.line_num if fieldnames is None else reader.line_num + 1
+ self.show_progress(line_num, total_line, 60)
+ def safe_decode(val, encoding):
+ if val:
+ return val.decode(encoding)
+ else:
+ return val
+
+ row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
+ self.create_datasheet(row)
+
+ transaction.commit()
+ except Exception:
+ transaction.rollback()
+ raise
+ finally:
+ print('')
+ finally:
+ transaction.leave_transaction_management()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/import_tag_popularity.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,150 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jun 17, 2011
+
+@author: ymh
+
+command to import tag popularity
+
+'''
+
+from django.core.management.base import BaseCommand, CommandError
+from hdabo.models import Tag
+from hdabo.utils import normalize
+from optparse import make_option
+import csv
+import math
+import sys
+
+
+class Command(BaseCommand):
+ '''
+ Command to import csvfile
+ '''
+ args = '<path_to_csv_file path_to_csv_file ...>'
+ options = '[--ignore-existing] [--lines] [--encoding]'
+ help = """Import of a tag popularity file for hdabo
+Options:
+ --ignore-existing : ignore existing datasheets
+ --lines : max number of lines to load (for each file). 0 means all.
+ --encoding : files encoding. default to latin-1"""
+
+ option_list = BaseCommand.option_list + (
+ make_option('--encoding',
+ action='store',
+ type='string',
+ dest='encoding',
+ default="latin-1",
+ help='fix the file encoding. default to latin-1'),
+ make_option('--delimiter',
+ action='store',
+ type='string',
+ dest='delimiter',
+ default=";",
+ help='csv file delimiter'),
+ make_option('--dialect',
+ action='store',
+ type='string',
+ dest='dialect',
+ default="excel",
+ help='csv dialect'),
+ make_option('--fieldnames',
+ action='store',
+ type='string',
+ dest='fieldnames',
+ default="label,popularity",
+ help='fields list (comma separated)'),
+ make_option('--lines',
+ action='store',
+ type='int',
+ dest='lines',
+ default=0,
+ help='Number of lines to read. 0 means all.'),
+ make_option('--preserve',
+ action='store_true',
+ dest='preserve',
+ default=False,
+ help='preserve'),
+
+
+ )
+
+ def show_progress(self, current_line, total_line, width):
+
+ percent = (float(current_line) / float(total_line)) * 100.0
+
+ marks = math.floor(width * (percent / 100.0))
+ spaces = math.floor(width - marks)
+
+ loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
+
+ sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
+ if percent >= 100:
+ sys.stdout.write("\n")
+ sys.stdout.flush()
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0:
+ raise CommandError("Give one csv file to import")
+ elif len(args) > 1:
+ raise CommandError("Only one file can be imported")
+
+ self.encoding = options.get('encoding', "latin-1")
+ lines = options.get('lines', 0)
+ fieldnames = options.get('fieldnames', "label,popularity")
+
+ csv_path = args[0]
+
+ print("Processing %s " % (csv_path))
+
+ with open(csv_path, 'rU') as csv_file:
+ # get the number of lines if necessary
+ if not lines:
+ for i, l in enumerate(csv_file): #@UnusedVariable
+ pass
+ total_line = i + 1
+ if fieldnames:
+ total_line = total_line + 1
+ csv_file.seek(0)
+ else:
+ total_line = lines + 1
+
+ delimiter = options.get('delimiter', ";")
+ if delimiter == "TAB" or delimiter == "\\t":
+ delimiter = '\t'
+ dr_kwargs = {'delimiter':delimiter}
+ if fieldnames is not None:
+ dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
+ dialect = options.get('dialect', "excel")
+ if dialect is not None:
+ dr_kwargs['dialect'] = dialect
+
+ if not options.get('preserve',False):
+ Tag.objects.update(popularity=0)
+
+ reader = csv.DictReader(csv_file, **dr_kwargs)
+
+ for j, row in enumerate(reader):
+ if lines and j >= lines:
+ break
+ line_num = reader.line_num if fieldnames is None else reader.line_num + 1
+ self.show_progress(line_num, total_line, 60)
+ def safe_decode(val, encoding):
+ if val:
+ return val.decode(encoding)
+ else:
+ return val
+
+ row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
+
+ label = normalize(row['label'].strip())
+ popularity_str = row['popularity']
+
+ if not label or not popularity_str:
+ continue
+
+
+ for tag in Tag.objects.filter(normalized_label=label):
+ tag.popularity = tag.popularity + int(row['popularity'])
+ tag.save()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/order_tags.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,81 @@
+'''
+Created on Jun 7, 2011
+
+@author: ymh
+'''
+
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from django.db import transaction
+from hdabo.models import Datasheet
+from hdabo.wp_utils import reorder_datasheet_tags
+from hdabo.utils import show_progress
+from optparse import make_option
+import math
+import sys
+
+
+class Command(NoArgsCommand):
+ '''
+ Command to calculate the order of tags based on indexation
+ recalculate all tags. Will ask for confirmation
+ '''
+
+ args = ''
+ options = '-f : force '
+ help = "calculate the order of tags based on indexation recalculate all tags. Will ask for confirmation"
+
+ option_list = NoArgsCommand.option_list + (
+ make_option('-f', '--force',
+ action='store_true',
+ dest='force',
+ default=False,
+ help='force reordering of all datasheets'),
+ make_option('--noinput',
+ action='store_true',
+ dest='no_input',
+ default=False,
+ help='no input'),
+ )
+
+
+ def handle_noargs(self, **options):
+
+ self.style = no_style()
+
+ interactive = options.get('interactive', True) and not options.get('no_input', False)
+ force = options.get('force', True)
+
+ if interactive:
+ confirm = raw_input("""You have requested to recalculate the index order of all the tags.
+This will process all the tags in %s datasheets. Are you sure you want to do this ?
+ Type 'yes' to continue, or 'no' to cancel: """ % ("all" if force else "not validated"))
+ else:
+ confirm = 'yes'
+
+ if confirm != "yes":
+ print "Tag reordering cancelled"
+ return
+
+ if force:
+ queryset = Datasheet.objects.all()
+ else:
+ queryset = Datasheet.objects.filter(validated=False, manual_order=False)
+ total = queryset.count()
+
+ transaction.commit_unless_managed()
+ transaction.enter_transaction_management()
+ transaction.managed(True)
+
+ try:
+ for i, ds in enumerate(queryset):
+ show_progress(i + 1, total, ds.title, 60)
+ reorder_datasheet_tags(ds)
+ transaction.commit()
+ except:
+ transaction.rollback()
+ raise
+ finally:
+ transaction.leave_transaction_management()
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/query_wikipedia.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jun 7, 2011
+
+@author: ymh
+'''
+
+from django.conf import settings
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdabo.models import Tag
+from hdabo.wp_utils import process_tag
+from optparse import make_option
+from wikitools import wiki
+import math
+import sys
+
+
+
+class Command(NoArgsCommand):
+ '''
+ query and update wikipedia for tag title.
+ '''
+ options = ''
+ help = """query and update wikipedia for tag title."""
+
+ option_list = NoArgsCommand.option_list + (
+ make_option('--force',
+ action='store_true',
+ dest='force',
+ default=False,
+ help='force all tags to be updated, not only those not yet processed'),
+ make_option('--random',
+ action='store_true',
+ dest='random',
+ default=False,
+ help='randomize query on tags'),
+ make_option('--site',
+ action='store',
+ type='string',
+ dest='site_url',
+ default="http://fr.wikipedia.org/w/api.php",
+ help='the url for the wikipedia site'),
+ make_option('--limit',
+ action='store',
+ type='int',
+ dest='limit',
+ default= -1,
+ help='number of tag to process'),
+ make_option('--start',
+ action='store',
+ type='int',
+ dest='start',
+ default=0,
+ help='number of tag to ignore'),
+ )
+
+ def __is_homonymie(self, page_dict):
+ for cat in page_dict.get(u"categories", []):
+ if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
+ return True
+ return False
+
+ def show_progress(self, current_line, total_line, label, width):
+
+ percent = (float(current_line) / float(total_line)) * 100.0
+
+ marks = math.floor(width * (percent / 100.0))
+ spaces = math.floor(width - marks)
+
+ loader = u'[' + (u'=' * int(marks)) + (u' ' * int(spaces)) + u']'
+
+ sys.stdout.write(u"%s %d%% %d/%d - %r\r" % (loader, percent, current_line - 1, total_line - 1, label[:50].rjust(50))) #takes the header into account
+ if percent >= 100:
+ sys.stdout.write("\n")
+ sys.stdout.flush()
+
+ def handle_noargs(self, **options):
+
+ self.style = no_style()
+
+ interactive = options.get('interactive', True)
+
+ verbosity = int(options.get('verbosity', '1'))
+
+ force = options.get('force', False)
+
+ limit = options.get("limit", -1)
+ start = options.get("start", 0)
+
+ site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
+
+ random = options.get('random', False)
+
+ if verbosity > 2:
+ print "option passed : " + repr(options)
+
+ if force and interactive:
+ confirm = raw_input("""You have requested to query and replace the wikipedia information for all datasheets.
+Are you sure you want to do this ?
+ Type 'yes' to continue, or 'no' to cancel: """)
+ else:
+ confirm = 'yes'
+
+ if confirm != "yes":
+ print "wikipedia query cancelled"
+ return
+
+ if force:
+ queryset = Tag.objects.all()
+ else:
+ queryset = Tag.objects.filter(url_status=None)
+
+ if random:
+ queryset = queryset.order_by("?")
+ else:
+ queryset = queryset.order_by("label")
+
+ if limit >= 0:
+ queryset = queryset[start:limit]
+ else:
+ queryset = queryset[start:]
+
+
+ if verbosity > 2 :
+ print "Tag Query is %s" % (queryset.query)
+
+ site = wiki.Wiki(site_url) #@UndefinedVariable
+
+
+ count = queryset.count()
+ if verbosity > 1:
+ print "Processing %d tags" % (count)
+
+
+
+ for i, tag in enumerate(queryset):
+
+ if verbosity > 1:
+ print "processing tag %s (%d/%d)" % (tag.label, i + 1, count)
+ else:
+ self.show_progress(i + 1, count, tag.label, 60)
+
+ process_tag(site, tag, verbosity)
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/utils.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 2, 2012
+
+@author: ymh
+'''
+
+import cStringIO
+import csv
+import codecs
+
+class UnicodeWriter:
+ """
+ A CSV writer which will write rows to CSV file "f",
+ which is encoded in the given encoding.
+ """
+
+ def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
+ # Redirect output to a queue
+ self.queue = cStringIO.StringIO()
+ self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
+ self.stream = f
+ self.encoder = codecs.getincrementalencoder(encoding)()
+
+ def writerow(self, row):
+ self.writer.writerow([unicode(s).encode("utf-8") for s in row])
+ # Fetch UTF-8 output from the queue ...
+ data = self.queue.getvalue()
+ data = data.decode("utf-8")
+ # ... and reencode it into the target encoding
+ data = self.encoder.encode(data)
+ # write to the target stream
+ self.stream.write(data)
+ # empty queue
+ self.queue.truncate(0)
+
+ def writerows(self, rows):
+ for row in rows:
+ self.writerow(row)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0001_initial.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,436 @@
+#@PydevCodeAnalysisIgnore
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'Organisation'
+ db.create_table('hdabo_organisation', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
+ ('location', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
+ ('website', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
+ ))
+ db.send_create_signal('hdabo', ['Organisation'])
+
+ # Adding model 'Author'
+ db.create_table('hdabo_author', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+ ('lastname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
+ ('firstname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
+ ))
+ db.send_create_signal('hdabo', ['Author'])
+
+ # Adding model 'TimePeriod'
+ db.create_table('hdabo_timeperiod', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(max_length=512)),
+ ('school_period', self.gf('django.db.models.fields.IntegerField')()),
+ ))
+ db.send_create_signal('hdabo', ['TimePeriod'])
+
+ # Adding unique constraint on 'TimePeriod', fields ['label', 'school_period']
+ db.create_unique('hdabo_timeperiod', ['label', 'school_period'])
+
+ # Adding model 'Domain'
+ db.create_table('hdabo_domain', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(max_length=512)),
+ ('school_period', self.gf('django.db.models.fields.IntegerField')()),
+ ))
+ db.send_create_signal('hdabo', ['Domain'])
+
+ # Adding unique constraint on 'Domain', fields ['label', 'school_period']
+ db.create_unique('hdabo_domain', ['label', 'school_period'])
+
+ # Adding model 'DocumentFormat'
+ db.create_table('hdabo_documentformat', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+ ))
+ db.send_create_signal('hdabo', ['DocumentFormat'])
+
+ # Adding model 'TagCategory'
+ db.create_table('hdabo_tagcategory', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+ ))
+ db.send_create_signal('hdabo', ['TagCategory'])
+
+ # Adding model 'Tag'
+ db.create_table('hdabo_tag', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(max_length=1024, db_index=True)),
+ ('normalized_label', self.gf('django.db.models.fields.CharField')(max_length=1024, db_index=True)),
+ ('original_label', self.gf('django.db.models.fields.CharField')(max_length=1024)),
+ ('alias', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
+ ('category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TagCategory'], null=True, blank=True)),
+ ('wikipedia_url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
+ ('wikipedia_pageid', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
+ ('url_status', self.gf('django.db.models.fields.IntegerField')(default=None, null=True, blank=True)),
+ ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
+ ('popularity', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
+ ))
+ db.send_create_signal('hdabo', ['Tag'])
+
+ # Adding unique constraint on 'Tag', fields ['label', 'original_label', 'url_status']
+ db.create_unique('hdabo_tag', ['label', 'original_label', 'url_status'])
+
+ # Adding model 'Location'
+ db.create_table('hdabo_location', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
+ ('insee', self.gf('django.db.models.fields.CharField')(unique=True, max_length=5)),
+ ))
+ db.send_create_signal('hdabo', ['Location'])
+
+ # Adding model 'Datasheet'
+ db.create_table('hdabo_datasheet', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+ ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Author'], null=True, blank=True)),
+ ('organisation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Organisation'])),
+ ('title', self.gf('django.db.models.fields.CharField')(max_length=2048)),
+ ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ('url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
+ ('town', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Location'], null=True, blank=True)),
+ ('format', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.DocumentFormat'], null=True, blank=True)),
+ ('original_creation_date', self.gf('django.db.models.fields.DateField')()),
+ ('original_modification_date', self.gf('django.db.models.fields.DateField')()),
+ ('modification_datetime', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
+ ('validation_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+ ('validated', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
+ ('validator', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)),
+ ('manual_order', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
+ ))
+ db.send_create_signal('hdabo', ['Datasheet'])
+
+ # Adding model 'TaggedSheet'
+ db.create_table('hdabo_taggedsheet', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+ ('tag', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Tag'])),
+ ('original_order', self.gf('django.db.models.fields.IntegerField')(default=0)),
+ ('order', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
+ ('index_note', self.gf('django.db.models.fields.FloatField')(default=0.0, db_index=True)),
+ ('wikipedia_revision_id', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
+ ))
+ db.send_create_signal('hdabo', ['TaggedSheet'])
+
+ # Adding model 'Datasheet_domains'
+ db.create_table('hdabo_datasheet_domains', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+ ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+ ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
+ ))
+ db.send_create_signal('hdabo', ['Datasheet_domains'])
+
+ # Adding model 'Datasheet_highschool_periods'
+ db.create_table('hdabo_datasheet_highschool_periods', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+ ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+ ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
+ ))
+ db.send_create_signal('hdabo', ['Datasheet_highschool_periods'])
+
+ # Adding model 'Datasheet_highschool_themes'
+ db.create_table('hdabo_datasheet_highschool_themes', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+ ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+ ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
+ ))
+ db.send_create_signal('hdabo', ['Datasheet_highschool_themes'])
+
+ # Adding model 'Datasheet_college_periods'
+ db.create_table('hdabo_datasheet_college_periods', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+ ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+ ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
+ ))
+ db.send_create_signal('hdabo', ['Datasheet_college_periods'])
+
+ # Adding model 'Datasheet_college_themes'
+ db.create_table('hdabo_datasheet_college_themes', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+ ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+ ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
+ ))
+ db.send_create_signal('hdabo', ['Datasheet_college_themes'])
+
+ # Adding model 'Datasheet_primary_periods'
+ db.create_table('hdabo_datasheet_primary_periods', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+ ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+ ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
+ ))
+ db.send_create_signal('hdabo', ['Datasheet_primary_periods'])
+
+ # Adding model 'Datasheet_primary_themes'
+ db.create_table('hdabo_datasheet_primary_themes', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+ ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+ ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
+ ))
+ db.send_create_signal('hdabo', ['Datasheet_primary_themes'])
+
+
+ def backwards(self, orm):
+
+ # Removing unique constraint on 'Tag', fields ['label', 'original_label', 'url_status']
+ db.delete_unique('hdabo_tag', ['label', 'original_label', 'url_status'])
+
+ # Removing unique constraint on 'Domain', fields ['label', 'school_period']
+ db.delete_unique('hdabo_domain', ['label', 'school_period'])
+
+ # Removing unique constraint on 'TimePeriod', fields ['label', 'school_period']
+ db.delete_unique('hdabo_timeperiod', ['label', 'school_period'])
+
+ # Deleting model 'Organisation'
+ db.delete_table('hdabo_organisation')
+
+ # Deleting model 'Author'
+ db.delete_table('hdabo_author')
+
+ # Deleting model 'TimePeriod'
+ db.delete_table('hdabo_timeperiod')
+
+ # Deleting model 'Domain'
+ db.delete_table('hdabo_domain')
+
+ # Deleting model 'DocumentFormat'
+ db.delete_table('hdabo_documentformat')
+
+ # Deleting model 'TagCategory'
+ db.delete_table('hdabo_tagcategory')
+
+ # Deleting model 'Tag'
+ db.delete_table('hdabo_tag')
+
+ # Deleting model 'Location'
+ db.delete_table('hdabo_location')
+
+ # Deleting model 'Datasheet'
+ db.delete_table('hdabo_datasheet')
+
+ # Deleting model 'TaggedSheet'
+ db.delete_table('hdabo_taggedsheet')
+
+ # Deleting model 'Datasheet_domains'
+ db.delete_table('hdabo_datasheet_domains')
+
+ # Deleting model 'Datasheet_highschool_periods'
+ db.delete_table('hdabo_datasheet_highschool_periods')
+
+ # Deleting model 'Datasheet_highschool_themes'
+ db.delete_table('hdabo_datasheet_highschool_themes')
+
+ # Deleting model 'Datasheet_college_periods'
+ db.delete_table('hdabo_datasheet_college_periods')
+
+ # Deleting model 'Datasheet_college_themes'
+ db.delete_table('hdabo_datasheet_college_themes')
+
+ # Deleting model 'Datasheet_primary_periods'
+ db.delete_table('hdabo_datasheet_primary_periods')
+
+ # Deleting model 'Datasheet_primary_themes'
+ db.delete_table('hdabo_datasheet_primary_themes')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ }
+ }
+
+ complete_apps = ['hdabo']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0002_backport_hdabo_sf.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,231 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'Tag.alternative_label'
+ db.add_column('hdabo_tag', 'alternative_label', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True), keep_default=False) #@UndefinedVariable
+
+ # Adding field 'Tag.created_at'
+ db.add_column('hdabo_tag', 'created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime.utcnow, blank=True), keep_default=False) #@UndefinedVariable
+
+ # Adding field 'Tag.alternative_wikipedia_url'
+ db.add_column('hdabo_tag', 'alternative_wikipedia_url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True), keep_default=False) #@UndefinedVariable
+
+ # Adding field 'Tag.alternative_wikipedia_pageid'
+ db.add_column('hdabo_tag', 'alternative_wikipedia_pageid', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True), keep_default=False) #@UndefinedVariable
+
+ # Adding field 'TaggedSheet.created_at'
+ db.add_column('hdabo_taggedsheet', 'created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime.utcnow, blank=True), keep_default=False) #@UndefinedVariable
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'Tag.alternative_label'
+ db.delete_column('hdabo_tag', 'alternative_label') #@UndefinedVariable
+
+ # Deleting field 'Tag.created_at'
+ db.delete_column('hdabo_tag', 'created_at') #@UndefinedVariable
+
+ # Deleting field 'Tag.alternative_wikipedia_url'
+ db.delete_column('hdabo_tag', 'alternative_wikipedia_url') #@UndefinedVariable
+
+ # Deleting field 'Tag.alternative_wikipedia_pageid'
+ db.delete_column('hdabo_tag', 'alternative_wikipedia_pageid') #@UndefinedVariable
+
+ # Deleting field 'TaggedSheet.created_at'
+ db.delete_column('hdabo_taggedsheet', 'created_at') #@UndefinedVariable
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ }
+ }
+
+ complete_apps = ['hdabo']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0003_update_redirection.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,221 @@
+# encoding: utf-8
+from south.v2 import DataMigration
+from hdabo import utils, wp_utils
+import sys
+from wikitools import wiki
+
+class Migration(DataMigration):
+
+ def forwards(self, orm):
+ queryset = orm.Tag.objects.filter(url_status=1, alternative_label=None)
+ queryset_count = queryset.count()
+
+ sys.stdout.write("Processing %d tags\n" % (queryset_count))
+ sys.stdout.flush()
+ site = wiki.Wiki("http://fr.wikipedia.org/w/api.php") #@UndefinedVariable
+
+
+ for i,tag in enumerate(queryset):
+ utils.show_progress(i+1, queryset_count, tag.label, 50)
+ wp_res = wp_utils.query_wikipedia_title(site, pageid=tag.wikipedia_pageid)
+ tag.alternative_label = wp_res['alternative_label']
+ tag.alternative_wikipedia_url = wp_res['alternative_wikipedia_url']
+ tag.alternative_wikipedia_pageid = wp_res['alternative_pageid']
+ tag.save()
+
+ sys.stdout.write("\n")
+ sys.stdout.flush()
+
+
+ def backwards(self, orm):
+ pass
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ }
+ }
+
+ complete_apps = ['hdabo']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0004_index_tag.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,238 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding index on 'Tag', fields ['wikipedia_pageid']
+ db.create_index('hdabo_tag', ['wikipedia_pageid'])
+
+ # Adding index on 'Tag', fields ['wikipedia_url']
+ db.create_index('hdabo_tag', ['wikipedia_url'])
+
+ # Adding index on 'Tag', fields ['alternative_wikipedia_url']
+ db.create_index('hdabo_tag', ['alternative_wikipedia_url'])
+
+ # Adding index on 'Tag', fields ['url_status']
+ db.create_index('hdabo_tag', ['url_status'])
+
+ # Adding index on 'Tag', fields ['dbpedia_uri']
+ db.create_index('hdabo_tag', ['dbpedia_uri'])
+
+ # Adding index on 'Tag', fields ['alternative_wikipedia_pageid']
+ db.create_index('hdabo_tag', ['alternative_wikipedia_pageid'])
+
+
+ def backwards(self, orm):
+
+ # Removing index on 'Tag', fields ['alternative_wikipedia_pageid']
+ db.delete_index('hdabo_tag', ['alternative_wikipedia_pageid'])
+
+ # Removing index on 'Tag', fields ['dbpedia_uri']
+ db.delete_index('hdabo_tag', ['dbpedia_uri'])
+
+ # Removing index on 'Tag', fields ['url_status']
+ db.delete_index('hdabo_tag', ['url_status'])
+
+ # Removing index on 'Tag', fields ['alternative_wikipedia_url']
+ db.delete_index('hdabo_tag', ['alternative_wikipedia_url'])
+
+ # Removing index on 'Tag', fields ['wikipedia_url']
+ db.delete_index('hdabo_tag', ['wikipedia_url'])
+
+ # Removing index on 'Tag', fields ['wikipedia_pageid']
+ db.delete_index('hdabo_tag', ['wikipedia_pageid'])
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ }
+ }
+
+ complete_apps = ['hdabo']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,208 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Changing field 'Datasheet.organisation'
+ db.alter_column('hdabo_datasheet', 'organisation_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Organisation'], null=True))
+
+
+ def backwards(self, orm):
+
+ # User chose to not deal with backwards NULL issues for 'Datasheet.organisation'
+ raise RuntimeError("Cannot reverse this migration. 'Datasheet.organisation' and its values cannot be restored.")
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 6, 21, 18, 18, 22, 503161)'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 6, 21, 18, 18, 22, 503032)'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ }
+ }
+
+ complete_apps = ['hdabo']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0006_auto__add_user__chg_field_datasheet_validator.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,250 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'User'
+ db.create_table('auth_user', (
+ (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('password', self.gf('django.db.models.fields.CharField')(max_length=128)),
+ ('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
+ ('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('username', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)),
+ ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
+ ('last_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
+ ('email', self.gf('django.db.models.fields.EmailField')(max_length=75, blank=True)),
+ ('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('is_active', self.gf('django.db.models.fields.BooleanField')(default=True)),
+ ('date_joined', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
+ ))
+ db.send_create_signal(u'hdabo', ['User'])
+
+ # Adding M2M table for field groups on 'User'
+ m2m_table_name = db.shorten_name('auth_user_groups')
+ db.create_table(m2m_table_name, (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('user', models.ForeignKey(orm[u'hdabo.user'], null=False)),
+ ('group', models.ForeignKey(orm[u'auth.group'], null=False))
+ ))
+ db.create_unique(m2m_table_name, ['user_id', 'group_id'])
+
+ # Adding M2M table for field user_permissions on 'User'
+ m2m_table_name = db.shorten_name('auth_user_user_permissions')
+ db.create_table(m2m_table_name, (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('user', models.ForeignKey(orm[u'hdabo.user'], null=False)),
+ ('permission', models.ForeignKey(orm[u'auth.permission'], null=False))
+ ))
+ db.create_unique(m2m_table_name, ['user_id', 'permission_id'])
+
+
+ # Changing field 'Datasheet.validator'
+ db.alter_column(u'hdabo_datasheet', 'validator_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.User'], null=True))
+
+ def backwards(self, orm):
+ # Deleting model 'User'
+ db.delete_table('auth_user')
+
+ # Removing M2M table for field groups on 'User'
+ db.delete_table(db.shorten_name('auth_user_groups'))
+
+ # Removing M2M table for field user_permissions on 'User'
+ db.delete_table(db.shorten_name('auth_user_user_permissions'))
+
+
+ # Changing field 'Datasheet.validator'
+ db.alter_column(u'hdabo_datasheet', 'validator_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True))
+
+ models = {
+ u'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ u'auth.permission': {
+ 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ u'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ u'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ u'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_college_periods']", 'to': u"orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_college_themes']", 'to': u"orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_domains']", 'to': u"orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_highschool_periods']", 'to': u"orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_highschool_themes']", 'to': u"orm['hdabo.Domain']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Organisation']", 'null': 'True'}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_primary_periods']", 'to': u"orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_primary_themes']", 'to': u"orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['hdabo.Tag']", 'through': u"orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.User']", 'null': 'True', 'blank': 'True'})
+ },
+ u'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.TimePeriod']"})
+ },
+ u'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Domain']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ u'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Domain']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ u'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.TimePeriod']"})
+ },
+ u'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Domain']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ u'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.TimePeriod']"})
+ },
+ u'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Domain']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ u'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ u'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ u'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ u'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ u'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ u'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ u'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ u'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ u'hdabo.user': {
+ 'Meta': {'object_name': 'User', 'db_table': "'auth_user'"},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ }
+ }
+
+ complete_apps = ['hdabo']
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/models.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,404 @@
+# -*- coding: utf-8 -*-
+
+from django.conf import settings
+from django.contrib.auth.models import User
+from django.db import models
+from hdabo.utils import Property, normalize
+import datetime
+
+
+
+class SortedModelManager(models.Manager):
+ use_for_related_fields = True
+ def get_query_set(self):
+ qs = super(SortedModelManager, self).get_query_set()
+ if getattr(self, 'through', None) is not None and getattr(self.through, 'Meta', None) is not None and getattr(self.through.Meta, 'ordering', None) is not None:
+ qs = qs.order_by(*[self.through._meta.db_table + "." + f for f in self.through.Meta.ordering])
+ return qs
+
+
+class Organisation(models.Model):
+ hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
+ name = models.CharField(max_length=512, unique=False, blank=False, null=False)
+ location = models.CharField(max_length=512, unique=False, blank=True, null=True)
+ website = models.CharField(max_length=2048, unique=False, blank=True, null=True)
+
+class Author(models.Model):
+ hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
+ lastname = models.CharField(max_length=512, unique=False, blank=True, null=True)
+ firstname = models.CharField(max_length=512, unique=False, blank=True, null=True)
+
+class TimePeriod(models.Model):
+ TIME_PERIOD_CHOICES = (
+ (1, u'Primaire'),
+ (2, u'Collège'),
+ (3, u'Lycée'),
+ )
+ TIME_PERIOD_DICT = {
+ u'Primaire': 1,
+ u'Collège': 2,
+ u'Lycée': 3,
+ }
+ label = models.CharField(max_length=512, unique=False, blank=False, null=False)
+ school_period = models.IntegerField(choices=TIME_PERIOD_CHOICES)
+
+ objects = SortedModelManager()
+
+ class Meta:
+ unique_together = ("label", "school_period")
+
+ def __unicode__(self):
+ return unicode(self.label)
+
+class Domain(models.Model):
+ DOMAIN_PERIOD_CHOICES = (
+ (0, u'Global'),
+ (1, u'Primaire'),
+ (2, u'Collège'),
+ (3, u'Lycée'),
+ )
+ DOMAIN_PERIOD_DICT = {
+ u'Global': 0,
+ u'Primaire': 1,
+ u'Collège': 2,
+ u'Lycée': 3,
+ }
+ label = models.CharField(max_length=512, unique=False, blank=False, null=False)
+ school_period = models.IntegerField(choices=DOMAIN_PERIOD_CHOICES)
+
+ objects = SortedModelManager()
+
+ class Meta:
+ unique_together = ("label", "school_period")
+
+ def __unicode__(self):
+ return unicode(self.label)
+
+
+class DocumentFormat(models.Model):
+ label = models.CharField(max_length=512, unique=True, blank=False, null=False)
+
+ def __unicode__(self):
+ return unicode(self.label)
+
+class TagCategory(models.Model):
+ label = models.CharField(max_length=512, unique=True, blank=False, null=False)
+
+ def __unicode__(self):
+ return unicode(self.label)
+
+ class Meta:
+ verbose_name_plural = "TagCategories"
+
+class Tag(models.Model):
+ TAG_URL_STATUS_CHOICES = (
+ (0, "null_result"),
+ (1, "redirection"),
+ (2, "homonyme"),
+ (3, "match"),
+ (4, "unsematized"),
+ )
+
+ TAG_URL_STATUS_DICT = {
+ "null_result":0,
+ "redirection":1,
+ "homonyme":2,
+ "match":3,
+ "unsemantized":4,
+ }
+
+ label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
+ alternative_label = models.CharField(max_length=1024, unique=False, blank=True, null=True)
+ normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False)
+ created_at = models.DateTimeField(auto_now_add=True)
+ original_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, editable=False)
+ alias = models.CharField(max_length=1024, unique=False, blank=True, null=True)
+ category = models.ForeignKey(TagCategory, null=True, blank=True)
+ wikipedia_url = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
+ wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
+ alternative_wikipedia_url = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
+ alternative_wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
+ url_status = models.IntegerField(choices=TAG_URL_STATUS_CHOICES, blank=True, null=True, default=None, db_index=True)
+ dbpedia_uri = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
+ popularity = models.IntegerField(blank=False, null=False, default=0, db_index=True)
+
+ @Property
+ def url_status_text(): #@NoSelf
+ def fget(self):
+ return self.TAG_URL_STATUS_CHOICES[self.url_status][1]
+
+ return locals()
+
+ def save(self, *args, **kwargs):
+ self.normalized_label = normalize(self.label)
+ super(Tag, self).save(*args, **kwargs)
+
+ class Meta:
+ unique_together = (('label', 'original_label', 'url_status'),)
+
+class Location(models.Model):
+ name = models.CharField(max_length=512, unique=False, blank=False, null=False)
+ insee = models.CharField(max_length=5, unique=True, blank=False, null=False)
+
+ def __unicode__(self):
+ return unicode("%s : %s" % (self.name, self.insee))
+
+
+def generate_m2m_setter(m2m_field_name):
+
+ def set_m2m_field(self, list):
+
+ m2m_manager = getattr(self, m2m_field_name)
+ m2m_manager.clear()
+
+ through_klass = set_m2m_field.cache.get('through_klass', None)
+ if through_klass is None:
+ field = getattr(self.__class__, m2m_field_name)
+ through_klass = field.through
+ set_m2m_field.cache['through_klass'] = through_klass
+ for f in through_klass._meta.fields:
+ if isinstance(f, models.ForeignKey) and f.name != "datasheet":
+ set_m2m_field.cache['target_obj_field_name'] = f.name
+ break
+ target_obj_field_name = set_m2m_field.cache['target_obj_field_name']
+
+ for i, obj in enumerate(list):
+ kwargs = {
+ 'datasheet': self,
+ 'sort_value' : i,
+ target_obj_field_name: obj
+ }
+ new_rel = through_klass(**kwargs)
+ new_rel.save()
+ set_m2m_field.cache = {}
+
+ return set_m2m_field
+
+
+class Datasheet(models.Model):
+ hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
+ author = models.ForeignKey(Author, null=True, blank=True, serialize=False)
+ organisation = models.ForeignKey(Organisation, serialize=False, null=True)
+ title = models.CharField(max_length=2048, unique=False, blank=False, null=False, serialize=False)
+ description = models.TextField(blank=True, null=True, serialize=False)
+ url = models.URLField(max_length=2048, blank=True, null=True, serialize=False)
+ domains = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Global']}, related_name="datasheets", through="Datasheet_domains", serialize=False)
+ primary_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Primaire']}, related_name="primary_periods_datasheets", through="Datasheet_primary_periods", serialize=False)
+ college_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Collège']}, related_name="college_periods_datasheets", through="Datasheet_college_periods", serialize=False)
+ highschool_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Lycée']}, related_name="highschool_periods_datasheets", through="Datasheet_highschool_periods", serialize=False)
+ primary_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Primaire']}, related_name="primary_themes_datasheets", through="Datasheet_primary_themes", serialize=False)
+ college_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Collège']}, related_name="college_themes_datasheets", through="Datasheet_college_themes", serialize=False)
+ highschool_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Lycée']}, related_name="highschool_themes_datasheets", through="Datasheet_highschool_themes", serialize=False)
+ town = models.ForeignKey(Location, null=True, blank=True, serialize=False)
+ format = models.ForeignKey(DocumentFormat, null=True, blank=True, serialize=False)
+ original_creation_date = models.DateField(serialize=False)
+ original_modification_date = models.DateField(serialize=False)
+ modification_datetime = models.DateTimeField(auto_now=True, serialize=False)
+ validation_date = models.DateTimeField(null=True, blank=True, serialize=False)
+ validated = models.BooleanField(default=False, db_index=True)
+ validator = models.ForeignKey(User, null=True, blank=True, serialize=False)
+ manual_order = models.BooleanField(default=False, db_index=True, serialize=False)
+ tags = models.ManyToManyField(Tag, through='TaggedSheet', serialize=False)
+
+ def natural_key(self):
+ return self.hda_id
+
+ def validate(self, user):
+ self.validation_date = datetime.datetime.now()
+ self.validated = True
+ self.validator = user
+ self.save()
+
+ def unvalidate(self):
+ self.validation_date = datetime.datetime.min
+ self.validated = False
+ self.validator = None
+ self.save()
+
+
+ set_domains = generate_m2m_setter("domains")
+
+ @Property
+ def domains_list(): #@NoSelf
+ def fget(self):
+ return [d.label for d in self.domains.all()]
+
+ return locals()
+
+ @Property
+ def domains_text(): #@NoSelf
+ def fget(self):
+ return "; ".join(self.domains_list)
+
+ return locals()
+
+
+ set_primary_periods = generate_m2m_setter("primary_periods")
+
+ @Property
+ def primary_periods_list(): #@NoSelf
+ def fget(self):
+ return [d.label for d in self.primary_periods.all()]
+
+ return locals()
+
+
+ @Property
+ def primary_periods_text(): #@NoSelf
+ def fget(self):
+ return "; ".join(self.primary_periods_list)
+
+ return locals()
+
+ set_college_periods = generate_m2m_setter("college_periods")
+
+ @Property
+ def college_periods_list(): #@NoSelf
+ def fget(self):
+ return [d.label for d in self.college_periods.all()]
+
+ return locals()
+
+ @Property
+ def college_periods_text(): #@NoSelf
+ def fget(self):
+ return "; ".join(self.college_periods_list)
+
+ return locals()
+
+ set_highschool_periods = generate_m2m_setter("highschool_periods")
+
+ @Property
+ def highschool_periods_list(): #@NoSelf
+ def fget(self):
+ return [d.label for d in self.highschool_periods.all()]
+
+ return locals()
+
+ @Property
+ def highschool_periods_text(): #@NoSelf
+ def fget(self):
+ return "; ".join(self.highschool_periods_list)
+
+ return locals()
+
+ set_primary_themes = generate_m2m_setter("primary_themes")
+
+ @Property
+ def primary_themes_list(): #@NoSelf
+ def fget(self):
+ return [d.label for d in self.primary_themes.all()]
+
+ return locals()
+
+
+ @Property
+ def primary_themes_text(): #@NoSelf
+ def fget(self):
+ return "; ".join(self.primary_themes_list)
+
+ return locals()
+
+ set_college_themes = generate_m2m_setter("college_themes")
+
+ @Property
+ def college_themes_list(): #@NoSelf
+ def fget(self):
+ return [d.label for d in self.college_themes.all()]
+
+ return locals()
+
+ @Property
+ def college_themes_text(): #@NoSelf
+ def fget(self):
+ return "; ".join(self.college_themes_list)
+
+ return locals()
+
+ set_highschool_themes = generate_m2m_setter("highschool_themes")
+
+ @Property
+ def highschool_themes_list(): #@NoSelf
+ def fget(self):
+ return [d.label for d in self.highschool_themes.all()]
+
+ return locals()
+
+ @Property
+ def highschool_themes_text(): #@NoSelf
+ def fget(self):
+ return "; ".join(self.highschool_themes_list)
+
+ return locals()
+
+ @Property
+ def town_text(): #@NoSelf
+ def fget(self):
+ return self.town.name if self.town else ""
+
+ return locals()
+
+ @Property
+ def tags_text(): #@NoSelf
+ def fget(self):
+ return "; ".join([t.label for t in self.tags.all()])
+
+ return locals()
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('display_datasheet', (), {
+ 'ds_id': self.hda_id
+ })
+
+
+class TaggedSheet(models.Model):
+ datasheet = models.ForeignKey(Datasheet)
+ tag = models.ForeignKey(Tag)
+ created_at = models.DateTimeField(auto_now_add=True)
+ original_order = models.IntegerField(null=False, blank=False, default=0)
+ order = models.IntegerField(null=False, blank=False, default=0, db_index=True)
+ index_note = models.FloatField(null=False, blank=False, default=0.0, db_index=True)
+ wikipedia_revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
+
+ @Property
+ def wikipedia_verion_permalink(): #@NoSelf
+ def fget(self):
+ return settings.WIKIPEDIA_VERSION_PERMALINK_TEMPLATE % (unicode(self.wikipedia_revision_id))
+
+ return locals()
+
+
+class SortedDatasheetLink(models.Model):
+ datasheet = models.ForeignKey(Datasheet, db_index=True, null=False, blank=False)
+ sort_value = models.IntegerField(null=False, blank=False)
+
+ class Meta:
+ abstract = True
+ ordering = ['sort_value']
+
+
+class Datasheet_domains(SortedDatasheetLink):
+ domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
+
+class Datasheet_highschool_periods(SortedDatasheetLink):
+ timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
+
+class Datasheet_highschool_themes(SortedDatasheetLink):
+ domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
+
+class Datasheet_college_periods(SortedDatasheetLink):
+ timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
+
+class Datasheet_college_themes(SortedDatasheetLink):
+ domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
+
+class Datasheet_primary_periods(SortedDatasheetLink):
+ timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
+
+class Datasheet_primary_themes(SortedDatasheetLink):
+ domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
+
+
+
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/modwsgi.wsgi Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,34 @@
+import os, sys, site
+
+def application(environ, start_response):
+
+ global g_env_set
+
+ if 'g_env_set' not in globals() or not g_env_set:
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE',environ['DJANGO_SETTINGS_MODULE'])
+
+ prev_sys_path = list(sys.path)
+
+ sys.path.append(environ['PROJECT_PATH'])
+ for path in environ.get('PYTHON_PATH',"").split(os.pathsep):
+ if path:
+ site.addsitedir(path)
+
+ new_sys_path = []
+ for item in list(sys.path):
+ if item not in prev_sys_path and item not in new_sys_path:
+ new_sys_path.append(item)
+ sys.path.remove(item)
+ sys.path[:0] = new_sys_path
+ g_env_set = True
+
+ import django.core.handlers.wsgi
+
+ _application = django.core.handlers.wsgi.WSGIHandler()
+
+ if environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
+ import pydevd #@UnresolvedImport
+ pydevd.settrace(suspend=False)
+
+ return _application(environ, start_response)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/search/french_whoosh_backend.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,209 @@
+# -*- coding: utf-8 -*-
+'''
+
+Adaptation of Haystack' Swoosh backend with french snowball stemming
+
+Created on May 31, 2011
+
+@author: ymh
+'''
+
+from django.conf import settings
+from django.db.models.loading import get_model
+from haystack.backends.whoosh_backend import (
+ SearchBackend as WhooshSearchBackend, SearchQuery as WhooshSearchQuery)
+from haystack.constants import ID, DJANGO_CT, DJANGO_ID
+from haystack.exceptions import SearchBackendError
+from haystack.models import SearchResult
+from whoosh.analysis import (default_pattern, stem, RegexTokenizer,
+ LowercaseFilter, StopFilter, PyStemmerFilter)
+from whoosh.fields import (ID as WHOOSH_ID, Schema, IDLIST, TEXT, KEYWORD,
+ NUMERIC, BOOLEAN, DATETIME, NGRAM, NGRAMWORDS)
+
+BACKEND_NAME = 'french_whoosh'
+
+STOP_WORDS = [ u"a", u"afin", u"ai", u"ainsi", u"après", u"attendu", u"au",
+u"aujourd", u"auquel", u"aussi", u"autre", u"autres", u"aux", u"auxquelles",
+u"auxquels", u"avait", u"avant", u"avec", u"avoir", u"c", u"car", u"ce",
+u"ceci", u"cela", u"celle", u"celles", u"celui", u"cependant", u"certain",
+u"certaine", u"certaines", u"certains", u"ces", u"cet", u"cette", u"ceux",
+u"chez", u"ci", u"combien", u"comme", u"comment", u"concernant", u"contre",
+u"d", u"dans", u"je", u"de", u"jusqu", u"debout", u"jusque", u"dedans", u"l",
+u"dehors", u"la", u"delà", u"laquelle", u"depuis", u"le", u"derrière",
+u"lequel", u"des", u"les", u"desquelles", u"lesquelles", u"desquels",
+u"lesquels", u"dessous", u"leur", u"dessus", u"leurs", u"devant", u"lorsque",
+u"devers", u"lui", u"devra", u"là", u"divers", u"ma", u"diverse", u"mais",
+u"diverses", u"malgré", u"doit", u"me", u"donc", u"merci", u"dont", u"mes",
+u"du", u"mien", u"duquel", u"mienne", u"durant", u"miennes", u"dès", u"miens",
+u"elle", u"moi", u"elles", u"moins", u"en", u"mon", u"entre", u"moyennant",
+u"environ", u"même", u"est", u"mêmes", u"et", u"n", u"etc", u"ne", u"etre",
+u"ni", u"eux", u"non", u"excepté", u"nos", u"hormis", u"notre", u"hors",
+u"nous", u"hélas", u"néanmoins", u"hui", u"nôtre", u"il", u"nôtres", u"ils",
+u"on", u"j", u"out", u"ou", u"soit", u"outre", u"son", u"où", u"sont", u"par",
+u"sous", u"parmi", u"suivant", u"partant", u"sur", u"pas", u"ta", u"passé",
+u"te", u"pendant", u"tes", u"plein", u"tien", u"plus", u"tienne", u"plusieurs",
+u"tiennes", u"pour", u"tiens", u"pourquoi", u"toi", u"proche", u"ton", u"près",
+u"tous", u"puisque", u"tout", u"qu", u"toute", u"quand", u"toutes", u"que",
+u"tu", u"quel", u"un", u"quelle", u"une", u"quelles", u"va", u"quels", u"vers",
+u"qui", u"voici", u"quoi", u"voilà", u"quoique", u"vos", u"revoici", u"votre",
+u"revoilà", u"vous", u"s", u"vu", u"sa", u"vôtre", u"sans", u"vôtres",
+u"sauf", u"y", u"se", u"à", u"selon", u"ça", u"seront", u"ès", u"ses",
+u"été", u"si", u"être", u"sien", u"ô", u"sienne", u"siennes", u"siens",
+u"sinon", u"soi"]
+
+def FrenchStemmingAnalyzer(expression=default_pattern, stoplist=STOP_WORDS,
+ minsize=2, maxsize=None, gaps=False, stemfn=stem,
+ ignore=None, cachesize=50000):
+ """Composes a RegexTokenizer with a lower case filter, an optional stop
+ filter, and a stemming filter.
+
+ >>> ana = StemmingAnalyzer()
+ >>> [token.text for token in ana(u"Testing is testing and testing")]
+ [u"test", u"test", u"test"]
+
+ :param expression: The regular expression pattern to use to extract tokens.
+ :param stoplist: A list of stop words. Set this to None to disable
+ the stop word filter.
+ :param minsize: Words smaller than this are removed from the stream.
+ :param maxsize: Words longer that this are removed from the stream.
+ :param gaps: If True, the tokenizer *splits* on the expression, rather
+ than matching on the expression.
+ :param ignore: a set of words to not stem.
+ :param cachesize: the maximum number of stemmed words to cache. The larger
+ this number, the faster stemming will be but the more memory it will
+ use.
+ """
+
+ ret = RegexTokenizer(expression=expression, gaps=gaps)
+ chain = ret | LowercaseFilter()
+ if stoplist is not None:
+ chain = chain | StopFilter(stoplist=stoplist, minsize=minsize,
+ maxsize=maxsize)
+ return chain | PyStemmerFilter(lang="french", ignore=ignore, cachesize=cachesize)
+FrenchStemmingAnalyzer.__inittypes__ = dict(expression=unicode, gaps=bool,
+ stoplist=list, minsize=int, maxsize=int)
+
+
+class SearchBackend(WhooshSearchBackend):
+ '''
+ Adaptation of Haystack' Swoosh backend with french snowball stemming
+ '''
+
+ def build_schema(self, fields):
+ schema_fields = {
+ ID: WHOOSH_ID(stored=True, unique=True),
+ DJANGO_CT: WHOOSH_ID(stored=True),
+ DJANGO_ID: WHOOSH_ID(stored=True),
+ }
+ # Grab the number of keys that are hard-coded into Haystack.
+ # We'll use this to (possibly) fail slightly more gracefully later.
+ initial_key_count = len(schema_fields)
+ content_field_name = ''
+
+ for field_name, field_class in fields.items(): #@UnusedVariable
+ if field_class.is_multivalued:
+ if field_class.indexed is False:
+ schema_fields[field_class.index_fieldname] = IDLIST(stored=True, field_boost=field_class.boost)
+ else:
+ schema_fields[field_class.index_fieldname] = KEYWORD(stored=True, commas=True, scorable=True, field_boost=field_class.boost)
+ elif field_class.field_type in ['date', 'datetime']:
+ schema_fields[field_class.index_fieldname] = DATETIME(stored=field_class.stored)
+ elif field_class.field_type == 'integer':
+ schema_fields[field_class.index_fieldname] = NUMERIC(stored=field_class.stored, type=int, field_boost=field_class.boost)
+ elif field_class.field_type == 'float':
+ schema_fields[field_class.index_fieldname] = NUMERIC(stored=field_class.stored, type=float, field_boost=field_class.boost)
+ elif field_class.field_type == 'boolean':
+ # Field boost isn't supported on BOOLEAN as of 1.8.2.
+ schema_fields[field_class.index_fieldname] = BOOLEAN(stored=field_class.stored)
+ elif field_class.field_type == 'ngram':
+ schema_fields[field_class.index_fieldname] = NGRAM(minsize=3, maxsize=15, stored=field_class.stored, field_boost=field_class.boost)
+ elif field_class.field_type == 'edge_ngram':
+ schema_fields[field_class.index_fieldname] = NGRAMWORDS(minsize=2, maxsize=15, stored=field_class.stored, field_boost=field_class.boost)
+ else:
+ schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=FrenchStemmingAnalyzer(), field_boost=field_class.boost)
+
+ if field_class.document is True:
+ content_field_name = field_class.index_fieldname
+
+ # Fail more gracefully than relying on the backend to die if no fields
+ # are found.
+ if len(schema_fields) <= initial_key_count:
+ raise SearchBackendError("No fields were found in any search_indexes. Please correct this before attempting to search.")
+
+ return (content_field_name, Schema(**schema_fields))
+
+ def _process_results(self, raw_page, highlight=False, query_string='', spelling_query=None, result_class=None):
+ if not self.site:
+ from haystack import site
+ else:
+ site = self.site
+
+ results = []
+
+ # It's important to grab the hits first before slicing. Otherwise, this
+ # can cause pagination failures.
+ hits = len(raw_page)
+
+ if result_class is None:
+ result_class = SearchResult
+
+ facets = {}
+ spelling_suggestion = None
+ indexed_models = site.get_indexed_models()
+
+ for doc_offset, raw_result in enumerate(raw_page):
+ score = raw_page.score(doc_offset) or 0
+ app_label, model_name = raw_result[DJANGO_CT].split('.')
+ additional_fields = {}
+ model = get_model(app_label, model_name)
+
+ if model and model in indexed_models:
+ for key, value in raw_result.items():
+ index = site.get_index(model)
+ string_key = str(key)
+
+ if string_key in index.fields and hasattr(index.fields[string_key], 'convert'):
+ # Special-cased due to the nature of KEYWORD fields.
+ if index.fields[string_key].is_multivalued:
+ if value is None or len(value) is 0:
+ additional_fields[string_key] = []
+ else:
+ additional_fields[string_key] = value.split(',')
+ else:
+ additional_fields[string_key] = index.fields[string_key].convert(value)
+ else:
+ additional_fields[string_key] = self._to_python(value)
+
+ del(additional_fields[DJANGO_CT])
+ del(additional_fields[DJANGO_ID])
+
+ if highlight:
+ from whoosh.highlight import highlight, ContextFragmenter, UppercaseFormatter
+ sa = FrenchStemmingAnalyzer()
+ terms = [term.replace('*', '') for term in query_string.split()]
+
+ additional_fields['highlighted'] = {
+ self.content_field_name: [highlight(additional_fields.get(self.content_field_name), terms, sa, ContextFragmenter(terms), UppercaseFormatter())],
+ }
+
+ result = result_class(app_label, model_name, raw_result[DJANGO_ID], score, searchsite=self.site, **additional_fields)
+ results.append(result)
+ else:
+ hits -= 1
+
+ if getattr(settings, 'HAYSTACK_INCLUDE_SPELLING', False):
+ if spelling_query:
+ spelling_suggestion = self.create_spelling_suggestion(spelling_query)
+ else:
+ spelling_suggestion = self.create_spelling_suggestion(query_string)
+
+ return {
+ 'results': results,
+ 'hits': hits,
+ 'facets': facets,
+ 'spelling_suggestion': spelling_suggestion,
+ }
+
+class SearchQuery(WhooshSearchQuery):
+ pass
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/search/sites.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,7 @@
+'''
+Created on May 27, 2011
+
+@author: ymh
+'''
+import haystack
+haystack.autodiscover()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/search_indexes.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,24 @@
+'''
+Created on May 30, 2011
+
+@author: ymh
+'''
+
+#from haystack import site
+#from haystack.indexes import SearchIndex, CharField
+from haystack import indexes
+from hdabo.models import Datasheet
+
+class DatasheetIndex(indexes.SearchIndex, indexes.Indexable):
+ '''
+ The search index for the datasheet
+ '''
+ text = indexes.CharField(document=True, use_template=True)
+ hda_id = indexes.CharField(model_attr='hda_id', indexed=True, stored=True)
+ title = indexes.CharField(model_attr='title', indexed=True, stored=True, boost=2.0)
+ description = indexes.CharField(model_attr='description', indexed=True, stored=True, boost=1.0)
+
+ def get_model(self):
+ return Datasheet
+
+#site.register(Datasheet, DatasheetIndex)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/settings.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,147 @@
+# Django settings for hdabo project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+ # ('Your Name', 'your_email@example.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+ 'NAME': '', # Or path to database file if using sqlite3.
+ 'USER': '', # Not used with sqlite3.
+ 'PASSWORD': '', # Not used with sqlite3.
+ 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
+ 'PORT': '', # Set to empty string for default. Not used with sqlite3.
+ }
+}
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'America/Chicago'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'en-us'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# If you set this to False, Django will not format dates, numbers and
+# calendars according to the current locale
+USE_L10N = True
+
+# Absolute filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = ''
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = ''
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = ''
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = '/static/site'
+
+# Additional locations of static files
+STATICFILES_DIRS = (
+ # Put strings here, like "/home/html/static" or "C:/www/django/static".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+)
+
+# List of finder classes that know how to find static files in
+# various locations.
+STATICFILES_FINDERS = (
+ 'django.contrib.staticfiles.finders.FileSystemFinder',
+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
+)
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = '1anp2v#36%z(pahi5ytghik&-eg8t96)&$t)b%i=7@%=)u$pyn'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
+# 'django.template.loaders.eggs.Loader',
+)
+
+# List of processors used by RequestContext to populate the context.
+# Each one should be a callable that takes the request object as its
+# only parameter and returns a dictionary to add to the context.
+TEMPLATE_CONTEXT_PROCESSORS = (
+ 'django.contrib.auth.context_processors.auth',
+ 'django.core.context_processors.debug',
+ 'django.core.context_processors.i18n',
+ 'django.core.context_processors.media',
+ 'django.core.context_processors.static',
+ 'django.contrib.messages.context_processors.messages',
+ 'hdabo.context_processors.version',
+)
+
+MIDDLEWARE_CLASSES = (
+ 'django.middleware.common.CommonMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+)
+
+ROOT_URLCONF = 'hdabo.urls'
+
+TEMPLATE_DIRS = (
+ # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+)
+
+INSTALLED_APPS = (
+ 'south',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'django.contrib.admin',
+ 'django_extensions',
+ 'haystack',
+ 'hdabo',
+)
+
+
+WIKIPEDIA_API_URL = "http://fr.wikipedia.org/w/api.php"
+WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s"
+DBPEDIA_URI_TEMPLATE = "http://dbpedia.org/resource/%s"
+
+SEARCH_STAR_CHARACTER = "*"
+PAGINATION_DEFAULT_NB_BY_PAGE = 50
+
+from hdabo.config import * #@UnusedWildImport
+
+if 'LOGIN_REDIRECT_URL' not in locals():
+ LOGIN_REDIRECT_URL = BASE_URL + "hdabo"
+if 'LOGIN_URL' not in locals():
+ LOGIN_URL = BASE_URL + "hdabo/accounts/login"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/css/nyroModal.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,102 @@
+.nyroModalBg {
+ position: fixed;
+ overflow: hidden;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background: #000;
+ opacity: 0.7;
+}
+.nmReposition {
+ position: absolute;
+}
+.nyroModalCloseButton {
+ top: -13px;
+ right: -13px;
+ width: 12px;
+ height: 12px;
+ text-indent: -9999em;
+ background: url(../img/close_nm.gif);
+}
+.nyroModalTitle {
+ top: -26px;
+ left: 0;
+ margin: 0;
+ font-size: 1.1em;
+ color: #ddd;
+}
+.nyroModalCont {
+ position: absolute;
+ border: 4px solid #777;
+ margin: 25px;
+ background: #fff;
+}
+.nyroModalCont iframe {
+ width: 600px;
+ height: 400px;
+}
+.nyroModalError {
+ border: 4px solid red;
+ color: red;
+ width: 250px;
+ height: 250px;
+}
+.nyroModalError div {
+ min-width: 0;
+ min-height: 0;
+ padding: 10px;
+}
+.nyroModalLink, .nyroModalDom, .nyroModalForm, .nyroModalFormFile {
+ position: relative;
+ padding: 10px;
+ min-height: 250px;
+ min-width: 250px;
+ max-width: 1000px;
+}
+.nyroModalImage, .nyroModalSwf, .nyroModalIframe, .nyroModalIframeForm {
+ position: relative;
+ overflow: hidden;
+}
+.nyroModalHidden {
+ left: -9999em;
+ top: -9999em;
+}
+.nyroModalLoad {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: #fff url(../img/ajax-loader-43x43.gif) no-repeat center;
+ padding: 0;
+}
+.nyroModalPrev, .nyroModalNext {
+ outline: none;
+ position: absolute;
+ top: 0;
+ height: 60%;
+ width: 150px;
+ min-height: 50px;
+ max-height: 300px;
+ cursor: pointer;
+ text-indent: -9999em;
+ background: transparent url('data:image/gif;base64,AAAA') left 20% no-repeat;
+}
+.nyroModalImage .nyroModalPrev, .nyroModalImage .nyroModalNext {
+ height: 100%;
+ width: 40%;
+ max-height: none;
+}
+.nyroModalPrev {
+ left: 0;
+}
+.nyroModalPrev:hover {
+ background-image: url(../img/prev.gif);
+}
+.nyroModalNext {
+ right: 0;
+ background-position: right 20%;
+}
+.nyroModalNext:hover {
+ background-position: right 20%;
+ background-image: url(../img/next.gif);
+}
\ No newline at end of file
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_222222_256x240.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_2e83ff_256x240.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_454545_256x240.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_888888_256x240.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_cd0a0a_256x240.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/css/smoothness/jquery-ui-1.8.13.custom.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,578 @@
+/*
+ * jQuery UI CSS Framework 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Arial,Verdana,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,Verdana,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
+ * jQuery UI Resizable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;
+ /* http://bugs.jqueryui.com/ticket/7233
+ - Resizable: resizable handles fail to work in IE if transparent and content overlaps
+ */
+ background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=);
+}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Accordion 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.13
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+ list-style:none;
+ padding: 2px;
+ margin: 0;
+ display:block;
+ float: left;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+ margin:0;
+ padding: 0;
+ zoom: 1;
+ float: left;
+ clear: left;
+ width: 100%;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration:none;
+ display:block;
+ padding:.2em .4em;
+ line-height:1.5;
+ zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Dialog 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Slider 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}/*
+ * jQuery UI Progressbar 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/css/style.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,419 @@
+@charset "UTF-8";
+
+body {
+
+ font-family: Arial, Helvetica, sans serif;
+ font-size: 12px;
+ color: #4F5155;
+ margin: 5px;
+ padding: 0px;
+ min-width:750px;
+ text-align: justify;
+}
+body p {
+ margin: 2px;
+}
+
+a img,a:link img, a:active img, a:visited img, a:hover img {
+ border:0px;
+}
+
+
+a:link
+{
+ color: #50a4a3;
+ text-decoration: none;
+ font-family: Arial, Helvetica, sans-serif;
+ /*font-weight: bold;*/
+}
+
+a:hover
+{
+ color: #50a4a3;
+ text-decoration: none;
+ font-family: Arial, Helvetica, sans-serif;
+ /*border-bottom-width: 1px;
+ border-bottom-style: dashed;
+ border-bottom-color: #2c8084;
+ font-weight: bold;*/
+}
+a:visited {
+ color: #50a4a3;
+ font-family: Arial, Helvetica, sans-serif;
+ /*font-weight: bold;*/
+}
+
+.hda_blue{
+ /*color: #97fefd;*/
+ color: #86e6e5;
+}
+
+
+#header
+{
+ padding: .2em;
+ border-bottom: 1px solid gray;
+ border-left: 1px solid gray;
+}
+
+#header a
+{
+ text-decoration: none;
+}
+
+
+#header_left
+{
+ padding: 0px;
+ max-width: 8em;
+ font-size: 30px;
+ font-weight : bold;
+ text-align: left;
+ text-transform: uppercase;
+}
+
+#header_left p
+{
+ margin: 0px;
+}
+
+
+#header_left a:hover, #header_left a:visited, #header_left a:link, #header_left a:active, #header_left a:focus
+{
+ color: #4F5155;
+ text-decoration: none;
+}
+
+
+#header_right
+{
+ text-align: right;
+}
+
+#header_right a:link
+{
+ text-decoration: none;
+ color: white;
+}
+
+#header_right a:hover
+{
+ text-decoration: none;
+ color: white;
+}
+
+#header_right a:visited {
+ text-decoration: none;
+ color: white;
+}
+
+
+#footer
+{
+ clear: both;
+ margin: 0;
+ padding: .5em;
+ /*background-color: #ddd;*/
+ border-top: 1px solid gray;
+}
+
+.version
+{
+ text-align: right;
+ color: white;
+ font-size:9px;
+}
+
+.version:hover
+{
+ color: #2c8084;
+ text-decoration: none;
+ font-weight: bold;
+ border-bottom-width: 0px;
+ border-bottom-style: none;
+}
+
+.small
+{
+ font-size:9px;
+}
+
+.footer_img
+{
+ float: left;
+}
+
+.footer_img img
+{
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+.footer_img a
+{
+ color: white;
+}
+
+.footer_img a:link
+{
+ color: white;
+}
+
+.footer_img a:hover
+{
+ color: white;
+}
+
+.footer_img a:visited
+{
+ color: white;
+}
+
+
+#home_links
+{
+ line-height: 150%
+}
+
+#search_form_div {
+ text-align: center;
+ padding: 10px;
+ margin: 10px 10px;
+ margin-bottom: 30px;
+ background-color:#ececec;
+ border: 1px solid #7E7E7E
+}
+
+#search_form ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+#search_form ul li {
+ display: inline;
+}
+
+#toolbar {
+ margin-top: 2px;
+ margin-bottom: 2px;
+ border-bottom: 2px solid #707070;
+ padding-top : 0px;
+ padding-bottom : 0px;
+}
+#toolbar ul{
+ padding-left : 0px;
+ padding-right : 0px;
+ padding-top : 0px;
+ padding-bottom : 0px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+#toolbar ul li{
+ display: inline;
+ padding-left : 10px;
+ padding-right : 10px;
+ padding-top : 0px;
+ padding-bottom : 0px;
+}
+
+#inner_content {
+ padding: 5px 0px 50px 0px;
+}
+
+#loginstate {
+ text-align: right;
+}
+
+.projectscontentstitle {
+ color: #949494;
+ font-family: Verdana;
+ font-weight: lighter;
+ font-size: 2.0em;
+ font-style: normal;
+ text-align: left;
+}
+
+
+#loginstate a, #loginstate a:hover, #loginstate a:visited, #loginstate a:link, #loginstate a:active {
+ color:#0063DC;
+ margin-right:4px;
+ text-decoration:none;
+}
+
+#loginstate a:hover{
+ text-decoration: underline;
+}
+
+#loginstate ul {
+ margin:0;
+ padding:0;
+ float: left;
+}
+#loginstate li{
+ display: inline;
+ padding:0;
+ margin:0;
+}
+#loginstate #user{
+ color: #000000;
+ font-weight: bold;
+ margin-right:4px;
+}
+#loginstate ul .usertool a,
+#loginstate ul .usertool a:link,
+#loginstate ul .usertool a:visited {
+ color:#0063DC;
+ text-decoration:none;
+}
+
+#loginstate ul .usertool a:hover {
+ color:#0063DC;
+ text-decoration:underline;
+}
+
+.errorlist
+{
+ color: red;
+ font-size:12px;
+}
+
+tr.hdabooddline {
+ background: #d8d8d8;
+ /*background: #d6d7f6;*/
+}
+tr.hdaboevenline {
+ background: white;
+ /*background: #e6e6e6;*/
+}
+tr.hdabooddline:hover, tr.hdaboevenline:hover {
+ background: lightblue;
+ /*background: #e6e6e6;*/
+}
+
+tr.hdabosimpleoddline {
+ background: #e4e4e4;
+ /*background: #d6d7f6;*/
+}
+tr.hdabosimpleevenline {
+ background: white;
+ /*background: #e6e6e6;*/
+}
+
+#count_nav_top,
+#count_nav_bottom {
+ text-align: right;
+}
+#count_nav_bottom p,
+#count_nav_top p {
+ font-size: 12px;
+ font-weight : bold;
+}
+
+#tag_table {
+ width: 100%;
+ border-spacing: 0px;
+}
+#tag_table td, th {
+ /*border: thin solid #6495ed;*/
+ padding: 3px;
+}
+.updown_td {
+ width: 12px;
+}
+
+.sheet_title {
+ font-size: 14px;
+}
+
+.complete_sheet {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+.left_sheet {
+ width: 38%;
+ float: left;
+}
+.left_sheet p {
+ margin-bottom: 5px;
+}
+.right_sheet {
+ width: 60%;
+ /*margin-left: 5px;*/
+ float: right;
+}
+
+.large_25 {
+ width: 25px;
+}
+.text_centered {
+ text-align: center;
+}
+.hand_cursor, .reset_wp_info, .remove_wp_link, .remove_tag_from_list {
+ cursor: pointer;
+}
+.updown_td {
+ cursor: n-resize;
+}
+
+tr.dragged_row td {
+ color: yellow;
+ background-color: black;
+}
+
+#all_tags_table {
+ min-width: 600px;
+ border-spacing: 0px;
+}
+#all_tags_table td, th {
+ /*border: thin solid #6495ed;*/
+ padding: 3px;
+}
+
+/* styles for the 4 types of STATUS*/
+.null_result {
+ color: #000000;
+}
+.redirection {
+ color: #0000ff;
+ font-weight: bold;
+ font-style: italic;
+}
+.homonyme {
+ color: #000000;
+ font-weight: bold;
+}
+.match {
+ color: #0000ff;
+ font-weight: bold;
+}
+
+#tags_actions span {
+ margin-left: 5px;
+}
+
+#loginform_div {
+ margin-left: 10px;
+}
+
+#login_fields_list, #submitcontent-buttons-login {
+ margin: 10px 0px;
+}
+
+#search_results {
+ margin-left: 10px;
+}
+
+.result_counter {
+ color: #C6C6C6;
+}
+
+#search_prev_next {
+ margin-top: 20px;
+}
+
+#page_number {
+ text-align: right;
+}
\ No newline at end of file
Binary file src/hdabo/static/hdabo/img/arrow_green_right.png has changed
Binary file src/hdabo/static/hdabo/img/arrow_right.png has changed
Binary file src/hdabo/static/hdabo/img/arrow_up_down.png has changed
Binary file src/hdabo/static/hdabo/img/clock_arrow.png has changed
Binary file src/hdabo/static/hdabo/img/favicon.ico has changed
Binary file src/hdabo/static/hdabo/img/indicator.gif has changed
Binary file src/hdabo/static/hdabo/img/logo_IRI_footer.png has changed
Binary file src/hdabo/static/hdabo/img/red_cross.png has changed
Binary file src/hdabo/static/hdabo/img/sort-asc.png has changed
Binary file src/hdabo/static/hdabo/img/sort-desc.png has changed
Binary file src/hdabo/static/hdabo/img/sort-descending.png has changed
Binary file src/hdabo/static/hdabo/img/tag_remove.png has changed
Binary file src/hdabo/static/hdabo/img/wikipedia_search.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/hdabo.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,366 @@
+// -*- coding: utf-8 -*-
+function init_tags_events()
+{
+ // Tag simple operations : activate/unactivate wp link, reset wp info, remove wp link, remove tag from list
+ $(".reset_wp_info").click(function(e){
+ if(confirm("Confirmez-vous le rétablissement du label original de ce tag ?")){
+ update_tag(this);
+ }
+ });
+ $(".remove_wp_link").click(function(e){
+ if(confirm("Confirmez-vous le suppression du lien Wikipédia pour le tag \"" + $(this).attr('alt') + "\" ?")){
+ update_tag(this);
+ }
+ });
+ $(".remove_tag_from_list").click(function(){
+ if(confirm("Confirmez-vous la suppression du tag \"" + $(this).attr('alt') + "\" de la liste courante ?")){
+ update_tag(this);
+ }
+ });
+
+ // Wikipedia search management (autocompletion and save changes)
+ $.editable.addInputType('autocomplete', {
+ element : $.editable.types.text.element,
+ plugin : function(settings, original) {
+ $('input', this).autocomplete(settings.autocomplete);
+ }
+ });
+ $(".wikipediatag").editable(modify_tag_url, {
+ indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
+ type : "autocomplete",
+ tooltip : "Cliquer pour éditer...",
+ onblur : "submit",
+ submitdata: {
+ csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val(),
+ num_page:$('#num_page').val(),
+ nb_by_page:$('#nb_by_page').val(),
+ sort:$('#sort').val(),
+ searched:$('#searched_str').val()
+ },
+ callback : function(value, settings) {
+ $('#tag_table_container').html(value);
+ init_tags_events();
+ },
+ onerror: function(settings, original, jqXHR) {
+ resp = $.parseJSON(jqXHR.responseText);
+ alert(resp.message);
+ original.reset();
+ },
+ autocomplete : {
+ source: function( request, response ) {
+ $.ajax({
+ url: "http://fr.wikipedia.org/w/api.php",
+ dataType: "jsonp",
+ data: {
+ action: "opensearch",
+ limit: "20",
+ namespace: "0",
+ format: "json",
+ search: request.term
+ },
+ success: function( data ) {
+ response( $.map( data[1], function( item ) {
+ return {
+ label: item,
+ value: item
+ }
+ }));
+ }
+ });
+ },
+ minLength: 2,
+ open: function() {
+ $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
+ },
+ close: function() {
+ $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+ }
+ }
+ });
+
+ // Update alias management
+ $(".tag_alias").editable(update_tag_alias_url, {
+ indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
+ type : "text",
+ placeholder:"",
+ tooltip : "Cliquer pour éditer...",
+ onblur : "submit",
+ submitdata: {
+ csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val(),
+ num_page:$('#num_page').val(),
+ nb_by_page:$('#nb_by_page').val(),
+ sort:$('#sort').val(),
+ searched:$('#searched_str').val()
+ },
+ callback : function(value, settings) {
+ $('#tag_table_container').html(value);
+ init_tags_events();
+ }
+ });
+
+ // Tag categories management
+ $(".tag_category").editable(update_tag_category_url, {
+ indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
+ type : "select",
+ data : categories_list,
+ placeholder:"",
+ tooltip : "Cliquer pour éditer...",
+ onblur : "submit",
+ submitdata: {
+ csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val(),
+ num_page:$('#num_page').val(),
+ nb_by_page:$('#nb_by_page').val(),
+ sort:$('#sort').val(),
+ searched:$('#searched_str').val()
+ },
+ callback : function(value, settings) {
+ $('#tag_table_container').html(value);
+ init_tags_events();
+ }
+ });
+
+ // Tag table drag and drop
+ $("#tag_table").tableDnD({
+ onDragClass: "dragged_row",
+ onDrop: function(table, row){
+ old_order = row.id;
+ $($(row).children()[1]).html("<img src='"+static_url+"hdabo/img/indicator.gif'/>");
+ rows = table.tBodies[0].rows;
+ nb_rows = rows.length;
+ for(var i=1; i<nb_rows; i++){
+ if(rows[i].id==old_order){
+ new_order = i; // No need to +1 because rows[0] are headers
+ $.ajax({
+ url: tag_up_down_url,
+ type: 'POST',
+ data: {csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val(),
+ new_order:new_order,
+ old_order:old_order
+ },
+ // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+ //dataType: 'json',
+ success: function(msg, textStatus, XMLHttpRequest) {
+ $('#tag_table_container').html(msg);
+ init_tags_events();
+ }
+ });
+ }
+ }
+ },
+ dragHandle: "updown_td"
+ });
+}
+
+function init_datasheet_events()
+{
+ var select_done = false;
+ // Wikipedia search management (new tag)
+ $("#wp_search").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "http://fr.wikipedia.org/w/api.php",
+ dataType: "jsonp",
+ data: {
+ action: "opensearch",
+ limit: "20",
+ namespace: "0",
+ format: "json",
+ search: request.term
+ },
+ success: function( data ) {
+ response( $.map( data[1], function( item ) {
+ return {
+ label: item,
+ value: item
+ }
+ }));
+ }
+ });
+ },
+ select: function(event, ui) {
+ // Since the event still did not update wp_search's val, we force it.
+ $("#wp_search").val(ui.item.label);
+ select_done = true;
+ $("#ok_search").click();
+ },
+ minLength: 2,
+ open: function() {
+ $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
+ },
+ close: function() {
+ $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+ }
+ });
+ $('#wp_search').keyup(function(e){
+ if((e.keyCode==13) && ($("#wp_search").val()!="") && (select_done==false)){
+ add_tag($("#wp_search").val());
+ }
+ select_done = false;
+ });
+ $("#ok_search").click(function(){
+ if($("#wp_search").val()!=""){
+ add_tag($("#wp_search").val());
+ }
+ });
+ $("#tags_sort").click(function(e){
+ e.preventDefault();
+ if(confirm("Confirmez-vous le tri des tags ?")) {
+ reorder_tags();
+ }
+ });
+ // Validate sheet management : the radiobutton name has is "'gr_validated' + datasheet.hda_id"
+ $("#validated").click(function(e){
+ e.preventDefault();
+ // We count the number of tags. It has to be between 5 and 25
+ var nb_tags = $('#tag_table tr').length - 1;
+ if(nb_tags<5 || nb_tags>25){
+ alert("Cette fiche n'est pas validable : elle doit contenir entre 5 et 25 tags.");
+ }
+ else{
+ if(confirm("Confirmez-vous la validation de cette fiche ? Elle contient " + nb_tags + " tags.")){
+ window.location = validate_datasheet_url + "/" + $('#datasheet_id').val() + "/true";
+ }
+ }
+ });
+ $("#not_validated").click(function(e){
+ e.preventDefault();
+ if(confirm("Confirmez-vous l'invalidation de cette fiche ?")){
+ window.location = validate_datasheet_url + "/" + $('#datasheet_id').val() + "/false";
+ }
+ });
+}
+
+function update_tag(btn)
+{
+ new_checked = false;
+ if ($(btn).is(".remove_tag_from_list")) {
+ var url = remove_tag_from_list_url;
+ var id_tag = $(btn).attr('id');
+ }
+ else if ($(btn).is(".reset_wp_info")) {
+ var url = reset_wp_info_url;
+ var id_tag = $(btn).html();
+ $(btn).html("<img src='"+static_url+"hdabo/img/indicator.gif'>");
+ }
+ else if ($(btn).is(".remove_wp_link")) {
+ var url = remove_wp_link_url;
+ var id_tag = $(btn).attr('id');
+ }
+
+ // 2 cases :
+ // - ordered tag for one datasheet : $('#datasheet_id') is not null
+ // - all tags list : $('#datasheet_id') is null and $('#num_page') and $('#nb_by_page') are not null
+ $.ajax({
+ url: url,
+ type: 'POST',
+ data: {csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val(),
+ num_page:$('#num_page').val(),
+ nb_by_page:$('#nb_by_page').val(),
+ sort:$('#sort').val(),
+ searched:$('#searched_str').val(),
+ tag_id:id_tag,
+ activated:new_checked
+ },
+ // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+ //dataType: 'json',
+ success: function(msg, textStatus, XMLHttpRequest) {
+ $('#tag_table_container').html(msg);
+ init_tags_events();
+ },
+ error: function(jqXHR, textStatus, errorThrown) {
+ resp = $.parseJSON(jqXHR.responseText);
+ alert(resp.message);
+ $(btn).html(id_tag);
+ }
+ });
+}
+
+function tag_up_down(arrow)
+{
+ if ($(arrow).is(".up")) {
+ mv = "u";
+ } else {
+ mv = "d";
+ }
+ var url = tag_up_down_url;
+ var id_tag = $(arrow).attr('id');
+ // This indicates the position (from 0) of the tag in the list. NB : it is different from the TagSheet.order in the database.
+ var pos_tag = $(arrow).attr('pos');
+ $.ajax({
+ url: url,
+ type: 'POST',
+ data: {csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val(),
+ tag_id:id_tag,
+ move:mv,
+ tag_pos:pos_tag
+ },
+ // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+ //dataType: 'json',
+ success: function(msg, textStatus, XMLHttpRequest) {
+ $('#tag_table_container').html(msg);
+ init_tags_events();
+ }
+ });
+}
+
+function add_tag(tag_label)
+{
+ $("#ok_search").html("<img src='"+static_url+"hdabo/img/indicator.gif'>");
+ var url = add_tag_url;
+ $.ajax({
+ url: url,
+ type: 'POST',
+ data: {csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val(),
+ value:tag_label
+ },
+ // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+ //dataType: 'json',
+ success: function(msg, textStatus, XMLHttpRequest) {
+ $('#tag_table_container').html(msg);
+ init_tags_events();
+ // And scroll to the bottom
+ $("html").animate({ scrollTop: $(document).height() }, 500);
+ },
+ error: function(jqXHR, textStatus, errorThrown) {
+ resp = $.parseJSON(jqXHR.responseText);
+ alert(resp.message);
+ },
+ complete: function(){
+ // We empty the input and hide the ok button
+ $("#wp_search").val("");
+ $("#ok_search").html("<b>OK</b>");
+ }
+ });
+}
+
+function reorder_tags() {
+ $('#tags_sort').attr("disabled", "disabled");
+ var tag_sort_old_src = $("#tags_sort").attr("src");
+ $("#tags_sort").attr("src",static_url+"hdabo/img/indicator.gif");
+ $.ajax({
+ url: reorder_tag_datasheet_url,
+ type: 'POST',
+ data: {
+ csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val()
+ },
+ success: function(msg, textStatus, XMLHttpRequest) {
+ $('#tag_table_container').html(msg);
+ init_tags_events();
+ // And scroll to the bottom
+ $("html").animate({ scrollTop: $(document).height() }, 500);
+ },
+ complete: function(){
+ $("#tags_sort").attr("src",tag_sort_old_src);
+ $('#tags_sort').removeAttr("disabled");
+ }
+ });
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery-ui.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,784 @@
+/*!
+ * jQuery UI 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
+b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
+"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
+function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
+outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
+return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
+0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
+a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
+e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
+this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
+widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
+enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*!
+ * jQuery UI Mouse 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(b){var d=false;b(document).mousedown(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
+this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"?b(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
+this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
+!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+;/*
+ * jQuery UI Position 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
+left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
+k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
+m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
+d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
+a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
+g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Draggable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
+this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper=
+this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);
+this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=
+d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",
+a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
+a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a=
+{left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&
+d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=
+this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions=
+{width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+
+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!="hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),
+10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-
+this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&
+d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
+this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;
+if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1];h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=this.originalPageX+Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<
+g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");
+this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.13"});
+d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=
+0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=
+c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,
+true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=
+0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=
+a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");
+if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=
+f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);
+else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,
+a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,
+o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;
+if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=
+c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&
+c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});
+d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
+;/*
+ * jQuery UI Droppable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ * jquery.ui.draggable.js
+ */
+(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
+a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
+this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.13"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
+switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
+i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
+"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
+a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
+d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
+;/*
+ * jQuery UI Resizable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
+String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
+false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
+this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
+{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
+if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=
+false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);
+c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,
+d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=
+a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=
+this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||
+c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-
+c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,
+arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,
+element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.13"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};
+if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),
+p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,
+c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),
+g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),
+10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,
+top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;
+g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:
+0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));
+if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&
+!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost==
+"string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;
+var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,
+10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
+;/*
+ * jQuery UI Selectable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
+selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
+c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
+c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
+this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
+a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
+!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
+e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.13"})})(jQuery);
+;/*
+ * jQuery UI Sortable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
+"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
+!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
+document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
+return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
+b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
+b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
+a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
+e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
+c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
+dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
+toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
+var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
+_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
+if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
+this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
+this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
+this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
+d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
+0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
+a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
+f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
+this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
+""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
+this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
+{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
+document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
+10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
+this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
+this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
+this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
+this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
+this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
+"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
+f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
+this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
+a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.13"})})(jQuery);
+;/*
+ * jQuery UI Accordion 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
+a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
+if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
+function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
+this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
+this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
+b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
+a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
+c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
+if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
+if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
+e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
+e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
+"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.13",
+animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
+f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
+paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
+;/*
+ * jQuery UI Autocomplete 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.position.js
+ */
+(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=
+false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
+a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
+this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
+a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
+b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
+this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
+this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
+b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
+d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
+(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
+this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
+;/*
+ * jQuery UI Button 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,f=a([]);if(c)f=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return f};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
+i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
+function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(f)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")}).bind("click.button",function(e){c.disabled&&e.stopImmediatePropagation()});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",
+function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var e=b.element[0];h(e).not(e).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",
+function(){if(c.disabled)return false;a(this).addClass("ui-state-active");g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(e){if(c.disabled)return false;if(e.keyCode==a.ui.keyCode.SPACE||e.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===
+a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){var b=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(c);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(c);
+if(!this.buttonElement.length)this.buttonElement=b.find(c)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());
+this.hasTitle||this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){if(this.options.text)e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){e.push(f?"ui-button-icons-only":
+"ui-button-icon-only");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},
+destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
+;/*
+ * jQuery UI Dialog 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.button.js
+ * jquery.ui.draggable.js
+ * jquery.ui.mouse.js
+ * jquery.ui.position.js
+ * jquery.ui.resizable.js
+ */
+(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
+position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
+h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
+e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
+a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
+b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=
+1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
+f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
+function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
+handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
+originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",
+f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):
+[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);
+if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
+e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
+this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
+b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.13",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
+create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
+height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
+b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
+function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+;/*
+ * jQuery UI Slider 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=a.values&&a.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(a.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(a.range){if(a.range===true){if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(a.range==="min"||a.range==="max"?" ui-slider-range-"+a.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=c.add(d(e.join("")).appendTo(b.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
+g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!b.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");i=b._start(g,l);if(i===false)return}break}m=b.options.step;i=b.options.values&&b.options.values.length?
+(h=b.values(l)):(h=b.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=b._trimAlignValue(i+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(i-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===b._valueMax())return;h=b._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===b._valueMin())return;h=b._trimAlignValue(i-
+m);break}b._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(g,k);b._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(b){var a=this.options,c,f,e,j,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(a.range===true&&this.values(1)===a.min){g+=1;e=d(this.handles[g])}if(this._start(b,g)===false)return false;
+this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();a=e.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-e.width()/2,top:b.pageY-a.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(b){var a=
+this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;if(this.orientation==="horizontal"){a=
+this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);
+c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var f;if(this.options.values&&this.options.values.length){f=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>f||a===1&&c<f))c=f;if(c!==this.values(a)){f=this.values();f[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:f});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],value:c});
+b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
+this._trimAlignValue(b);this._refreshValue();this._change(null,0)}else return this._value()},values:function(b,a){var c,f,e;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):
+this.value();else return this._values()},_setOption:function(b,a){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
+return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
+_refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate);
+if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
+1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.13"})})(jQuery);
+;/*
+ * jQuery UI Tabs 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
+e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
+d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
+(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
+this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
+g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
+function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
+this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
+-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
+d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
+e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
+j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
+if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
+this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
+load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
+"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.13"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
+a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+;/*
+ * jQuery UI Datepicker 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ * jquery.ui.core.js
+ */
+(function(d,B){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a",
+"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},
+_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,
+b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);
+if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);
+return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);
+if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
+this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/
+2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,
+"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=
+false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=
+true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
+for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
+this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==B&&f.minDate===B)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==B&&f.maxDate===B)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=
+this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();
+c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
+"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,
+-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();
+a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==B?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);
+d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=
+null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=
+null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],
+top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");
+c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
+a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},
+_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-
+g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=
+null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
+0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=
+false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=
+d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);
+else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
+a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,
+g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var C=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&C?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,C,K){p=d.map(o(p)?K:C,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=
+x[1];if(b.substr(s,w.length).toLowerCase()==w.toLowerCase()){E=x[0];s+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(A))throw"Unexpected literal at position "+s;s++},s=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else r();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=
+new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else k=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=
+c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,
+h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;
+case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+
+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==B?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,
+f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,
+c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=
+parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;
+a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
+a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
+new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
+n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,
+g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&
+a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+z+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+z+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){for(var O=
+"",G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&x==0?c?
+f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var D=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}y+=D+"</tr></thead><tbody>";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
+D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<D;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&q<k||o&&q>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(q.getTime()==P.getTime()&&g==a.selectedMonth&&
+a._keyEvent||E.getTime()==q.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!C?"":" "+I[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||C)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+z+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(F&&!C?" ":L?'<span class="ui-state-default">'+q.getDate()+
+"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+
+a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?
+r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=
+(h||!(j&&l)?" ":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,
+"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,
+b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!=
+"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));
+return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&
+arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery);
+;/*
+ * jQuery UI Progressbar 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.13"})})(jQuery);
+;/*
+ * jQuery UI Effects 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
+16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
+a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
+d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easding:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
+f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
+[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.13",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
+0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
+c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,
+a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);
+a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%",
+"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*
+((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=
+e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=
+e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
+h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*
+h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,
+e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
+;/*
+ * jQuery UI Effects Blind 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
+g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Bounce 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
+3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
+b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Clip 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
+c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Drop 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
+"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Explode 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
+0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
+e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
+;/*
+ * jQuery UI Effects Fade 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fade
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Fold 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
+10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Highlight 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
+this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Pulsate 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
+a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Scale 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
+b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
+1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
+p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
+if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
+a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
+child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
+n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Shake 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
+(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Slide 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
+var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Transfer 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
+b.dequeue()})})}})(jQuery);
+;
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.jeditable.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,546 @@
+/*
+ * Jeditable - jQuery in place edit plugin
+ *
+ * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Project home:
+ * http://www.appelsiini.net/projects/jeditable
+ *
+ * Based on editable by Dylan Verheul <dylan_at_dyve.net>:
+ * http://www.dyve.net/jquery/?editable
+ *
+ */
+
+/**
+ * Version 1.7.2-dev
+ *
+ * ** means there is basic unit tests for this parameter.
+ *
+ * @name Jeditable
+ * @type jQuery
+ * @param String target (POST) URL or function to send edited content to **
+ * @param Hash options additional options
+ * @param String options[method] method to use to send edited content (POST or PUT) **
+ * @param Function options[callback] Function to run after submitting edited content **
+ * @param String options[name] POST parameter name of edited content
+ * @param String options[id] POST parameter name of edited div id
+ * @param Hash options[submitdata] Extra parameters to send when submitting edited content.
+ * @param String options[type] text, textarea or select (or any 3rd party input type) **
+ * @param Integer options[rows] number of rows if using textarea **
+ * @param Integer options[cols] number of columns if using textarea **
+ * @param Mixed options[height] 'auto', 'none' or height in pixels **
+ * @param Mixed options[width] 'auto', 'none' or width in pixels **
+ * @param String options[loadurl] URL to fetch input content before editing **
+ * @param String options[loadtype] Request type for load url. Should be GET or POST.
+ * @param String options[loadtext] Text to display while loading external content.
+ * @param Mixed options[loaddata] Extra parameters to pass when fetching content before editing.
+ * @param Mixed options[data] Or content given as paramameter. String or function.**
+ * @param String options[indicator] indicator html to show when saving
+ * @param String options[tooltip] optional tooltip text via title attribute **
+ * @param String options[event] jQuery event such as 'click' of 'dblclick' **
+ * @param String options[submit] submit button value, empty means no button **
+ * @param String options[cancel] cancel button value, empty means no button **
+ * @param String options[cssclass] CSS class to apply to input form. 'inherit' to copy from parent. **
+ * @param String options[style] Style to apply to input form 'inherit' to copy from parent. **
+ * @param String options[select] true or false, when true text is highlighted ??
+ * @param String options[placeholder] Placeholder text or html to insert when element is empty. **
+ * @param String options[onblur] 'cancel', 'submit', 'ignore' or function ??
+ *
+ * @param Function options[onsubmit] function(settings, original) { ... } called before submit
+ * @param Function options[onreset] function(settings, original) { ... } called before reset
+ * @param Function options[onerror] function(settings, original, xhr) { ... } called on error
+ *
+ * @param Hash options[ajaxoptions] jQuery Ajax options. See docs.jquery.com.
+ *
+ */
+
+(function($) {
+
+ $.fn.editable = function(target, options) {
+
+ if ('disable' == target) {
+ $(this).data('disabled.editable', true);
+ return;
+ }
+ if ('enable' == target) {
+ $(this).data('disabled.editable', false);
+ return;
+ }
+ if ('destroy' == target) {
+ $(this)
+ .unbind($(this).data('event.editable'))
+ .removeData('disabled.editable')
+ .removeData('event.editable');
+ return;
+ }
+
+ var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options);
+
+ /* setup some functions */
+ var plugin = $.editable.types[settings.type].plugin || function() { };
+ var submit = $.editable.types[settings.type].submit || function() { };
+ var buttons = $.editable.types[settings.type].buttons
+ || $.editable.types['defaults'].buttons;
+ var content = $.editable.types[settings.type].content
+ || $.editable.types['defaults'].content;
+ var element = $.editable.types[settings.type].element
+ || $.editable.types['defaults'].element;
+ var reset = $.editable.types[settings.type].reset
+ || $.editable.types['defaults'].reset;
+ var callback = settings.callback || function() { };
+ var onedit = settings.onedit || function() { };
+ var onsubmit = settings.onsubmit || function() { };
+ var onreset = settings.onreset || function() { };
+ var onerror = settings.onerror || reset;
+
+ /* Show tooltip. */
+ if (settings.tooltip) {
+ $(this).attr('title', settings.tooltip);
+ }
+
+ settings.autowidth = 'auto' == settings.width;
+ settings.autoheight = 'auto' == settings.height;
+
+ return this.each(function() {
+
+ /* Save this to self because this changes when scope changes. */
+ var self = this;
+
+ /* Inlined block elements lose their width and height after first edit. */
+ /* Save them for later use as workaround. */
+ var savedwidth = $(self).width();
+ var savedheight = $(self).height();
+
+ /* Save so it can be later used by $.editable('destroy') */
+ $(this).data('event.editable', settings.event);
+
+ /* If element is empty add something clickable (if requested) */
+ if (!$.trim($(this).html())) {
+ $(this).html(settings.placeholder);
+ }
+
+ $(this).bind(settings.event, function(e) {
+
+ /* Abort if element is disabled. */
+ if (true === $(this).data('disabled.editable')) {
+ return;
+ }
+
+ /* Prevent throwing an exeption if edit field is clicked again. */
+ if (self.editing) {
+ return;
+ }
+
+ /* Abort if onedit hook returns false. */
+ if (false === onedit.apply(this, [settings, self])) {
+ return;
+ }
+
+ /* Prevent default action and bubbling. */
+ e.preventDefault();
+ e.stopPropagation();
+
+ /* Remove tooltip. */
+ if (settings.tooltip) {
+ $(self).removeAttr('title');
+ }
+
+ /* Figure out how wide and tall we are, saved width and height. */
+ /* Workaround for http://dev.jquery.com/ticket/2190 */
+ if (0 == $(self).width()) {
+ settings.width = savedwidth;
+ settings.height = savedheight;
+ } else {
+ if (settings.width != 'none') {
+ settings.width =
+ settings.autowidth ? $(self).width() : settings.width;
+ }
+ if (settings.height != 'none') {
+ settings.height =
+ settings.autoheight ? $(self).height() : settings.height;
+ }
+ }
+
+ /* Remove placeholder text, replace is here because of IE. */
+ if ($(this).html().toLowerCase().replace(/(;|"|\/)/g, '') ==
+ settings.placeholder.toLowerCase().replace(/(;|"|\/)/g, '')) {
+ $(this).html('');
+ }
+
+ self.editing = true;
+ self.revert = $(self).html();
+ $(self).html('');
+
+ /* Create the form object. */
+ var form = $('<form />');
+
+ /* Apply css or style or both. */
+ if (settings.cssclass) {
+ if ('inherit' == settings.cssclass) {
+ form.attr('class', $(self).attr('class'));
+ } else {
+ form.attr('class', settings.cssclass);
+ }
+ }
+
+ if (settings.style) {
+ if ('inherit' == settings.style) {
+ form.attr('style', $(self).attr('style'));
+ /* IE needs the second line or display wont be inherited. */
+ form.css('display', $(self).css('display'));
+ } else {
+ form.attr('style', settings.style);
+ }
+ }
+
+ /* Add main input element to form and store it in input. */
+ var input = element.apply(form, [settings, self]);
+
+ /* Set input content via POST, GET, given data or existing value. */
+ var input_content;
+
+ if (settings.loadurl) {
+ var t = setTimeout(function() {
+ input.disabled = true;
+ content.apply(form, [settings.loadtext, settings, self]);
+ }, 100);
+
+ var loaddata = {};
+ loaddata[settings.id] = self.id;
+ if ($.isFunction(settings.loaddata)) {
+ $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings]));
+ } else {
+ $.extend(loaddata, settings.loaddata);
+ }
+ $.ajax({
+ type : settings.loadtype,
+ url : settings.loadurl,
+ data : loaddata,
+ async : false,
+ success: function(result) {
+ window.clearTimeout(t);
+ input_content = result;
+ input.disabled = false;
+ }
+ });
+ } else if (settings.data) {
+ input_content = settings.data;
+ if ($.isFunction(settings.data)) {
+ input_content = settings.data.apply(self, [self.revert, settings]);
+ }
+ } else {
+ input_content = self.revert;
+ }
+ content.apply(form, [input_content, settings, self]);
+
+ input.attr('name', settings.name);
+
+ /* Add buttons to the form. */
+ buttons.apply(form, [settings, self]);
+
+ /* Add created form to self. */
+ $(self).append(form);
+
+ /* Attach 3rd party plugin if requested. */
+ plugin.apply(form, [settings, self]);
+
+ /* Focus to first visible form element. */
+ $(':input:visible:enabled:first', form).focus();
+
+ /* Highlight input contents when requested. */
+ if (settings.select) {
+ input.select();
+ }
+
+ /* discard changes if pressing esc */
+ input.keydown(function(e) {
+ if (e.keyCode == 27) {
+ e.preventDefault();
+ reset.apply(form, [settings, self]);
+ }
+ });
+
+ /* Discard, submit or nothing with changes when clicking outside. */
+ /* Do nothing is usable when navigating with tab. */
+ var t;
+ if ('cancel' == settings.onblur) {
+ input.blur(function(e) {
+ /* Prevent canceling if submit was clicked. */
+ t = setTimeout(function() {
+ reset.apply(form, [settings, self]);
+ }, 500);
+ });
+ } else if ('submit' == settings.onblur) {
+ input.blur(function(e) {
+ /* Prevent double submit if submit was clicked. */
+ t = setTimeout(function() {
+ form.submit();
+ }, 200);
+ });
+ } else if ($.isFunction(settings.onblur)) {
+ input.blur(function(e) {
+ settings.onblur.apply(self, [input.val(), settings]);
+ });
+ } else {
+ input.blur(function(e) {
+ /* TODO: maybe something here */
+ });
+ }
+
+ form.submit(function(e) {
+
+ if (t) {
+ clearTimeout(t);
+ }
+
+ /* Do no submit. */
+ e.preventDefault();
+
+ /* Call before submit hook. */
+ /* If it returns false abort submitting. */
+ if (false !== onsubmit.apply(form, [settings, self])) {
+ /* Custom inputs call before submit hook. */
+ /* If it returns false abort submitting. */
+ if (false !== submit.apply(form, [settings, self])) {
+
+ /* Check if given target is function */
+ if ($.isFunction(settings.target)) {
+ var str = settings.target.apply(self, [input.val(), settings]);
+ $(self).html(str);
+ self.editing = false;
+ callback.apply(self, [self.innerHTML, settings]);
+ /* TODO: this is not dry */
+ if (!$.trim($(self).html())) {
+ $(self).html(settings.placeholder);
+ }
+ } else {
+ /* Add edited content and id of edited element to POST. */
+ var submitdata = {};
+ submitdata[settings.name] = input.val();
+ submitdata[settings.id] = self.id;
+ /* Add extra data to be POST:ed. */
+ if ($.isFunction(settings.submitdata)) {
+ $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings]));
+ } else {
+ $.extend(submitdata, settings.submitdata);
+ }
+
+ /* Quick and dirty PUT support. */
+ if ('PUT' == settings.method) {
+ submitdata['_method'] = 'put';
+ }
+
+ /* Show the saving indicator. */
+ $(self).html(settings.indicator);
+
+ /* Defaults for ajaxoptions. */
+ var ajaxoptions = {
+ type : 'POST',
+ data : submitdata,
+ dataType: 'html',
+ url : settings.target,
+ success : function(result, status) {
+ if (ajaxoptions.dataType == 'html') {
+ $(self).html(result);
+ }
+ self.editing = false;
+ callback.apply(self, [result, settings]);
+ if (!$.trim($(self).html())) {
+ $(self).html(settings.placeholder);
+ }
+ },
+ error : function(xhr, status, error) {
+ onerror.apply(form, [settings, self, xhr]);
+ }
+ };
+
+ /* Override with what is given in settings.ajaxoptions. */
+ $.extend(ajaxoptions, settings.ajaxoptions);
+ $.ajax(ajaxoptions);
+
+ }
+ }
+ }
+
+ /* Show tooltip again. */
+ $(self).attr('title', settings.tooltip);
+
+ return false;
+ });
+ });
+
+ /* Privileged methods */
+ this.reset = function(form) {
+ /* Prevent calling reset twice when blurring. */
+ if (this.editing) {
+ /* Before reset hook, if it returns false abort reseting. */
+ if (false !== onreset.apply(form, [settings, self])) {
+ $(self).html(self.revert);
+ self.editing = false;
+ if (!$.trim($(self).html())) {
+ $(self).html(settings.placeholder);
+ }
+ /* Show tooltip again. */
+ if (settings.tooltip) {
+ $(self).attr('title', settings.tooltip);
+ }
+ }
+ }
+ };
+ });
+
+ };
+
+
+ $.editable = {
+ types: {
+ defaults: {
+ element : function(settings, original) {
+ var input = $('<input type="hidden"></input>');
+ $(this).append(input);
+ return(input);
+ },
+ content : function(string, settings, original) {
+ $(':input:first', this).val(string);
+ },
+ reset : function(settings, original) {
+ original.reset(this);
+ },
+ buttons : function(settings, original) {
+ var form = this;
+ if (settings.submit) {
+ /* If given html string use that. */
+ if (settings.submit.match(/>$/)) {
+ var submit = $(settings.submit).click(function() {
+ if (submit.attr("type") != "submit") {
+ form.submit();
+ }
+ });
+ /* Otherwise use button with given string as text. */
+ } else {
+ var submit = $('<button type="submit" />');
+ submit.html(settings.submit);
+ }
+ $(this).append(submit);
+ }
+ if (settings.cancel) {
+ /* If given html string use that. */
+ if (settings.cancel.match(/>$/)) {
+ var cancel = $(settings.cancel);
+ /* otherwise use button with given string as text */
+ } else {
+ var cancel = $('<button type="cancel" />');
+ cancel.html(settings.cancel);
+ }
+ $(this).append(cancel);
+
+ $(cancel).click(function(event) {
+ if ($.isFunction($.editable.types[settings.type].reset)) {
+ var reset = $.editable.types[settings.type].reset;
+ } else {
+ var reset = $.editable.types['defaults'].reset;
+ }
+ reset.apply(form, [settings, original]);
+ return false;
+ });
+ }
+ }
+ },
+ text: {
+ element : function(settings, original) {
+ var input = $('<input />');
+ if (settings.width != 'none') { input.attr('width', settings.width); }
+ if (settings.height != 'none') { input.attr('height', settings.height); }
+ /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */
+ //input[0].setAttribute('autocomplete','off');
+ input.attr('autocomplete','off');
+ $(this).append(input);
+ return(input);
+ }
+ },
+ textarea: {
+ element : function(settings, original) {
+ var textarea = $('<textarea />');
+ if (settings.rows) {
+ textarea.attr('rows', settings.rows);
+ } else if (settings.height != "none") {
+ textarea.height(settings.height);
+ }
+ if (settings.cols) {
+ textarea.attr('cols', settings.cols);
+ } else if (settings.width != "none") {
+ textarea.width(settings.width);
+ }
+ $(this).append(textarea);
+ return(textarea);
+ }
+ },
+ select: {
+ element : function(settings, original) {
+ var select = $('<select />');
+ $(this).append(select);
+ return(select);
+ },
+ content : function(data, settings, original) {
+ /* If it is string assume it is json. */
+ if (String == data.constructor) {
+ eval ('var json = ' + data);
+ } else {
+ /* Otherwise assume it is a hash already. */
+ var json = data;
+ }
+ for (var key in json) {
+ if (!json.hasOwnProperty(key)) {
+ continue;
+ }
+ if ('selected' == key) {
+ continue;
+ }
+ var option = $('<option />').val(key).append(json[key]);
+ $('select', this).append(option);
+ }
+ /* Loop option again to set selected. IE needed this... */
+ $('select', this).children().each(function() {
+ if ($(this).val() == json['selected'] ||
+ $(this).text() == $.trim(original.revert)) {
+ $(this).attr('selected', 'selected');
+ }
+ });
+ /* Submit on change if no submit button defined. */
+ if (!settings.submit) {
+ var form = this;
+ $('select', this).change(function() {
+ form.submit();
+ });
+ }
+ }
+ }
+ },
+
+ /* Add new input type */
+ addInputType: function(name, input) {
+ $.editable.types[name] = input;
+ }
+ };
+
+ /* Publicly accessible defaults. */
+ $.fn.editable.defaults = {
+ name : 'value',
+ id : 'id',
+ type : 'text',
+ width : 'auto',
+ height : 'auto',
+ event : 'click.editable',
+ onblur : 'cancel',
+ loadtype : 'GET',
+ loadtext : 'Loading...',
+ placeholder: 'Click to edit',
+ loaddata : {},
+ submitdata : {},
+ ajaxoptions: {}
+ };
+
+})(jQuery);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,8865 @@
+/*!
+ * jQuery JavaScript Library v1.6
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon May 2 13:50:00 2011 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+ navigator = window.navigator,
+ location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context, rootjQuery );
+ },
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // A simple way to check for HTML strings or ID strings
+ // (both of which we optimize for)
+ quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+ // Check if a string has a non-whitespace character in it
+ rnotwhite = /\S/,
+
+ // Used for trimming whitespace
+ trimLeft = /^\s+/,
+ trimRight = /\s+$/,
+
+ // Check for digits
+ rdigit = /\d/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+ // Useragent RegExp
+ rwebkit = /(webkit)[ \/]([\w.]+)/,
+ ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+ rmsie = /(msie) ([\w.]+)/,
+ rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+ // Keep a UserAgent string for use with jQuery.browser
+ userAgent = navigator.userAgent,
+
+ // For matching the engine and version of the browser
+ browserMatch,
+
+ // The deferred used on DOM ready
+ readyList,
+
+ // The ready event handler
+ DOMContentLoaded,
+
+ // Save a reference to some core methods
+ toString = Object.prototype.toString,
+ hasOwn = Object.prototype.hasOwnProperty,
+ push = Array.prototype.push,
+ slice = Array.prototype.slice,
+ trim = String.prototype.trim,
+ indexOf = Array.prototype.indexOf,
+
+ // [[Class]] -> type pairs
+ class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), or $(undefined)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // The body element only exists once, optimize finding it
+ if ( selector === "body" && !context && document.body ) {
+ this.context = document;
+ this[0] = document.body;
+ this.selector = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ // Are we dealing with HTML string or an ID?
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = quickExpr.exec( selector );
+ }
+
+ // Verify a match, and that no context was specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
+ doc = (context ? context.ownerDocument || context : document);
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ ret = rsingleTag.exec( selector );
+
+ if ( ret ) {
+ if ( jQuery.isPlainObject( context ) ) {
+ selector = [ document.createElement( ret[1] ) ];
+ jQuery.fn.attr.call( selector, context, true );
+
+ } else {
+ selector = [ doc.createElement( ret[1] ) ];
+ }
+
+ } else {
+ ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+ selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
+ }
+
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $("#id")
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return (context || rootjQuery).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if (selector.selector !== undefined) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.6",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ toArray: function() {
+ return slice.call( this, 0 );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+ // Build a new jQuery matched element set
+ var ret = this.constructor();
+
+ if ( jQuery.isArray( elems ) ) {
+ push.apply( ret, elems );
+
+ } else {
+ jQuery.merge( ret, elems );
+ }
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" ) {
+ ret.selector = this.selector + (this.selector ? " " : "") + selector;
+ } else if ( name ) {
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Attach the listeners
+ jQuery.bindReady();
+
+ // Add the callback
+ readyList.done( fn );
+
+ return this;
+ },
+
+ eq: function( i ) {
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, +i + 1 );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ),
+ "slice", slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+ // Either a released hold or an DOMready/load event and not yet ready
+ if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger( "ready" ).unbind( "ready" );
+ }
+ }
+ },
+
+ bindReady: function() {
+ if ( readyList ) {
+ return;
+ }
+
+ readyList = jQuery._Deferred();
+
+ // Catch cases where $(document).ready() is called after the
+ // browser event has already occurred.
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Mozilla, Opera and webkit nightlies currently support this event
+ if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else if ( document.attachEvent ) {
+ // ensure firing before onload,
+ // maybe late but safe also for iframes
+ document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var toplevel = false;
+
+ try {
+ toplevel = window.frameElement == null;
+ } catch(e) {}
+
+ if ( document.documentElement.doScroll && toplevel ) {
+ doScrollCheck();
+ }
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ // A crude way of determining if an object is a window
+ isWindow: function( obj ) {
+ return obj && typeof obj === "object" && "setInterval" in obj;
+ },
+
+ isNaN: function( obj ) {
+ return obj == null || !rdigit.test( obj ) || isNaN( obj );
+ },
+
+ type: function( obj ) {
+ return obj == null ?
+ String( obj ) :
+ class2type[ toString.call(obj) ] || "object";
+ },
+
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !hasOwn.call(obj, "constructor") &&
+ !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || hasOwn.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ for ( var name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw msg;
+ },
+
+ parseJSON: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
+
+ return (new Function( "return " + data ))();
+
+ }
+ jQuery.error( "Invalid JSON: " + data );
+ },
+
+ // Cross-browser xml parsing
+ // (xml & tmp used internally)
+ parseXML: function( data , xml , tmp ) {
+
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
+
+ tmp = xml.documentElement;
+
+ if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+
+ return xml;
+ },
+
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function( data ) {
+ if ( data && rnotwhite.test( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
+ }
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ var name, i = 0,
+ length = object.length,
+ isObj = length === undefined || jQuery.isFunction( object );
+
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.apply( object[ name ], args ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( object[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return object;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: trim ?
+ function( text ) {
+ return text == null ?
+ "" :
+ trim.call( text );
+ } :
+
+ // Otherwise use our own trimming functionality
+ function( text ) {
+ return text == null ?
+ "" :
+ text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( array, results ) {
+ var ret = results || [];
+
+ if ( array != null ) {
+ // The window, strings (and functions) also have 'length'
+ // The extra typeof function check is to prevent crashes
+ // in Safari 2 (See: #3039)
+ // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+ var type = jQuery.type( array );
+
+ if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+ push.call( ret, array );
+ } else {
+ jQuery.merge( ret, array );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, array ) {
+
+ if ( indexOf ) {
+ return indexOf.call( array, elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var i = first.length,
+ j = 0;
+
+ if ( typeof second.length === "number" ) {
+ for ( var l = second.length; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var ret = [], retVal;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value, key, ret = [],
+ i = 0,
+ length = elems.length,
+ // jquery objects are treated as arrays
+ isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+ // Go through the array, translating each of the items to their
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( key in elems ) {
+ value = callback( elems[ key ], key, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return ret.concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ if ( typeof context === "string" ) {
+ var tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ var args = slice.call( arguments, 2 ),
+ proxy = function() {
+ return fn.apply( context, args.concat( slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ // Mutifunctional method to get and set values to a collection
+ // The value/s can be optionally by executed if its a function
+ access: function( elems, key, value, exec, fn, pass ) {
+ var length = elems.length;
+
+ // Setting many attributes
+ if ( typeof key === "object" ) {
+ for ( var k in key ) {
+ jQuery.access( elems, k, key[k], exec, fn, value );
+ }
+ return elems;
+ }
+
+ // Setting one attribute
+ if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = !pass && exec && jQuery.isFunction(value);
+
+ for ( var i = 0; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+
+ return elems;
+ }
+
+ // Getting an attribute
+ return length ? fn( elems[0], key ) : undefined;
+ },
+
+ now: function() {
+ return (new Date()).getTime();
+ },
+
+ // Use of jQuery.browser is frowned upon.
+ // More details: http://docs.jquery.com/Utilities/jQuery.browser
+ uaMatch: function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = rwebkit.exec( ua ) ||
+ ropera.exec( ua ) ||
+ rmsie.exec( ua ) ||
+ ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+ [];
+
+ return { browser: match[1] || "", version: match[2] || "0" };
+ },
+
+ sub: function() {
+ function jQuerySub( selector, context ) {
+ return new jQuerySub.fn.init( selector, context );
+ }
+ jQuery.extend( true, jQuerySub, this );
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init( selector, context ) {
+ if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+ context = jQuerySub( context );
+ }
+
+ return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ return jQuerySub;
+ },
+
+ browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+ jQuery.browser[ browserMatch.browser ] = true;
+ jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+ jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+ trimLeft = /^[\s\xA0]+/;
+ trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+ DOMContentLoaded = function() {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ };
+
+} else if ( document.attachEvent ) {
+ DOMContentLoaded = function() {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( document.readyState === "complete" ) {
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
+ }
+ };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+ if ( jQuery.isReady ) {
+ return;
+ }
+
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch(e) {
+ setTimeout( doScrollCheck, 1 );
+ return;
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+}
+
+// Expose jQuery to the global object
+return jQuery;
+
+})();
+
+
+var // Promise methods
+ promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
+ // Static reference to slice
+ sliceDeferred = [].slice;
+
+jQuery.extend({
+ // Create a simple deferred (one callbacks list)
+ _Deferred: function() {
+ var // callbacks list
+ callbacks = [],
+ // stored [ context , args ]
+ fired,
+ // to avoid firing when already doing so
+ firing,
+ // flag to know if the deferred has been cancelled
+ cancelled,
+ // the deferred itself
+ deferred = {
+
+ // done( f1, f2, ...)
+ done: function() {
+ if ( !cancelled ) {
+ var args = arguments,
+ i,
+ length,
+ elem,
+ type,
+ _fired;
+ if ( fired ) {
+ _fired = fired;
+ fired = 0;
+ }
+ for ( i = 0, length = args.length; i < length; i++ ) {
+ elem = args[ i ];
+ type = jQuery.type( elem );
+ if ( type === "array" ) {
+ deferred.done.apply( deferred, elem );
+ } else if ( type === "function" ) {
+ callbacks.push( elem );
+ }
+ }
+ if ( _fired ) {
+ deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
+ }
+ }
+ return this;
+ },
+
+ // resolve with given context and args
+ resolveWith: function( context, args ) {
+ if ( !cancelled && !fired && !firing ) {
+ // make sure args are available (#8421)
+ args = args || [];
+ firing = 1;
+ try {
+ while( callbacks[ 0 ] ) {
+ callbacks.shift().apply( context, args );
+ }
+ }
+ finally {
+ fired = [ context, args ];
+ firing = 0;
+ }
+ }
+ return this;
+ },
+
+ // resolve with this as context and given arguments
+ resolve: function() {
+ deferred.resolveWith( this, arguments );
+ return this;
+ },
+
+ // Has this deferred been resolved?
+ isResolved: function() {
+ return !!( firing || fired );
+ },
+
+ // Cancel
+ cancel: function() {
+ cancelled = 1;
+ callbacks = [];
+ return this;
+ }
+ };
+
+ return deferred;
+ },
+
+ // Full fledged deferred (two callbacks list)
+ Deferred: function( func ) {
+ var deferred = jQuery._Deferred(),
+ failDeferred = jQuery._Deferred(),
+ promise;
+ // Add errorDeferred methods, then and promise
+ jQuery.extend( deferred, {
+ then: function( doneCallbacks, failCallbacks ) {
+ deferred.done( doneCallbacks ).fail( failCallbacks );
+ return this;
+ },
+ always: function() {
+ return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
+ },
+ fail: failDeferred.done,
+ rejectWith: failDeferred.resolveWith,
+ reject: failDeferred.resolve,
+ isRejected: failDeferred.isResolved,
+ pipe: function( fnDone, fnFail ) {
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( {
+ done: [ fnDone, "resolve" ],
+ fail: [ fnFail, "reject" ]
+ }, function( handler, data ) {
+ var fn = data[ 0 ],
+ action = data[ 1 ],
+ returned;
+ if ( jQuery.isFunction( fn ) ) {
+ deferred[ handler ](function() {
+ returned = fn.apply( this, arguments );
+ if ( jQuery.isFunction( returned.promise ) ) {
+ returned.promise().then( newDefer.resolve, newDefer.reject );
+ } else {
+ newDefer[ action ]( returned );
+ }
+ });
+ } else {
+ deferred[ handler ]( newDefer[ action ] );
+ }
+ });
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ if ( obj == null ) {
+ if ( promise ) {
+ return promise;
+ }
+ promise = obj = {};
+ }
+ var i = promiseMethods.length;
+ while( i-- ) {
+ obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
+ }
+ return obj;
+ }
+ });
+ // Make sure only one callback list will be used
+ deferred.done( failDeferred.cancel ).fail( deferred.cancel );
+ // Unexpose cancel
+ delete deferred.cancel;
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( firstParam ) {
+ var args = arguments,
+ i = 0,
+ length = args.length,
+ count = length,
+ deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+ firstParam :
+ jQuery.Deferred();
+ function resolveFunc( i ) {
+ return function( value ) {
+ args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+ if ( !( --count ) ) {
+ // Strange bug in FF4:
+ // Values changed onto the arguments object sometimes end up as undefined values
+ // outside the $.when method. Cloning the object into a fresh array solves the issue
+ deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
+ }
+ };
+ }
+ if ( length > 1 ) {
+ for( ; i < length; i++ ) {
+ if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
+ args[ i ].promise().then( resolveFunc(i), deferred.reject );
+ } else {
+ --count;
+ }
+ }
+ if ( !count ) {
+ deferred.resolveWith( deferred, args );
+ }
+ } else if ( deferred !== firstParam ) {
+ deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+ }
+ return deferred.promise();
+ }
+});
+
+
+
+jQuery.support = (function() {
+
+ var div = document.createElement( "div" ),
+ all,
+ a,
+ select,
+ opt,
+ input,
+ marginDiv,
+ support,
+ fragment,
+ body,
+ bodyStyle,
+ tds,
+ events,
+ eventName,
+ i,
+ isSupported;
+
+ // Preliminary tests
+ div.setAttribute("className", "t");
+ div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+ all = div.getElementsByTagName( "*" );
+ a = div.getElementsByTagName( "a" )[ 0 ];
+
+ // Can't get basic test support
+ if ( !all || !all.length || !a ) {
+ return {};
+ }
+
+ // First batch of supports tests
+ select = document.createElement( "select" );
+ opt = select.appendChild( document.createElement("option") );
+ input = div.getElementsByTagName( "input" )[ 0 ];
+
+ support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName( "tbody" ).length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName( "link" ).length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ style: /top/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.55$/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: ( input.value === "on" ),
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ optSelected: opt.selected,
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ getSetAttribute: div.className !== "t",
+
+ // Will be defined later
+ submitBubbles: true,
+ changeBubbles: true,
+ focusinBubbles: false,
+ deleteExpando: true,
+ noCloneEvent: true,
+ inlineBlockNeedsLayout: false,
+ shrinkWrapBlocks: false,
+ reliableMarginRight: true
+ };
+
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Test to see if it's possible to delete an expando from an element
+ // Fails in Internet Explorer
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+
+ if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+ div.attachEvent( "onclick", function click() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ support.noCloneEvent = false;
+ div.detachEvent( "onclick", click );
+ });
+ div.cloneNode( true ).fireEvent( "onclick" );
+ }
+
+ // Check if a radio maintains it's value
+ // after being appended to the DOM
+ input = document.createElement("input");
+ input.value = "t";
+ input.setAttribute("type", "radio");
+ support.radioValue = input.value === "t";
+
+ input.setAttribute("checked", "checked");
+ div.appendChild( input );
+ fragment = document.createDocumentFragment();
+ fragment.appendChild( div.firstChild );
+
+ // WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ div.innerHTML = "";
+
+ // Figure out if the W3C box model works as expected
+ div.style.width = div.style.paddingLeft = "1px";
+
+ // We use our own, invisible, body
+ body = document.createElement( "body" );
+ bodyStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ // Set background to avoid IE crashes when removing (#9028)
+ background: "none"
+ };
+ for ( i in bodyStyle ) {
+ body.style[ i ] = bodyStyle[ i ];
+ }
+ body.appendChild( div );
+ document.documentElement.appendChild( body );
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ support.boxModel = div.offsetWidth === 2;
+
+ if ( "zoom" in div.style ) {
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ // (IE < 8 does this)
+ div.style.display = "inline";
+ div.style.zoom = 1;
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+ // Check if elements with layout shrink-wrap their children
+ // (IE 6 does this)
+ div.style.display = "";
+ div.innerHTML = "<div style='width:4px;'></div>";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+ }
+
+ div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+ tds = div.getElementsByTagName( "td" );
+
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ // (only IE 8 fails this test)
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+ tds[ 0 ].style.display = "";
+ tds[ 1 ].style.display = "none";
+
+ // Check if empty table cells still have offsetWidth/Height
+ // (IE < 8 fail this test)
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+ div.innerHTML = "";
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. For more
+ // info see bug #3333
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ if ( document.defaultView && document.defaultView.getComputedStyle ) {
+ marginDiv = document.createElement( "div" );
+ marginDiv.style.width = "0";
+ marginDiv.style.marginRight = "0";
+ div.appendChild( marginDiv );
+ support.reliableMarginRight =
+ ( parseInt( document.defaultView.getComputedStyle( marginDiv, null ).marginRight, 10 ) || 0 ) === 0;
+ }
+
+ // Remove the body element we added
+ body.innerHTML = "";
+ document.documentElement.removeChild( body );
+
+ // Technique from Juriy Zaytsev
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+ // We only care about the case where non-standard event systems
+ // are used, namely in IE. Short-circuiting here helps us to
+ // avoid an eval call (in setAttribute) which can cause CSP
+ // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+ if ( div.attachEvent ) {
+ for( i in {
+ submit: 1,
+ change: 1,
+ focusin: 1
+ } ) {
+ eventName = "on" + i;
+ isSupported = ( eventName in div );
+ if ( !isSupported ) {
+ div.setAttribute( eventName, "return;" );
+ isSupported = ( typeof div[ eventName ] === "function" );
+ }
+ support[ i + "Bubbles" ] = isSupported;
+ }
+ }
+
+ return support;
+})();
+
+// Keep track of boxModel
+jQuery.boxModel = jQuery.support.boxModel;
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+ rmultiDash = /([a-z])([A-Z])/g;
+
+jQuery.extend({
+ cache: {},
+
+ // Please use with caution
+ uuid: 0,
+
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+ "applet": true
+ },
+
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
+ return;
+ }
+
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if ( isNode ) {
+ elem[ jQuery.expando ] = id = ++jQuery.uuid;
+ } else {
+ id = jQuery.expando;
+ }
+ }
+
+ if ( !cache[ id ] ) {
+ cache[ id ] = {};
+
+ // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+ // metadata on plain JS objects when the object is serialized using
+ // JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
+ } else {
+ cache[ id ] = jQuery.extend(cache[ id ], name);
+ }
+ }
+
+ thisCache = cache[ id ];
+
+ // Internal jQuery data is stored in a separate object inside the object's data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data
+ if ( pvt ) {
+ if ( !thisCache[ internalKey ] ) {
+ thisCache[ internalKey ] = {};
+ }
+
+ thisCache = thisCache[ internalKey ];
+ }
+
+ if ( data !== undefined ) {
+ thisCache[ name ] = data;
+ }
+
+ // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+ // not attempt to inspect the internal events object using jQuery.data, as this
+ // internal data object is undocumented and subject to change.
+ if ( name === "events" && !thisCache[name] ) {
+ return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+ }
+
+ return getByName ? thisCache[ name ] : thisCache;
+ },
+
+ removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var internalKey = jQuery.expando, isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+
+ // See jQuery.data for more information
+ id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
+
+ if ( name ) {
+ var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+
+ if ( thisCache ) {
+ delete thisCache[ name ];
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( !isEmptyDataObject(thisCache) ) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if ( pvt ) {
+ delete cache[ id ][ internalKey ];
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject(cache[ id ]) ) {
+ return;
+ }
+ }
+
+ var internalCache = cache[ id ][ internalKey ];
+
+ // Browsers that fail expando deletion also refuse to delete expandos on
+ // the window, but it will allow it on all other JS objects; other browsers
+ // don't care
+ if ( jQuery.support.deleteExpando || cache != window ) {
+ delete cache[ id ];
+ } else {
+ cache[ id ] = null;
+ }
+
+ // We destroyed the entire user cache at once because it's faster than
+ // iterating through each key, but we need to continue to persist internal
+ // data if it existed
+ if ( internalCache ) {
+ cache[ id ] = {};
+ // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+ // metadata on plain JS objects when the object is serialized using
+ // JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+
+ cache[ id ][ internalKey ] = internalCache;
+
+ // Otherwise, we need to eliminate the expando on the node to avoid
+ // false lookups in the cache for entries that no longer exist
+ } else if ( isNode ) {
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if ( jQuery.support.deleteExpando ) {
+ delete elem[ jQuery.expando ];
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ } else {
+ elem[ jQuery.expando ] = null;
+ }
+ }
+ },
+
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return jQuery.data( elem, name, data, true );
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function( elem ) {
+ if ( elem.nodeName ) {
+ var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+ if ( match ) {
+ return !(match === true || elem.getAttribute("classid") !== match);
+ }
+ }
+
+ return true;
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var data = null;
+
+ if ( typeof key === "undefined" ) {
+ if ( this.length ) {
+ data = jQuery.data( this[0] );
+
+ if ( this[0].nodeType === 1 ) {
+ var attr = this[0].attributes, name;
+ for ( var i = 0, l = attr.length; i < l; i++ ) {
+ name = attr[i].name;
+
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.substring(5) );
+
+ dataAttr( this[0], name, data[ name ] );
+ }
+ }
+ }
+ }
+
+ return data;
+
+ } else if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ var parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value === undefined ) {
+ data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+ // Try to fetch any internally stored data first
+ if ( data === undefined && this.length ) {
+ data = jQuery.data( this[0], key );
+ data = dataAttr( this[0], key, data );
+ }
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+
+ } else {
+ return this.each(function() {
+ var $this = jQuery( this ),
+ args = [ parts[0], value ];
+
+ $this.triggerHandler( "setData" + parts[1] + "!", args );
+ jQuery.data( this, key, value );
+ $this.triggerHandler( "changeData" + parts[1] + "!", args );
+ });
+ }
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+function dataAttr( elem, key, data ) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
+
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ !jQuery.isNaN( data ) ? parseFloat( data ) :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data( elem, key, data );
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+}
+
+// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
+// property to be considered empty objects; this property always exists in
+// order to make sure JSON.stringify does not expose internal metadata
+function isEmptyDataObject( obj ) {
+ for ( var name in obj ) {
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+ var deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark",
+ defer = jQuery.data( elem, deferDataKey, undefined, true );
+ if ( defer &&
+ ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
+ ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
+ // Give room for hard-coded callbacks to fire first
+ // and eventually mark/queue something else on the element
+ setTimeout( function() {
+ if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
+ !jQuery.data( elem, markDataKey, undefined, true ) ) {
+ jQuery.removeData( elem, deferDataKey, true );
+ defer.resolve();
+ }
+ }, 0 );
+ }
+}
+
+jQuery.extend({
+
+ _mark: function( elem, type ) {
+ if ( elem ) {
+ type = (type || "fx") + "mark";
+ jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
+ }
+ },
+
+ _unmark: function( force, elem, type ) {
+ if ( force !== true ) {
+ type = elem;
+ elem = force;
+ force = false;
+ }
+ if ( elem ) {
+ type = type || "fx";
+ var key = type + "mark",
+ count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
+ if ( count ) {
+ jQuery.data( elem, key, count, true );
+ } else {
+ jQuery.removeData( elem, key, true );
+ handleQueueMarkDefer( elem, type, "mark" );
+ }
+ }
+ },
+
+ queue: function( elem, type, data ) {
+ if ( elem ) {
+ type = (type || "fx") + "queue";
+ var q = jQuery.data( elem, type, undefined, true );
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !q || jQuery.isArray(data) ) {
+ q = jQuery.data( elem, type, jQuery.makeArray(data), true );
+ } else {
+ q.push( data );
+ }
+ }
+ return q || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ fn = queue.shift(),
+ defer;
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ }
+
+ if ( fn ) {
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift("inprogress");
+ }
+
+ fn.call(elem, function() {
+ jQuery.dequeue(elem, type);
+ });
+ }
+
+ if ( !queue.length ) {
+ jQuery.removeData( elem, type + "queue", true );
+ handleQueueMarkDefer( elem, type, "queue" );
+ }
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ }
+
+ if ( data === undefined ) {
+ return jQuery.queue( this[0], type );
+ }
+ return this.each(function() {
+ var queue = jQuery.queue( this, type, data );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function() {
+ var elem = this;
+ setTimeout(function() {
+ jQuery.dequeue( elem, type );
+ }, time );
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, object ) {
+ if ( typeof type !== "string" ) {
+ object = type;
+ type = undefined;
+ }
+ type = type || "fx";
+ var defer = jQuery.Deferred(),
+ elements = this,
+ i = elements.length,
+ count = 1,
+ deferDataKey = type + "defer",
+ queueDataKey = type + "queue",
+ markDataKey = type + "mark";
+ function resolve() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ }
+ while( i-- ) {
+ if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+ ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+ jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+ jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
+ count++;
+ tmp.done( resolve );
+ }
+ }
+ resolve();
+ return defer.promise();
+ }
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+ rspace = /\s+/,
+ rreturn = /\r/g,
+ rtype = /^(?:button|input)$/i,
+ rfocusable = /^(?:button|input|object|select|textarea)$/i,
+ rclickable = /^a(?:rea)?$/i,
+ rspecial = /^(?:data-|aria-)/,
+ rinvalidChar = /\:/,
+ formHook;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, name, value, true, jQuery.attr );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, name, value, true, jQuery.prop );
+ },
+
+ removeProp: function( name ) {
+ return this.each(function() {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[ name ] = undefined;
+ delete this[ name ];
+ } catch( e ) {}
+ });
+ },
+
+ addClass: function( value ) {
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.addClass( value.call(this, i, self.attr("class") || "") );
+ });
+ }
+
+ if ( value && typeof value === "string" ) {
+ var classNames = (value || "").split( rspace );
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ var elem = this[i];
+
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className ) {
+ elem.className = value;
+
+ } else {
+ var className = " " + elem.className + " ",
+ setClass = elem.className;
+
+ for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+ setClass += " " + classNames[c];
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.removeClass( value.call(this, i, self.attr("class")) );
+ });
+ }
+
+ if ( (value && typeof value === "string") || value === undefined ) {
+ var classNames = (value || "").split( rspace );
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ var elem = this[i];
+
+ if ( elem.nodeType === 1 && elem.className ) {
+ if ( value ) {
+ var className = (" " + elem.className + " ").replace(rclass, " ");
+ for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+ className = className.replace(" " + classNames[c] + " ", " ");
+ }
+ elem.className = jQuery.trim( className );
+
+ } else {
+ elem.className = "";
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ state = stateVal,
+ classNames = value.split( rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space seperated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery._data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ";
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ var hooks, ret,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ return (elem.value || "").replace(rreturn, "");
+ }
+
+ return undefined;
+ }
+
+ var isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var self = jQuery(this), val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, self.val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || ("set" in hooks && hooks.set( this, val, "value" ) === undefined) ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
+
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ // Don't return options that are disabled or in a disabled optgroup
+ if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+ (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+ if ( one && !values.length && options.length ) {
+ return jQuery( options[ index ] ).val();
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var values = jQuery.makeArray( value );
+
+ jQuery(elem).find("option").each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ attrFn: {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true
+ },
+
+ attrFix: {
+ // Always normalize to ensure hook usage
+ tabindex: "tabIndex",
+ readonly: "readOnly"
+ },
+
+ attr: function( elem, name, value, pass ) {
+ var nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return undefined;
+ }
+
+ if ( pass && name in jQuery.attrFn ) {
+ return jQuery( elem )[ name ]( value );
+ }
+
+ var ret, hooks,
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ // Normalize the name if needed
+ name = notxml && jQuery.attrFix[ name ] || name;
+
+ // Get the appropriate hook, or the formHook
+ // if getSetAttribute is not supported and we have form objects in IE6/7
+ hooks = jQuery.attrHooks[ name ] ||
+ ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ?
+ formHook :
+ undefined );
+
+ if ( value !== undefined ) {
+
+ if ( value === null || (value === false && !rspecial.test( name )) ) {
+ jQuery.removeAttr( elem, name );
+ return undefined;
+
+ } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+
+ // Set boolean attributes to the same name
+ if ( value === true && !rspecial.test( name ) ) {
+ value = name;
+ }
+
+ elem.setAttribute( name, "" + value );
+ return value;
+ }
+
+ } else {
+
+ if ( hooks && "get" in hooks && notxml ) {
+ return hooks.get( elem, name );
+
+ } else {
+
+ ret = elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret === null ?
+ undefined :
+ ret;
+ }
+ }
+ },
+
+ removeAttr: function( elem, name ) {
+ if ( elem.nodeType === 1 ) {
+ name = jQuery.attrFix[ name ] || name;
+
+ if ( jQuery.support.getSetAttribute ) {
+ // Use removeAttribute in browsers that support it
+ elem.removeAttribute( name );
+ } else {
+ jQuery.attr( elem, name, "" );
+ elem.removeAttributeNode( elem.getAttributeNode( name ) );
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to it's default in case type is set after value
+ // This is for element creation
+ var val = elem.getAttribute("value");
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ },
+ tabIndex: {
+ get: function( elem ) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ var attributeNode = elem.getAttributeNode("tabIndex");
+
+ return attributeNode && attributeNode.specified ?
+ parseInt( attributeNode.value, 10 ) :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
+ }
+ }
+ },
+
+ propFix: {},
+
+ prop: function( elem, name, value ) {
+ var nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return undefined;
+ }
+
+ var ret, hooks,
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ // Try to normalize/fix the name
+ name = notxml && 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;
+
+ } else {
+ return (elem[ name ] = value);
+ }
+
+ } else {
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ return elem[ name ];
+ }
+ }
+ },
+
+ propHooks: {}
+});
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !jQuery.support.getSetAttribute ) {
+ jQuery.attrFix = jQuery.extend( jQuery.attrFix, {
+ "for": "htmlFor",
+ "class": "className",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ cellpadding: "cellPadding",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ usemap: "useMap",
+ frameborder: "frameBorder"
+ });
+
+ // Use this for any attribute on a form in IE6/7
+ formHook = jQuery.attrHooks.name = jQuery.attrHooks.value = jQuery.valHooks.button = {
+ get: function( elem, name ) {
+ var ret;
+ if ( name === "value" && !jQuery.nodeName( elem, "button" ) ) {
+ return elem.getAttribute( name );
+ }
+ ret = elem.getAttributeNode( name );
+ // Return undefined if not specified instead of empty string
+ return ret && ret.specified ?
+ ret.nodeValue :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ // Check form objects in IE (multiple bugs related)
+ // Only use nodeValue if the attribute node exists on the form
+ var ret = elem.getAttributeNode( name );
+ if ( ret ) {
+ ret.nodeValue = value;
+ return value;
+ }
+ }
+ };
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each([ "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ set: function( elem, value ) {
+ if ( value === "" ) {
+ elem.setAttribute( name, "auto" );
+ return value;
+ }
+ }
+ });
+ });
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+ jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ get: function( elem ) {
+ var ret = elem.getAttribute( name, 2 );
+ return ret === null ? undefined : ret;
+ }
+ });
+ });
+}
+
+if ( !jQuery.support.style ) {
+ jQuery.attrHooks.style = {
+ get: function( elem ) {
+ // Return undefined in the case of empty string
+ // Normalize to lowercase since IE uppercases css property names
+ return elem.style.cssText.toLowerCase() || undefined;
+ },
+ set: function( elem, value ) {
+ return (elem.style.cssText = "" + value);
+ }
+ };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
+ });
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+ jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ get: function( elem ) {
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+ };
+ });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+ }
+ }
+ });
+});
+
+
+
+
+var hasOwn = Object.prototype.hasOwnProperty,
+ rnamespaces = /\.(.*)$/,
+ rformElems = /^(?:textarea|input|select)$/i,
+ rperiod = /\./g,
+ rspaces = / /g,
+ rescape = /[^\w\s.|`]/g,
+ fcleanup = function( nm ) {
+ return nm.replace(rescape, "\\$&");
+ };
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+ // Bind an event to an element
+ // Original by Dean Edwards
+ add: function( elem, types, handler, data ) {
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ if ( handler === false ) {
+ handler = returnFalse;
+ } else if ( !handler ) {
+ // Fixes bug #7229. Fix recommended by jdalton
+ return;
+ }
+
+ var handleObjIn, handleObj;
+
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ }
+
+ // Make sure that the function being executed has a unique ID
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure
+ var elemData = jQuery._data( elem );
+
+ // If no elemData is found then we must be trying to bind to one of the
+ // banned noData elements
+ if ( !elemData ) {
+ return;
+ }
+
+ var events = elemData.events,
+ eventHandle = elemData.handle;
+
+ if ( !events ) {
+ elemData.events = events = {};
+ }
+
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ }
+
+ // Add elem as a property of the handle function
+ // This is to prevent a memory leak with non-native events in IE.
+ eventHandle.elem = elem;
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ var type, i = 0, namespaces;
+
+ while ( (type = types[ i++ ]) ) {
+ handleObj = handleObjIn ?
+ jQuery.extend({}, handleObjIn) :
+ { handler: handler, data: data };
+
+ // Namespaced event handlers
+ if ( type.indexOf(".") > -1 ) {
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+ } else {
+ namespaces = [];
+ handleObj.namespace = "";
+ }
+
+ handleObj.type = type;
+ if ( !handleObj.guid ) {
+ handleObj.guid = handler.guid;
+ }
+
+ // Get the current list of functions bound to this event
+ var handlers = events[ type ],
+ special = jQuery.event.special[ type ] || {};
+
+ // Init the event handler queue
+ if ( !handlers ) {
+ handlers = events[ type ] = [];
+
+ // Check for a special event handler
+ // Only use addEventListener/attachEvent if the special
+ // events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add the function to the element's handler list
+ handlers.push( handleObj );
+
+ // Keep track of which events have been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, pos ) {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ if ( handler === false ) {
+ handler = returnFalse;
+ }
+
+ var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+ elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+ events = elemData && elemData.events;
+
+ if ( !elemData || !events ) {
+ return;
+ }
+
+ // types is actually an event object here
+ if ( types && types.type ) {
+ handler = types.handler;
+ types = types.type;
+ }
+
+ // Unbind all events for the element
+ if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+ types = types || "";
+
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types );
+ }
+
+ return;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).unbind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ while ( (type = types[ i++ ]) ) {
+ origType = type;
+ handleObj = null;
+ all = type.indexOf(".") < 0;
+ namespaces = [];
+
+ if ( !all ) {
+ // Namespaced event handlers
+ namespaces = type.split(".");
+ type = namespaces.shift();
+
+ namespace = new RegExp("(^|\\.)" +
+ jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
+ eventType = events[ type ];
+
+ if ( !eventType ) {
+ continue;
+ }
+
+ if ( !handler ) {
+ for ( j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ jQuery.event.remove( elem, origType, handleObj.handler, j );
+ eventType.splice( j--, 1 );
+ }
+ }
+
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+
+ for ( j = pos || 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( handler.guid === handleObj.guid ) {
+ // remove the given handler for the given type
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ if ( pos == null ) {
+ eventType.splice( j--, 1 );
+ }
+
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+
+ if ( pos != null ) {
+ break;
+ }
+ }
+ }
+
+ // remove generic event handler if no more handlers exist
+ if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ ret = null;
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ var handle = elemData.handle;
+ if ( handle ) {
+ handle.elem = null;
+ }
+
+ delete elemData.events;
+ delete elemData.handle;
+
+ if ( jQuery.isEmptyObject( elemData ) ) {
+ jQuery.removeData( elem, undefined, true );
+ }
+ }
+ },
+
+ // Events that are safe to short-circuit if no handlers are attached.
+ // Native DOM events should not be added, they may have inline handlers.
+ customEvent: {
+ "getData": true,
+ "setData": true,
+ "changeData": true
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+ // Event object or event type
+ var type = event.type || event,
+ namespaces = [],
+ exclusive;
+
+ if ( type.indexOf("!") >= 0 ) {
+ // Exclusive events trigger only for the exact event (no namespaces)
+ type = type.slice(0, -1);
+ exclusive = true;
+ }
+
+ if ( type.indexOf(".") >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+
+ if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+ // No jQuery handlers for this event type, and it can't have inline handlers
+ return;
+ }
+
+ // Caller can pass in an Event, Object, or just an event type string
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[ jQuery.expando ] ? event :
+ // Object literal
+ new jQuery.Event( type, event ) :
+ // Just the event type (string)
+ new jQuery.Event( type );
+
+ event.type = type;
+ event.exclusive = exclusive;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
+
+ // triggerHandler() and global events don't bubble or run the default action
+ if ( onlyHandlers || !elem ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+
+ // Handle a global trigger
+ if ( !elem ) {
+ // TODO: Stop taunting the data cache; remove global events and always attach to document
+ jQuery.each( jQuery.cache, function() {
+ // internalKey variable is just used to make it easier to find
+ // and potentially change this stuff later; currently it just
+ // points to jQuery.expando
+ var internalKey = jQuery.expando,
+ internalCache = this[ internalKey ];
+ if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
+ jQuery.event.trigger( event, data, internalCache.handle.elem );
+ }
+ });
+ return;
+ }
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ event.target = elem;
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data ? jQuery.makeArray( data ) : [];
+ data.unshift( event );
+
+ var cur = elem,
+ // IE doesn't like method names with a colon (#3533, #8272)
+ ontype = type.indexOf(":") < 0 ? "on" + type : "";
+
+ // Fire event on the current element, then bubble up the DOM tree
+ do {
+ var handle = jQuery._data( cur, "handle" );
+
+ event.currentTarget = cur;
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Trigger an inline bound script
+ if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
+ event.result = false;
+ event.preventDefault();
+ }
+
+ // Bubble up to document, then to window
+ cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
+ } while ( cur && !event.isPropagationStopped() );
+
+ // If nobody prevented the default action, do it now
+ if ( !event.isDefaultPrevented() ) {
+ var old,
+ special = jQuery.event.special[ type ] || {};
+
+ if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
+ !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction)() check here because IE6/7 fails that test.
+ // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
+ try {
+ if ( ontype && elem[ type ] ) {
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ old = elem[ ontype ];
+
+ if ( old ) {
+ elem[ ontype ] = null;
+ }
+
+ jQuery.event.triggered = type;
+ elem[ type ]();
+ }
+ } catch ( ieError ) {}
+
+ if ( old ) {
+ elem[ ontype ] = old;
+ }
+
+ jQuery.event.triggered = undefined;
+ }
+ }
+
+ return event.result;
+ },
+
+ handle: function( event ) {
+ event = jQuery.event.fix( event || window.event );
+ // Snapshot the handlers list since a called handler may add/remove events.
+ var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
+ run_all = !event.exclusive && !event.namespace,
+ args = Array.prototype.slice.call( arguments, 0 );
+
+ // Use the fix-ed Event rather than the (read-only) native event
+ args[0] = event;
+ event.currentTarget = this;
+
+ for ( var j = 0, l = handlers.length; j < l; j++ ) {
+ var handleObj = handlers[ j ];
+
+ // Triggered event must 1) be non-exclusive and have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event.
+ if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ event.handler = handleObj.handler;
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ var ret = handleObj.handler.apply( this, args );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
+ }
+ }
+ return event.result;
+ },
+
+ props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // store a copy of the original event object
+ // and "clone" to set read-only properties
+ var originalEvent = event;
+ event = jQuery.Event( originalEvent );
+
+ for ( var i = this.props.length, prop; i; ) {
+ prop = this.props[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary
+ if ( !event.target ) {
+ // Fixes #1925 where srcElement might not be defined either
+ event.target = event.srcElement || document;
+ }
+
+ // check if target is a textnode (safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && event.fromElement ) {
+ event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+ }
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && event.clientX != null ) {
+ var eventDocument = event.target.ownerDocument || document,
+ doc = eventDocument.documentElement,
+ body = eventDocument.body;
+
+ event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+ }
+
+ // Add which for key events
+ if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
+ event.which = event.charCode != null ? event.charCode : event.keyCode;
+ }
+
+ // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+ if ( !event.metaKey && event.ctrlKey ) {
+ event.metaKey = event.ctrlKey;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && event.button !== undefined ) {
+ event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+ }
+
+ return event;
+ },
+
+ // Deprecated, use jQuery.guid instead
+ guid: 1E8,
+
+ // Deprecated, use jQuery.proxy instead
+ proxy: jQuery.proxy,
+
+ special: {
+ ready: {
+ // Make sure the ready event is setup
+ setup: jQuery.bindReady,
+ teardown: jQuery.noop
+ },
+
+ live: {
+ add: function( handleObj ) {
+ jQuery.event.add( this,
+ liveConvert( handleObj.origType, handleObj.selector ),
+ jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+ },
+
+ remove: function( handleObj ) {
+ jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+ }
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( jQuery.isWindow( this ) ) {
+ this.onbeforeunload = eventHandle;
+ }
+ },
+
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
+ }
+ }
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+ } :
+ function( elem, type, handle ) {
+ if ( elem.detachEvent ) {
+ elem.detachEvent( "on" + type, handle );
+ }
+ };
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !this.preventDefault ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // timeStamp is buggy for some events on Firefox(#3843)
+ // So we won't rely on the native value
+ this.timeStamp = jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+
+ // otherwise set the returnValue property of the original event to false (IE)
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+ // Check if mouse(over|out) are still within the same parent element
+ var parent = event.relatedTarget;
+
+ // Firefox sometimes assigns relatedTarget a XUL element
+ // which we cannot access the parentNode property of
+ try {
+
+ // Chrome does something similar, the parentNode property
+ // can be accessed but is null.
+ if ( parent && parent !== document && !parent.parentNode ) {
+ return;
+ }
+ // Traverse up the tree
+ while ( parent && parent !== this ) {
+ parent = parent.parentNode;
+ }
+
+ if ( parent !== this ) {
+ // set the correct event type
+ event.type = event.data;
+
+ // handle event if we actually just moused on to a non sub-element
+ jQuery.event.handle.apply( this, arguments );
+ }
+
+ // assuming we've left the element since we most likely mousedover a xul element
+ } catch(e) { }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+ event.type = event.data;
+ jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ setup: function( data ) {
+ jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+ },
+ teardown: function( data ) {
+ jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+ }
+ };
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function( data, namespaces ) {
+ if ( !jQuery.nodeName( this, "form" ) ) {
+ jQuery.event.add(this, "click.specialSubmit", function( e ) {
+ var elem = e.target,
+ type = elem.type;
+
+ if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+ trigger( "submit", this, arguments );
+ }
+ });
+
+ jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+ var elem = e.target,
+ type = elem.type;
+
+ if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+ trigger( "submit", this, arguments );
+ }
+ });
+
+ } else {
+ return false;
+ }
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialSubmit" );
+ }
+ };
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+ var changeFilters,
+
+ getVal = function( elem ) {
+ var type = elem.type, val = elem.value;
+
+ if ( type === "radio" || type === "checkbox" ) {
+ val = elem.checked;
+
+ } else if ( type === "select-multiple" ) {
+ val = elem.selectedIndex > -1 ?
+ jQuery.map( elem.options, function( elem ) {
+ return elem.selected;
+ }).join("-") :
+ "";
+
+ } else if ( jQuery.nodeName( elem, "select" ) ) {
+ val = elem.selectedIndex;
+ }
+
+ return val;
+ },
+
+ testChange = function testChange( e ) {
+ var elem = e.target, data, val;
+
+ if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
+ return;
+ }
+
+ data = jQuery._data( elem, "_change_data" );
+ val = getVal(elem);
+
+ // the current data will be also retrieved by beforeactivate
+ if ( e.type !== "focusout" || elem.type !== "radio" ) {
+ jQuery._data( elem, "_change_data", val );
+ }
+
+ if ( data === undefined || val === data ) {
+ return;
+ }
+
+ if ( data != null || val ) {
+ e.type = "change";
+ e.liveFired = undefined;
+ jQuery.event.trigger( e, arguments[1], elem );
+ }
+ };
+
+ jQuery.event.special.change = {
+ filters: {
+ focusout: testChange,
+
+ beforedeactivate: testChange,
+
+ click: function( e ) {
+ var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+ if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
+ testChange.call( this, e );
+ }
+ },
+
+ // Change has to be called before submit
+ // Keydown will be called before keypress, which is used in submit-event delegation
+ keydown: function( e ) {
+ var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+ if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
+ (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+ type === "select-multiple" ) {
+ testChange.call( this, e );
+ }
+ },
+
+ // Beforeactivate happens also before the previous element is blurred
+ // with this event you can't trigger a change event, but you can store
+ // information
+ beforeactivate: function( e ) {
+ var elem = e.target;
+ jQuery._data( elem, "_change_data", getVal(elem) );
+ }
+ },
+
+ setup: function( data, namespaces ) {
+ if ( this.type === "file" ) {
+ return false;
+ }
+
+ for ( var type in changeFilters ) {
+ jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+ }
+
+ return rformElems.test( this.nodeName );
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialChange" );
+
+ return rformElems.test( this.nodeName );
+ }
+ };
+
+ changeFilters = jQuery.event.special.change.filters;
+
+ // Handle when the input is .focus()'d
+ changeFilters.focus = changeFilters.beforeactivate;
+}
+
+function trigger( type, elem, args ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ // Don't pass args or remember liveFired; they apply to the donor event.
+ var event = jQuery.extend( {}, args[ 0 ] );
+ event.type = type;
+ event.originalEvent = {};
+ event.liveFired = undefined;
+ jQuery.event.handle.call( elem, event );
+ if ( event.isDefaultPrevented() ) {
+ args[ 0 ].preventDefault();
+ }
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0;
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( attaches++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+
+ function handler( donor ) {
+ // Donor event is always a native one; fix it and switch its type.
+ // Let focusin/out handler cancel the donor focus/blur event.
+ var e = jQuery.event.fix( donor );
+ e.type = fix;
+ e.originalEvent = {};
+ jQuery.event.trigger( e, null, e.target );
+ if ( e.isDefaultPrevented() ) {
+ donor.preventDefault();
+ }
+ }
+ });
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+ jQuery.fn[ name ] = function( type, data, fn ) {
+ var handler;
+
+ // Handle object literals
+ if ( typeof type === "object" ) {
+ for ( var key in type ) {
+ this[ name ](key, data, type[key], fn);
+ }
+ return this;
+ }
+
+ if ( arguments.length === 2 || data === false ) {
+ fn = data;
+ data = undefined;
+ }
+
+ if ( name === "one" ) {
+ handler = function( event ) {
+ jQuery( this ).unbind( event, handler );
+ return fn.apply( this, arguments );
+ };
+ handler.guid = fn.guid || jQuery.guid++;
+ } else {
+ handler = fn;
+ }
+
+ if ( type === "unload" && name !== "one" ) {
+ this.one( type, data, fn );
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.add( this[i], type, handler, data );
+ }
+ }
+
+ return this;
+ };
+});
+
+jQuery.fn.extend({
+ unbind: function( type, fn ) {
+ // Handle object literals
+ if ( typeof type === "object" && !type.preventDefault ) {
+ for ( var key in type ) {
+ this.unbind(key, type[key]);
+ }
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.remove( this[i], type, fn );
+ }
+ }
+
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.live( types, data, fn, selector );
+ },
+
+ undelegate: function( selector, types, fn ) {
+ if ( arguments.length === 0 ) {
+ return this.unbind( "live" );
+
+ } else {
+ return this.die( types, null, fn, selector );
+ }
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ return jQuery.event.trigger( type, data, this[0], true );
+ }
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments,
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ };
+
+ // link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
+ while ( i < args.length ) {
+ args[ i++ ].guid = guid;
+ }
+
+ return this.click( toggler );
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+var liveMap = {
+ focus: "focusin",
+ blur: "focusout",
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+ jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+ var type, i = 0, match, namespaces, preType,
+ selector = origSelector || this.selector,
+ context = origSelector ? this : jQuery( this.context );
+
+ if ( typeof types === "object" && !types.preventDefault ) {
+ for ( var key in types ) {
+ context[ name ]( key, data, types[key], selector );
+ }
+
+ return this;
+ }
+
+ if ( name === "die" && !types &&
+ origSelector && origSelector.charAt(0) === "." ) {
+
+ context.unbind( origSelector );
+
+ return this;
+ }
+
+ if ( data === false || jQuery.isFunction( data ) ) {
+ fn = data || returnFalse;
+ data = undefined;
+ }
+
+ types = (types || "").split(" ");
+
+ while ( (type = types[ i++ ]) != null ) {
+ match = rnamespaces.exec( type );
+ namespaces = "";
+
+ if ( match ) {
+ namespaces = match[0];
+ type = type.replace( rnamespaces, "" );
+ }
+
+ if ( type === "hover" ) {
+ types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+ continue;
+ }
+
+ preType = type;
+
+ if ( liveMap[ type ] ) {
+ types.push( liveMap[ type ] + namespaces );
+ type = type + namespaces;
+
+ } else {
+ type = (liveMap[ type ] || type) + namespaces;
+ }
+
+ if ( name === "live" ) {
+ // bind live handler
+ for ( var j = 0, l = context.length; j < l; j++ ) {
+ jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+ { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+ }
+
+ } else {
+ // unbind live handler
+ context.unbind( "live." + liveConvert( type, selector ), fn );
+ }
+ }
+
+ return this;
+ };
+});
+
+function liveHandler( event ) {
+ var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+ elems = [],
+ selectors = [],
+ events = jQuery._data( this, "events" );
+
+ // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
+ if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
+ return;
+ }
+
+ if ( event.namespace ) {
+ namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
+ event.liveFired = this;
+
+ var live = events.live.slice(0);
+
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+ selectors.push( handleObj.selector );
+
+ } else {
+ live.splice( j--, 1 );
+ }
+ }
+
+ match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+ for ( i = 0, l = match.length; i < l; i++ ) {
+ close = match[i];
+
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
+ elem = close.elem;
+ related = null;
+
+ // Those two events require additional checking
+ if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+ event.type = handleObj.preType;
+ related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+
+ // Make sure not to accidentally match a child element with the same selector
+ if ( related && jQuery.contains( elem, related ) ) {
+ related = elem;
+ }
+ }
+
+ if ( !related || related !== elem ) {
+ elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+ }
+ }
+ }
+ }
+
+ for ( i = 0, l = elems.length; i < l; i++ ) {
+ match = elems[i];
+
+ if ( maxLevel && match.level > maxLevel ) {
+ break;
+ }
+
+ event.currentTarget = match.elem;
+ event.data = match.handleObj.data;
+ event.handleObj = match.handleObj;
+
+ ret = match.handleObj.origHandler.apply( match.elem, arguments );
+
+ if ( ret === false || event.isPropagationStopped() ) {
+ maxLevel = match.level;
+
+ if ( ret === false ) {
+ stop = false;
+ }
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
+ }
+ }
+
+ return stop;
+}
+
+function liveConvert( type, selector ) {
+ return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ if ( fn == null ) {
+ fn = data;
+ data = null;
+ }
+
+ return arguments.length > 0 ?
+ this.bind( name, data, fn ) :
+ this.trigger( name );
+ };
+
+ if ( jQuery.attrFn ) {
+ jQuery.attrFn[ name ] = true;
+ }
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true,
+ rBackslash = /\\/g,
+ rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+// Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+ baseHasDuplicate = false;
+ return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+ results = results || [];
+ context = context || document;
+
+ var origContext = context;
+
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ var m, set, checkSet, extra, ret, cur, pop, i,
+ prune = true,
+ contextXML = Sizzle.isXML( context ),
+ parts = [],
+ soFar = selector;
+
+ // Reset the position of the chunker regexp (start from head)
+ do {
+ chunker.exec( "" );
+ m = chunker.exec( soFar );
+
+ if ( m ) {
+ soFar = m[3];
+
+ parts.push( m[1] );
+
+ if ( m[2] ) {
+ extra = m[3];
+ break;
+ }
+ }
+ } while ( m );
+
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+ set = posProcess( parts[0] + parts[1], context );
+
+ } else {
+ set = Expr.relative[ parts[0] ] ?
+ [ context ] :
+ Sizzle( parts.shift(), context );
+
+ while ( parts.length ) {
+ selector = parts.shift();
+
+ if ( Expr.relative[ selector ] ) {
+ selector += parts.shift();
+ }
+
+ set = posProcess( selector, set );
+ }
+ }
+
+ } else {
+ // Take a shortcut and set the context if the root selector is an ID
+ // (but not if it'll be faster if the inner selector is an ID)
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+ ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set )[0] :
+ ret.set[0];
+ }
+
+ if ( context ) {
+ ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+ set = ret.expr ?
+ Sizzle.filter( ret.expr, ret.set ) :
+ ret.set;
+
+ if ( parts.length > 0 ) {
+ checkSet = makeArray( set );
+
+ } else {
+ prune = false;
+ }
+
+ while ( parts.length ) {
+ cur = parts.pop();
+ pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
+
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+
+ } else {
+ checkSet = parts = [];
+ }
+ }
+
+ if ( !checkSet ) {
+ checkSet = set;
+ }
+
+ if ( !checkSet ) {
+ Sizzle.error( cur || selector );
+ }
+
+ if ( toString.call(checkSet) === "[object Array]" ) {
+ if ( !prune ) {
+ results.push.apply( results, checkSet );
+
+ } else if ( context && context.nodeType === 1 ) {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+ results.push( set[i] );
+ }
+ }
+
+ } else {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+ results.push( set[i] );
+ }
+ }
+ }
+
+ } else {
+ makeArray( checkSet, results );
+ }
+
+ if ( extra ) {
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[ i - 1 ] ) {
+ results.splice( i--, 1 );
+ }
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+ return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+ return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+ var set;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+ var match,
+ type = Expr.order[i];
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ var left = match[1];
+ match.splice( 1, 1 );
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace( rBackslash, "" );
+ set = Expr.find[ type ]( match, context, isXML );
+
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = typeof context.getElementsByTagName !== "undefined" ?
+ context.getElementsByTagName( "*" ) :
+ [];
+ }
+
+ return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+ var match, anyFound,
+ old = expr,
+ result = [],
+ curLoop = set,
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+ while ( expr && set.length ) {
+ for ( var type in Expr.filter ) {
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ var found, item,
+ filter = Expr.filter[ type ],
+ left = match[1];
+
+ anyFound = false;
+
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) === "\\" ) {
+ continue;
+ }
+
+ if ( curLoop === result ) {
+ result = [];
+ }
+
+ if ( Expr.preFilter[ type ] ) {
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+ if ( !match ) {
+ anyFound = found = true;
+
+ } else if ( match === true ) {
+ continue;
+ }
+ }
+
+ if ( match ) {
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ var pass = not ^ !!found;
+
+ if ( inplace && found != null ) {
+ if ( pass ) {
+ anyFound = true;
+
+ } else {
+ curLoop[i] = false;
+ }
+
+ } else if ( pass ) {
+ result.push( item );
+ anyFound = true;
+ }
+ }
+ }
+ }
+
+ if ( found !== undefined ) {
+ if ( !inplace ) {
+ curLoop = result;
+ }
+
+ expr = expr.replace( Expr.match[ type ], "" );
+
+ if ( !anyFound ) {
+ return [];
+ }
+
+ break;
+ }
+ }
+ }
+
+ // Improper expression
+ if ( expr === old ) {
+ if ( anyFound == null ) {
+ Sizzle.error( expr );
+
+ } else {
+ break;
+ }
+ }
+
+ old = expr;
+ }
+
+ return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+ throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+ order: [ "ID", "NAME", "TAG" ],
+
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+
+ leftMatch: {},
+
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+
+ attrHandle: {
+ href: function( elem ) {
+ return elem.getAttribute( "href" );
+ },
+ type: function( elem ) {
+ return elem.getAttribute( "type" );
+ }
+ },
+
+ relative: {
+ "+": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !rNonWord.test( part ),
+ isPartStrNotTag = isPartStr && !isTag;
+
+ if ( isTag ) {
+ part = part.toLowerCase();
+ }
+
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+ if ( (elem = checkSet[i]) ) {
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+ elem || false :
+ elem === part;
+ }
+ }
+
+ if ( isPartStrNotTag ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ },
+
+ ">": function( checkSet, part ) {
+ var elem,
+ isPartStr = typeof part === "string",
+ i = 0,
+ l = checkSet.length;
+
+ if ( isPartStr && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+
+ if ( elem ) {
+ var parent = elem.parentNode;
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+ }
+ }
+
+ } else {
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+
+ if ( elem ) {
+ checkSet[i] = isPartStr ?
+ elem.parentNode :
+ elem.parentNode === part;
+ }
+ }
+
+ if ( isPartStr ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ }
+ },
+
+ "": function(checkSet, part, isXML){
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+ },
+
+ "~": function( checkSet, part, isXML ) {
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+ }
+ },
+
+ find: {
+ ID: function( match, context, isXML ) {
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ },
+
+ NAME: function( match, context ) {
+ if ( typeof context.getElementsByName !== "undefined" ) {
+ var ret = [],
+ results = context.getElementsByName( match[1] );
+
+ for ( var i = 0, l = results.length; i < l; i++ ) {
+ if ( results[i].getAttribute("name") === match[1] ) {
+ ret.push( results[i] );
+ }
+ }
+
+ return ret.length === 0 ? null : ret;
+ }
+ },
+
+ TAG: function( match, context ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( match[1] );
+ }
+ }
+ },
+ preFilter: {
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+ match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+ if ( isXML ) {
+ return match;
+ }
+
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+ if ( elem ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
+ result.push( elem );
+ }
+
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ ID: function( match ) {
+ return match[1].replace( rBackslash, "" );
+ },
+
+ TAG: function( match, curLoop ) {
+ return match[1].replace( rBackslash, "" ).toLowerCase();
+ },
+
+ CHILD: function( match ) {
+ if ( match[1] === "nth" ) {
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ match[2] = match[2].replace(/^\+|\s*/g, '');
+
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+ // calculate the numbers (first)n+(last) including if they are negative
+ match[2] = (test[1] + (test[2] || 1)) - 0;
+ match[3] = test[3] - 0;
+ }
+ else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // TODO: Move to normal caching system
+ match[0] = done++;
+
+ return match;
+ },
+
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+ var name = match[1] = match[1].replace( rBackslash, "" );
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ // Handle if an un-quoted value was used
+ match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+ if ( match[2] === "~=" ) {
+ match[4] = " " + match[4] + " ";
+ }
+
+ return match;
+ },
+
+ PSEUDO: function( match, curLoop, inplace, result, not ) {
+ if ( match[1] === "not" ) {
+ // If we're dealing with a complex expression, or a simple one
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+ match[3] = Sizzle(match[3], null, null, curLoop);
+
+ } else {
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+ if ( !inplace ) {
+ result.push.apply( result, ret );
+ }
+
+ return false;
+ }
+
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+ return true;
+ }
+
+ return match;
+ },
+
+ POS: function( match ) {
+ match.unshift( true );
+
+ return match;
+ }
+ },
+
+ filters: {
+ enabled: function( elem ) {
+ return elem.disabled === false && elem.type !== "hidden";
+ },
+
+ disabled: function( elem ) {
+ return elem.disabled === true;
+ },
+
+ checked: function( elem ) {
+ return elem.checked === true;
+ },
+
+ selected: function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ parent: function( elem ) {
+ return !!elem.firstChild;
+ },
+
+ empty: function( elem ) {
+ return !elem.firstChild;
+ },
+
+ has: function( elem, i, match ) {
+ return !!Sizzle( match[3], elem ).length;
+ },
+
+ header: function( elem ) {
+ return (/h\d/i).test( elem.nodeName );
+ },
+
+ text: function( elem ) {
+ var attr = elem.getAttribute( "type" ), type = elem.type;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+ },
+
+ radio: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+ },
+
+ checkbox: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+ },
+
+ file: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+ },
+
+ password: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+ },
+
+ submit: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "submit" === elem.type;
+ },
+
+ image: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+ },
+
+ reset: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "reset" === elem.type;
+ },
+
+ button: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && "button" === elem.type || name === "button";
+ },
+
+ input: function( elem ) {
+ return (/input|select|textarea|button/i).test( elem.nodeName );
+ },
+
+ focus: function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
+ }
+ },
+ setFilters: {
+ first: function( elem, i ) {
+ return i === 0;
+ },
+
+ last: function( elem, i, match, array ) {
+ return i === array.length - 1;
+ },
+
+ even: function( elem, i ) {
+ return i % 2 === 0;
+ },
+
+ odd: function( elem, i ) {
+ return i % 2 === 1;
+ },
+
+ lt: function( elem, i, match ) {
+ return i < match[3] - 0;
+ },
+
+ gt: function( elem, i, match ) {
+ return i > match[3] - 0;
+ },
+
+ nth: function( elem, i, match ) {
+ return match[3] - 0 === i;
+ },
+
+ eq: function( elem, i, match ) {
+ return match[3] - 0 === i;
+ }
+ },
+ filter: {
+ PSEUDO: function( elem, match, i, array ) {
+ var name = match[1],
+ filter = Expr.filters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+
+ } else if ( name === "contains" ) {
+ return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+ } else if ( name === "not" ) {
+ var not = match[3];
+
+ for ( var j = 0, l = not.length; j < l; j++ ) {
+ if ( not[j] === elem ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ } else {
+ Sizzle.error( name );
+ }
+ },
+
+ CHILD: function( elem, match ) {
+ var type = match[1],
+ node = elem;
+
+ switch ( type ) {
+ case "only":
+ case "first":
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ if ( type === "first" ) {
+ return true;
+ }
+
+ node = elem;
+
+ case "last":
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ case "nth":
+ var first = match[2],
+ last = match[3];
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ var doneName = match[0],
+ parent = elem.parentNode;
+
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+ var count = 0;
+
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+
+ parent.sizcache = doneName;
+ }
+
+ var diff = elem.nodeIndex - last;
+
+ if ( first === 0 ) {
+ return diff === 0;
+
+ } else {
+ return ( diff % first === 0 && diff / first >= 0 );
+ }
+ }
+ },
+
+ ID: function( elem, match ) {
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
+ },
+
+ TAG: function( elem, match ) {
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+ },
+
+ CLASS: function( elem, match ) {
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
+ .indexOf( match ) > -1;
+ },
+
+ ATTR: function( elem, match ) {
+ var name = match[1],
+ result = Expr.attrHandle[ name ] ?
+ Expr.attrHandle[ name ]( elem ) :
+ elem[ name ] != null ?
+ elem[ name ] :
+ elem.getAttribute( name ),
+ value = result + "",
+ type = match[2],
+ check = match[4];
+
+ return result == null ?
+ type === "!=" :
+ type === "=" ?
+ value === check :
+ type === "*=" ?
+ value.indexOf(check) >= 0 :
+ type === "~=" ?
+ (" " + value + " ").indexOf(check) >= 0 :
+ !check ?
+ value && result !== false :
+ type === "!=" ?
+ value !== check :
+ type === "^=" ?
+ value.indexOf(check) === 0 :
+ type === "$=" ?
+ value.substr(value.length - check.length) === check :
+ type === "|=" ?
+ value === check || value.substr(0, check.length + 1) === check + "-" :
+ false;
+ },
+
+ POS: function( elem, match, i, array ) {
+ var name = match[2],
+ filter = Expr.setFilters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ }
+ }
+ }
+};
+
+var origPOS = Expr.match.POS,
+ fescape = function(all, num){
+ return "\\" + (num - 0 + 1);
+ };
+
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+ array = Array.prototype.slice.call( array, 0 );
+
+ if ( results ) {
+ results.push.apply( results, array );
+ return results;
+ }
+
+ return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+ makeArray = function( array, results ) {
+ var i = 0,
+ ret = results || [];
+
+ if ( toString.call(array) === "[object Array]" ) {
+ Array.prototype.push.apply( ret, array );
+
+ } else {
+ if ( typeof array.length === "number" ) {
+ for ( var l = array.length; i < l; i++ ) {
+ ret.push( array[i] );
+ }
+
+ } else {
+ for ( ; array[i]; i++ ) {
+ ret.push( array[i] );
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ return a.compareDocumentPosition ? -1 : 1;
+ }
+
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+ };
+
+} else {
+ sortOrder = function( a, b ) {
+ var al, bl,
+ ap = [],
+ bp = [],
+ aup = a.parentNode,
+ bup = b.parentNode,
+ cur = aup;
+
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+
+ // If no parents were found then the nodes are disconnected
+ } else if ( !aup ) {
+ return -1;
+
+ } else if ( !bup ) {
+ return 1;
+ }
+
+ // Otherwise they're somewhere else in the tree so we need
+ // to build up a full list of the parentNodes for comparison
+ while ( cur ) {
+ ap.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ cur = bup;
+
+ while ( cur ) {
+ bp.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ al = ap.length;
+ bl = bp.length;
+
+ // Start walking down the tree looking for a discrepancy
+ for ( var i = 0; i < al && i < bl; i++ ) {
+ if ( ap[i] !== bp[i] ) {
+ return siblingCheck( ap[i], bp[i] );
+ }
+ }
+
+ // We ended someplace up the tree so do a sibling check
+ return i === al ?
+ siblingCheck( a, bp[i], -1 ) :
+ siblingCheck( ap[i], b, 1 );
+ };
+
+ siblingCheck = function( a, b, ret ) {
+ if ( a === b ) {
+ return ret;
+ }
+
+ var cur = a.nextSibling;
+
+ while ( cur ) {
+ if ( cur === b ) {
+ return -1;
+ }
+
+ cur = cur.nextSibling;
+ }
+
+ return 1;
+ };
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( elems ) {
+ var ret = "", elem;
+
+ for ( var i = 0; elems[i]; i++ ) {
+ elem = elems[i];
+
+ // Get the text from text nodes and CDATA nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+ ret += elem.nodeValue;
+
+ // Traverse everything else, except comment nodes
+ } else if ( elem.nodeType !== 8 ) {
+ ret += Sizzle.getText( elem.childNodes );
+ }
+ }
+
+ return ret;
+};
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+ // We're going to inject a fake input element with a specified name
+ var form = document.createElement("div"),
+ id = "script" + (new Date()).getTime(),
+ root = document.documentElement;
+
+ form.innerHTML = "<a name='" + id + "'/>";
+
+ // Inject it into the root element, check its status, and remove it quickly
+ root.insertBefore( form, root.firstChild );
+
+ // The workaround has to do additional checks after a getElementById
+ // Which slows things down for other browsers (hence the branching)
+ if ( document.getElementById( id ) ) {
+ Expr.find.ID = function( match, context, isXML ) {
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+
+ return m ?
+ m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+ [m] :
+ undefined :
+ [];
+ }
+ };
+
+ Expr.filter.ID = function( elem, match ) {
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+ return elem.nodeType === 1 && node && node.nodeValue === match;
+ };
+ }
+
+ root.removeChild( form );
+
+ // release memory in IE
+ root = form = null;
+})();
+
+(function(){
+ // Check to see if the browser returns only elements
+ // when doing getElementsByTagName("*")
+
+ // Create a fake element
+ var div = document.createElement("div");
+ div.appendChild( document.createComment("") );
+
+ // Make sure no comments are found
+ if ( div.getElementsByTagName("*").length > 0 ) {
+ Expr.find.TAG = function( match, context ) {
+ var results = context.getElementsByTagName( match[1] );
+
+ // Filter out possible comments
+ if ( match[1] === "*" ) {
+ var tmp = [];
+
+ for ( var i = 0; results[i]; i++ ) {
+ if ( results[i].nodeType === 1 ) {
+ tmp.push( results[i] );
+ }
+ }
+
+ results = tmp;
+ }
+
+ return results;
+ };
+ }
+
+ // Check to see if an attribute returns normalized href attributes
+ div.innerHTML = "<a href='#'></a>";
+
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+ div.firstChild.getAttribute("href") !== "#" ) {
+
+ Expr.attrHandle.href = function( elem ) {
+ return elem.getAttribute( "href", 2 );
+ };
+ }
+
+ // release memory in IE
+ div = null;
+})();
+
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle,
+ div = document.createElement("div"),
+ id = "__sizzle__";
+
+ div.innerHTML = "<p class='TEST'></p>";
+
+ // Safari can't handle uppercase or unicode characters when
+ // in quirks mode.
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
+
+ Sizzle = function( query, context, extra, seed ) {
+ context = context || document;
+
+ // Only use querySelectorAll on non-XML documents
+ // (ID selectors don't work in non-HTML documents)
+ if ( !seed && !Sizzle.isXML(context) ) {
+ // See if we find a selector to speed up
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+ // Speed-up: Sizzle("TAG")
+ if ( match[1] ) {
+ return makeArray( context.getElementsByTagName( query ), extra );
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
+ }
+ }
+
+ if ( context.nodeType === 9 ) {
+ // Speed-up: Sizzle("body")
+ // The body element only exists once, optimize finding it
+ if ( query === "body" && context.body ) {
+ return makeArray( [ context.body ], extra );
+
+ // Speed-up: Sizzle("#ID")
+ } else if ( match && match[3] ) {
+ var elem = context.getElementById( match[3] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id === match[3] ) {
+ return makeArray( [ elem ], extra );
+ }
+
+ } else {
+ return makeArray( [], extra );
+ }
+ }
+
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(qsaError) {}
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ var oldContext = context,
+ old = context.getAttribute( "id" ),
+ nid = old || id,
+ hasParent = context.parentNode,
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+ if ( !old ) {
+ context.setAttribute( "id", nid );
+ } else {
+ nid = nid.replace( /'/g, "\\$&" );
+ }
+ if ( relativeHierarchySelector && hasParent ) {
+ context = context.parentNode;
+ }
+
+ try {
+ if ( !relativeHierarchySelector || hasParent ) {
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+ }
+
+ } catch(pseudoError) {
+ } finally {
+ if ( !old ) {
+ oldContext.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ // release memory in IE
+ div = null;
+ })();
+}
+
+(function(){
+ var html = document.documentElement,
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+ if ( matches ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9 fails this)
+ var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+ pseudoWorks = false;
+
+ try {
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( document.documentElement, "[test!='']:sizzle" );
+
+ } catch( pseudoError ) {
+ pseudoWorks = true;
+ }
+
+ Sizzle.matchesSelector = function( node, expr ) {
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+ if ( !Sizzle.isXML( node ) ) {
+ try {
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+ var ret = matches.call( node, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || !disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9, so check for that
+ node.document && node.document.nodeType !== 11 ) {
+ return ret;
+ }
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle(expr, null, null, [node]).length > 0;
+ };
+ }
+})();
+
+(function(){
+ var div = document.createElement("div");
+
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+ // Opera can't find a second classname (in 9.6)
+ // Also, make sure that getElementsByClassName actually exists
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+ return;
+ }
+
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
+ div.lastChild.className = "e";
+
+ if ( div.getElementsByClassName("e").length === 1 ) {
+ return;
+ }
+
+ Expr.order.splice(1, 0, "CLASS");
+ Expr.find.CLASS = function( match, context, isXML ) {
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+ return context.getElementsByClassName(match[1]);
+ }
+ };
+
+ // release memory in IE
+ div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+
+ if ( elem.nodeName.toLowerCase() === cur ) {
+ match = elem;
+ break;
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+
+ if ( typeof cur !== "string" ) {
+ if ( elem === cur ) {
+ match = true;
+ break;
+ }
+
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+ match = elem;
+ break;
+ }
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+if ( document.documentElement.contains ) {
+ Sizzle.contains = function( a, b ) {
+ return a !== b && (a.contains ? a.contains(b) : true);
+ };
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+ Sizzle.contains = function( a, b ) {
+ return !!(a.compareDocumentPosition(b) & 16);
+ };
+
+} else {
+ Sizzle.contains = function() {
+ return false;
+ };
+}
+
+Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context ) {
+ var match,
+ tmpSet = [],
+ later = "",
+ root = context.nodeType ? [context] : context;
+
+ // Position selectors must be done after the filter
+ // And so must :not(positional) so we move all PSEUDOs to the end
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+ later += match[0];
+ selector = selector.replace( Expr.match.PSEUDO, "" );
+ }
+
+ selector = Expr.relative[selector] ? selector + "*" : selector;
+
+ for ( var i = 0, l = root.length; i < l; i++ ) {
+ Sizzle( selector, root[i], tmpSet );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+ // Note: This RegExp should be improved, or likely pulled from Sizzle
+ rmultiselector = /,/,
+ isSimple = /^.[^:#\[\.,]*$/,
+ slice = Array.prototype.slice,
+ POS = jQuery.expr.match.POS,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var self = this,
+ i, l;
+
+ if ( typeof selector !== "string" ) {
+ return jQuery( selector ).filter(function() {
+ for ( i = 0, l = self.length; i < l; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ });
+ }
+
+ var ret = this.pushStack( "", "find", selector ),
+ length, n, r;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( n = length; n < ret.length; n++ ) {
+ for ( r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ has: function( target ) {
+ var targets = jQuery( target );
+ return this.filter(function() {
+ for ( var i = 0, l = targets.length; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && ( typeof selector === "string" ?
+ jQuery.filter( selector, this ).length > 0 :
+ this.filter( selector ).length > 0 );
+ },
+
+ closest: function( selectors, context ) {
+ var ret = [], i, l, cur = this[0];
+
+ // Array
+ if ( jQuery.isArray( selectors ) ) {
+ var match, selector,
+ matches = {},
+ level = 1;
+
+ if ( cur && selectors.length ) {
+ for ( i = 0, l = selectors.length; i < l; i++ ) {
+ selector = selectors[i];
+
+ if ( !matches[ selector ] ) {
+ matches[ selector ] = POS.test( selector ) ?
+ jQuery( selector, context || this.context ) :
+ selector;
+ }
+ }
+
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ for ( selector in matches ) {
+ match = matches[ selector ];
+
+ if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
+ ret.push({ selector: selector, elem: cur, level: level });
+ }
+ }
+
+ cur = cur.parentNode;
+ level++;
+ }
+ }
+
+ return ret;
+ }
+
+ // String
+ var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ cur = this[i];
+
+ while ( cur ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+ ret.push( cur );
+ break;
+
+ } else {
+ cur = cur.parentNode;
+ if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+ break;
+ }
+ }
+ }
+ }
+
+ ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+ return this.pushStack( ret, "closest", selectors );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+ if ( !elem || typeof elem === "string" ) {
+ return jQuery.inArray( this[0],
+ // If it receives a string, the selector is used
+ // If it receives nothing, the siblings are used
+ elem ? jQuery( elem ) : this.parent().children() );
+ }
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return jQuery.nth( elem, 2, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return jQuery.nth( elem, 2, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( elem.parentNode.firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.makeArray( elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until ),
+ // The variable 'args' was introduced in
+ // https://github.com/jquery/jquery/commit/52a0238
+ // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+ // http://code.google.com/p/v8/issues/detail?id=1050
+ args = slice.call(arguments);
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+ if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+
+ return this.pushStack( ret, name, args.join(",") );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 ?
+ jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+ jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ nth: function( cur, result, dir, elem ) {
+ result = result || 1;
+ var num = 0;
+
+ for ( ; cur; cur = cur[dir] ) {
+ if ( cur.nodeType === 1 && ++num === result ) {
+ break;
+ }
+ }
+
+ return cur;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+ // Can't pass null or undefined to indexOf in Firefox 4
+ // Set to 0 to skip string check
+ qualifier = qualifier || 0;
+
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ var retVal = !!qualifier.call( elem, i, elem );
+ return retVal === keep;
+ });
+
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return (elem === qualifier) === keep;
+ });
+
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
+
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
+ }
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+ });
+}
+
+
+
+
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ rhtml = /<|&#?\w+;/,
+ rnocache = /<(?:script|object|embed|option|style)/i,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /\/(java|ecma)script/i,
+ wrapMap = {
+ option: [ 1, "<select multiple='multiple'>", "</select>" ],
+ legend: [ 1, "<fieldset>", "</fieldset>" ],
+ thead: [ 1, "<table>", "</table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+ col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+ area: [ 1, "<map>", "</map>" ],
+ _default: [ 0, "", "" ]
+ };
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+ wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+ text: function( text ) {
+ if ( jQuery.isFunction(text) ) {
+ return this.each(function(i) {
+ var self = jQuery( this );
+
+ self.text( text.call(this, i, self.text()) );
+ });
+ }
+
+ if ( typeof text !== "object" && text !== undefined ) {
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+ }
+
+ return jQuery.text( this );
+ },
+
+ wrapAll: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var 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.firstChild && elem.firstChild.nodeType === 1 ) {
+ elem = elem.firstChild;
+ }
+
+ 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 ) {
+ return this.each(function() {
+ jQuery( this ).wrapAll( html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.insertBefore( elem, this.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this );
+ });
+ } else if ( arguments.length ) {
+ var set = jQuery(arguments[0]);
+ set.push.apply( set, this.toArray() );
+ return this.pushStack( set, "before", arguments );
+ }
+ },
+
+ after: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ } else if ( arguments.length ) {
+ var set = this.pushStack( this, "after", arguments );
+ set.push.apply( set, jQuery(arguments[0]).toArray() );
+ return set;
+ }
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ jQuery.cleanData( [ elem ] );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ }
+
+ // Remove any remaining nodes
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+ }
+
+ 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 ) {
+ if ( value === undefined ) {
+ return this[0] && this[0].nodeType === 1 ?
+ this[0].innerHTML.replace(rinlinejQuery, "") :
+ null;
+
+ // See if we can take a shortcut and just use innerHTML
+ } else if ( typeof value === "string" && !rnocache.test( value ) &&
+ (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+ !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+ value = value.replace(rxhtmlTag, "<$1></$2>");
+
+ try {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( this[i].nodeType === 1 ) {
+ jQuery.cleanData( this[i].getElementsByTagName("*") );
+ this[i].innerHTML = value;
+ }
+ }
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch(e) {
+ this.empty().append( value );
+ }
+
+ } else if ( jQuery.isFunction( value ) ) {
+ this.each(function(i){
+ var self = jQuery( this );
+
+ self.html( value.call(this, i, self.html()) );
+ });
+
+ } else {
+ this.empty().append( value );
+ }
+
+ return this;
+ },
+
+ replaceWith: function( value ) {
+ if ( this[0] && this[0].parentNode ) {
+ // Make sure that the elements are removed from the DOM before they are inserted
+ // this can help fix replacing a parent with child elements
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this), old = self.html();
+ self.replaceWith( value.call( this, i, old ) );
+ });
+ }
+
+ if ( typeof value !== "string" ) {
+ value = jQuery( value ).detach();
+ }
+
+ return this.each(function() {
+ var next = this.nextSibling,
+ parent = this.parentNode;
+
+ jQuery( this ).remove();
+
+ if ( next ) {
+ jQuery(next).before( value );
+ } else {
+ jQuery(parent).append( value );
+ }
+ });
+ } else {
+ return this.length ?
+ this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+ this;
+ }
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, table, callback ) {
+ var results, first, fragment, parent,
+ value = args[0],
+ scripts = [];
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+ return this.each(function() {
+ jQuery(this).domManip( args, table, callback, true );
+ });
+ }
+
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ args[0] = value.call(this, i, table ? self.html() : undefined);
+ self.domManip( args, table, callback );
+ });
+ }
+
+ if ( this[0] ) {
+ parent = value && value.parentNode;
+
+ // If we're in a fragment, just use that instead of building a new one
+ if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+ results = { fragment: parent };
+
+ } else {
+ results = jQuery.buildFragment( args, this, scripts );
+ }
+
+ fragment = results.fragment;
+
+ if ( fragment.childNodes.length === 1 ) {
+ first = fragment = fragment.firstChild;
+ } else {
+ first = fragment.firstChild;
+ }
+
+ if ( first ) {
+ table = table && jQuery.nodeName( first, "tr" );
+
+ for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+ callback.call(
+ table ?
+ root(this[i], first) :
+ this[i],
+ // Make sure that we do not leak memory by inadvertently discarding
+ // the original fragment (which might have attached data) instead of
+ // using it; in addition, use the original fragment object for the last
+ // item instead of first because it can end up being emptied incorrectly
+ // in certain situations (Bug #8070).
+ // Fragments from the fragment cache must always be cloned and never used
+ // in place.
+ results.cacheable || (l > 1 && i < lastIndex) ?
+ jQuery.clone( fragment, true, true ) :
+ fragment
+ );
+ }
+ }
+
+ if ( scripts.length ) {
+ jQuery.each( scripts, evalScript );
+ }
+ }
+
+ return this;
+ }
+});
+
+function root( elem, cur ) {
+ return jQuery.nodeName(elem, "table") ?
+ (elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+ elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+ if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+ return;
+ }
+
+ var internalKey = jQuery.expando,
+ oldData = jQuery.data( src ),
+ curData = jQuery.data( dest, oldData );
+
+ // Switch to use the internal data object, if it exists, for the next
+ // stage of data copying
+ if ( (oldData = oldData[ internalKey ]) ) {
+ var events = oldData.events;
+ curData = curData[ internalKey ] = jQuery.extend({}, oldData);
+
+ if ( events ) {
+ delete curData.handle;
+ curData.events = {};
+
+ for ( var type in events ) {
+ for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+ }
+ }
+ }
+ }
+}
+
+function cloneFixAttributes( src, dest ) {
+ var nodeName;
+
+ // We do not need to do anything for non-Elements
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // clearAttributes removes the attributes, which we don't want,
+ // but also removes the attachEvent events, which we *do* want
+ if ( dest.clearAttributes ) {
+ dest.clearAttributes();
+ }
+
+ // mergeAttributes, in contrast, only merges back on the
+ // original attributes, not the events
+ if ( dest.mergeAttributes ) {
+ dest.mergeAttributes( src );
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ // IE6-8 fail to clone children inside object elements that use
+ // the proprietary classid attribute value (rather than the type
+ // attribute) to identify the type of content to display
+ if ( nodeName === "object" ) {
+ dest.outerHTML = src.outerHTML;
+
+ } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+ if ( src.checked ) {
+ dest.defaultChecked = dest.checked = src.checked;
+ }
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if ( dest.value !== src.value ) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if ( nodeName === "option" ) {
+ dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+
+ // Event data gets referenced instead of copied if the expando
+ // gets copied too
+ dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+ var fragment, cacheable, cacheresults,
+ doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+ // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+ // Cloning options loses the selected state, so don't cache them
+ // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+ // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+ if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+ args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+ cacheable = true;
+
+ cacheresults = jQuery.fragments[ args[0] ];
+ if ( cacheresults && cacheresults !== 1 ) {
+ fragment = cacheresults;
+ }
+ }
+
+ if ( !fragment ) {
+ fragment = doc.createDocumentFragment();
+ jQuery.clean( args, doc, fragment, scripts );
+ }
+
+ if ( cacheable ) {
+ jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+ }
+
+ return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var ret = [],
+ insert = jQuery( selector ),
+ parent = this.length === 1 && this[0].parentNode;
+
+ if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+ insert[ original ]( this[0] );
+ return this;
+
+ } else {
+ for ( var i = 0, l = insert.length; i < l; i++ ) {
+ var elems = (i > 0 ? this.clone(true) : this).get();
+ jQuery( insert[i] )[ original ]( elems );
+ ret = ret.concat( elems );
+ }
+
+ return this.pushStack( ret, name, insert.selector );
+ }
+ };
+});
+
+function getAll( elem ) {
+ if ( "getElementsByTagName" in elem ) {
+ return elem.getElementsByTagName( "*" );
+
+ } else if ( "querySelectorAll" in elem ) {
+ return elem.querySelectorAll( "*" );
+
+ } else {
+ return [];
+ }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+ if ( elem.type === "checkbox" || elem.type === "radio" ) {
+ elem.defaultChecked = elem.checked;
+ }
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+ if ( jQuery.nodeName( elem, "input" ) ) {
+ fixDefaultChecked( elem );
+ } else if ( elem.getElementsByTagName ) {
+ jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+ }
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var clone = elem.cloneNode(true),
+ srcElements,
+ destElements,
+ i;
+
+ if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+ // IE copies events bound via attachEvent when using cloneNode.
+ // Calling detachEvent on the clone will also remove the events
+ // from the original. In order to get around this, we use some
+ // proprietary methods to clear the events. Thanks to MooTools
+ // guys for this hotness.
+
+ cloneFixAttributes( elem, clone );
+
+ // Using Sizzle here is crazy slow, so we use getElementsByTagName
+ // instead
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ // Weird iteration because IE will replace the length property
+ // with an element if you are cloning the body and one of the
+ // elements on the page has a name or id of "length"
+ for ( i = 0; srcElements[i]; ++i ) {
+ cloneFixAttributes( srcElements[i], destElements[i] );
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ cloneCopyEvent( elem, clone );
+
+ if ( deepDataAndEvents ) {
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ for ( i = 0; srcElements[i]; ++i ) {
+ cloneCopyEvent( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ clean: function( elems, context, fragment, scripts ) {
+ var checkScriptType;
+
+ context = context || document;
+
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if ( typeof context.createElement === "undefined" ) {
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+ }
+
+ var ret = [];
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( typeof elem === "number" ) {
+ elem += "";
+ }
+
+ if ( !elem ) {
+ continue;
+ }
+
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" ) {
+ if ( !rhtml.test( elem ) ) {
+ elem = context.createTextNode( elem );
+ } else {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+ wrap = wrapMap[ tag ] || wrapMap._default,
+ depth = wrap[0],
+ div = context.createElement("div");
+
+ // Go to html and back, then peel off extra wrappers
+ div.innerHTML = wrap[1] + elem + wrap[2];
+
+ // Move to the right depth
+ while ( depth-- ) {
+ div = div.lastChild;
+ }
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( !jQuery.support.tbody ) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ var hasBody = rtbody.test(elem),
+ tbody = tag === "table" && !hasBody ?
+ div.firstChild && div.firstChild.childNodes :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !hasBody ?
+ div.childNodes :
+ [];
+
+ for ( var j = tbody.length - 1; j >= 0 ; --j ) {
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ }
+ }
+ }
+
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ }
+
+ elem = div.childNodes;
+ }
+ }
+
+ // Resets defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ var len;
+ if ( !jQuery.support.appendChecked ) {
+ if ( elem[0] && typeof (len = elem.length) === "number" ) {
+ for ( i = 0; i < len; i++ ) {
+ findInputs( elem[i] );
+ }
+ } else {
+ findInputs( elem );
+ }
+ }
+
+ if ( elem.nodeType ) {
+ ret.push( elem );
+ } else {
+ ret = jQuery.merge( ret, elem );
+ }
+ }
+
+ if ( fragment ) {
+ checkScriptType = function( elem ) {
+ return !elem.type || rscriptType.test( elem.type );
+ };
+ for ( i = 0; ret[i]; i++ ) {
+ if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+ scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+ } else {
+ if ( ret[i].nodeType === 1 ) {
+ var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+ ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+ }
+ fragment.appendChild( ret[i] );
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ cleanData: function( elems ) {
+ var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
+ deleteExpando = jQuery.support.deleteExpando;
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+ continue;
+ }
+
+ id = elem[ jQuery.expando ];
+
+ if ( id ) {
+ data = cache[ id ] && cache[ id ][ internalKey ];
+
+ if ( data && data.events ) {
+ for ( var type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+
+ // Null the DOM reference to avoid IE6/7/8 leak (#7054)
+ if ( data.handle ) {
+ data.handle.elem = null;
+ }
+ }
+
+ if ( deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ }
+
+ delete cache[ id ];
+ }
+ }
+ }
+});
+
+function evalScript( i, elem ) {
+ if ( elem.src ) {
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+ } else {
+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity=([^)]*)/,
+ rdashAlpha = /-([a-z])/ig,
+ // fixed for IE9, see #8346
+ rupper = /([A-Z]|^ms)/g,
+ rnumpx = /^-?\d+(?:px)?$/i,
+ rnum = /^-?\d/,
+ rrelNum = /^[+\-]=/,
+ rrelNumFilter = /[^+\-\.\de]+/g,
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssWidth = [ "Left", "Right" ],
+ cssHeight = [ "Top", "Bottom" ],
+ curCSS,
+
+ getComputedStyle,
+ currentStyle,
+
+ fcamelCase = function( all, letter ) {
+ return letter.toUpperCase();
+ };
+
+jQuery.fn.css = function( name, value ) {
+ // Setting 'undefined' is a no-op
+ if ( arguments.length === 2 && value === undefined ) {
+ return this;
+ }
+
+ return jQuery.access( this, name, value, true, function( elem, name, value ) {
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ });
+};
+
+jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity", "opacity" );
+ return ret === "" ? "1" : ret;
+
+ } else {
+ return elem.style.opacity;
+ }
+ }
+ }
+ },
+
+ // Exclude the following css properties to add px
+ cssNumber: {
+ "zIndex": true,
+ "fontWeight": true,
+ "opacity": true,
+ "zoom": true,
+ "lineHeight": true,
+ "widows": true,
+ "orphans": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, origName = jQuery.camelCase( name ),
+ style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+ name = jQuery.cssProps[ origName ] || origName;
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // Make sure that NaN and null values aren't set. See: #7116
+ if ( type === "number" && isNaN( value ) || value == null ) {
+ return;
+ }
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if ( type === "string" && rrelNum.test( value ) ) {
+ value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+ // Fixes bug #5509
+ try {
+ style[ name ] = value;
+ } catch(e) {}
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra ) {
+ var ret, hooks;
+
+ // Make sure that we're working with the right name
+ name = jQuery.camelCase( name );
+ hooks = jQuery.cssHooks[ name ];
+ name = jQuery.cssProps[ name ] || name;
+
+ // cssFloat needs a special treatment
+ if ( name === "cssFloat" ) {
+ name = "float";
+ }
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+ return ret;
+
+ // Otherwise, if a way to get the computed value exists, use that
+ } else if ( curCSS ) {
+ return curCSS( elem, name );
+ }
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ var old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+ },
+
+ camelCase: function( string ) {
+ return string.replace( rdashAlpha, fcamelCase );
+ }
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+ jQuery.cssHooks[ name ] = {
+ get: function( elem, computed, extra ) {
+ var val;
+
+ if ( computed ) {
+ if ( elem.offsetWidth !== 0 ) {
+ val = getWH( elem, name, extra );
+
+ } else {
+ jQuery.swap( elem, cssShow, function() {
+ val = getWH( elem, name, extra );
+ });
+ }
+
+ if ( val <= 0 ) {
+ val = curCSS( elem, name, name );
+
+ if ( val === "0px" && currentStyle ) {
+ val = currentStyle( elem, name, name );
+ }
+
+ if ( val != null ) {
+ // Should return "auto" instead of 0, use 0 for
+ // temporary backwards-compat
+ return val === "" || val === "auto" ? "0px" : val;
+ }
+ }
+
+ if ( val < 0 || val == null ) {
+ val = elem.style[ name ];
+
+ // Should return "auto" instead of 0, use 0 for
+ // temporary backwards-compat
+ return val === "" || val === "auto" ? "0px" : val;
+ }
+
+ return typeof val === "string" ? val : val + "px";
+ }
+ },
+
+ set: function( elem, value ) {
+ if ( rnumpx.test( value ) ) {
+ // ignore negative width and height values #1599
+ value = parseFloat(value);
+
+ if ( value >= 0 ) {
+ return value + "px";
+ }
+
+ } else {
+ return value;
+ }
+ }
+ };
+});
+
+if ( !jQuery.support.opacity ) {
+ jQuery.cssHooks.opacity = {
+ get: function( elem, computed ) {
+ // IE uses filters for opacity
+ return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+ ( parseFloat( RegExp.$1 ) / 100 ) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function( elem, value ) {
+ var style = elem.style,
+ currentStyle = elem.currentStyle;
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // Set the alpha filter to set the opacity
+ var opacity = jQuery.isNaN( value ) ?
+ "" :
+ "alpha(opacity=" + value * 100 + ")",
+ filter = currentStyle && currentStyle.filter || style.filter || "";
+
+ style.filter = ralpha.test( filter ) ?
+ filter.replace( ralpha, opacity ) :
+ filter + " " + opacity;
+ }
+ };
+}
+
+jQuery(function() {
+ // This hook cannot be added until DOM ready because the support test
+ // for it is not run until after DOM ready
+ if ( !jQuery.support.reliableMarginRight ) {
+ jQuery.cssHooks.marginRight = {
+ get: function( elem, computed ) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ var ret;
+ jQuery.swap( elem, { "display": "inline-block" }, function() {
+ if ( computed ) {
+ ret = curCSS( elem, "margin-right", "marginRight" );
+ } else {
+ ret = elem.style.marginRight;
+ }
+ });
+ return ret;
+ }
+ };
+ }
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+ getComputedStyle = function( elem, name ) {
+ var ret, defaultView, computedStyle;
+
+ name = name.replace( rupper, "-$1" ).toLowerCase();
+
+ if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+ return undefined;
+ }
+
+ if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+ ret = computedStyle.getPropertyValue( name );
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+ }
+
+ return ret;
+ };
+}
+
+if ( document.documentElement.currentStyle ) {
+ currentStyle = function( elem, name ) {
+ var left,
+ ret = elem.currentStyle && elem.currentStyle[ name ],
+ rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
+ style = elem.style;
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+ // Remember the original values
+ left = style.left;
+
+ // Put in the new values to get a computed value out
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ }
+ style.left = name === "fontSize" ? "1em" : (ret || 0);
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
+
+ return ret === "" ? "auto" : ret;
+ };
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+ var which = name === "width" ? cssWidth : cssHeight,
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+ if ( extra === "border" ) {
+ return val;
+ }
+
+ jQuery.each( which, function() {
+ if ( !extra ) {
+ val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
+ }
+
+ if ( extra === "margin" ) {
+ val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
+
+ } else {
+ val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
+ }
+ });
+
+ return val;
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ var width = elem.offsetWidth,
+ height = elem.offsetHeight;
+
+ return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+ };
+
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+
+
+
+
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rhash = /#.*$/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+ rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rquery = /\?/,
+ rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ rselectTextarea = /^(?:select|textarea)/i,
+ rspacesAjax = /\s+/,
+ rts = /([?&])_=[^&]*/,
+ rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Document location
+ ajaxLocation,
+
+ // Document location segments
+ ajaxLocParts;
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+ ajaxLocation = location.href;
+} catch( e ) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement( "a" );
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ if ( jQuery.isFunction( func ) ) {
+ var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+ i = 0,
+ length = dataTypes.length,
+ dataType,
+ list,
+ placeBefore;
+
+ // For each dataType in the dataTypeExpression
+ for(; i < length; i++ ) {
+ dataType = dataTypes[ i ];
+ // We control if we're asked to add before
+ // any existing element
+ placeBefore = /^\+/.test( dataType );
+ if ( placeBefore ) {
+ dataType = dataType.substr( 1 ) || "*";
+ }
+ list = structure[ dataType ] = structure[ dataType ] || [];
+ // then we add to the structure accordingly
+ list[ placeBefore ? "unshift" : "push" ]( func );
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+ dataType /* internal */, inspected /* internal */ ) {
+
+ dataType = dataType || options.dataTypes[ 0 ];
+ inspected = inspected || {};
+
+ inspected[ dataType ] = true;
+
+ var list = structure[ dataType ],
+ i = 0,
+ length = list ? list.length : 0,
+ executeOnly = ( structure === prefilters ),
+ selection;
+
+ for(; i < length && ( executeOnly || !selection ); i++ ) {
+ selection = list[ i ]( options, originalOptions, jqXHR );
+ // If we got redirected to another dataType
+ // we try there if executing only and not done already
+ if ( typeof selection === "string" ) {
+ if ( !executeOnly || inspected[ selection ] ) {
+ selection = undefined;
+ } else {
+ options.dataTypes.unshift( selection );
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, selection, inspected );
+ }
+ }
+ }
+ // If we're only executing or nothing was selected
+ // we try the catchall dataType if not done already
+ if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, "*", inspected );
+ }
+ // unnecessary when only executing (prefilters)
+ // but it'll be ignored by the caller in that case
+ return selection;
+}
+
+jQuery.fn.extend({
+ load: function( url, params, callback ) {
+ if ( typeof url !== "string" && _load ) {
+ return _load.apply( this, arguments );
+
+ // Don't do a request if no elements are being requested
+ } else if ( !this.length ) {
+ return this;
+ }
+
+ var off = url.indexOf( " " );
+ if ( off >= 0 ) {
+ var selector = url.slice( off, url.length );
+ url = url.slice( 0, off );
+ }
+
+ // Default to a GET request
+ var type = "GET";
+
+ // If the second parameter was provided
+ if ( params ) {
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( typeof params === "object" ) {
+ params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+ type = "POST";
+ }
+ }
+
+ var self = this;
+
+ // Request the remote document
+ jQuery.ajax({
+ url: url,
+ type: type,
+ dataType: "html",
+ data: params,
+ // Complete callback (responseText is used internally)
+ complete: function( jqXHR, status, responseText ) {
+ // Store the response as specified by the jqXHR object
+ responseText = jqXHR.responseText;
+ // If successful, inject the HTML into all the matched elements
+ if ( jqXHR.isResolved() ) {
+ // #4825: Get the actual response in case
+ // a dataFilter is present in ajaxSettings
+ jqXHR.done(function( r ) {
+ responseText = r;
+ });
+ // See if a selector was specified
+ self.html( selector ?
+ // Create a dummy div to hold the results
+ jQuery("<div>")
+ // inject the contents of the document in, removing the scripts
+ // to avoid any 'Permission Denied' errors in IE
+ .append(responseText.replace(rscript, ""))
+
+ // Locate the specified elements
+ .find(selector) :
+
+ // If not, just inject the full result
+ responseText );
+ }
+
+ if ( callback ) {
+ self.each( callback, [ responseText, status, jqXHR ] );
+ }
+ }
+ });
+
+ return this;
+ },
+
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+
+ serializeArray: function() {
+ return this.map(function(){
+ return this.elements ? jQuery.makeArray( this.elements ) : this;
+ })
+ .filter(function(){
+ return this.name && !this.disabled &&
+ ( this.checked || rselectTextarea.test( this.nodeName ) ||
+ rinput.test( this.type ) );
+ })
+ .map(function( i, elem ){
+ var val = jQuery( this ).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val, i ){
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }) :
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }).get();
+ }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+ jQuery.fn[ o ] = function( f ){
+ return this.bind( o, f );
+ };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // shift arguments if data argument was omitted
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ type: method,
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ };
+});
+
+jQuery.extend({
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function ( target, settings ) {
+ if ( !settings ) {
+ // Only one parameter, we extend ajaxSettings
+ settings = target;
+ target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+ } else {
+ // target was provided, we extend into it
+ jQuery.extend( true, target, jQuery.ajaxSettings, settings );
+ }
+ // Flatten fields we don't want deep extended
+ for( var field in { context: 1, url: 1 } ) {
+ if ( field in settings ) {
+ target[ field ] = settings[ field ];
+ } else if( field in jQuery.ajaxSettings ) {
+ target[ field ] = jQuery.ajaxSettings[ field ];
+ }
+ }
+ return target;
+ },
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+ global: true,
+ type: "GET",
+ contentType: "application/x-www-form-urlencoded",
+ processData: true,
+ async: true,
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ xml: "application/xml, text/xml",
+ html: "text/html",
+ text: "text/plain",
+ json: "application/json, text/javascript",
+ "*": "*/*"
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText"
+ },
+
+ // List of data converters
+ // 1) key format is "source_type destination_type" (a single space in-between)
+ // 2) the catchall symbol "*" can be used for source_type
+ converters: {
+
+ // Convert anything to text
+ "* text": window.String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ }
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events
+ // It's the callbackContext if one was provided in the options
+ // and if it's a DOM node or a jQuery collection
+ globalEventContext = callbackContext !== s &&
+ ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+ jQuery( callbackContext ) : jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery._Deferred(),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // ifModified key
+ ifModifiedKey,
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // transport
+ transport,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // The jqXHR state
+ state = 0,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // Fake xhr
+ jqXHR = {
+
+ readyState: 0,
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ if ( !state ) {
+ var lname = name.toLowerCase();
+ name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( state === 2 ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+ responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match === undefined ? null : match;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( !state ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ statusText = statusText || "abort";
+ if ( transport ) {
+ transport.abort( statusText );
+ }
+ done( 0, statusText );
+ return this;
+ }
+ };
+
+ // Callback for when everything is done
+ // It is defined here because jslint complains if it is declared
+ // at the end of the function (which would be more logical and readable)
+ function done( status, statusText, responses, headers ) {
+
+ // Called once
+ if ( state === 2 ) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status ? 4 : 0;
+
+ var isSuccess,
+ success,
+ error,
+ response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+ lastModified,
+ etag;
+
+ // If successful, handle type chaining
+ if ( status >= 200 && status < 300 || status === 304 ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+
+ if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+ jQuery.lastModified[ ifModifiedKey ] = lastModified;
+ }
+ if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+ jQuery.etag[ ifModifiedKey ] = etag;
+ }
+ }
+
+ // If not modified
+ if ( status === 304 ) {
+
+ statusText = "notmodified";
+ isSuccess = true;
+
+ // If we have data
+ } else {
+
+ try {
+ success = ajaxConvert( s, response );
+ statusText = "success";
+ isSuccess = true;
+ } catch(e) {
+ // We have a parsererror
+ statusText = "parsererror";
+ error = e;
+ }
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if( !statusText || status ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = statusText;
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+ }
+ }
+
+ // Attach deferreds
+ deferred.promise( jqXHR );
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+ jqXHR.complete = completeDeferred.done;
+
+ // Status-dependent callbacks
+ jqXHR.statusCode = function( map ) {
+ if ( map ) {
+ var tmp;
+ if ( state < 2 ) {
+ for( tmp in map ) {
+ statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+ }
+ } else {
+ tmp = map[ jqXHR.status ];
+ jqXHR.then( tmp, tmp );
+ }
+ }
+ return this;
+ };
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+ // Determine if a cross-domain request is in order
+ if ( s.crossDomain == null ) {
+ parts = rurl.exec( s.url.toLowerCase() );
+ s.crossDomain = !!( parts &&
+ ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+ ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+ ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefiler, stop there
+ if ( state === 2 ) {
+ return false;
+ }
+
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // If data is available, append data to url
+ if ( s.data ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+ }
+
+ // Get ifModifiedKey before adding the anti-cache parameter
+ ifModifiedKey = s.url;
+
+ // Add anti-cache in url if needed
+ if ( s.cache === false ) {
+
+ var ts = jQuery.now(),
+ // try replacing _= if it is there
+ ret = s.url.replace( rts, "$1_=" + ts );
+
+ // if nothing was replaced, add timestamp to the end
+ s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ ifModifiedKey = ifModifiedKey || s.url;
+ if ( jQuery.lastModified[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+ }
+ if ( jQuery.etag[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+ }
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+ s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+ // Abort if not done already
+ jqXHR.abort();
+ return false;
+
+ }
+
+ // Install callbacks on deferreds
+ for ( i in { success: 1, error: 1, complete: 1 } ) {
+ jqXHR[ i ]( s[ i ] );
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = setTimeout( function(){
+ jqXHR.abort( "timeout" );
+ }, s.timeout );
+ }
+
+ try {
+ state = 1;
+ transport.send( requestHeaders, done );
+ } catch (e) {
+ // Propagate exception as error if not done
+ if ( status < 2 ) {
+ done( -1, e );
+ // Simply rethrow otherwise
+ } else {
+ jQuery.error( e );
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ // Serialize an array of form elements or a set of
+ // key/values into a query string
+ param: function( a, traditional ) {
+ var s = [],
+ add = function( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction( value ) ? value() : value;
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( var prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" ).replace( r20, "+" );
+ }
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+ if ( jQuery.isArray( obj ) ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+ // If array item is non-scalar (array or object), encode its
+ // numeric index to resolve deserialization ambiguity issues.
+ // Note that rack (as of 1.0.0) can't currently deserialize
+ // nested arrays properly, and attempting to do so may cause
+ // a server error. Possible fixes are to modify rack's
+ // deserialization algorithm or to provide an option or flag
+ // to force array serialization to be shallow.
+ buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+ }
+ });
+
+ } else if ( !traditional && obj != null && typeof obj === "object" ) {
+ // Serialize object item.
+ for ( var name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var contents = s.contents,
+ dataTypes = s.dataTypes,
+ responseFields = s.responseFields,
+ ct,
+ type,
+ finalDataType,
+ firstDataType;
+
+ // Fill responseXXX fields
+ for( type in responseFields ) {
+ if ( type in responses ) {
+ jqXHR[ responseFields[type] ] = responses[ type ];
+ }
+ }
+
+ // Remove auto dataType and get content-type in the process
+ while( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+ // Apply the dataFilter if provided
+ if ( s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ var dataTypes = s.dataTypes,
+ converters = {},
+ i,
+ key,
+ length = dataTypes.length,
+ tmp,
+ // Current and previous dataTypes
+ current = dataTypes[ 0 ],
+ prev,
+ // Conversion expression
+ conversion,
+ // Conversion function
+ conv,
+ // Conversion functions (transitive conversion)
+ conv1,
+ conv2;
+
+ // For each dataType in the chain
+ for( i = 1; i < length; i++ ) {
+
+ // Create converters map
+ // with lowercased keys
+ if ( i === 1 ) {
+ for( key in s.converters ) {
+ if( typeof key === "string" ) {
+ converters[ key.toLowerCase() ] = s.converters[ key ];
+ }
+ }
+ }
+
+ // Get the dataTypes
+ prev = current;
+ current = dataTypes[ i ];
+
+ // If current is auto dataType, update it to prev
+ if( current === "*" ) {
+ current = prev;
+ // If no auto and dataTypes are actually different
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Get the converter
+ conversion = prev + " " + current;
+ conv = converters[ conversion ] || converters[ "* " + current ];
+
+ // If there is no direct converter, search transitively
+ if ( !conv ) {
+ conv2 = undefined;
+ for( conv1 in converters ) {
+ tmp = conv1.split( " " );
+ if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+ conv2 = converters[ tmp[1] + " " + current ];
+ if ( conv2 ) {
+ conv1 = converters[ conv1 ];
+ if ( conv1 === true ) {
+ conv = conv2;
+ } else if ( conv2 === true ) {
+ conv = conv1;
+ }
+ break;
+ }
+ }
+ }
+ }
+ // If we found no converter, dispatch an error
+ if ( !( conv || conv2 ) ) {
+ jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+ }
+ // If found converter is not an equivalence
+ if ( conv !== true ) {
+ // Convert with 1 or 2 converters accordingly
+ response = conv ? conv( response ) : conv2( conv1(response) );
+ }
+ }
+ }
+ return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+ jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ return jQuery.expando + "_" + ( jsc++ );
+ }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+ ( typeof s.data === "string" );
+
+ if ( s.dataTypes[ 0 ] === "jsonp" ||
+ s.jsonp !== false && ( jsre.test( s.url ) ||
+ inspectData && jsre.test( s.data ) ) ) {
+
+ var responseContainer,
+ jsonpCallback = s.jsonpCallback =
+ jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+ previous = window[ jsonpCallback ],
+ url = s.url,
+ data = s.data,
+ replace = "$1" + jsonpCallback + "$2";
+
+ if ( s.jsonp !== false ) {
+ url = url.replace( jsre, replace );
+ if ( s.url === url ) {
+ if ( inspectData ) {
+ data = data.replace( jsre, replace );
+ }
+ if ( s.data === data ) {
+ // Add callback manually
+ url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+ }
+ }
+ }
+
+ s.url = url;
+ s.data = data;
+
+ // Install callback
+ window[ jsonpCallback ] = function( response ) {
+ responseContainer = [ response ];
+ };
+
+ // Clean-up function
+ jqXHR.always(function() {
+ // Set callback back to previous value
+ window[ jsonpCallback ] = previous;
+ // Call if it was a function and we have a response
+ if ( responseContainer && jQuery.isFunction( previous ) ) {
+ window[ jsonpCallback ]( responseContainer[ 0 ] );
+ }
+ });
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( jsonpCallback + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Delegate to script
+ return "script";
+ }
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /javascript|ecmascript/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ s.global = false;
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+
+ var script,
+ head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+ return {
+
+ send: function( _, callback ) {
+
+ script = document.createElement( "script" );
+
+ script.async = "async";
+
+ if ( s.scriptCharset ) {
+ script.charset = s.scriptCharset;
+ }
+
+ script.src = s.url;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+ if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+
+ // Remove the script
+ if ( head && script.parentNode ) {
+ head.removeChild( script );
+ }
+
+ // Dereference the script
+ script = undefined;
+
+ // Callback if not abort
+ if ( !isAbort ) {
+ callback( 200, "success" );
+ }
+ }
+ };
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709 and #4378).
+ head.insertBefore( script, head.firstChild );
+ },
+
+ abort: function() {
+ if ( script ) {
+ script.onload( 0, 1 );
+ }
+ }
+ };
+ }
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+ xhrOnUnloadAbort = window.ActiveXObject ? function() {
+ // Abort all pending requests
+ for ( var key in xhrCallbacks ) {
+ xhrCallbacks[ key ]( 0, 1 );
+ }
+ } : false,
+ xhrId = 0,
+ xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch( e ) {}
+}
+
+function createActiveXHR() {
+ try {
+ return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+ } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+ /* Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+ function() {
+ return !this.isLocal && createStandardXHR() || createActiveXHR();
+ } :
+ // For all other browsers, use the standard XMLHttpRequest object
+ createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+ jQuery.extend( jQuery.support, {
+ ajax: !!xhr,
+ cors: !!xhr && ( "withCredentials" in xhr )
+ });
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+ jQuery.ajaxTransport(function( s ) {
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( !s.crossDomain || jQuery.support.cors ) {
+
+ var callback;
+
+ return {
+ send: function( headers, complete ) {
+
+ // Get a new xhr
+ var xhr = s.xhr(),
+ handle,
+ i;
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if ( s.username ) {
+ xhr.open( s.type, s.url, s.async, s.username, s.password );
+ } else {
+ xhr.open( s.type, s.url, s.async );
+ }
+
+ // Apply custom fields if provided
+ if ( s.xhrFields ) {
+ for ( i in s.xhrFields ) {
+ xhr[ i ] = s.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( s.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( s.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+ headers[ "X-Requested-With" ] = "XMLHttpRequest";
+ }
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+ } catch( _ ) {}
+
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send( ( s.hasContent && s.data ) || null );
+
+ // Listener
+ callback = function( _, isAbort ) {
+
+ var status,
+ statusText,
+ responseHeaders,
+ responses,
+ xml;
+
+ // Firefox throws exceptions when accessing properties
+ // of an xhr when a network error occured
+ // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+ try {
+
+ // Was never called and is aborted or complete
+ if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+ // Only called once
+ callback = undefined;
+
+ // Do not keep as active anymore
+ if ( handle ) {
+ xhr.onreadystatechange = jQuery.noop;
+ if ( xhrOnUnloadAbort ) {
+ delete xhrCallbacks[ handle ];
+ }
+ }
+
+ // If it's an abort
+ if ( isAbort ) {
+ // Abort it manually if needed
+ if ( xhr.readyState !== 4 ) {
+ xhr.abort();
+ }
+ } else {
+ status = xhr.status;
+ responseHeaders = xhr.getAllResponseHeaders();
+ responses = {};
+ xml = xhr.responseXML;
+
+ // Construct response list
+ if ( xml && xml.documentElement /* #4958 */ ) {
+ responses.xml = xml;
+ }
+ responses.text = xhr.responseText;
+
+ // Firefox throws an exception when accessing
+ // statusText for faulty cross-domain requests
+ try {
+ statusText = xhr.statusText;
+ } catch( e ) {
+ // We normalize with Webkit giving an empty statusText
+ statusText = "";
+ }
+
+ // Filter status for non standard behaviors
+
+ // If the request is local and we have data: assume a success
+ // (success with no data won't get notified, that's the best we
+ // can do given current implementations)
+ if ( !status && s.isLocal && !s.crossDomain ) {
+ status = responses.text ? 200 : 404;
+ // IE - #1450: sometimes returns 1223 when it should be 204
+ } else if ( status === 1223 ) {
+ status = 204;
+ }
+ }
+ }
+ } catch( firefoxAccessException ) {
+ if ( !isAbort ) {
+ complete( -1, firefoxAccessException );
+ }
+ }
+
+ // Call complete if needed
+ if ( responses ) {
+ complete( status, statusText, responses, responseHeaders );
+ }
+ };
+
+ // if we're in sync mode or it's in cache
+ // and has been retrieved directly (IE6 & IE7)
+ // we need to manually fire the callback
+ if ( !s.async || xhr.readyState === 4 ) {
+ callback();
+ } else {
+ handle = ++xhrId;
+ if ( xhrOnUnloadAbort ) {
+ // Create the active xhrs callbacks list if needed
+ // and attach the unload handler
+ if ( !xhrCallbacks ) {
+ xhrCallbacks = {};
+ jQuery( window ).unload( xhrOnUnloadAbort );
+ }
+ // Add to list of active xhrs callbacks
+ xhrCallbacks[ handle ] = callback;
+ }
+ xhr.onreadystatechange = callback;
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback(0,1);
+ }
+ }
+ };
+ }
+ });
+}
+
+
+
+
+var elemdisplay = {},
+ iframe, iframeDoc,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+ timerId,
+ fxAttrs = [
+ // height animations
+ [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+ // width animations
+ [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+ // opacity animations
+ [ "opacity" ]
+ ],
+ fxNow,
+ requestAnimationFrame = window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame;
+
+jQuery.fn.extend({
+ show: function( speed, easing, callback ) {
+ var elem, display;
+
+ if ( speed || speed === 0 ) {
+ return this.animate( genFx("show", 3), speed, easing, callback);
+
+ } else {
+ for ( var i = 0, j = this.length; i < j; i++ ) {
+ elem = this[i];
+
+ if ( elem.style ) {
+ display = elem.style.display;
+
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+ display = elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+ jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( i = 0; i < j; i++ ) {
+ elem = this[i];
+
+ if ( elem.style ) {
+ display = elem.style.display;
+
+ if ( display === "" || display === "none" ) {
+ elem.style.display = jQuery._data(elem, "olddisplay") || "";
+ }
+ }
+ }
+
+ return this;
+ }
+ },
+
+ hide: function( speed, easing, callback ) {
+ if ( speed || speed === 0 ) {
+ return this.animate( genFx("hide", 3), speed, easing, callback);
+
+ } else {
+ for ( var i = 0, j = this.length; i < j; i++ ) {
+ if ( this[i].style ) {
+ var display = jQuery.css( this[i], "display" );
+
+ if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+ jQuery._data( this[i], "olddisplay", display );
+ }
+ }
+ }
+
+ // Set the display of the elements in a second loop
+ // to avoid the constant reflow
+ for ( i = 0; i < j; i++ ) {
+ if ( this[i].style ) {
+ this[i].style.display = "none";
+ }
+ }
+
+ return this;
+ }
+ },
+
+ // Save the old toggle function
+ _toggle: jQuery.fn.toggle,
+
+ toggle: function( fn, fn2, callback ) {
+ var bool = typeof fn === "boolean";
+
+ if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+ this._toggle.apply( this, arguments );
+
+ } else if ( fn == null || bool ) {
+ this.each(function() {
+ var state = bool ? fn : jQuery(this).is(":hidden");
+ jQuery(this)[ state ? "show" : "hide" ]();
+ });
+
+ } else {
+ this.animate(genFx("toggle", 3), fn, fn2, callback);
+ }
+
+ return this;
+ },
+
+ fadeTo: function( speed, to, easing, callback ) {
+ return this.filter(":hidden").css("opacity", 0).show().end()
+ .animate({opacity: to}, speed, easing, callback);
+ },
+
+ animate: function( prop, speed, easing, callback ) {
+ var optall = jQuery.speed(speed, easing, callback);
+
+ if ( jQuery.isEmptyObject( prop ) ) {
+ return this.each( optall.complete, [ false ] );
+ }
+
+ return this[ optall.queue === false ? "each" : "queue" ](function() {
+ // XXX 'this' does not always have a nodeName when running the
+ // test suite
+
+ if ( optall.queue === false ) {
+ jQuery._mark( this );
+ }
+
+ var opt = jQuery.extend({}, optall),
+ isElement = this.nodeType === 1,
+ hidden = isElement && jQuery(this).is(":hidden"),
+ name, val, p,
+ display, e,
+ parts, start, end, unit;
+
+ // will store per property easing and be used to determine when an animation is complete
+ opt.animatedProperties = {};
+
+ for ( p in prop ) {
+
+ // property name normalization
+ name = jQuery.camelCase( p );
+ if ( p !== name ) {
+ prop[ name ] = prop[ p ];
+ delete prop[ p ];
+ }
+
+ val = prop[name];
+
+ if ( val === "hide" && hidden || val === "show" && !hidden ) {
+ return opt.complete.call(this);
+ }
+
+ if ( isElement && ( name === "height" || name === "width" ) ) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE does not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height
+ // animated
+ if ( jQuery.css( this, "display" ) === "inline" &&
+ jQuery.css( this, "float" ) === "none" ) {
+ if ( !jQuery.support.inlineBlockNeedsLayout ) {
+ this.style.display = "inline-block";
+
+ } else {
+ display = defaultDisplay(this.nodeName);
+
+ // inline-level elements accept inline-block;
+ // block-level elements need to be inline with layout
+ if ( display === "inline" ) {
+ this.style.display = "inline-block";
+
+ } else {
+ this.style.display = "inline";
+ this.style.zoom = 1;
+ }
+ }
+ }
+ }
+
+ // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+ opt.animatedProperties[name] = jQuery.isArray( val ) ?
+ val[1]:
+ opt.specialEasing && opt.specialEasing[name] || opt.easing || 'swing';
+ }
+
+ if ( opt.overflow != null ) {
+ this.style.overflow = "hidden";
+ }
+
+ for ( p in prop ) {
+ e = new jQuery.fx( this, opt, p );
+
+ val = prop[p];
+
+ if ( rfxtypes.test(val) ) {
+ e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
+
+ } else {
+ parts = rfxnum.exec(val);
+ start = e.cur();
+
+ if ( parts ) {
+ end = parseFloat( parts[2] );
+ unit = parts[3] || ( jQuery.cssNumber[ name ] ? "" : "px" );
+
+ // We need to compute starting value
+ if ( unit !== "px" ) {
+ jQuery.style( this, p, (end || 1) + unit);
+ start = ((end || 1) / e.cur()) * start;
+ jQuery.style( this, p, start + unit);
+ }
+
+ // If a +=/-= token was provided, we're doing a relative animation
+ if ( parts[1] ) {
+ end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
+ }
+
+ e.custom( start, end, unit );
+
+ } else {
+ e.custom( start, val, "" );
+ }
+ }
+ }
+
+ // For JS strict compliance
+ return true;
+ });
+ },
+
+ stop: function( clearQueue, gotoEnd ) {
+ if ( clearQueue ) {
+ this.queue([]);
+ }
+
+ this.each(function() {
+ var timers = jQuery.timers,
+ i = timers.length;
+ // clear marker counters if we know they won't be
+ if ( !gotoEnd ) {
+ jQuery._unmark( true, this );
+ }
+ // go in reverse order so anything added to the queue during the loop is ignored
+ while ( i-- ) {
+ if ( timers[i].elem === this ) {
+ if (gotoEnd) {
+ // force the next step to be the last
+ timers[i](true);
+ }
+
+ timers.splice(i, 1);
+ }
+ }
+ });
+
+ // start the next in the queue if the last step wasn't forced
+ if ( !gotoEnd ) {
+ this.dequeue();
+ }
+
+ return this;
+ }
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout( clearFxNow, 0 );
+ return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+ fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+ var obj = {};
+
+ jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+ obj[ this ] = type;
+ });
+
+ return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+ slideDown: genFx("show", 1),
+ slideUp: genFx("hide", 1),
+ slideToggle: genFx("toggle", 1),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+});
+
+jQuery.extend({
+ speed: function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+ // Queueing
+ opt.old = opt.complete;
+ opt.complete = function( noUnmark ) {
+ if ( opt.queue !== false ) {
+ jQuery.dequeue( this );
+ } else if ( noUnmark !== false ) {
+ jQuery._unmark( this );
+ }
+
+ if ( jQuery.isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+ };
+
+ return opt;
+ },
+
+ easing: {
+ linear: function( p, n, firstNum, diff ) {
+ return firstNum + diff * p;
+ },
+ swing: function( p, n, firstNum, diff ) {
+ return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+ }
+ },
+
+ timers: [],
+
+ fx: function( elem, options, prop ) {
+ this.options = options;
+ this.elem = elem;
+ this.prop = prop;
+
+ options.orig = options.orig || {};
+ }
+
+});
+
+jQuery.fx.prototype = {
+ // Simple function for setting a style value
+ update: function() {
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+ },
+
+ // Get the current size
+ cur: function() {
+ if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+ return this.elem[ this.prop ];
+ }
+
+ var parsed,
+ r = jQuery.css( this.elem, this.prop );
+ // Empty strings, null, undefined and "auto" are converted to 0,
+ // complex values such as "rotate(1rad)" are returned as is,
+ // simple values such as "10px" are parsed to Float.
+ return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+ },
+
+ // Start an animation from one number to another
+ custom: function( from, to, unit ) {
+ var self = this,
+ fx = jQuery.fx,
+ raf;
+
+ this.startTime = fxNow || createFxNow();
+ this.start = from;
+ this.end = to;
+ this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+ this.now = this.start;
+ this.pos = this.state = 0;
+
+ function t( gotoEnd ) {
+ return self.step(gotoEnd);
+ }
+
+ t.elem = this.elem;
+
+ if ( t() && jQuery.timers.push(t) && !timerId ) {
+ // Use requestAnimationFrame instead of setInterval if available
+ if ( requestAnimationFrame ) {
+ timerId = 1;
+ raf = function() {
+ // When timerId gets set to null at any point, this stops
+ if ( timerId ) {
+ requestAnimationFrame( raf );
+ fx.tick();
+ }
+ };
+ requestAnimationFrame( raf );
+ } else {
+ timerId = setInterval( fx.tick, fx.interval );
+ }
+ }
+ },
+
+ // Simple 'show' function
+ show: function() {
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+ this.options.show = true;
+
+ // Begin the animation
+ // Make sure that we start at a small width/height to avoid any
+ // flash of content
+ this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+
+ // Start by showing the element
+ jQuery( this.elem ).show();
+ },
+
+ // Simple 'hide' function
+ hide: function() {
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+ this.options.hide = true;
+
+ // Begin the animation
+ this.custom(this.cur(), 0);
+ },
+
+ // Each step of an animation
+ step: function( gotoEnd ) {
+ var t = fxNow || createFxNow(),
+ done = true,
+ elem = this.elem,
+ options = this.options,
+ i, n;
+
+ if ( gotoEnd || t >= options.duration + this.startTime ) {
+ this.now = this.end;
+ this.pos = this.state = 1;
+ this.update();
+
+ options.animatedProperties[ this.prop ] = true;
+
+ for ( i in options.animatedProperties ) {
+ if ( options.animatedProperties[i] !== true ) {
+ done = false;
+ }
+ }
+
+ if ( done ) {
+ // Reset the overflow
+ if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+ jQuery.each( [ "", "X", "Y" ], function (index, value) {
+ elem.style[ "overflow" + value ] = options.overflow[index];
+ });
+ }
+
+ // Hide the element if the "hide" operation was done
+ if ( options.hide ) {
+ jQuery(elem).hide();
+ }
+
+ // Reset the properties, if the item has been hidden or shown
+ if ( options.hide || options.show ) {
+ for ( var p in options.animatedProperties ) {
+ jQuery.style( elem, p, options.orig[p] );
+ }
+ }
+
+ // Execute the complete function
+ options.complete.call( elem );
+ }
+
+ return false;
+
+ } else {
+ // classical easing cannot be used with an Infinity duration
+ if ( options.duration == Infinity ) {
+ this.now = t;
+ } else {
+ n = t - this.startTime;
+
+ this.state = n / options.duration;
+ // Perform the easing function, defaults to swing
+ this.pos = jQuery.easing[options.animatedProperties[this.prop]](this.state, n, 0, 1, options.duration);
+ this.now = this.start + ((this.end - this.start) * this.pos);
+ }
+ // Perform the next step of the animation
+ this.update();
+ }
+
+ return true;
+ }
+};
+
+jQuery.extend( jQuery.fx, {
+ tick: function() {
+ var timers = jQuery.timers,
+ i = timers.length;
+ while ( i-- ) {
+ if ( !timers[i]() ) {
+ timers.splice(i, 1);
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ },
+
+ interval: 13,
+
+ stop: function() {
+ clearInterval( timerId );
+ timerId = null;
+ },
+
+ speeds: {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+ },
+
+ step: {
+ opacity: function( fx ) {
+ jQuery.style( fx.elem, "opacity", fx.now );
+ },
+
+ _default: function( fx ) {
+ if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+ fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+ } else {
+ fx.elem[ fx.prop ] = fx.now;
+ }
+ }
+ }
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+ };
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+ if ( !elemdisplay[ nodeName ] ) {
+
+ var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
+ display = elem.css( "display" );
+
+ elem.remove();
+
+ // If the simple way fails,
+ // get element's real default display by attaching it to a temp iframe
+ if ( display === "none" || display === "" ) {
+ // No iframe to use yet, so create it
+ if ( !iframe ) {
+ iframe = document.createElement( "iframe" );
+ iframe.frameBorder = iframe.width = iframe.height = 0;
+ }
+
+ document.body.appendChild( iframe );
+
+ // Create a cacheable copy of the iframe document on first call.
+ // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
+ // document to it, Webkit & Firefox won't allow reusing the iframe document
+ if ( !iframeDoc || !iframe.createElement ) {
+ iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+ iframeDoc.write( "<!doctype><html><body></body></html>" );
+ }
+
+ elem = iframeDoc.createElement( nodeName );
+
+ iframeDoc.body.appendChild( elem );
+
+ display = jQuery.css( elem, "display" );
+
+ document.body.removeChild( iframe );
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+ rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0], box;
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ try {
+ box = elem.getBoundingClientRect();
+ } catch(e) {}
+
+ var doc = elem.ownerDocument,
+ docElem = doc.documentElement;
+
+ // Make sure we're not dealing with a disconnected DOM node
+ if ( !box || !jQuery.contains( docElem, elem ) ) {
+ return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+ }
+
+ var body = doc.body,
+ win = getWindow(doc),
+ clientTop = docElem.clientTop || body.clientTop || 0,
+ clientLeft = docElem.clientLeft || body.clientLeft || 0,
+ scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
+ scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+ top = box.top + scrollTop - clientTop,
+ left = box.left + scrollLeft - clientLeft;
+
+ return { top: top, left: left };
+ };
+
+} else {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0];
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ jQuery.offset.initialize();
+
+ var computedStyle,
+ offsetParent = elem.offsetParent,
+ prevOffsetParent = elem,
+ doc = elem.ownerDocument,
+ docElem = doc.documentElement,
+ body = doc.body,
+ defaultView = doc.defaultView,
+ prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+ top = elem.offsetTop,
+ left = elem.offsetLeft;
+
+ while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+ if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+ break;
+ }
+
+ computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+ top -= elem.scrollTop;
+ left -= elem.scrollLeft;
+
+ if ( elem === offsetParent ) {
+ top += elem.offsetTop;
+ left += elem.offsetLeft;
+
+ if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
+ prevOffsetParent = offsetParent;
+ offsetParent = elem.offsetParent;
+ }
+
+ if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
+ prevComputedStyle = computedStyle;
+ }
+
+ if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+ top += body.offsetTop;
+ left += body.offsetLeft;
+ }
+
+ if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+ top += Math.max( docElem.scrollTop, body.scrollTop );
+ left += Math.max( docElem.scrollLeft, body.scrollLeft );
+ }
+
+ return { top: top, left: left };
+ };
+}
+
+jQuery.offset = {
+ initialize: function() {
+ var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
+ html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+
+ jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+
+ container.innerHTML = html;
+ body.insertBefore( container, body.firstChild );
+ innerDiv = container.firstChild;
+ checkDiv = innerDiv.firstChild;
+ td = innerDiv.nextSibling.firstChild.firstChild;
+
+ this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+ this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+
+ checkDiv.style.position = "fixed";
+ checkDiv.style.top = "20px";
+
+ // safari subtracts parent border width here which is 5px
+ this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+ checkDiv.style.position = checkDiv.style.top = "";
+
+ innerDiv.style.overflow = "hidden";
+ innerDiv.style.position = "relative";
+
+ this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+
+ this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+ body.removeChild( container );
+ jQuery.offset.initialize = jQuery.noop;
+ },
+
+ bodyOffset: function( body ) {
+ var top = body.offsetTop,
+ left = body.offsetLeft;
+
+ jQuery.offset.initialize();
+
+ if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+ top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+ left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+ }
+
+ return { top: top, left: left };
+ },
+
+ setOffset: function( elem, options, i ) {
+ var position = jQuery.css( elem, "position" );
+
+ // set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ var curElem = jQuery( elem ),
+ curOffset = curElem.offset(),
+ curCSSTop = jQuery.css( elem, "top" ),
+ curCSSLeft = jQuery.css( elem, "left" ),
+ calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+ props = {}, curPosition = {}, curTop, curLeft;
+
+ // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ if (options.top != null) {
+ props.top = (options.top - curOffset.top) + curTop;
+ }
+ if (options.left != null) {
+ props.left = (options.left - curOffset.left) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+
+jQuery.fn.extend({
+ position: function() {
+ if ( !this[0] ) {
+ return null;
+ }
+
+ var elem = this[0],
+
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent(),
+
+ // Get correct offsets
+ offset = this.offset(),
+ parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+ // Subtract element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+ offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+ // Add offsetParent borders
+ parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+ parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+ // Subtract the two offsets
+ return {
+ top: offset.top - parentOffset.top,
+ left: offset.left - parentOffset.left
+ };
+ },
+
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent || document.body;
+ while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent;
+ });
+ }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+ var method = "scroll" + name;
+
+ jQuery.fn[ method ] = function( val ) {
+ var elem, win;
+
+ if ( val === undefined ) {
+ elem = this[ 0 ];
+
+ if ( !elem ) {
+ return null;
+ }
+
+ win = getWindow( elem );
+
+ // Return the scroll offset
+ return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+ jQuery.support.boxModel && win.document.documentElement[ method ] ||
+ win.document.body[ method ] :
+ elem[ method ];
+ }
+
+ // Set the scroll offset
+ return this.each(function() {
+ win = getWindow( this );
+
+ if ( win ) {
+ win.scrollTo(
+ !i ? val : jQuery( win ).scrollLeft(),
+ i ? val : jQuery( win ).scrollTop()
+ );
+
+ } else {
+ this[ method ] = val;
+ }
+ });
+ };
+});
+
+function getWindow( elem ) {
+ return jQuery.isWindow( elem ) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+}
+
+
+
+
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+ var type = name.toLowerCase();
+
+ // innerHeight and innerWidth
+ jQuery.fn["inner" + name] = function() {
+ return this[0] ?
+ parseFloat( jQuery.css( this[0], type, "padding" ) ) :
+ null;
+ };
+
+ // outerHeight and outerWidth
+ jQuery.fn["outer" + name] = function( margin ) {
+ return this[0] ?
+ parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
+ null;
+ };
+
+ jQuery.fn[ type ] = function( size ) {
+ // Get window width or height
+ var elem = this[0];
+ if ( !elem ) {
+ return size == null ? null : this;
+ }
+
+ if ( jQuery.isFunction( size ) ) {
+ return this.each(function( i ) {
+ var self = jQuery( this );
+ self[ type ]( size.call( this, i, self[ type ]() ) );
+ });
+ }
+
+ if ( jQuery.isWindow( elem ) ) {
+ // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+ // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+ var docElemProp = elem.document.documentElement[ "client" + name ];
+ return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+ elem.document.body[ "client" + name ] || docElemProp;
+
+ // Get document width or height
+ } else if ( elem.nodeType === 9 ) {
+ // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+ return Math.max(
+ elem.documentElement["client" + name],
+ elem.body["scroll" + name], elem.documentElement["scroll" + name],
+ elem.body["offset" + name], elem.documentElement["offset" + name]
+ );
+
+ // Get or set width or height on the element
+ } else if ( size === undefined ) {
+ var orig = jQuery.css( elem, type ),
+ ret = parseFloat( orig );
+
+ return jQuery.isNaN( ret ) ? orig : ret;
+
+ // Set the width or height on the element (default to pixels if value is unitless)
+ } else {
+ return this.css( type, typeof size === "string" ? size : size + "px" );
+ }
+ };
+
+});
+
+
+window.jQuery = window.$ = jQuery;
+})(window);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,16 @@
+/*!
+ * jQuery JavaScript Library v1.6
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon May 2 13:50:00 2011 -0400
+ */
+(function(a,b){function cw(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function ct(a){if(!ch[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ci||(ci=c.createElement("iframe"),ci.frameBorder=ci.width=ci.height=0),c.body.appendChild(ci);if(!cj||!ci.createElement)cj=(ci.contentWindow||ci.contentDocument).document,cj.write("<!doctype><html><body></body></html>");b=cj.createElement(a),cj.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ci)}ch[a]=d}return ch[a]}function cs(a,b){var c={};f.each(cn.concat.apply([],cn.slice(0,b)),function(){c[this]=a});return c}function cr(){co=b}function cq(){setTimeout(cr,0);return co=f.now()}function cg(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cf(){try{return new a.XMLHttpRequest}catch(b){}}function b_(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function b$(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bZ(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):bZ(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bZ(a+"["+e+"]",b[e],c,d);else d(a,b)}function bY(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bY(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bY(a,c,d,e,"*",g));return l}function bX(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?bv:bw,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){name="data-"+c.replace(j,"$1-$2").toLowerCase(),d=a.getAttribute(name);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(e){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(c,d){d&&d instanceof e&&!(d instanceof a)&&(d=a(d));return e.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b,d,e,f,g,h,i,j,k,l,m,n,o,p,q;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",b=a.getElementsByTagName("*"),d=a.getElementsByTagName("a")[0];if(!b||!b.length||!d)return{};e=c.createElement("select"),f=e.appendChild(c.createElement("option")),g=a.getElementsByTagName("input")[0],i={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.55$/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:g.value==="on",optSelected:f.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},g.checked=!0,i.noCloneChecked=g.cloneNode(!0).checked,e.disabled=!0,i.optDisabled=!f.disabled;try{delete a.test}catch(r){i.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function click(){i.noCloneEvent=!1,a.detachEvent("onclick",click)}),a.cloneNode(!0).fireEvent("onclick")),g=c.createElement("input"),g.value="t",g.setAttribute("type","radio"),i.radioValue=g.value==="t",g.setAttribute("checked","checked"),a.appendChild(g),j=c.createDocumentFragment(),j.appendChild(a.firstChild),i.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",k=c.createElement("body"),l={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(p in l)k.style[p]=l[p];k.appendChild(a),c.documentElement.appendChild(k),i.appendChecked=g.checked,i.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,i.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",i.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",m=a.getElementsByTagName("td"),q=m[0].offsetHeight===0,m[0].style.display="",m[1].style.display="none",i.reliableHiddenOffsets=q&&m[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(h=c.createElement("div"),h.style.width="0",h.style.marginRight="0",a.appendChild(h),i.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(h,null).marginRight,10)||0)===0),k.innerHTML="",c.documentElement.removeChild(k);if(a.attachEvent)for(p in{submit:1,change:1,focusin:1})o="on"+p,q=o in a,q||(a.setAttribute(o,"return;"),q=typeof a[o]=="function"),i[p+"Bubbles"]=q;return i}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[c]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function l(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark";while(g--)if(tmp=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,tmp.done(l);l();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:data-|aria-)/,u=/\:/,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||"set"in c&&c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b=a.selectedIndex,c=[],d=a.options,e=a.type==="select-one";if(b<0)return null;for(var g=e?b:0,h=e?b+1:d.length;g<h;g++){var i=d[g];if(i.selected&&(f.support.optDisabled?!i.disabled:i.getAttribute("disabled")===null)&&(!i.parentNode.disabled||!f.nodeName(i.parentNode,"optgroup"))){value=f(i).val();if(e)return value;c.push(value)}}if(e&&!c.length&&d.length)return f(d[b]).val();return c},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex",readonly:"readOnly"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c]||(v&&(f.nodeName(a,"form")||u.test(c))?v:b);if(d!==b){if(d===null||d===!1&&!t.test(c)){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;d===!0&&!t.test(c)&&(d=c),a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.getAttribute("value");a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),f.support.getSetAttribute||(f.attrFix=f.extend(f.attrFix,{"for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}),v=f.attrHooks.name=f.attrHooks.value=f.valHooks.button={get:function(a,c){var d;if(c==="value"&&!f.nodeName(a,"button"))return a.getAttribute(c);d=a.getAttributeNode(c);return d&&d.specified?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=Object.prototype.hasOwnProperty,x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,f.event.handle.apply(this,arguments))}catch(d){}},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function J(a){var c=a.target,d,e;if(!!y.test(c.nodeName)&&!c.readOnly){d=f._data(c,"_change_data"),e=I(c),(a.type!=="focusout"||c.type!=="radio")&&f._data(c,"_change_data",e);if(d===b||e===d)return;if(d!=null||e)a.type="change",a.liveFired=b,f.event.trigger(a,arguments[1],c)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){return a.nodeName.toLowerCase()==="input"&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!be[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[];for(var i=0,j;(j=a[i])!=null;i++){typeof j=="number"&&(j+="");if(!j)continue;if(typeof j=="string")if(!ba.test(j))j=b.createTextNode(j);else{j=j.replace(Z,"<$1></$2>");var k=($.exec(j)||["",""])[1].toLowerCase(),l=be[k]||be._default,m=l[0],n=b.createElement("div");n.innerHTML=l[1]+j+l[2];while(m--)n=n.lastChild;if(!f.support.tbody){var o=_.test(j),p=k==="table"&&!o?n.firstChild&&n.firstChild.childNodes:l[1]==="<table>"&&!o?n.childNodes:[];for(var q=p.length-1;q>=0;--q)f.nodeName(p[q],"tbody")&&!p[q].childNodes.length&&p[q].parentNode.removeChild(p[q])}!f.support.leadingWhitespace&&Y.test(j)&&n.insertBefore(b.createTextNode(Y.exec(j)[0]),n.firstChild),j=n.childNodes}var r;if(!f.support.appendChecked)if(j[0]&&typeof (r=j.length)=="number")for(i=0;i<r;i++)bk(j[i]);else bk(j);j.nodeType?h.push(j):h=f.merge(h,j)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(i=0;h[i];i++)if(e&&f.nodeName(h[i],"script")&&(!h[i].type||h[i].type.toLowerCase()==="text/javascript"))e.push(h[i].parentNode?h[i].parentNode.removeChild(h[i]):h[i]);else{if(h[i].nodeType===1){var s=f.grep(h[i].getElementsByTagName("script"),g);h.splice.apply(h,[i+1,0].concat(s))}d.appendChild(h[i])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/-([a-z])/ig,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz,bA=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bo,bA)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bB(a,b,d):f.swap(a,bu,function(){e=bB(a,b,d)});if(e<=0){e=bx(a,b,b),e==="0px"&&bz&&(e=bz(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV;try{bU=e.href}catch(bW){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bX(bS),ajaxTransport:bX(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?b$(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b_(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bY(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bY(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bZ(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var ca=f.now(),cb=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+ca++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cb.test(b.url)||e&&cb.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cb,l),b.url===j&&(e&&(k=k.replace(cb,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cc=a.ActiveXObject?function(){for(var a in ce)ce[a](0,1)}:!1,cd=0,ce;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cf()||cg()}:cf,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cc&&delete ce[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cd,cc&&(ce||(ce={},f(a).unload(cc)),ce[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ch={},ci,cj,ck=/^(?:toggle|show|hide)$/,cl=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cm,cn=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],co,cp=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cs("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",ct(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cs("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cs("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g];if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=ct(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block")),b.animatedProperties[g]=f.isArray(h)?h[1]:b.specialEasing&&b.specialEasing[g]||b.easing||"swing"}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],ck.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cl.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[g]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cs("show",1),slideUp:cs("hide",1),slideToggle:cs("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=co||cq(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cm&&(cp?(cm=1,g=function(){cm&&(cp(g),e.tick())},cp(g)):cm=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=co||cq(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a=f.timers,b=a.length;while(b--)a[b]()||a.splice(b,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cm),cm=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cu=/^t(?:able|d|h)$/i,cv=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cw(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cu.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cv.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cv.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cw(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cw(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.nyroModal-ie6.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,9 @@
+/*
+ * nyroModal v2.alpha
+ * for IE6
+ *
+ */
+jQuery(function($,undefined){var $b=$('body'),$w=$(window),$h=$('html'),shown=0,zIndex=100;function isFullScreen(){return screen.height==$w.height()+58;};$b.append('<style type="text/css">'+'.nyroModalCloseButton{font-size: 1px}'+'.nyroModalLink .nyroModalPrev, .nyroModalDom .nyroModalPrev, .nyroModalForm .nyroModalPrev, .nyroModalFormFile .nyroModalPrev {left: -10px}'+'</style>');$.nmObj({_reposition:function(){var elts=this.elts.cont.find('.nmReposition');if(elts.length){var outer=this.getInternal()._getOuter($b),fs=isFullScreen();var space={top:-(fs?outer.h.border/2:0),left:-(fs?outer.w.border/2:0)};elts.each(function(){var me=$(this),offset=me.offset();me.css({top:offset.top-space.top,left:offset.left-space.left});});this.elts.cont.after(elts);}
+this.elts.cont.css('overflow','auto');}});$.nmInternal({_calculateFullSize:function(){var scrollHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),offsetHeight=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),scrollWidth=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),offsetWidth=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);this.fullSize={wW:$w.width(),wH:$w.height()};this.fullSize.h=scrollHeight<offsetHeight?$w.height():scrollHeight;this.fullSize.w=scrollWidth<offsetWidth?$w.width():scrollWidth;this.fullSize.viewW=Math.min(this.fullSize.w,this.fullSize.wW);this.fullSize.viewH=Math.min(this.fullSize.h,this.fullSize.wH);}});$.nmAnims({basic:{resize:function(nm,clb){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.css({width:nm.sizes.w,height:nm.sizes.h,top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2});clb();}},fade:{resize:function(nm,clb){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.animate({width:nm.sizes.w,height:nm.sizes.h,top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2},clb);}}});$.nmFilters({ie6:{is:function(){return true;},initElts:function(nm){nm.store.ie6=true;if(shown==0){$h.css({overflow:'hidden'});var w=$b.width(),h=$b.outerHeight(true)+'px';if($w.height()>=$b.outerHeight(true)){h=$w.height()+'px';}else
+w+=20;w+='px';$b.css({width:w,height:h,position:'static',overflow:'hidden'});}},beforeShowBg:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter($b);nm.elts.bg.css({position:'absolute',top:space.top,left:space.left,width:nm.getInternal().fullSize.viewW+200,height:nm.getInternal().fullSize.viewH+200});shown++;},afterHideBg:function(nm){if(nm.store.ie6){nm.store.ie6=false;shown--;}
+if(shown==0){$h.css({overflow:''});$b.css({width:'',height:'',position:'',overflow:''});}},size:function(nm){if(!nm._hasFilter('image')&&!nm._hasFilter('swf')){if(nm.sizes.h<250)nm.sizes.h=250;if(nm.sizes.w<250)nm.sizes.w=250;else if(nm.sizes.w>1000)nm.sizes.w=1000;}},close:function(nm){if(nm.store.ie6){nm.store.ie6=false;shown--;}},beforeShowLoad:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.load);nm.elts.load.css({'z-index':zIndex++,position:'absolute',top:space.top+(nm.getInternal().fullSize.viewH-nm.elts.load.height()-outer.h.margin)/2,left:space.left+(nm.getInternal().fullSize.viewW-nm.elts.load.width()-outer.w.margin)/2});},beforeShowCont:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.css({'z-index':zIndex++,position:'absolute',top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2});}}});});
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.nyroModal.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,32 @@
+/*
+ * nyroModal v2.0.0
+ * Core
+ *
+ *
+ * Included parts:
+ * - anims.fade
+ * - filters.title
+ * - filters.gallery
+ * - filters.link
+ * - filters.dom
+ * - filters.image
+ * - filters.swf
+ * - filters.form
+ * - filters.formFile
+ * - filters.iframe
+ * - filters.iframeForm
+ * - filters.embedly
+ */
+ jQuery(function($,undefined){var $w=$(window),$d=$(document),$b=$('body'),baseHref=$('base').attr('href'),_nmObj={filters:[],callbacks:{},loadFilter:undefined,modal:false,closeOnEscape:true,closeOnClick:true,useKeyHandler:false,showCloseButton:true,closeButton:'<a href="#" class="nyroModalClose nyroModalCloseButton nmReposition" title="close">Close</a>',stack:false,header:undefined,footer:undefined,galleryLoop:true,galleryCounts:true,ltr:true,imageRegex:'[^\.]\.(jpg|jpeg|png|tiff|gif|bmp)\s*$',selIndicator:'nyroModalSel',swf:{allowFullScreen:'true',allowscriptaccess:'always',wmode:'transparent'},store:{},errorMsg:'An error occured',elts:{all:undefined,bg:undefined,load:undefined,cont:undefined,hidden:undefined},sizes:{initW:undefined,initH:undefined,w:undefined,h:undefined,minW:undefined,minH:undefined,wMargin:undefined,hMargin:undefined},anim:{def:undefined,showBg:undefined,hideBg:undefined,showLoad:undefined,hideLoad:undefined,showCont:undefined,hideCont:undefined,showTrans:undefined,hideTrans:undefined,resize:undefined},_open:false,_bgReady:false,_opened:false,_loading:false,_animated:false,_transition:false,_nmOpener:undefined,_nbContentLoading:0,_scripts:'',_scriptsShown:'',saveObj:function(){this.opener.data('nmObj',this);},open:function(){this.getInternal()._pushStack(this.opener);this._opened=false;this._bgReady=false;this._open=true;this._initElts();this._load();this._nbContentLoading=0;this._callAnim('showBg',$.proxy(function(){this._bgReady=true;if(this._nmOpener){this._nmOpener._close();this._nmOpener._bgReady=false;this._nmOpener._loading=false;this._nmOpener._animated=false;this._nmOpener._opened=false;this._nmOpener._open=false;this._nmOpener.elts.cont=this._nmOpener.elts.hidden=this._nmOpener.elts.load=this._nmOpener.elts.bg=this._nmOpener.elts.all=undefined;this._nmOpener.saveObj();this._nmOpener=undefined;}this._contentLoading();},this));},resize:function(){this.sizes.w=this.sizes.initW;this.sizes.h=this.sizes.initH;this._unreposition();this.size();this._callAnim('resize',$.proxy(function(){this._reposition();},this));},size:function(){var maxHeight=this.getInternal().fullSize.viewH-this.sizes.hMargin,maxWidth=this.getInternal().fullSize.viewW-this.sizes.wMargin;if(this.sizes.minW&&this.sizes.minW>this.sizes.w)this.sizes.w=this.sizes.minW;if(this.sizes.minH&&this.sizes.minH>this.sizes.h)this.sizes.h=this.sizes.minH;if(this.sizes.h>maxHeight||this.sizes.w>maxWidth){this.sizes.h=Math.min(this.sizes.h,maxHeight);this.sizes.w=Math.min(this.sizes.w,maxWidth);}this._callFilters('size');},getForNewLinks:function(){var ret;if(this.stack){ret=$.extend(true,{},this);ret._nmOpener=undefined;ret.elts.all=undefined;}else{ret=$.extend({},this);ret._nmOpener=this;}ret.filters=[];ret.opener=undefined;ret._open=false;return ret;},keyHandle:function(e){this.keyEvent=e;this._callFilters('keyHandle');this.keyEvent=undefined;delete(this.keyEvent);},getInternal:function(){return _internal;},_close:function(){this.getInternal()._removeStack(this.opener);this._opened=false;this._open=false;this._callFilters('close');},close:function(){this._close();this._callFilters('beforeClose');var self=this;this._unreposition();self._callAnim('hideCont',function(){self._callAnim('hideLoad',function(){self._callAnim('hideBg',function(){self._callFilters('afterClose');self.elts.cont.remove();self.elts.hidden.remove();self.elts.load.remove();self.elts.bg.remove();self.elts.all.remove();self.elts.cont=self.elts.hidden=self.elts.load=self.elts.bg=self.elts.all=undefined;});});});},_initElts:function(){if(!this.stack&&this.getInternal().stack.length>1)this.elts=$(_internal.stack[_internal.stack.length-2]).data('nmObj').elts;if(!this.elts.all||this.elts.all.closest('body').length==0)this.elts.all=this.elts.bg=this.elts.cont=this.elts.hidden=this.elts.load=undefined;if(!this.elts.all)this.elts.all=$('<div />').appendTo(this.getInternal()._container);if(!this.elts.bg)this.elts.bg=$('<div />').hide().appendTo(this.elts.all);if(!this.elts.cont)this.elts.cont=$('<div />').hide().appendTo(this.elts.all);if(!this.elts.hidden)this.elts.hidden=$('<div />').hide().appendTo(this.elts.all);this.elts.hidden.empty();if(!this.elts.load)this.elts.load=$('<div />').hide().appendTo(this.elts.all);this._callFilters('initElts');},_error:function(){this._callFilters('error');},_setCont:function(html,selector){if(selector){var tmp=[],i=0;html=html .replace(/\r\n/gi,'nyroModalLN').replace(/<script(.|\s)*?\/script>/gi,function(x){tmp[i]=x;return '<pre class=nyroModalScript rel="'+(i++)+'"></pre>';});var cur=$('<div>'+html+'</div>').find(selector);if(cur.length){html=cur.html().replace(/<pre class="?nyroModalScript"? rel="?(.?)"?><\/pre>/gi,function(x,y,z){return tmp[y];}).replace(/nyroModalLN/gi,"\r\n");}else{this._error();return;}}this.elts.hidden .append(this._filterScripts(html)).prepend(this.header).append(this.footer).wrapInner('<div class="nyroModal'+ucfirst(this.loadFilter)+'" />');this.sizes.initW=this.sizes.w=this.elts.hidden.width();this.sizes.initH=this.sizes.h=this.elts.hidden.height();var outer=this.getInternal()._getOuter(this.elts.cont);this.sizes.hMargin=outer.h.total;this.sizes.wMargin=outer.w.total;this.size();this.loading=false;this._callFilters('filledContent');this._contentLoading();},_filterScripts:function(data){if(typeof data!='string')return data;this._scripts=[];this._scriptsShown=[];var start=0,stStart='<script',stEnd='</script>',endLn=stEnd.length,pos,pos2,tmp;while((pos=data.indexOf(stStart,start))>-1){pos2=data.indexOf(stEnd)+endLn;tmp=$(data.substring(pos,pos2));if(!tmp.attr('src')||tmp.attr('rel')=='forceLoad'){if(tmp.attr('rev')=='shown')this._scriptsShown.push(tmp.get(0));else this._scripts.push(tmp.get(0));}data=data.substring(0,pos)+data.substr(pos2);start=pos;}return data;},_hasFilter:function(filter){var ret=false;$.each(this.filters,function(i,f){ret=ret||f==filter;});return ret;},_delFilter:function(filter){this.filters=$.map(this.filters,function(v){if(v!=filter)return v;});},_callFilters:function(fct){this.getInternal()._debug(fct);var ret=[],self=this;$.each(this.filters,function(i,f){ret[f]=self._callFilter(f,fct);});if(this.callbacks[fct]&&$.isFunction(this.callbacks[fct]))this.callbacks[fct](this);return ret;},_callFilter:function(f,fct){if(_filters[f]&&_filters[f][fct]&&$.isFunction(_filters[f][fct]))return _filters[f][fct](this);return undefined;},_callAnim:function(fct,clb){this.getInternal()._debug(fct);this._callFilters('before'+ucfirst(fct));if(!this._animated){this._animated=true;if(!$.isFunction(clb))clb=$.noop;var set=this.anim[fct]||this.anim.def||'basic';if(!_animations[set]||!_animations[set][fct]||!$.isFunction(_animations[set][fct]))set='basic';_animations[set][fct](this,$.proxy(function(){this._animated=false;this._callFilters('after'+ucfirst(fct));clb();},this));}},_load:function(){this.getInternal()._debug('_load');if(!this.loading&&this.loadFilter){this.loading=true;this._callFilter(this.loadFilter,'load');}},_contentLoading:function(){if(!this._animated&&this._bgReady){if(!this._transition&&this.elts.cont.html().length>0)this._transition=true;this._nbContentLoading++;if(!this.loading){if(!this._opened){this._opened=true;if(this._transition){var fct=$.proxy(function(){this._writeContent();this._callFilters('beforeShowCont');this._callAnim('hideTrans',$.proxy(function(){this._transition=false;this.elts.cont.append(this._scriptsShown);this._reposition();this._callFilters('afterShowCont');},this));},this);if(this._nbContentLoading==1){this._unreposition();this._callAnim('showTrans',fct);}else{fct();}}else{this._callAnim('hideLoad',$.proxy(function(){this._writeContent();this._callAnim('showCont',$.proxy(function(){this.elts.cont.append(this._scriptsShown);this._reposition();},this));},this));}}}else if(this._nbContentLoading==1){var outer=this.getInternal()._getOuter(this.elts.load);this.elts.load .css({position:'fixed',top:(this.getInternal().fullSize.viewH-this.elts.load.height()-outer.h.margin)/2,left:(this.getInternal().fullSize.viewW-this.elts.load.width()-outer.w.margin)/2});if(this._transition){this._unreposition();this._callAnim('showTrans',$.proxy(function(){this._contentLoading();},this));}else{this._callAnim('showLoad',$.proxy(function(){this._contentLoading();},this));}}}},_writeContent:function(){this.elts.cont .empty().append(this.elts.hidden.contents()).append(this._scripts).append(this.showCloseButton?this.closeButton:'').css({position:'fixed',width:this.sizes.w,height:this.sizes.h,top:(this.getInternal().fullSize.viewH-this.sizes.h-this.sizes.hMargin)/2,left:(this.getInternal().fullSize.viewW-this.sizes.w-this.sizes.wMargin)/2});},_reposition:function(){var elts=this.elts.cont.find('.nmReposition');if(elts.length){var space=this.getInternal()._getSpaceReposition();elts.each(function(){var me=$(this),offset=me.offset();me.css({position:'fixed',top:offset.top-space.top,left:offset.left-space.left});});this.elts.cont.after(elts);}this.elts.cont.css('overflow','auto');},_unreposition:function(){this.elts.cont.css('overflow','');var elts=this.elts.all.find('.nmReposition');if(elts.length)this.elts.cont.append(elts.removeAttr('style'));}},_internal={firstInit:true,stack:[],fullSize:{w:0,h:0,wW:0,wH:0,viewW:0,viewH:0},nyroModal:function(opts,fullObj){if(_internal.firstInit){_internal._container=$('<div />').appendTo($b);$w.smartresize($.proxy(_internal._resize,_internal));$d.bind('keydown.nyroModal',$.proxy(_internal._keyHandler,_internal));_internal._calculateFullSize();_internal.firstInit=false;}return this.nmInit(opts,fullObj).each(function(){_internal._init($(this).data('nmObj'));});},nmInit:function(opts,fullObj){return this.each(function(){var me=$(this);if(fullObj)me.data('nmObj',$.extend(true,{opener:me},opts));else me.data('nmObj',me.data('nmObj')?$.extend(true,me.data('nmObj'),opts):$.extend(true,{opener:me},_nmObj,opts));});},nmCall:function(){return this.trigger('nyroModal');},nmManual:function(url,opts){$('<a />',{href:url}).nyroModal(opts).trigger('nyroModal');},nmObj:function(opts){$.extend(true,_nmObj,opts);},nmInternal:function(opts){$.extend(true,_internal,opts);},nmAnims:function(opts){$.extend(true,_animations,opts);},nmFilters:function(opts){$.extend(true,_filters,opts);},nmTop:function(){if(_internal.stack.length)return $(_internal.stack[_internal.stack.length-1]).data('nmObj');return undefined;},_debug:function(msg){if(window.console&&window.console.log)window.console.log(msg);},_container:undefined,_init:function(nm){nm.filters=[];$.each(_filters,function(f,obj){if($.isFunction(obj.is)&&obj.is(nm)){nm.filters.push(f);}});nm._callFilters('init');nm.opener .unbind('nyroModal.nyroModal nmClose.nyroModal nmResize.nyroModal').bind({'nyroModal.nyroModal':function(e){nm.open();return false;},'nmClose.nyroModal':function(){nm.close();return false;},'nmResize.nyroModal':function(){nm.resize();return false;}});},_scrollWidth:(function(){var scrollbarWidth;if($.browser.msie){var $textarea1=$('<textarea cols="10" rows="2"></textarea>').css({position:'absolute',top:-1000,left:-1000}).appendTo($b),$textarea2=$('<textarea cols="10" rows="2" style="overflow: hidden;"></textarea>').css({position:'absolute',top:-1000,left:-1000}).appendTo($b);scrollbarWidth=$textarea1.width()-$textarea2.width();$textarea1.add($textarea2).remove();}else{var $div=$('<div />').css({width:100,height:100,overflow:'auto',position:'absolute',top:-1000,left:-1000}).prependTo($b).append('<div />').find('div').css({width:'100%',height:200});scrollbarWidth=100-$div.width();$div.parent().remove();}return scrollbarWidth;})(),_selNyroModal:function(obj){return $(obj).data('nmObj')?true:false;},_selNyroModalOpen:function(obj){var me=$(obj);return me.data('nmObj')?me.data('nmObj')._open:false;},_keyHandler:function(e){var nmTop=$.nmTop();if(nmTop&&nmTop.useKeyHandler){return nmTop.keyHandle(e);}},_pushStack:function(obj){this.stack=$.map(this.stack,function(elA){if(elA!=obj.get(0))return elA;});this.stack.push(obj.get(0));},_removeStack:function(obj){this.stack=$.map(this.stack,function(elA){if(elA!=obj.get(0))return elA;});},_resize:function(){var opens=$(':nmOpen').each(function(){$(this).data('nmObj')._unreposition();});this._calculateFullSize();opens.trigger('nmResize');},_calculateFullSize:function(){this.fullSize={w:$d.width(),h:$d.height(),wW:$w.width(),wH:$w.height()};this.fullSize.viewW=Math.min(this.fullSize.w,this.fullSize.wW);this.fullSize.viewH=Math.min(this.fullSize.h,this.fullSize.wH);},_getCurCSS:function(elm,name){var ret=parseInt($.curCSS(elm,name,true));return isNaN(ret)?0:ret;},_getOuter:function(elm){elm=elm.get(0);var ret={h:{margin:this._getCurCSS(elm,'marginTop')+this._getCurCSS(elm,'marginBottom'),border:this._getCurCSS(elm,'borderTopWidth')+this._getCurCSS(elm,'borderBottomWidth'),padding:this._getCurCSS(elm,'paddingTop')+this._getCurCSS(elm,'paddingBottom')},w:{margin:this._getCurCSS(elm,'marginLeft')+this._getCurCSS(elm,'marginRight'),border:this._getCurCSS(elm,'borderLeftWidth')+this._getCurCSS(elm,'borderRightWidth'),padding:this._getCurCSS(elm,'paddingLeft')+this._getCurCSS(elm,'paddingRight')}};ret.h.outer=ret.h.margin+ret.h.border;ret.w.outer=ret.w.margin+ret.w.border;ret.h.inner=ret.h.padding+ret.h.border;ret.w.inner=ret.w.padding+ret.w.border;ret.h.total=ret.h.outer+ret.h.padding;ret.w.total=ret.w.outer+ret.w.padding;return ret;},_getSpaceReposition:function(){var outer=this._getOuter($b),ie7=$.browser.msie&&$.browser.version<8&&!(screen.height<=$w.height()+23);return{top:$w.scrollTop()-(!ie7?outer.h.border/2:0),left:$w.scrollLeft()-(!ie7?outer.w.border/2:0)};},_getHash:function(url){if(typeof url=='string'){var hashPos=url.indexOf('#');if(hashPos>-1)return url.substring(hashPos);}return '';},_extractUrl:function(url){var ret={url:undefined,sel:undefined};if(url){var hash=this._getHash(url),hashLoc=this._getHash(window.location.href),curLoc=window.location.href.substring(0,window.location.href.length-hashLoc.length),req=url.substring(0,url.length-hash.length);ret.sel=hash;if(req!=curLoc&&req!=baseHref)ret.url=req;}return ret;}},_animations={basic:{showBg:function(nm,clb){nm.elts.bg.css({opacity:0.7}).show();clb();},hideBg:function(nm,clb){nm.elts.bg.hide();clb();},showLoad:function(nm,clb){nm.elts.load.show();clb();},hideLoad:function(nm,clb){nm.elts.load.hide();clb();},showCont:function(nm,clb){nm.elts.cont.show();clb();},hideCont:function(nm,clb){nm.elts.cont.hide();clb();},showTrans:function(nm,clb){nm.elts.cont.hide();nm.elts.load.show();clb();},hideTrans:function(nm,clb){nm.elts.cont.show();nm.elts.load.hide();clb();},resize:function(nm,clb){nm.elts.cont.css({width:nm.sizes.w,height:nm.sizes.h,top:(nm.getInternal().fullSize.viewH-nm.sizes.h-nm.sizes.hMargin)/2,left:(nm.getInternal().fullSize.viewW-nm.sizes.w-nm.sizes.wMargin)/2});clb();}}},_filters={basic:{is:function(nm){return true;},init:function(nm){if(nm.opener.attr('rev')=='modal')nm.modal=true;if(nm.modal)nm.closeOnEscape=nm.closeOnClick=nm.showCloseButton=false;if(nm.closeOnEscape)nm.useKeyHandler=true;},initElts:function(nm){nm.elts.bg.addClass('nyroModalBg');if(nm.closeOnClick)nm.elts.bg.unbind('click.nyroModal').bind('click.nyroModal',function(e){e.preventDefault();nm.close();});nm.elts.cont.addClass('nyroModalCont');nm.elts.hidden.addClass('nyroModalCont nyroModalHidden');nm.elts.load.addClass('nyroModalCont nyroModalLoad');},error:function(nm){nm.elts.hidden.addClass('nyroModalError');nm.elts.cont.addClass('nyroModalError');nm._setCont(nm.errorMsg);},beforeShowCont:function(nm){nm.elts.cont .find('.nyroModal').nyroModal(nm.getForNewLinks(),true).end().find('.nyroModalClose').bind('click.nyroModal',function(e){e.preventDefault();nm.close();});},keyHandle:function(nm){if(nm.keyEvent.keyCode==27&&nm.closeOnEscape){nm.keyEvent.preventDefault();nm.close();}}},custom:{is:function(nm){return true;}}};$.fn.extend({nm:_internal.nyroModal,nyroModal:_internal.nyroModal,nmInit:_internal.nmInit,nmCall:_internal.nmCall});$.extend({nmManual:_internal.nmManual,nmObj:_internal.nmObj,nmInternal:_internal.nmInternal,nmAnims:_internal.nmAnims,nmFilters:_internal.nmFilters,nmTop:_internal.nmTop});$.expr[':'].nyroModal=$.expr[':'].nm=_internal._selNyroModal;$.expr[':'].nmOpen=_internal._selNyroModalOpen;});(function($,sr){var debounce=function(func,threshold,execAsap){var timeout;return function debounced(){var obj=this,args=arguments;function delayed(){if(!execAsap)func.apply(obj,args);timeout=null;};if(timeout)clearTimeout(timeout);else if(execAsap)func.apply(obj,args);timeout=setTimeout(delayed,threshold||100);};};jQuery.fn[sr]=function(fn){return fn?this.bind('resize',debounce(fn)):this.trigger(sr);};})(jQuery,'smartresize');function ucfirst(str){str+='';var f=str.charAt(0).toUpperCase();return f+str.substr(1);};
+ jQuery(function($,undefined){$.nmAnims({fade:{showBg:function(nm,clb){nm.elts.bg.fadeTo(250,0.7,clb);},hideBg:function(nm,clb){nm.elts.bg.fadeOut(clb);},showLoad:function(nm,clb){nm.elts.load.fadeIn(clb);},hideLoad:function(nm,clb){nm.elts.load.fadeOut(clb);},showCont:function(nm,clb){nm.elts.cont.fadeIn(clb);},hideCont:function(nm,clb){nm.elts.cont.css('overflow','hidden').fadeOut(clb);},showTrans:function(nm,clb){nm.elts.load .css({position:nm.elts.cont.css('position'),top:nm.elts.cont.css('top'),left:nm.elts.cont.css('left'),width:nm.elts.cont.css('width'),height:nm.elts.cont.css('height'),marginTop:nm.elts.cont.css('marginTop'),marginLeft:nm.elts.cont.css('marginLeft')}).fadeIn(function(){nm.elts.cont.hide();clb();});},hideTrans:function(nm,clb){nm.elts.cont.css('visibility','hidden').show();nm.elts.load .css('position',nm.elts.cont.css('position')).animate({top:nm.elts.cont.css('top'),left:nm.elts.cont.css('left'),width:nm.elts.cont.css('width'),height:nm.elts.cont.css('height'),marginTop:nm.elts.cont.css('marginTop'),marginLeft:nm.elts.cont.css('marginLeft')},function(){nm.elts.cont.css('visibility','');nm.elts.load.fadeOut(clb);});},resize:function(nm,clb){nm.elts.cont.animate({width:nm.sizes.w,height:nm.sizes.h,top:(nm.getInternal().fullSize.viewH-nm.sizes.h-nm.sizes.hMargin)/2,left:(nm.getInternal().fullSize.viewW-nm.sizes.w-nm.sizes.wMargin)/2},clb);}}});$.nmObj({anim:{def:'fade'}});});;
+ jQuery(function($,undefined){$.nmFilters({title:{is:function(nm){return nm.opener.is('[title]');},beforeShowCont:function(nm){var offset=nm.elts.cont.offset();nm.store.title=$('<h1 />',{text:nm.opener.attr('title')}).addClass('nyroModalTitle nmReposition');nm.elts.cont.prepend(nm.store.title);},close:function(nm){if(nm.store.title){nm.store.title.remove();nm.store.title=undefined;delete(nm.store.title);}}}});});;
+ jQuery(function($,undefined){$.nmFilters({gallery:{is:function(nm){var ret=nm.opener.is('[rel]:not([rel=external], [rel=nofollow])');if(ret&&nm.galleryCounts&&!nm._hasFilter('title'))nm.filters.push('title');return ret;},init:function(nm){nm.useKeyHandler=true;},keyHandle:function(nm){if(!nm._animated&&nm._opened){if(nm.keyEvent.keyCode==39||nm.keyEvent.keyCode==40){nm.keyEvent.preventDefault();nm._callFilters('galleryNext');}else if(nm.keyEvent.keyCode==37||nm.keyEvent.keyCode==38){nm.keyEvent.preventDefault();nm._callFilters('galleryPrev');}}},initElts:function(nm){var rel=nm.opener.attr('rel'),indexSpace=rel.indexOf(' ');nm.store.gallery=indexSpace>0?rel.substr(0,indexSpace):rel;nm.store.galleryLinks=$('[href][rel="'+nm.store.gallery+'"], [href][rel^="'+nm.store.gallery+' "]');nm.store.galleryIndex=nm.store.galleryLinks.index(nm.opener);},beforeShowCont:function(nm){if(nm.galleryCounts&&nm.store.title&&nm.store.galleryLinks.length>1){var curTitle=nm.store.title.html();nm.store.title.html((curTitle.length?curTitle+' - ':'')+(nm.store.galleryIndex+1)+'/'+nm.store.galleryLinks.length);}},filledContent:function(nm){var link=this._getGalleryLink(nm,-1),append=nm.elts.hidden.find(' > div');if(link){$('<a />',{text:'previous',href:'#'}).addClass('nyroModalPrev').bind('click',function(e){e.preventDefault();nm._callFilters('galleryPrev');}).appendTo(append);}link=this._getGalleryLink(nm,1);if(link){$('<a />',{text:'next',href:'#'}).addClass('nyroModalNext').bind('click',function(e){e.preventDefault();nm._callFilters('galleryNext');}).appendTo(append);}},close:function(nm){nm.store.gallery=undefined;nm.store.galleryLinks=undefined;nm.store.galleryIndex=undefined;delete(nm.store.gallery);delete(nm.store.galleryLinks);delete(nm.store.galleryIndex);if(nm.elts.cont)nm.elts.cont.find('.nyroModalNext, .nyroModalPrev').remove();},galleryNext:function(nm){this._getGalleryLink(nm,1).nyroModal(nm.getForNewLinks(),true).click();},galleryPrev:function(nm){this._getGalleryLink(nm,-1).nyroModal(nm.getForNewLinks(),true).click();},_getGalleryLink:function(nm,dir){if(nm.store.gallery){if(!nm.ltr)dir *=-1;var index=nm.store.galleryIndex+dir;if(index>=0&&index<nm.store.galleryLinks.length)return nm.store.galleryLinks.eq(index);else if(nm.galleryLoop)return nm.store.galleryLinks.eq(index<0?nm.store.galleryLinks.length-1:0);}return undefined;}}});});;
+ jQuery(function($,undefined){$.nmFilters({link:{is:function(nm){var ret=nm.opener.is('[href]');if(ret)nm.store.link=nm.getInternal()._extractUrl(nm.opener.attr('href'));return ret;},init:function(nm){nm.loadFilter='link';nm.opener.unbind('click.nyroModal').bind('click.nyroModal',function(e){e.preventDefault();nm.opener.trigger('nyroModal');});},load:function(nm){$.ajax({url:nm.store.link.url,data:nm.store.link.sel?[{name:nm.selIndicator,value:nm.store.link.sel.substring(1)}]:undefined,success:function(data){nm._setCont(data,nm.store.link.sel);},error:function(){nm._error();}});}}});});;
+ jQuery(function($,undefined){$.nmFilters({dom:{is:function(nm){return nm._hasFilter('link')&&!nm.store.link.url&&nm.store.link.sel;},init:function(nm){nm.loadFilter='dom';},load:function(nm){nm.store.domEl=$(nm.store.link.sel);if(nm.store.domEl.length)nm._setCont(nm.store.domEl.contents());else nm._error();},close:function(nm){if(nm.store.domEl&&nm.elts.cont)nm.store.domEl.append(nm.elts.cont.find('.nyroModalDom').contents());}}});});;
+ jQuery(function($,undefined){$.nmFilters({image:{is:function(nm){return(new RegExp(nm.imageRegex,'i')).test(nm.opener.attr('href'));},init:function(nm){nm.loadFilter='image';},load:function(nm){var url=nm.opener.attr('href');$('<img />').load(function(){nm.elts.cont.addClass('nyroModalImg');nm.elts.hidden.addClass('nyroModalImg');nm._setCont(this);}).error(function(){nm._error();}).attr('src',url);},size:function(nm){if(nm.sizes.w!=nm.sizes.initW||nm.sizes.h!=nm.sizes.initH){var ratio=Math.min(nm.sizes.w/nm.sizes.initW,nm.sizes.h/nm.sizes.initH);nm.sizes.w=nm.sizes.initW * ratio;nm.sizes.h=nm.sizes.initH * ratio;}var img=nm.loading?nm.elts.hidden.find('img'):nm.elts.cont.find('img');img.attr({width:nm.sizes.w,height:nm.sizes.h});},close:function(nm){if(nm.elts.cont){nm.elts.cont.removeClass('nyroModalImg');nm.elts.hidden.removeClass('nyroModalImg');}}}});});;
+ jQuery(function($,undefined){$.nmFilters({swf:{is:function(nm){return nm._hasFilter('link')&&nm.opener.is('[href$=.swf]');},init:function(nm){nm.loadFilter='swf';},load:function(nm){var url=nm.store.link.url,cont='<div><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+nm.sizes.w+'" height="'+nm.sizes.h+'"><param name="movie" value="'+url+'"></param>',tmp='';$.each(nm.swf,function(name,val){cont+='<param name="'+name+'" value="'+val+'"></param>';tmp+=' '+name+'="'+val+'"';});cont+='<embed src="'+url+'" type="application/x-shockwave-flash" width="'+nm.sizes.w+'" height="'+nm.sizes.h+'"'+tmp+'></embed></object></div>';nm._setCont(cont);}}});});;
+ jQuery(function($,undefined){$.nmFilters({form:{is:function(nm){var ret=nm.opener.is('form');if(ret)nm.store.form=nm.getInternal()._extractUrl(nm.opener.attr('action'));return ret;},init:function(nm){nm.loadFilter='form';nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){e.preventDefault();nm.opener.trigger('nyroModal');});},load:function(nm){var data=nm.opener.serializeArray();if(nm.store.form.sel)data.push({name:nm.selIndicator,value:nm.store.form.sel.substring(1)});$.ajax({url:nm.store.form.url,data:data,type:nm.opener.attr('method')?nm.opener.attr('method'):'get',success:function(data){nm._setCont(data,nm.store.form.sel);},error:function(){nm._error();}});}}});});;
+ jQuery(function($,undefined){$.nmFilters({formFile:{is:function(nm){var ret=nm.opener.is('form[enctype="multipart/form-data"]');if(ret){nm._delFilter('form');if(!nm.store.form)nm.store.form=nm.getInternal()._extractUrl(nm.opener.attr('action'));}return ret;},init:function(nm){nm.loadFilter='formFile';nm.store.formFileLoading=false;nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){if(!nm.store.formFileIframe){e.preventDefault();nm.opener.trigger('nyroModal');}else{nm.store.formFileLoading=true;}});},initElts:function(nm){var inputSel;if(nm.store.form.sel)inputSel=$('<input />',{'type':'hidden',name:nm.selIndicator,value:nm.store.form.sel.substring(1)}).appendTo(nm.opener);function rmFormFileElts(){if(inputSel){inputSel.remove();inputSel=undefined;delete(inputSel);}nm.store.formFileIframe.attr('src','about:blank').remove();nm.store.formFileIframe=undefined;delete(nm.store.formFileIframe);}nm.store.formFileIframe=$('<iframe name="nyroModalFormFile" src="javascript:\'\';"></iframe>').hide().load(function(){if(nm.store.formFileLoading){nm.store.formFileLoading=false;var content=nm.store.formFileIframe .unbind('load error').contents().find('body').not('script[src]');if(content&&content.html()&&content.html().length){rmFormFileElts();nm._setCont(content.html(),nm.store.form.sel);}else{var nbTry=0;fct=function(){nbTry++;var content=nm.store.formFileIframe .unbind('load error').contents().find('body').not('script[src]');if(content&&content.html()&&content.html().length){nm._setCont(content.html(),nm.store.form.sel);rmFormFileElts();}else if(nbTry<5){setTimeout(fct,25);}else{rmFormFileElts();nm._error();}};setTimeout(fct,25);}}}).error(function(){rmIframe();nm._error();});nm.elts.all.append(nm.store.formFileIframe);nm.opener .attr('target','nyroModalFormFile').submit();},close:function(nm){nm.store.formFileLoading=false;if(nm.store.formFileIframe){nm.store.formFileIframe.remove();nm.store.formFileIframe=undefined;delete(nm.store.formFileIframe);}}}});});;
+ jQuery(function($,undefined){$.nmFilters({iframe:{is:function(nm){var target=nm.opener.attr('target')||'',rel=nm.opener.attr('rel')||'',opener=nm.opener.get(0);return!nm._hasFilter('image')&&(target.toLowerCase()=='_blank'||rel.toLowerCase().indexOf('external')>-1||(opener.hostname&&opener.hostname.replace(/:\d*$/,'')!=window.location.hostname.replace(/:\d*$/,'')));},init:function(nm){nm.loadFilter='iframe';},load:function(nm){nm.store.iframe=$('<iframe src="javascript:\'\';"></iframe>');nm._setCont(nm.store.iframe);},afterShowCont:function(nm){nm.store.iframe.attr('src',nm.opener.attr('href'));},close:function(nm){if(nm.store.iframe){nm.store.iframe.remove();nm.store.iframe=undefined;delete(nm.store.iframe);}}}});});;
+ jQuery(function($,undefined){$.nmFilters({iframeForm:{is:function(nm){var ret=nm._hasFilter('iframe')&&nm.opener.is('form');if(ret){nm._delFilter('iframe');nm._delFilter('form');}return ret;},init:function(nm){nm.loadFilter='iframeForm';nm.store.iframeFormLoading=false;nm.store.iframeFormOrgTarget=nm.opener.attr('target');nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){if(!nm.store.iframeFormIframe){e.preventDefault();nm.opener.trigger('nyroModal');}else{nm.store.iframeFormLoading=true;}});},load:function(nm){nm.store.iframeFormIframe=$('<iframe name="nyroModalIframeForm" src="javascript:\'\';"></iframe>');nm._setCont(nm.store.iframeFormIframe);},afterShowCont:function(nm){nm.opener .attr('target','nyroModalIframeForm').submit();},close:function(nm){nm.store.iframeFormOrgTarget?nm.opener.attr('target',nm.store.iframeFormOrgTarget):nm.opener.removeAttr('target');delete(nm.store.formFileLoading);delete(nm.store.iframeFormOrgTarget);if(nm.store.iframeFormIframe){nm.store.iframeFormIframe.remove();nm.store.iframeFormIframe=undefined;delete(nm.store.iframeFormIframe);}}}});});;
+ jQuery(function($,undefined){$.nmFilters({embedly:{is:function(nm){var embedlyReg= /http:\/\/(.*youtube\.com\/watch.*|.*\.youtube\.com\/v\/.*|youtu\.be\/.*|.*\.youtube\.com\/user\/.*|.*\.youtube\.com\/.*#.*\/.*|m\.youtube\.com\/watch.*|m\.youtube\.com\/index.*|.*\.youtube\.com\/profile.*|.*justin\.tv\/.*|.*justin\.tv\/.*\/b\/.*|.*justin\.tv\/.*\/w\/.*|www\.ustream\.tv\/recorded\/.*|www\.ustream\.tv\/channel\/.*|www\.ustream\.tv\/.*|qik\.com\/video\/.*|qik\.com\/.*|qik\.ly\/.*|.*revision3\.com\/.*|.*\.dailymotion\.com\/video\/.*|.*\.dailymotion\.com\/.*\/video\/.*|www\.collegehumor\.com\/video:.*|.*twitvid\.com\/.*|www\.break\.com\/.*\/.*|vids\.myspace\.com\/index\.cfm\?fuseaction=vids\.individual&videoid.*|www\.myspace\.com\/index\.cfm\?fuseaction=.*&videoid.*|www\.metacafe\.com\/watch\/.*|www\.metacafe\.com\/w\/.*|blip\.tv\/file\/.*|.*\.blip\.tv\/file\/.*|video\.google\.com\/videoplay\?.*|.*revver\.com\/video\/.*|video\.yahoo\.com\/watch\/.*\/.*|video\.yahoo\.com\/network\/.*|.*viddler\.com\/explore\/.*\/videos\/.*|liveleak\.com\/view\?.*|www\.liveleak\.com\/view\?.*|animoto\.com\/play\/.*|dotsub\.com\/view\/.*|www\.overstream\.net\/view\.php\?oid=.*|www\.livestream\.com\/.*|www\.worldstarhiphop\.com\/videos\/video.*\.php\?v=.*|worldstarhiphop\.com\/videos\/video.*\.php\?v=.*|teachertube\.com\/viewVideo\.php.*|www\.teachertube\.com\/viewVideo\.php.*|www1\.teachertube\.com\/viewVideo\.php.*|www2\.teachertube\.com\/viewVideo\.php.*|bambuser\.com\/v\/.*|bambuser\.com\/channel\/.*|bambuser\.com\/channel\/.*\/broadcast\/.*|www\.schooltube\.com\/video\/.*\/.*|bigthink\.com\/ideas\/.*|bigthink\.com\/series\/.*|sendables\.jibjab\.com\/view\/.*|sendables\.jibjab\.com\/originals\/.*|www\.xtranormal\.com\/watch\/.*|dipdive\.com\/media\/.*|dipdive\.com\/member\/.*\/media\/.*|dipdive\.com\/v\/.*|.*\.dipdive\.com\/media\/.*|.*\.dipdive\.com\/v\/.*|.*yfrog\..*\/.*|tweetphoto\.com\/.*|www\.flickr\.com\/photos\/.*|flic\.kr\/.*|twitpic\.com\/.*|www\.twitpic\.com\/.*|twitpic\.com\/photos\/.*|www\.twitpic\.com\/photos\/.*|.*imgur\.com\/.*|.*\.posterous\.com\/.*|post\.ly\/.*|twitgoo\.com\/.*|i.*\.photobucket\.com\/albums\/.*|s.*\.photobucket\.com\/albums\/.*|phodroid\.com\/.*\/.*\/.*|www\.mobypicture\.com\/user\/.*\/view\/.*|moby\.to\/.*|xkcd\.com\/.*|www\.xkcd\.com\/.*|imgs\.xkcd\.com\/.*|www\.asofterworld\.com\/index\.php\?id=.*|www\.asofterworld\.com\/.*\.jpg|asofterworld\.com\/.*\.jpg|www\.qwantz\.com\/index\.php\?comic=.*|23hq\.com\/.*\/photo\/.*|www\.23hq\.com\/.*\/photo\/.*|.*dribbble\.com\/shots\/.*|drbl\.in\/.*|.*\.smugmug\.com\/.*|.*\.smugmug\.com\/.*#.*|emberapp\.com\/.*\/images\/.*|emberapp\.com\/.*\/images\/.*\/sizes\/.*|emberapp\.com\/.*\/collections\/.*\/.*|emberapp\.com\/.*\/categories\/.*\/.*\/.*|embr\.it\/.*|picasaweb\.google\.com.*\/.*\/.*#.*|picasaweb\.google\.com.*\/lh\/photo\/.*|picasaweb\.google\.com.*\/.*\/.*|dailybooth\.com\/.*\/.*|brizzly\.com\/pic\/.*|pics\.brizzly\.com\/.*\.jpg|img\.ly\/.*|www\.tinypic\.com\/view\.php.*|tinypic\.com\/view\.php.*|www\.tinypic\.com\/player\.php.*|tinypic\.com\/player\.php.*|www\.tinypic\.com\/r\/.*\/.*|tinypic\.com\/r\/.*\/.*|.*\.tinypic\.com\/.*\.jpg|.*\.tinypic\.com\/.*\.png|meadd\.com\/.*\/.*|meadd\.com\/.*|.*\.deviantart\.com\/art\/.*|.*\.deviantart\.com\/gallery\/.*|.*\.deviantart\.com\/#\/.*|fav\.me\/.*|.*\.deviantart\.com|.*\.deviantart\.com\/gallery|.*\.deviantart\.com\/.*\/.*\.jpg|.*\.deviantart\.com\/.*\/.*\.gif|.*\.deviantart\.net\/.*\/.*\.jpg|.*\.deviantart\.net\/.*\/.*\.gif|plixi\.com\/p\/.*|plixi\.com\/profile\/home\/.*|plixi\.com\/.*|www\.fotopedia\.com\/.*\/.*|fotopedia\.com\/.*\/.*|photozou\.jp\/photo\/show\/.*\/.*|photozou\.jp\/photo\/photo_only\/.*\/.*|instagr\.am\/p\/.*|skitch\.com\/.*\/.*\/.*|img\.skitch\.com\/.*|https:\/\/skitch\.com\/.*\/.*\/.*|https:\/\/img\.skitch\.com\/.*|share\.ovi\.com\/media\/.*\/.*|www\.questionablecontent\.net\/|questionablecontent\.net\/|www\.questionablecontent\.net\/view\.php.*|questionablecontent\.net\/view\.php.*|questionablecontent\.net\/comics\/.*\.png|www\.questionablecontent\.net\/comics\/.*\.png|picplz\.com\/user\/.*\/pic\/.*\/|twitrpix\.com\/.*|.*\.twitrpix\.com\/.*|www\.someecards\.com\/.*\/.*|someecards\.com\/.*\/.*|some\.ly\/.*|www\.some\.ly\/.*|pikchur\.com\/.*|achewood\.com\/.*|www\.achewood\.com\/.*|achewood\.com\/index\.php.*|www\.achewood\.com\/index\.php.*|www\.whitehouse\.gov\/photos-and-video\/video\/.*|www\.whitehouse\.gov\/video\/.*|wh\.gov\/photos-and-video\/video\/.*|wh\.gov\/video\/.*|www\.hulu\.com\/watch.*|www\.hulu\.com\/w\/.*|hulu\.com\/watch.*|hulu\.com\/w\/.*|.*crackle\.com\/c\/.*|www\.fancast\.com\/.*\/videos|www\.funnyordie\.com\/videos\/.*|www\.funnyordie\.com\/m\/.*|funnyordie\.com\/videos\/.*|funnyordie\.com\/m\/.*|www\.vimeo\.com\/groups\/.*\/videos\/.*|www\.vimeo\.com\/.*|vimeo\.com\/m\/#\/featured\/.*|vimeo\.com\/groups\/.*\/videos\/.*|vimeo\.com\/.*|vimeo\.com\/m\/#\/featured\/.*|www\.ted\.com\/talks\/.*\.html.*|www\.ted\.com\/talks\/lang\/.*\/.*\.html.*|www\.ted\.com\/index\.php\/talks\/.*\.html.*|www\.ted\.com\/index\.php\/talks\/lang\/.*\/.*\.html.*|.*nfb\.ca\/film\/.*|www\.thedailyshow\.com\/watch\/.*|www\.thedailyshow\.com\/full-episodes\/.*|www\.thedailyshow\.com\/collection\/.*\/.*\/.*|movies\.yahoo\.com\/movie\/.*\/video\/.*|movies\.yahoo\.com\/movie\/.*\/trailer|movies\.yahoo\.com\/movie\/.*\/video|www\.colbertnation\.com\/the-colbert-report-collections\/.*|www\.colbertnation\.com\/full-episodes\/.*|www\.colbertnation\.com\/the-colbert-report-videos\/.*|www\.comedycentral\.com\/videos\/index\.jhtml\?.*|www\.theonion\.com\/video\/.*|theonion\.com\/video\/.*|wordpress\.tv\/.*\/.*\/.*\/.*\/|www\.traileraddict\.com\/trailer\/.*|www\.traileraddict\.com\/clip\/.*|www\.traileraddict\.com\/poster\/.*|www\.escapistmagazine\.com\/videos\/.*|www\.trailerspy\.com\/trailer\/.*\/.*|www\.trailerspy\.com\/trailer\/.*|www\.trailerspy\.com\/view_video\.php.*|www\.atom\.com\/.*\/.*\/|fora\.tv\/.*\/.*\/.*\/.*|www\.spike\.com\/video\/.*|www\.gametrailers\.com\/video\/.*|gametrailers\.com\/video\/.*|www\.koldcast\.tv\/video\/.*|www\.koldcast\.tv\/#video:.*|techcrunch\.tv\/watch.*|techcrunch\.tv\/.*\/watch.*|mixergy\.com\/.*|video\.pbs\.org\/video\/.*|www\.zapiks\.com\/.*|tv\.digg\.com\/diggnation\/.*|tv\.digg\.com\/diggreel\/.*|tv\.digg\.com\/diggdialogg\/.*|www\.trutv\.com\/video\/.*|www\.nzonscreen\.com\/title\/.*|nzonscreen\.com\/title\/.*|app\.wistia\.com\/embed\/medias\/.*|https:\/\/app\.wistia\.com\/embed\/medias\/.*|www\.godtube\.com\/featured\/video\/.*|godtube\.com\/featured\/video\/.*|www\.godtube\.com\/watch\/.*|godtube\.com\/watch\/.*|www\.tangle\.com\/view_video.*|mediamatters\.org\/mmtv\/.*|www\.clikthrough\.com\/theater\/video\/.*|soundcloud\.com\/.*|soundcloud\.com\/.*\/.*|soundcloud\.com\/.*\/sets\/.*|soundcloud\.com\/groups\/.*|snd\.sc\/.*|www\.last\.fm\/music\/.*|www\.last\.fm\/music\/+videos\/.*|www\.last\.fm\/music\/+images\/.*|www\.last\.fm\/music\/.*\/_\/.*|www\.last\.fm\/music\/.*\/.*|www\.mixcloud\.com\/.*\/.*\/|www\.radionomy\.com\/.*\/radio\/.*|radionomy\.com\/.*\/radio\/.*|www\.entertonement\.com\/clips\/.*|www\.rdio\.com\/#\/artist\/.*\/album\/.*|www\.rdio\.com\/artist\/.*\/album\/.*|www\.zero-inch\.com\/.*|.*\.bandcamp\.com\/|.*\.bandcamp\.com\/track\/.*|.*\.bandcamp\.com\/album\/.*|freemusicarchive\.org\/music\/.*|www\.freemusicarchive\.org\/music\/.*|freemusicarchive\.org\/curator\/.*|www\.freemusicarchive\.org\/curator\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/templates\/story\/story\.php.*|huffduffer\.com\/.*\/.*|www\.audioboo\.fm\/boos\/.*|audioboo\.fm\/boos\/.*|boo\.fm\/b.*|www\.xiami\.com\/song\/.*|xiami\.com\/song\/.*|espn\.go\.com\/video\/clip.*|espn\.go\.com\/.*\/story.*|abcnews\.com\/.*\/video\/.*|abcnews\.com\/video\/playerIndex.*|washingtonpost\.com\/wp-dyn\/.*\/video\/.*\/.*\/.*\/.*|www\.washingtonpost\.com\/wp-dyn\/.*\/video\/.*\/.*\/.*\/.*|www\.boston\.com\/video.*|boston\.com\/video.*|www\.facebook\.com\/photo\.php.*|www\.facebook\.com\/video\/video\.php.*|www\.facebook\.com\/v\/.*|cnbc\.com\/id\/.*\?.*video.*|www\.cnbc\.com\/id\/.*\?.*video.*|cnbc\.com\/id\/.*\/play\/1\/video\/.*|www\.cnbc\.com\/id\/.*\/play\/1\/video\/.*|cbsnews\.com\/video\/watch\/.*|www\.google\.com\/buzz\/.*\/.*\/.*|www\.google\.com\/buzz\/.*|www\.google\.com\/profiles\/.*|google\.com\/buzz\/.*\/.*\/.*|google\.com\/buzz\/.*|google\.com\/profiles\/.*|www\.cnn\.com\/video\/.*|edition\.cnn\.com\/video\/.*|money\.cnn\.com\/video\/.*|today\.msnbc\.msn\.com\/id\/.*\/vp\/.*|www\.msnbc\.msn\.com\/id\/.*\/vp\/.*|www\.msnbc\.msn\.com\/id\/.*\/ns\/.*|today\.msnbc\.msn\.com\/id\/.*\/ns\/.*|multimedia\.foxsports\.com\/m\/video\/.*\/.*|msn\.foxsports\.com\/video.*|www\.globalpost\.com\/video\/.*|www\.globalpost\.com\/dispatch\/.*|.*amazon\..*\/gp\/product\/.*|.*amazon\..*\/.*\/dp\/.*|.*amazon\..*\/dp\/.*|.*amazon\..*\/o\/ASIN\/.*|.*amazon\..*\/gp\/offer-listing\/.*|.*amazon\..*\/.*\/ASIN\/.*|.*amazon\..*\/gp\/product\/images\/.*|www\.amzn\.com\/.*|amzn\.com\/.*|www\.shopstyle\.com\/browse.*|www\.shopstyle\.com\/action\/apiVisitRetailer.*|www\.shopstyle\.com\/action\/viewLook.*|gist\.github\.com\/.*|twitter\.com\/.*\/status\/.*|twitter\.com\/.*\/statuses\/.*|mobile\.twitter\.com\/.*\/status\/.*|mobile\.twitter\.com\/.*\/statuses\/.*|www\.crunchbase\.com\/.*\/.*|crunchbase\.com\/.*\/.*|www\.slideshare\.net\/.*\/.*|www\.slideshare\.net\/mobile\/.*\/.*|.*\.scribd\.com\/doc\/.*|screenr\.com\/.*|polldaddy\.com\/community\/poll\/.*|polldaddy\.com\/poll\/.*|answers\.polldaddy\.com\/poll\/.*|www\.5min\.com\/Video\/.*|www\.howcast\.com\/videos\/.*|www\.screencast\.com\/.*\/media\/.*|screencast\.com\/.*\/media\/.*|www\.screencast\.com\/t\/.*|screencast\.com\/t\/.*|issuu\.com\/.*\/docs\/.*|www\.kickstarter\.com\/projects\/.*\/.*|www\.scrapblog\.com\/viewer\/viewer\.aspx.*|ping\.fm\/p\/.*|chart\.ly\/.*|maps\.google\.com\/maps\?.*|maps\.google\.com\/\?.*|maps\.google\.com\/maps\/ms\?.*|.*\.craigslist\.org\/.*\/.*|my\.opera\.com\/.*\/albums\/show\.dml\?id=.*|my\.opera\.com\/.*\/albums\/showpic\.dml\?album=.*&picture=.*|tumblr\.com\/.*|.*\.tumblr\.com\/post\/.*|www\.polleverywhere\.com\/polls\/.*|www\.polleverywhere\.com\/multiple_choice_polls\/.*|www\.polleverywhere\.com\/free_text_polls\/.*|www\.quantcast\.com\/wd:.*|www\.quantcast\.com\/.*|siteanalytics\.compete\.com\/.*|statsheet\.com\/statplot\/charts\/.*\/.*\/.*\/.*|statsheet\.com\/statplot\/charts\/e\/.*|statsheet\.com\/.*\/teams\/.*\/.*|statsheet\.com\/tools\/chartlets\?chart=.*|.*\.status\.net\/notice\/.*|identi\.ca\/notice\/.*|brainbird\.net\/notice\/.*|shitmydadsays\.com\/notice\/.*|www\.studivz\.net\/Profile\/.*|www\.studivz\.net\/l\/.*|www\.studivz\.net\/Groups\/Overview\/.*|www\.studivz\.net\/Gadgets\/Info\/.*|www\.studivz\.net\/Gadgets\/Install\/.*|www\.studivz\.net\/.*|www\.meinvz\.net\/Profile\/.*|www\.meinvz\.net\/l\/.*|www\.meinvz\.net\/Groups\/Overview\/.*|www\.meinvz\.net\/Gadgets\/Info\/.*|www\.meinvz\.net\/Gadgets\/Install\/.*|www\.meinvz\.net\/.*|www\.schuelervz\.net\/Profile\/.*|www\.schuelervz\.net\/l\/.*|www\.schuelervz\.net\/Groups\/Overview\/.*|www\.schuelervz\.net\/Gadgets\/Info\/.*|www\.schuelervz\.net\/Gadgets\/Install\/.*|www\.schuelervz\.net\/.*|myloc\.me\/.*|pastebin\.com\/.*|pastie\.org\/.*|www\.pastie\.org\/.*|redux\.com\/stream\/item\/.*\/.*|redux\.com\/f\/.*\/.*|www\.redux\.com\/stream\/item\/.*\/.*|www\.redux\.com\/f\/.*\/.*|cl\.ly\/.*|cl\.ly\/.*\/content|speakerdeck\.com\/u\/.*\/p\/.*|www\.kiva\.org\/lend\/.*|www\.timetoast\.com\/timelines\/.*|storify\.com\/.*\/.*|.*meetup\.com\/.*|meetu\.ps\/.*|www\.dailymile\.com\/people\/.*\/entries\/.*|.*\.kinomap\.com\/.*|www\.metacdn\.com\/api\/users\/.*\/content\/.*|www\.metacdn\.com\/api\/users\/.*\/media\/.*|prezi\.com\/.*\/.*|.*\.uservoice\.com\/.*\/suggestions\/.*)/i;var ret=nm._hasFilter('link')&&nm.opener.attr('href')&&nm.opener.attr('href').match(embedlyReg)!==null;if(ret)nm._delFilter('iframe');return ret;},init:function(nm){nm.loadFilter='embedly';nm.store.embedly={};},load:function(nm){$.ajax({url:'http://api.embed.ly/1/oembed',dataType:'jsonp',data:'wmode=transparent&url='+nm.opener.attr('href'),success:function(data){if(data.type=='error')nm._error();else if(data.type=='photo'){nm.filters.push('image');$('<img />').load(function(){nm.elts.cont.addClass('nyroModalImg');nm.elts.hidden.addClass('nyroModalImg');nm._setCont(this);}).error(function(){nm._error();}).attr('src',data.url);}else{nm.store.embedly.w=data.width;nm.store.embedly.h=data.height;nm._setCont('<div>'+data.html+'</div>');}}});},size:function(nm){if(nm.store.embedly.w&&!nm.sizes.h){nm.sizes.w=nm.store.embedly.w;nm.sizes.h=nm.store.embedly.h;}}}});});;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.qtip.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,1 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('"6t 6u";(j($){$(31).3x(j(){R i;$(2e).1J(\'3L 3E\',j(r){1V(i=0;i<$.18.g.O.Q;i++){R T=$.18.g.O[i];c(T&&T.V&&T.V.1b&&T.8.k.17!==\'29\'&&T.d.h.2r(\':28\')&&(T.8.k.1e.3E&&r.17===\'3E\'||T.8.k.1e.3L&&r.17===\'3L\')){T.2h(r,H)}}});$(31).1J(\'5j.g\',j(r){c($(r.s).5g(\'12.g\').Q===0){R h=$(\'.6w\'),T=h.g(\'T\');c(h.2r(\':28\')&&T&&T.V&&!T.V.23&&$(r.s).2m(T.d.s).Q>1){T.D(r)}}})});j 2D(w){c(!w){B p}A.x=5a(w).3l(/5x/i,\'1j\').5y(/M|25|1j/i)[0].2F();A.y=5a(w).3l(/5x/i,\'1j\').5y(/K|26|1j/i)[0].2F();A.1k={M:0,K:0};A.2y=(w.2H(0).6L(/^(t|b)/)>-1)?\'y\':\'x\';A.1w=j(){B(A.2y===\'y\')?A.y+A.x:A.x+A.y}}j 4t(w,o,G){R 1N={5B:[[0,0],[o,G],[o,0]],6a:[[0,0],[o,0],[0,G]],5K:[[0,G],[o,0],[o,G]],5N:[[0,0],[0,G],[o,G]],6y:[[0,G],[o/2,0],[o,G]],6v:[[0,0],[o,0],[o/2,G]],6i:[[0,0],[o,G/2],[0,G]],6J:[[o,0],[o,G],[0,G/2]]};1N.6M=1N.5B;1N.6z=1N.6a;1N.6x=1N.5K;1N.6C=1N.5N;B 1N[w]}j 4e(E){R 2j;c($(\'<1f />\').1q(0).1E){2j={3K:[E,E],40:[0,E],4I:[E,0],3P:[0,0]}}C c($.16.1d){2j={3K:[-2z,2z,0],40:[-2z,2z,-E],4I:[2z,5D,0],3P:[2z,5D,-E]}}B 2j}j 2G(e,4b){R 2U,i;2U=$.2p(H,{},e);1V(i 5R 2U){c(4b===H&&(/(f|1g)/i).1Y(i)){3z 2U[i]}C c(!4b&&(/(o|I|f|U|1g|4v)/i).1Y(i)){3z 2U[i]}}B 2U}j 4i(e){c(P e.f!==\'19\'){e.f={w:e.f}}c(P e.f.N!==\'19\'){e.f.N={o:e.f.N,G:e.f.N}}c(P e.I!==\'19\'){e.I={o:e.I}}c(P e.o!==\'19\'){e.o={2Z:e.o}}c(P e.o.1H===\'1w\'){e.o.1H=1A(e.o.1H.3l(/([0-9]+)/i,"$1"),10)}c(P e.o.2b===\'1w\'){e.o.2b=1A(e.o.2b.3l(/([0-9]+)/i,"$1"),10)}c(P e.f.N.x===\'2s\'){e.f.N.o=e.f.N.x;3z e.f.N.x}c(P e.f.N.y===\'2s\'){e.f.N.G=e.f.N.y;3z e.f.N.y}B e}j 4l(){R 7,i,3A,2v,1D,1P;7=A;3A=[H,{}];1V(i=0;i<3b.Q;i++){3A.5h(3b[i])}2v=[$.2p.4s($,3A)];6F(P 2v[0].21===\'1w\'){2v.5O(4i($.18.g.3c[2v[0].21]))}2v.5O(H,{1g:{h:\'g-\'+(3b[0].21||\'39\')}},$.18.g.3c.39);1D=$.2p.4s($,2v);1P=($.16.1d)?1:0;1D.f.N.o+=1P;1D.f.N.G+=1P;c(1D.f.N.o%2>0){1D.f.N.o+=1}c(1D.f.N.G%2>0){1D.f.N.G+=1}c(1D.f.w===H){c(7.8.k.w.h===\'1j\'&&7.8.k.w.s===\'1j\'){1D.f.w=p}C{1D.f.w=7.8.k.w.h}}B 1D}j 46(1f,X,E,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.3p(X[0],X[1],E,0,1u.6N*2,p);1n.5Y()}j 59(){R 7,i,o,E,J,X,1Q,N,4O,2k,3e,3i,4g,4q,4G;7=A;7.d.1t.1M(\'.g-3i, .g-3e\').3W();o=7.8.e.I.o;E=7.8.e.I.E;J=7.8.e.I.J||7.8.e.f.J;X=4e(E);1Q={};1V(i 5R X){1Q[i]=\'<12 1S="\'+i+\'" e="\'+((/6n/).1Y(i)?\'M\':\'25\')+\':0; \'+\'k:34; G:\'+E+\'1a; o:\'+E+\'1a; 2u:1F; 2S-G:0.1B; 2Y-N:1B">\';c($(\'<1f />\').1q(0).1E){1Q[i]+=\'<1f G="\'+E+\'" o="\'+E+\'" e="4Q-3o: K"></1f>\'}C c($.16.1d){N=E*2+3;1Q[i]+=\'<v:3p 6f="p" 3t="\'+J+\'" 6s="\'+X[i][0]+\'" 6r="\'+X[i][1]+\'" \'+\'e="o:\'+N+\'1a; G:\'+N+\'1a; 2q-K:\'+((/26/).1Y(i)?-2:-1)+\'1a; \'+\'2q-M:\'+((/6m/).1Y(i)?X[i][2]-3.5:-1)+\'1a; \'+\'4Q-3o:K; 2a:53-4E; 3I:1x(#2L#3R)"></v:3p>\'}1Q[i]+=\'</12>\'}4O=7.3d().o-(1u.1H(o,E)*2);2k=\'<12 1I="g-2k" e="G:\'+E+\'1a; o:\'+4O+\'1a; \'+\'2u:1F; 1s-J:\'+J+\'; 2S-G:0.1B; 2Y-N:1B;">\';3e=\'<12 1I="g-3e" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.3K+1Q.40+2k;7.d.1t.3B(3e);3i=\'<12 1I="g-3i" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.4I+1Q.3P+2k;7.d.1t.5s(3i);c($(\'<1f />\').1q(0).1E){7.d.1t.1M(\'1f\').1L(j(){4g=X[$(A).3O(\'[1S]:1R\').W(\'1S\')];46.S(7,$(A),4g,E,J)})}C c($.16.1d){7.d.h.5s(\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\')}4q=1u.1H(E,(E+(o-E)));4G=1u.1H(o-E,0);7.d.1y.F({I:\'6D 3q \'+J,6H:4G+\'1a \'+4q+\'1a\'})}j 4u(1f,X,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.6o(X[0][0],X[0][1]);1n.5Q(X[1][0],X[1][1]);1n.5Q(X[2][0],X[2][1]);1n.5Y()}j 42(w){R 7,1P,24,4n,4h,3Q;7=A;c(7.8.e.f.w===p||!7.d.f){B}c(!w){w=2T 2D(7.d.f.W(\'1S\'))}1P=24=($.16.1d)?1:0;7.d.f.F(w[w.2y],0);c(w.2y===\'y\'){c($.16.1d){c(1A($.16.2X.2H(0),10)===6){24=w.y===\'K\'?-3:1}C{24=w.y===\'K\'?1:2}}c(w.x===\'1j\'){7.d.f.F({M:\'50%\',6K:-(7.8.e.f.N.o/2)})}C c(w.x===\'M\'){7.d.f.F({M:7.8.e.I.E-1P})}C{7.d.f.F({25:7.8.e.I.E+1P})}c(w.y===\'K\'){7.d.f.F({K:-24})}C{7.d.f.F({26:24})}}C{c($.16.1d){24=(1A($.16.2X.2H(0),10)===6)?1:(w.x===\'M\'?1:2)}c(w.y===\'1j\'){7.d.f.F({K:\'50%\',49:-(7.8.e.f.N.G/2)})}C c(w.y===\'K\'){7.d.f.F({K:7.8.e.I.E-1P})}C{7.d.f.F({26:7.8.e.I.E+1P})}c(w.x===\'M\'){7.d.f.F({M:-24})}C{7.d.f.F({25:24})}}4n=\'2x-\'+w[w.2y];4h=7.8.e.f.N[w.2y===\'x\'?\'o\':\'G\'];7.d.h.F(\'2x\',0).F(4n,4h);c($.16.1d&&1A($.16.2X.2H(0),6)===6){3Q=1A(7.d.f.F(\'2q-K\'),10)||0;3Q+=1A(7.d.u.F(\'2q-K\'),10)||0;7.d.f.F({49:3Q})}}j 44(w){R 7,J,X,3J,2o,f;7=A;c(7.d.f!==1z){7.d.f.3W()}J=7.8.e.f.J||7.8.e.I.J;c(7.8.e.f.w===p){B}C c(!w){w=2T 2D(7.8.e.f.w)}X=4t(w.1w(),7.8.e.f.N.o,7.8.e.f.N.G);7.d.f=\'<12 1I="\'+7.8.e.1g.f+\'" 4k="4f" 1S="\'+w.1w()+\'" e="k:34; \'+\'G:\'+7.8.e.f.N.G+\'1a; o:\'+7.8.e.f.N.o+\'1a; \'+\'2q:0 6e; 2S-G:0.1B; 2Y-N:1B;"></12>\';7.d.h.3B(7.d.f);c($(\'<1f />\').1q(0).1E){f=\'<1f G="\'+7.8.e.f.N.G+\'" o="\'+7.8.e.f.N.o+\'"></1f>\'}C c($.16.1d){3J=7.8.e.f.N.o+\',\'+7.8.e.f.N.G;2o=\'m\'+X[0][0]+\',\'+X[0][1];2o+=\' l\'+X[1][0]+\',\'+X[1][1];2o+=\' \'+X[2][0]+\',\'+X[2][1];2o+=\' 6I\';f=\'<v:3M 3t="\'+J+\'" 6f="p" 6p="H" 2o="\'+2o+\'" 3J="\'+3J+\'" \'+\'e="o:\'+7.8.e.f.N.o+\'1a; G:\'+7.8.e.f.N.G+\'1a; \'+\'2S-G:0.1B; 2a:53-4E; 3I:1x(#2L#3R); \'+\'4Q-3o:\'+(w.y===\'K\'?\'26\':\'K\')+\'"></v:3M>\';f+=\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\';7.d.1y.F(\'k\',\'4y\')}7.d.f=7.d.h.1M(\'.\'+7.8.e.1g.f).6B(0);7.d.f.2l(f);c($(\'<1f />\').1q(0).1E){4u.S(7,7.d.f.1M(\'1f:1R\'),X,J)}c(w.y===\'K\'&&$.16.1d&&1A($.16.2X.2H(0),10)===6){7.d.f.F({49:-4})}42.S(7,w)}j 5b(){R 7=A;c(7.d.U!==1z){7.d.U.3W()}7.d.h.W(\'3r-6E\',\'g-\'+7.11+\'-U\');7.d.U=$(\'<12 11="g-\'+7.11+\'-U" 1I="\'+7.8.e.1g.U+\'"></12>\').F(2G(7.8.e.U,H)).F({2f:($.16.1d)?1:0}).58(7.d.1y);c(7.8.u.U.1m){7.5W.S(7,7.8.u.U.1m)}c(7.8.u.U.1i!==p&&P 7.8.u.U.1i===\'1w\'){7.d.1i=$(\'<a 1I="\'+7.8.e.1g.1i+\'" 5e="1i" e="6G:25; k: 4y"></a>\').F(2G(7.8.e.1i,H)).2l(7.8.u.U.1i).58(7.d.U).5d(j(r){c(!7.V.23){7.D(r)}})}}j 5l(){R 7,3h,2i,3u;7=A;3h=7.8.q.L.s;2i=7.8.D.L.s;c(7.8.D.3g){2i=2i.2m(7.d.h)}3u=[\'5d\',\'6h\',\'6k\',\'6j\',\'4C\',\'4x\',\'5j\',\'6l\',\'35\'];j 3v(r){c(7.V.23===H){B}2g(7.1G.1W);7.1G.1W=4M(j(){$(3u).1L(j(){2i.1O(A+\'.g-1W\');7.d.u.1O(A+\'.g-1W\')});7.D(r)},7.8.D.2V)}c(7.8.D.3g===H){7.d.h.1J(\'35.g\',j(){c(7.V.23===H){B}2g(7.1G.D)})}j 4S(r){c(7.V.23===H){B}c(7.8.D.L.r===\'1W\'){$(3u).1L(j(){2i.1J(A+\'.g-1W\',3v);7.d.u.1J(A+\'.g-1W\',3v)});3v()}2g(7.1G.q);2g(7.1G.D);c(7.8.q.2V>0){7.1G.q=4M(j(){7.q(r)},7.8.q.2V)}C{7.q(r)}}j 4P(r){c(7.V.23===H){B}c(7.8.D.3g===H&&(/1K(6q|6A)/i).1Y(7.8.D.L.r)&&$(r.70).5g(\'12.g[11^="g"]\').Q>0){r.7L();r.7K();2g(7.1G.D);B p}2g(7.1G.q);2g(7.1G.D);7.d.h.3S(H,H);7.1G.D=4M(j(){7.D(r)},7.8.D.2V)}c(7.8.k.s===\'1K\'&&7.8.k.17!==\'29\'){3h.1J(\'4C.g\',j(r){7.1v.1K={M:r.3Y,K:r.4c};c(7.V.23===p&&7.8.k.1e.1K===H&&7.8.k.17!==\'29\'&&7.d.h.F(\'2a\')!==\'3a\'){7.2h(r)}})}c((7.8.q.L.s.2m(7.8.D.L.s).Q===1&&7.8.q.L.r===7.8.D.L.r&&7.8.D.L.r!==\'1W\')||7.8.D.L.r===\'4R\'){7.1v.2I=0;3h.1J(7.8.q.L.r+\'.g\',j(r){c(7.1v.2I===0){4S(r)}C{4P(r)}})}C{3h.1J(7.8.q.L.r+\'.g\',4S);c(7.8.D.L.r!==\'1W\'){2i.1J(7.8.D.L.r+\'.g\',4P)}}c((/(3g|34)/).1Y(7.8.k.17)){7.d.h.1J(\'35.g\',7.2E)}}j 22(){R 7,2l,2t;7=A;2t=7.3d();2l=\'<7J 1I="g-22" 7I="0" 7M="-1" 4T="7N:p" \'+\'e="2a:4E; k:34; z-3s:-1; 5m:7R(2B=\\\'0\\\'); I: 1B 3q 4H; \'+\'G:\'+2t.G+\'1a; o:\'+2t.o+\'1a" />\';7.d.22=7.d.1t.3B(2l).2w(\'.g-22:1R\')}j 4w(){R 7,u,1x,Y,2A;7=A;7.5J.S(7);7.V.1b=2;7.d.h=\'<12 g="\'+7.11+\'" 11="g-\'+7.11+\'" 5e="h" \'+\'3r-7Q="g-\'+7.11+\'-u" 1I="g \'+(7.8.e.1g.h||7.8.e)+\'" \'+\'e="2a:3a; -7P-I-E:0; -7O-I-E:0; I-E:0; k:\'+7.8.k.17+\';"> \'+\' <12 1I="g-1t" e="k:4y; 2u:1F; 1m-3o:M;"> \'+\' <12 1I="g-1y" e="2u:1F;"> \'+\' <12 11="g-\'+7.11+\'-u" 1I="g-u \'+7.8.e.1g.u+\'"></12> \'+\'</12></12></12>\';7.d.h=$(7.d.h);7.d.h.5P(7.8.k.3U);7.d.h.Y(\'g\',{3k:0,O:[7]});7.d.1t=7.d.h.2w(\'12:1R\');7.d.1y=7.d.1t.2w(\'12:1R\');7.d.u=7.d.1y.2w(\'12:1R\').F(2G(7.8.e));c($.16.1d){7.d.1t.2m(7.d.u).F({2f:1})}c(7.8.D.L.r===\'4R\'){7.d.h.W(\'4R\',H)}c(P 7.8.e.o.2Z===\'2s\'){7.4d()}c($(\'<1f />\').1q(0).1E||$.16.1d){c(7.8.e.I.E>0){59.S(7)}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J})}c(7.8.e.f.w!==p){44.S(7)}}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J});7.8.e.I.E=0;7.8.e.f.w=p}c((P 7.8.u.1m===\'1w\'&&7.8.u.1m.Q>0)||(7.8.u.1m.4r&&7.8.u.1m.Q>0)){u=7.8.u.1m}C{u=\' \'}c(7.8.u.U.1m!==p){5b.S(7)}7.4A(u,p);5l.S(7);c(7.8.q.3x===H){7.q()}c(7.8.u.1x!==p){1x=7.8.u.1x;Y=7.8.u.Y;2A=7.8.u.2A||\'1q\';7.5Z(1x,Y,2A)}7.V.1b=H;7.5f.S(7)}j 56(s,8,11){R 7=A;7.11=11;7.8=8;7.V={4j:p,1b:p,23:p,3Z:p};7.d={s:s.5v(7.8.e.1g.s),h:1z,1t:1z,u:1z,1y:1z,U:1z,1i:1z,f:1z,22:1z};7.1v={W:p,1K:{},2I:0,2u:{M:p,K:p}};7.1G={};$.2p(7,7.8.T,{q:j(r){R 1c,1X;c(!7.V.1b){B p}c(7.d.h.F(\'2a\')!==\'3a\'){B 7}7.d.h.3S(H,p);1c=7.5n.S(7,r);c(1c===p){B 7}j 2M(){7.d.h.W(\'3r-1F\',H);c(7.8.k.17!==\'29\'){7.2E()}7.5q.S(7,r);c($.16.1d){R 4a=7.d.h.1q(0).e;4a.43(\'5m\');4a.43(\'2B\')}C{7.d.h.F({2B:\'\'})}}7.1v.2I=1;c(7.8.k.17!==\'29\'){7.2h(r,(7.8.q.Z.Q>0&&7.1b!==2))}c(P 7.8.q.1X===\'19\'){1X=$(7.8.q.1X)}C c(7.8.q.1X===H){1X=$(\'12.g\').5S(7.d.h)}c(1X){1X.1L(j(){c($(A).g(\'T\').V.1b===H){$(A).g(\'T\').D()}})}c(P 7.8.q.Z.17===\'j\'){7.8.q.Z.17.S(7.d.h,7.8.q.Z.Q);7.d.h.5u(j(){2M();$(A).5t()})}C{4N(7.8.q.Z.17.2F()){1Z\'3w\':7.d.h.7H(7.8.q.Z.Q,2M);1C;1Z\'5o\':7.d.h.7G(7.8.q.Z.Q,j(){2M();c(7.8.k.17!==\'29\'){7.2h(r,H)}});1C;1Z\'5p\':7.d.h.q(7.8.q.Z.Q,2M);1C;2L:7.d.h.q(1z,2M);1C}7.d.h.5v(7.8.e.1g.3T)}B 7},D:j(r){R 1c;c(!7.V.1b){B p}C c(7.d.h.F(\'2a\')===\'3a\'){B 7}2g(7.1G.q);7.d.h.3S(H,p);1c=7.5A.S(7,r);c(1c===p){B 7}j 2K(){7.d.h.W(\'3r-1F\',H);c($.16.1d){7.d.h.1q(0).e.43(\'2B\')}C{7.d.h.F({2B:\'\'})}7.4Z.S(7,r)}7.1v.2I=0;c(P 7.8.D.Z.17===\'j\'){7.8.D.Z.17.S(7.d.h,7.8.D.Z.Q);7.d.h.5u(j(){2K();$(A).5t()})}C{4N(7.8.D.Z.17.2F()){1Z\'3w\':7.d.h.7z(7.8.D.Z.Q,2K);1C;1Z\'5o\':7.d.h.7y(7.8.D.Z.Q,2K);1C;1Z\'5p\':7.d.h.D(7.8.D.Z.Q,2K);1C;2L:7.d.h.D(1z,2K);1C}7.d.h.7x(7.8.e.1g.3T)}B 7},2I:j(r,38){R 5r=/7w|2s/.1Y(P 38)?38:!7.d.h.2r(\':28\');7[5r?\'q\':\'D\'](r);B 7},2h:j(r,4o){c(!7.V.1b){B p}R 1U=8.k,s=$(1U.s),2Q=7.d.h.47(),2P=7.d.h.48(),1p,1l,k,1o=1U.w.h,2R=1U.w.s,1c,14,i,4L,27,45={M:j(){R 3j=$(2e).3D(),3n=$(2e).o()+$(2e).3D(),2J=1o.x===\'1j\'?2Q/2:2Q,2N=1o.x===\'1j\'?1p/2:1p,2O=(1o.x===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.x,3m=k.M+2Q,1h;c(3m>3n){1h=1k-2J-2N+2O;c(k.M+1h>3j||3j-(k.M+1h)<3m-3n){B{1e:1h,f:\'25\'}}}c(k.M<3j){1h=1k+2J+2N-2O;c(3m+1h<3n||3m+1h-3n<3j-k.M){B{1e:1h,f:\'M\'}}}B{1e:0,f:1o.x}},K:j(){R 30=$(2e).3G(),33=$(2e).G()+$(2e).3G(),2J=1o.y===\'1j\'?2P/2:2P,2N=1o.y===\'1j\'?1l/2:1l,2O=(1o.y===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.y,32=k.K+2P,1h;c(32>33){1h=1k-2J-2N+2O;c(k.K+1h>30||30-(k.K+1h)<32-33){B{1e:1h,f:\'26\'}}}c(k.K<30){1h=1k+2J+2N-2O;c(32+1h<33||32+1h-33<30-k.K){B{1e:1h,f:\'K\'}}}B{1e:0,f:1o.y}}};c(r&&8.k.s===\'1K\'){2R={x:\'M\',y:\'K\'};1p=1l=0;c(!r.3Y){k=7.1v.1K}C{k={K:r.4c,M:r.3Y}}}C{c(s[0]===31){1p=s.o();1l=s.G();k={K:0,M:0}}C c(s[0]===2e){1p=s.o();1l=s.G();k={K:s.3G(),M:s.3D()}}C c(s.2r(\'7A\')){14=7.8.k.s.W(\'14\').7B(\',\');1V(i=0;i<14.Q;i++){14[i]=1A(14[i],10)}4L=7.8.k.s.3O(\'7F\').W(\'21\');27=$(\'4U[7E="#\'+4L+\'"]:1R\').1k();k={M:1u.3H(27.M+14[0]),K:1u.3H(27.K+14[1])};4N(7.8.k.s.W(\'3M\').2F()){1Z\'7T\':1p=1u.4V(1u.5z(14[2]-14[0]));1l=1u.4V(1u.5z(14[3]-14[1]));1C;1Z\'7C\':1p=14[2]+1;1l=14[2]+1;1C;1Z\'7S\':1p=14[0];1l=14[1];1V(i=0;i<14.Q;i++){c(i%2===0){c(14[i]>1p){1p=14[i]}c(14[i]<14[0]){k.M=1u.3H(27.M+14[i])}}C{c(14[i]>1l){1l=14[i]}c(14[i]<14[1]){k.K=1u.3H(27.K+14[i])}}}1p=1p-(k.M-27.M);1l=1l-(k.K-27.K);1C}1p-=2;1l-=2}C{1p=s.47();1l=s.48();c(!7.d.h.2r(\':28\')){7.d.h.F({M:\'-81\'}).q()}c(!1U.1e.1k||7.d.h.4F()[0]===31.4X){k=s.1k()}C{k=s.k();k.K+=s.4F().3G();k.M+=s.4F().3D()}}k.M+=2R.x===\'25\'?1p:2R.x===\'1j\'?1p/2:0;k.K+=2R.y===\'26\'?1l:2R.y===\'1j\'?1l/2:0}k.M+=1U.1e.x+(1o.x===\'25\'?-2Q:1o.x===\'1j\'?-2Q/2:0);k.K+=1U.1e.y+(1o.y===\'26\'?-2P:1o.y===\'1j\'?-2P/2:0);c(7.8.e.I.E>0){c(1o.x===\'M\'){k.M-=7.8.e.I.E}C c(1o.x===\'25\'){k.M+=7.8.e.I.E}c(1o.y===\'K\'){k.K-=7.8.e.I.E}C c(1o.y===\'26\'){k.K+=7.8.e.I.E}}c(1U.1e.55){(j(){R 2W={x:0,y:0},2n={x:45.M(),y:45.K()},f=2T 2D(8.e.f.w);c(7.d.f&&f){c(2n.y.1e!==0){k.K+=2n.y.1e;f.y=2W.y=2n.y.f}c(2n.x.1e!==0){k.M+=2n.x.1e;f.x=2W.x=2n.x.f}7.1v.2u={M:2W.x===p,K:2W.y===p};c(7.d.f.W(\'1S\')!==f.1w()){44.S(7,f)}}}())}c(!7.d.22&&$.16.1d&&1A($.16.2X.2H(0),10)===6){22.S(7)}1c=7.57.S(7,r);c(1c===p){B 7}c(8.k.s!==\'1K\'&&4o===H){7.V.4j=H;7.d.h.3S().4o(k,7V,\'80\',j(){7.V.4j=p})}C{7.d.h.F(k)}7.5c.S(7,r);B 7},4d:j(1r){c(!7.V.1b||(1r&&P 1r!==\'2s\')){B p}R 1F=7.d.1y.7W().2m(7.d.f).2m(7.d.1i),2f=7.d.1t.2m(7.d.1y.2w()),h=7.d.h,1H=7.8.e.o.1H,2b=7.8.e.o.2b;c(!1r){c(P 7.8.e.o.2Z===\'2s\'){1r=7.8.e.o.2Z}C{7.d.h.F({o:\'6e\'});1F.D();h.o(1r);c($.16.1d){2f.F({2f:\'\'})}1r=7.3d().o;c(!7.8.e.o.2Z){1r=1u.2b(1u.1H(1r,2b),1H)}}}c(1r%2){1r+=1}7.d.h.o(1r);1F.q();c(7.8.e.I.E){7.d.h.1M(\'.g-2k\').1L(j(i){$(A).o(1r-(7.8.e.I.E*2))})}c($.16.1d){2f.F({2f:1});7.d.1t.o(1r);c(7.d.22){7.d.22.o(1r).G(7.3d.G)}}B 7},7Y:j(21){R f,2j,1n,w,X;c(!7.V.1b||P 21!==\'1w\'||!$.18.g.3c[21]){B p}7.8.e=4l.S(7,$.18.g.3c[21],7.8.4v.e);7.d.u.F(2G(7.8.e));c(7.8.u.U.1m!==p){7.d.U.F(2G(7.8.e.U,H))}7.d.1y.F({7U:7.8.e.I.J});c(7.8.e.f.w!==p){c($(\'<1f />\').1q(0).1E){f=7.d.h.1M(\'.g-f 1f:1R\');1n=f.1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=f.3O(\'12[1S]:1R\').W(\'1S\');X=4t(w,7.8.e.f.N.o,7.8.e.f.N.G);4u.S(7,f,X,7.8.e.f.J||7.8.e.I.J)}C c($.16.1d){f=7.d.h.1M(\'.g-f [5E="3M"]\');f.W(\'3t\',7.8.e.f.J||7.8.e.I.J)}}c(7.8.e.I.E>0){7.d.h.1M(\'.g-2k\').F({7X:7.8.e.I.J});c($(\'<1f />\').1q(0).1E){2j=4e(7.8.e.I.E);7.d.h.1M(\'.g-1t 1f\').1L(j(){1n=$(A).1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=$(A).3O(\'12[1S]:1R\').W(\'1S\');46.S(7,$(A),2j[w],7.8.e.I.E,7.8.e.I.J)})}C c($.16.1d){7.d.h.1M(\'.g-1t [5E="3p"]\').1L(j(){$(A).W(\'3t\',7.8.e.I.J)})}}B 7},4A:j(u,5F){R 36,37,4K;j 4J(){7.4d();c(5F!==p){c(7.8.k.17!==\'29\'){7.2h(7.d.h.2r(\':28\'),H)}c(7.8.e.f.w!==p){42.S(7)}}}c(!u){B p}36=7.54.S(7,u);c(P 36===\'1w\'){u=36}C c(36===p){B}c(7.V.1b){c($.16.1d){7.d.1y.2w().F({2f:\'7Z\'})}c(u.4r&&u.Q>0){u.5V(H).5P(7.d.u).q()}C{7.d.u.2l(u)}37=7.d.u.1M(\'4U[6O=p]\');c(37.Q>0){4K=0;37.1L(j(i){$(\'<4U 4T="\'+$(A).W(\'4T\')+\'" />\').7D(j(){c(++4K===37.Q){4J()}})})}C{4J()}}C{7.8.u.1m=u}7.4Y.S(7);B 7},5Z:j(1x,Y,2A){R 1c;j 4D(u){7.63.S(7);7.4A(u)}c(!7.V.1b){B p}1c=7.51.S(7);c(1c===p){B 7}c(2A===\'60\'){$.60(1x,Y,4D)}C{$.1q(1x,Y,4D)}B 7},5W:j(u){R 1c;c(!7.V.1b||!u){B p}1c=7.64.S(7);c(1c===p){B 7}c(7.d.1i){7.d.1i=7.d.1i.5V(H)}7.d.U.2l(u);c(7.d.1i){7.d.U.3B(7.d.1i)}7.65.S(7);B 7},2E:j(r){R 4B,3F,3y,1c;c(!7.V.1b||7.8.k.17===\'29\'){B p}4B=1A(7.d.h.F(\'z-3s\'),10);3F=7u+$(\'12.g[11^="g"]\').Q-1;c(!7.V.3Z&&4B!==3F){1c=7.5H.S(7,r);c(1c===p){B 7}$(\'12.g[11^="g"]\').5S(7.d.h).1L(j(){c($(A).g(\'T\').V.1b===H){3y=1A($(A).F(\'z-3s\'),10);c(P 3y===\'2s\'&&3y>-1){$(A).F({68:1A($(A).F(\'z-3s\'),10)-1})}$(A).g(\'T\').V.3Z=p}});7.d.h.F({68:3F});7.V.3Z=H;7.5C.S(7,r)}B 7},3X:j(38){7.V.23=38?H:p;B 7},3f:j(){R i,1c,O,4z=7.d.s.Y(\'4p\'+7.1v.W[0]);1c=7.61.S(7);c(1c===p){B 7}c(7.V.1b){7.8.q.L.s.1O(\'4C.g\',7.2h);7.8.q.L.s.1O(\'4x.g\',7.D);7.8.q.L.s.1O(7.8.q.L.r+\'.g\');7.8.D.L.s.1O(7.8.D.L.r+\'.g\');7.d.h.1O(7.8.D.L.r+\'.g\');7.d.h.1O(\'35.g\',7.2E);7.d.h.3W()}C{7.8.q.L.s.1O(7.8.q.L.r+\'.g-\'+7.11+\'-4m\')}c(P 7.d.s.Y(\'g\')===\'19\'){O=7.d.s.Y(\'g\').O;c(P O===\'19\'&&O.Q>0){1V(i=0;i<O.Q-1;i++){c(O[i].11===7.11){O.5X(i,1)}}}}$.18.g.O.5X(7.11,1);c(P O===\'19\'&&O.Q>0){7.d.s.Y(\'g\').3k=O.Q-1}C{7.d.s.73(\'g\')}c(4z){7.d.s.W(7.1v.W[0],4z)}7.62.S(7);B 7.d.s},72:j(){R q,1k;c(!7.V.1b){B p}q=(7.d.h.F(\'2a\')!==\'3a\')?p:H;c(q){7.d.h.F({3V:\'1F\'}).q()}1k=7.d.h.1k();c(q){7.d.h.F({3V:\'28\'}).D()}B 1k},3d:j(){R q,2t;c(!7.V.1b){B p}q=(!7.d.h.2r(\':28\'))?H:p;c(q){7.d.h.F({3V:\'1F\'}).q()}2t={G:7.d.h.48(),o:7.d.h.47()};c(q){7.d.h.F({3V:\'28\'}).D()}B 2t}})}$.18.g=j(8,41){R i,11,O,20,2c,1T,15,T;c(P 8===\'1w\'){c($(A).Y(\'g\')){c(8===\'T\'){B $(A).Y(\'g\').O[$(A).Y(\'g\').3k]}C c(8===\'O\'){B $(A).Y(\'g\').O}}C{B $(A)}}C{c(!8){8={}}c(P 8.u!==\'19\'||(8.u.4r&&8.u.Q>0)){8.u={1m:8.u}}c(P 8.u.U!==\'19\'){8.u.U={1m:8.u.U}}c(P 8.k!==\'19\'){8.k={w:8.k}}c(P 8.k.w!==\'19\'){8.k.w={s:8.k.w,h:8.k.w}}c(P 8.q!==\'19\'){8.q={L:8.q}}c(P 8.q.L!==\'19\'){8.q.L={r:8.q.L}}c(P 8.q.Z!==\'19\'){8.q.Z={17:8.q.Z}}c(P 8.D!==\'19\'){8.D={L:8.D}}c(P 8.D.L!==\'19\'){8.D.L={r:8.D.L}}c(P 8.D.Z!==\'19\'){8.D.Z={17:8.D.Z}}c(P 8.e!==\'19\'){8.e={21:8.e}}8.e=4i(8.e);20=$.2p(H,{},$.18.g.39,8);20.e=4l.S({8:20},20.e);20.4v=$.2p(H,{},8)}B $(A).1L(j(){R 7=$(A),u=p;c(P 8===\'1w\'){1T=8.2F();O=$(A).g(\'O\');c(P O===\'19\'){c(41===H&&1T===\'3f\'){1V(i=O.Q-1;i>-1;i--){c(\'19\'===P O[i]){O[i].3f()}}}C{c(41!==H){O=[$(A).g(\'T\')]}1V(i=0;i<O.Q;i++){c(1T===\'3f\'){O[i].3f()}C c(O[i].V.1b===H){c(1T===\'q\'){O[i].q()}C c(1T===\'D\'){O[i].D()}C c(1T===\'2E\'){O[i].2E()}C c(1T===\'3X\'){O[i].3X(H)}C c(1T===\'71\'){O[i].3X(p)}C c(1T===\'7v\'){O[i].2h()}}}}}}C{15=$.2p(H,{},20);15.D.Z.Q=20.D.Z.Q;15.q.Z.Q=20.q.Z.Q;c(15.k.3U===p){15.k.3U=$(31.4X)}c(15.k.s===p){15.k.s=$(A)}c(15.q.L.s===p){15.q.L.s=$(A)}c(15.D.L.s===p){15.D.L.s=$(A)}15.k.w.h=2T 2D(15.k.w.h);15.k.w.s=2T 2D(15.k.w.s);c(!15.u.1m.Q){$([\'U\',\'6b\']).1L(j(i,W){R 2C=7.W(W);c(2C&&2C.Q){u=[W,2C];7.Y(\'4p\'+W,2C).74(W);15.u.1m=2C.3l(/\\n/75,\'<78 />\');B p}})}11=$.18.g.O.Q;1V(i=0;i<11;i++){c(P $.18.g.O[i]===\'5i\'){11=i;1C}}2c=2T 56($(A),15,11);$.18.g.O[11]=2c;2c.1v.W=u;c(P $(A).Y(\'g\')===\'19\'&&$(A).Y(\'g\')){c(P $(A).W(\'g\')===\'5i\'){$(A).Y(\'g\').3k=$(A).Y(\'g\').O.Q}$(A).Y(\'g\').O.5h(2c)}C{$(A).Y(\'g\',{3k:0,O:[2c]})}c(15.u.5w===p&&15.q.L.r!==p&&15.q.3x!==H){15.q.L.s.1J(15.q.L.r+\'.g-\'+11+\'-4m\',{g:11},j(r){T=$.18.g.O[r.Y.g];T.8.q.L.s.1O(T.8.q.L.r+\'.g-\'+r.Y.g+\'-4m\');T.1v.1K={M:r.3Y,K:r.4c};4w.S(T);T.8.q.L.s.77(T.8.q.L.r)})}C{2c.1v.1K={M:15.q.L.s.1k().M,K:15.q.L.s.1k().K};4w.S(2c)}}})};$.18.g.O=[];$.18.g.18={W:$.18.W};$.18.W=j(W){R T=$(A).g(\'T\');B(3b.Q===1&&(/U|6b/i).1Y(W)&&T.V&&T.V.1b===H)?$(A).Y(\'4p\'+T.1v.W[0]):$.18.g.18.W.4s(A,3b)};$.18.g.39={u:{5w:p,1m:p,1x:p,Y:1z,U:{1m:p,1i:p}},k:{s:p,w:{s:\'3P\',h:\'3K\'},1e:{x:0,y:0,1K:H,55:p,3E:H,3L:H,1k:p},17:\'34\',3U:p},q:{L:{s:p,r:\'35\'},Z:{17:\'3w\',Q:5T},2V:76,1X:p,3x:p},D:{L:{s:p,r:\'4x\'},Z:{17:\'3w\',Q:5T},2V:0,3g:p},T:{5J:j(){},5f:j(){},57:j(){},5c:j(){},5n:j(){},5q:j(){},5A:j(){},4Z:j(){},54:j(){},4Y:j(){},51:j(){},63:j(){},64:j(){},65:j(){},61:j(){},62:j(){},5H:j(){},5C:j(){}}};$.18.g.3c={39:{1s:\'66\',J:\'#6Z\',2u:\'1F\',6Y:\'M\',o:{2b:0,1H:6S},2x:\'6R 6Q\',I:{o:1,E:0,J:\'#6P\'},f:{w:p,J:p,N:{o:13,G:13},2B:1},U:{1s:\'#6T\',6U:\'6X\',2x:\'6W 6V\'},1i:{79:\'7a\'},1g:{s:\'\',f:\'g-f\',U:\'g-U\',1i:\'g-1i\',u:\'g-u\',3T:\'g-3T\'}},5L:{I:{o:3,E:0,J:\'#7o\'},U:{1s:\'#7n\',J:\'#5M\'},1s:\'#7m\',J:\'#5M\',1g:{h:\'g-5L\'}},6d:{I:{o:3,E:0,J:\'#7p\'},U:{1s:\'#7q\',J:\'#6c\'},1s:\'66\',J:\'#6c\',1g:{h:\'g-6d\'}},69:{I:{o:3,E:0,J:\'#7t\'},U:{1s:\'#7s\',J:\'#67\'},1s:\'#7r\',J:\'#67\',1g:{h:\'g-69\'}},4H:{I:{o:3,E:0,J:\'#7l\'},U:{1s:\'#7k\',J:\'#6g\'},1s:\'#7e\',J:\'#6g\',1g:{h:\'g-4H\'}},52:{I:{o:3,E:0,J:\'#7d\'},U:{1s:\'#7c\',J:\'#4W\'},1s:\'#7b\',J:\'#4W\',1g:{h:\'g-52\'}},5k:{I:{o:3,E:0,J:\'#7f\'},U:{1s:\'#7g\',J:\'#7j\'},1s:\'#7i\',J:\'#7h\',1g:{h:\'g-5k\'}}}}(82));',62,499,'|||||||self|options||||if|elements|style|tip|qtip|tooltip||function|position||||width|false|show|event|target||content||corner||||this|return|else|hide|radius|css|height|true|border|color|top|when|left|size|interfaces|typeof|length|var|call|api|title|status|attr|coordinates|data|effect||id|div||coords|config|browser|type|fn|object|px|rendered|returned|msie|adjust|canvas|classes|adj|button|center|offset|targetHeight|text|context|my|targetWidth|get|newWidth|background|wrapper|Math|cache|string|url|contentWrapper|null|parseInt|1px|break|finalStyle|getContext|hidden|timers|max|class|bind|mouse|each|find|tips|unbind|ieAdjust|containers|first|rel|command|posOptions|for|inactive|solo|test|case|opts|name|bgiframe|disabled|positionAdjust|right|bottom|imagePos|visible|static|display|min|obj||window|zoom|clearTimeout|updatePosition|hideTarget|borders|betweenCorners|html|add|adapted|path|extend|margin|is|number|dimensions|overflow|styleExtend|children|padding|precedance|90|method|opacity|val|Corner|focus|toLowerCase|jQueryStyle|charAt|toggle|myOffset|afterHide|default|afterShow|atOffset|borderAdjust|elemHeight|elemWidth|at|line|new|styleObj|delay|adjusted|version|font|value|topEdge|document|pBottom|bottomEdge|absolute|mouseover|parsedContent|images|state|defaults|none|arguments|styles|getDimensions|borderTop|destroy|fixed|showTarget|borderBottom|leftEdge|current|replace|pRight|rightEdge|align|arc|solid|aria|index|fillcolor|inactiveEvents|inactiveMethod|fade|ready|elemIndex|delete|styleArray|prepend|image|scrollLeft|scroll|newIndex|scrollTop|floor|behavior|coordsize|topLeft|resize|shape|300|parent|bottomRight|newMargin|VML|stop|active|container|visiblity|remove|disable|pageX|focused|topRight|blanket|positionTip|removeAttribute|createTip|adapt|drawBorder|outerWidth|outerHeight|marginTop|ieStyle|sub|pageY|updateWidth|calculateBorders|ltr|borderCoord|paddingSize|sanitizeStyle|animated|dir|buildStyle|create|paddingCorner|animate|old|sideWidth|jquery|apply|calculateTip|drawTip|user|construct|mouseout|relative|oldattr|updateContent|curIndex|mousemove|setupContent|block|offsetParent|vertWidth|red|bottomLeft|afterLoad|loadedImages|mapName|setTimeout|switch|betweenWidth|hideMethod|vertical|unfocus|showMethod|src|img|ceil|58792E|body|onContentUpdate|onHide||beforeContentLoad|green|inline|beforeContentUpdate|screen|QTip|beforePositionUpdate|prependTo|createBorder|String|createTitle|onPositionUpdate|click|role|onRender|parents|push|undefined|mouseenter|blue|assignEvents|filter|beforeShow|slide|grow|onShow|condition|append|dequeue|queue|addClass|prerender|middle|match|abs|beforeHide|bottomright|onFocus|270|nodeName|reposition|fillStyle|beforeFocus|clearRect|beforeRender|topright|cream|A27D35|topleft|unshift|appendTo|lineTo|in|not|100|beginPath|clone|updateTitle|splice|fill|loadContent|post|beforeDestroy|onDestroy|onContentLoad|beforeTitleUpdate|onTitleUpdate|white|f3f3f3|zIndex|dark|bottomleft|alt|454545|light|auto|stroked|9C2F2F|dblclick|rightcenter|mouseup|mousedown|mouseleave|Right|Left|moveTo|filled|out|endangle|startangle|use|strict|bottomcenter|qtipSelector|leftbottom|topcenter|righttop|leave|eq|rightbottom|0px|labelledby|while|float|borderWidth|xe|leftcenter|marginLeft|search|lefttop|PI|complete|d3d3d3|9px|5px|250|e1e1e1|fontWeight|12px|7px|bold|textAlign|111|relatedTarget|enable|getPosition|removeData|removeAttr|gi|140|trigger|br|cursor|pointer|CDE6AC|b9db8c|A9DB66|F79992|ADD9ED|D0E9F5|4D9FBF|E5F6FE|5E99BD|f28279|CE6F6F|FBF7AA|F0DE7D|F9E98E|E2E2E2|f1f1f1|505050|404040|303030|15000|update|boolean|removeClass|slideUp|fadeOut|area|split|circle|load|usemap|map|slideDown|fadeIn|frameborder|iframe|preventDefault|stopPropagation|tabindex|javascript|webkit|moz|describedby|alpha|poly|rect|borderColor|200|siblings|backgroundColor|updateStyle|normal|swing|10000000em|jQuery'.split('|'),0,{}))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.tablednd_0_5.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,382 @@
+/**
+ * TableDnD plug-in for JQuery, allows you to drag and drop table rows
+ * You can set up various options to control how the system will work
+ * Copyright (c) Denis Howlett <denish@isocra.com>
+ * Licensed like jQuery, see http://docs.jquery.com/License.
+ *
+ * Configuration options:
+ *
+ * onDragStyle
+ * This is the style that is assigned to the row during drag. There are limitations to the styles that can be
+ * associated with a row (such as you can't assign a border--well you can, but it won't be
+ * displayed). (So instead consider using onDragClass.) The CSS style to apply is specified as
+ * a map (as used in the jQuery css(...) function).
+ * onDropStyle
+ * This is the style that is assigned to the row when it is dropped. As for onDragStyle, there are limitations
+ * to what you can do. Also this replaces the original style, so again consider using onDragClass which
+ * is simply added and then removed on drop.
+ * onDragClass
+ * This class is added for the duration of the drag and then removed when the row is dropped. It is more
+ * flexible than using onDragStyle since it can be inherited by the row cells and other content. The default
+ * is class is tDnD_whileDrag. So to use the default, simply customise this CSS class in your
+ * stylesheet.
+ * onDrop
+ * Pass a function that will be called when the row is dropped. The function takes 2 parameters: the table
+ * and the row that was dropped. You can work out the new order of the rows by using
+ * table.rows.
+ * onDragStart
+ * Pass a function that will be called when the user starts dragging. The function takes 2 parameters: the
+ * table and the row which the user has started to drag.
+ * onAllowDrop
+ * Pass a function that will be called as a row is over another row. If the function returns true, allow
+ * dropping on that row, otherwise not. The function takes 2 parameters: the dragged row and the row under
+ * the cursor. It returns a boolean: true allows the drop, false doesn't allow it.
+ * scrollAmount
+ * This is the number of pixels to scroll if the user moves the mouse cursor to the top or bottom of the
+ * window. The page should automatically scroll up or down as appropriate (tested in IE6, IE7, Safari, FF2,
+ * FF3 beta
+ * dragHandle
+ * This is the name of a class that you assign to one or more cells in each row that is draggable. If you
+ * specify this class, then you are responsible for setting cursor: move in the CSS and only these cells
+ * will have the drag behaviour. If you do not specify a dragHandle, then you get the old behaviour where
+ * the whole row is draggable.
+ *
+ * Other ways to control behaviour:
+ *
+ * Add class="nodrop" to any rows for which you don't want to allow dropping, and class="nodrag" to any rows
+ * that you don't want to be draggable.
+ *
+ * Inside the onDrop method you can also call $.tableDnD.serialize() this returns a string of the form
+ * <tableID>[]=<rowID1>&<tableID>[]=<rowID2> so that you can send this back to the server. The table must have
+ * an ID as must all the rows.
+ *
+ * Other methods:
+ *
+ * $("...").tableDnDUpdate()
+ * Will update all the matching tables, that is it will reapply the mousedown method to the rows (or handle cells).
+ * This is useful if you have updated the table rows using Ajax and you want to make the table draggable again.
+ * The table maintains the original configuration (so you don't have to specify it again).
+ *
+ * $("...").tableDnDSerialize()
+ * Will serialize and return the serialized string as above, but for each of the matching tables--so it can be
+ * called from anywhere and isn't dependent on the currentTable being set up correctly before calling
+ *
+ * Known problems:
+ * - Auto-scoll has some problems with IE7 (it scrolls even when it shouldn't), work-around: set scrollAmount to 0
+ *
+ * Version 0.2: 2008-02-20 First public version
+ * Version 0.3: 2008-02-07 Added onDragStart option
+ * Made the scroll amount configurable (default is 5 as before)
+ * Version 0.4: 2008-03-15 Changed the noDrag/noDrop attributes to nodrag/nodrop classes
+ * Added onAllowDrop to control dropping
+ * Fixed a bug which meant that you couldn't set the scroll amount in both directions
+ * Added serialize method
+ * Version 0.5: 2008-05-16 Changed so that if you specify a dragHandle class it doesn't make the whole row
+ * draggable
+ * Improved the serialize method to use a default (and settable) regular expression.
+ * Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table
+ */
+jQuery.tableDnD = {
+ /** Keep hold of the current table being dragged */
+ currentTable : null,
+ /** Keep hold of the current drag object if any */
+ dragObject: null,
+ /** The current mouse offset */
+ mouseOffset: null,
+ /** Remember the old value of Y so that we don't do too much processing */
+ oldY: 0,
+
+ /** Actually build the structure */
+ build: function(options) {
+ // Set up the defaults if any
+
+ this.each(function() {
+ // This is bound to each matching table, set up the defaults and override with user options
+ this.tableDnDConfig = jQuery.extend({
+ onDragStyle: null,
+ onDropStyle: null,
+ // Add in the default class for whileDragging
+ onDragClass: "tDnD_whileDrag",
+ onDrop: null,
+ onDragStart: null,
+ scrollAmount: 5,
+ serializeRegexp: /[^\-]*$/, // The regular expression to use to trim row IDs
+ serializeParamName: null, // If you want to specify another parameter name instead of the table ID
+ dragHandle: null // If you give the name of a class here, then only Cells with this class will be draggable
+ }, options || {});
+ // Now make the rows draggable
+ jQuery.tableDnD.makeDraggable(this);
+ });
+
+ // Now we need to capture the mouse up and mouse move event
+ // We can use bind so that we don't interfere with other event handlers
+ jQuery(document)
+ .bind('mousemove', jQuery.tableDnD.mousemove)
+ .bind('mouseup', jQuery.tableDnD.mouseup);
+
+ // Don't break the chain
+ return this;
+ },
+
+ /** This function makes all the rows on the table draggable apart from those marked as "NoDrag" */
+ makeDraggable: function(table) {
+ var config = table.tableDnDConfig;
+ if (table.tableDnDConfig.dragHandle) {
+ // We only need to add the event to the specified cells
+ var cells = jQuery("td."+table.tableDnDConfig.dragHandle, table);
+ cells.each(function() {
+ // The cell is bound to "this"
+ jQuery(this).mousedown(function(ev) {
+ jQuery.tableDnD.dragObject = this.parentNode;
+ jQuery.tableDnD.currentTable = table;
+ jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
+ if (config.onDragStart) {
+ // Call the onDrop method if there is one
+ config.onDragStart(table, this);
+ }
+ return false;
+ });
+ })
+ } else {
+ // For backwards compatibility, we add the event to the whole row
+ var rows = jQuery("tr", table); // get all the rows as a wrapped set
+ rows.each(function() {
+ // Iterate through each row, the row is bound to "this"
+ var row = jQuery(this);
+ if (! row.hasClass("nodrag")) {
+ row.mousedown(function(ev) {
+ if (ev.target.tagName == "TD") {
+ jQuery.tableDnD.dragObject = this;
+ jQuery.tableDnD.currentTable = table;
+ jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
+ if (config.onDragStart) {
+ // Call the onDrop method if there is one
+ config.onDragStart(table, this);
+ }
+ return false;
+ }
+ }).css("cursor", "move"); // Store the tableDnD object
+ }
+ });
+ }
+ },
+
+ updateTables: function() {
+ this.each(function() {
+ // this is now bound to each matching table
+ if (this.tableDnDConfig) {
+ jQuery.tableDnD.makeDraggable(this);
+ }
+ })
+ },
+
+ /** Get the mouse coordinates from the event (allowing for browser differences) */
+ mouseCoords: function(ev){
+ if(ev.pageX || ev.pageY){
+ return {x:ev.pageX, y:ev.pageY};
+ }
+ return {
+ x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
+ y:ev.clientY + document.body.scrollTop - document.body.clientTop
+ };
+ },
+
+ /** Given a target element and a mouse event, get the mouse offset from that element.
+ To do this we need the element's position and the mouse position */
+ getMouseOffset: function(target, ev) {
+ ev = ev || window.event;
+
+ var docPos = this.getPosition(target);
+ var mousePos = this.mouseCoords(ev);
+ return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
+ },
+
+ /** Get the position of an element by going up the DOM tree and adding up all the offsets */
+ getPosition: function(e){
+ var left = 0;
+ var top = 0;
+ /** Safari fix -- thanks to Luis Chato for this! */
+ if (e.offsetHeight == 0) {
+ /** Safari 2 doesn't correctly grab the offsetTop of a table row
+ this is detailed here:
+ http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/
+ the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild.
+ note that firefox will return a text node as a first child, so designing a more thorough
+ solution may need to take that into account, for now this seems to work in firefox, safari, ie */
+ e = e.firstChild; // a table cell
+ }
+
+ while (e.offsetParent){
+ left += e.offsetLeft;
+ top += e.offsetTop;
+ e = e.offsetParent;
+ }
+
+ left += e.offsetLeft;
+ top += e.offsetTop;
+
+ return {x:left, y:top};
+ },
+
+ mousemove: function(ev) {
+ if (jQuery.tableDnD.dragObject == null) {
+ return;
+ }
+
+ var dragObj = jQuery(jQuery.tableDnD.dragObject);
+ var config = jQuery.tableDnD.currentTable.tableDnDConfig;
+ var mousePos = jQuery.tableDnD.mouseCoords(ev);
+ var y = mousePos.y - jQuery.tableDnD.mouseOffset.y;
+ //auto scroll the window
+ var yOffset = window.pageYOffset;
+ if (document.all) {
+ // Windows version
+ //yOffset=document.body.scrollTop;
+ if (typeof document.compatMode != 'undefined' &&
+ document.compatMode != 'BackCompat') {
+ yOffset = document.documentElement.scrollTop;
+ }
+ else if (typeof document.body != 'undefined') {
+ yOffset=document.body.scrollTop;
+ }
+
+ }
+
+ if (mousePos.y-yOffset < config.scrollAmount) {
+ window.scrollBy(0, -config.scrollAmount);
+ } else {
+ var windowHeight = window.innerHeight ? window.innerHeight
+ : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
+ if (windowHeight-(mousePos.y-yOffset) < config.scrollAmount) {
+ window.scrollBy(0, config.scrollAmount);
+ }
+ }
+
+
+ if (y != jQuery.tableDnD.oldY) {
+ // work out if we're going up or down...
+ var movingDown = y > jQuery.tableDnD.oldY;
+ // update the old value
+ jQuery.tableDnD.oldY = y;
+ // update the style to show we're dragging
+ if (config.onDragClass) {
+ dragObj.addClass(config.onDragClass);
+ } else {
+ dragObj.css(config.onDragStyle);
+ }
+ // If we're over a row then move the dragged row to there so that the user sees the
+ // effect dynamically
+ var currentRow = jQuery.tableDnD.findDropTargetRow(dragObj, y);
+ if (currentRow) {
+ // TODO worry about what happens when there are multiple TBODIES
+ if (movingDown && jQuery.tableDnD.dragObject != currentRow) {
+ jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow.nextSibling);
+ } else if (! movingDown && jQuery.tableDnD.dragObject != currentRow) {
+ jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow);
+ }
+ }
+ }
+
+ return false;
+ },
+
+ /** We're only worried about the y position really, because we can only move rows up and down */
+ findDropTargetRow: function(draggedRow, y) {
+ var rows = jQuery.tableDnD.currentTable.rows;
+ for (var i=0; i<rows.length; i++) {
+ var row = rows[i];
+ var rowY = this.getPosition(row).y;
+ var rowHeight = parseInt(row.offsetHeight)/2;
+ if (row.offsetHeight == 0) {
+ rowY = this.getPosition(row.firstChild).y;
+ rowHeight = parseInt(row.firstChild.offsetHeight)/2;
+ }
+ // Because we always have to insert before, we need to offset the height a bit
+ if ((y > rowY - rowHeight) && (y < (rowY + rowHeight))) {
+ // that's the row we're over
+ // If it's the same as the current row, ignore it
+ if (row == draggedRow) {return null;}
+ var config = jQuery.tableDnD.currentTable.tableDnDConfig;
+ if (config.onAllowDrop) {
+ if (config.onAllowDrop(draggedRow, row)) {
+ return row;
+ } else {
+ return null;
+ }
+ } else {
+ // If a row has nodrop class, then don't allow dropping (inspired by John Tarr and Famic)
+ var nodrop = jQuery(row).hasClass("nodrop");
+ if (! nodrop) {
+ return row;
+ } else {
+ return null;
+ }
+ }
+ return row;
+ }
+ }
+ return null;
+ },
+
+ mouseup: function(e) {
+ if (jQuery.tableDnD.currentTable && jQuery.tableDnD.dragObject) {
+ var droppedRow = jQuery.tableDnD.dragObject;
+ var config = jQuery.tableDnD.currentTable.tableDnDConfig;
+ // If we have a dragObject, then we need to release it,
+ // The row will already have been moved to the right place so we just reset stuff
+ if (config.onDragClass) {
+ jQuery(droppedRow).removeClass(config.onDragClass);
+ } else {
+ jQuery(droppedRow).css(config.onDropStyle);
+ }
+ jQuery.tableDnD.dragObject = null;
+ if (config.onDrop) {
+ // Call the onDrop method if there is one
+ config.onDrop(jQuery.tableDnD.currentTable, droppedRow);
+ }
+ jQuery.tableDnD.currentTable = null; // let go of the table too
+ }
+ },
+
+ serialize: function() {
+ if (jQuery.tableDnD.currentTable) {
+ return jQuery.tableDnD.serializeTable(jQuery.tableDnD.currentTable);
+ } else {
+ return "Error: No Table id set, you need to set an id on your table and every row";
+ }
+ },
+
+ serializeTable: function(table) {
+ var result = "";
+ var tableId = table.id;
+ var rows = table.rows;
+ for (var i=0; i<rows.length; i++) {
+ if (result.length > 0) result += "&";
+ var rowId = rows[i].id;
+ if (rowId && rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) {
+ rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0];
+ }
+
+ result += tableId + '[]=' + rowId;
+ }
+ return result;
+ },
+
+ serializeTables: function() {
+ var result = "";
+ this.each(function() {
+ // this is now bound to each matching table
+ result += jQuery.tableDnD.serializeTable(this);
+ });
+ return result;
+ }
+
+}
+
+jQuery.fn.extend(
+ {
+ tableDnD : jQuery.tableDnD.build,
+ tableDnDUpdate : jQuery.tableDnD.updateTables,
+ tableDnDSerialize: jQuery.tableDnD.serializeTables
+ }
+);
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.textchange.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,10 @@
+/*!
+ * jQuery TextChange Plugin
+ * http://www.zurb.com/playground/jquery-text-change-custom-event
+ *
+ * Copyright 2010, ZURB
+ * Released under the MIT License
+ */
+ (function(a){a.event.special.textchange={setup:function(){a(this).data("lastValue",this.contentEditable==="true"?a(this).html():a(this).val());a(this).bind("keyup.textchange",a.event.special.textchange.handler);a(this).bind("cut.textchange paste.textchange input.textchange",a.event.special.textchange.delayedHandler)},teardown:function(){a(this).unbind(".textchange")},handler:function(){a.event.special.textchange.triggerIfChanged(a(this))},delayedHandler:function(){var b=a(this);setTimeout(function(){a.event.special.textchange.triggerIfChanged(b)},
+ 25)},triggerIfChanged:function(b){var c=b[0].contentEditable==="true"?b.html():b.val();if(c!==b.data("lastValue")){b.trigger("textchange",b.data("lastValue"));b.data("lastValue",c)}}};a.event.special.hastext={setup:function(){a(this).bind("textchange",a.event.special.hastext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.hastext.handler)},handler:function(b,c){c===""&&c!==a(this).val()&&a(this).trigger("hastext")}};a.event.special.notext={setup:function(){a(this).bind("textchange",
+ a.event.special.notext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.notext.handler)},handler:function(b,c){a(this).val()===""&&a(this).val()!==c&&a(this).trigger("notext")}}})(jQuery);
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.tools.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,116 @@
+/*
+ * jQuery Tools 1.2.4 - The missing UI library for the Web
+ *
+ * [toolbox.flashembed, toolbox.history, toolbox.expose, toolbox.mousewheel, tabs, tabs.slideshow, tooltip, tooltip.slide, tooltip.dynamic, scrollable, scrollable.autoscroll, scrollable.navigator, overlay, overlay.apple, dateinput, rangeinput, validator]
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/
+ *
+ * jquery.event.wheel.js - rev 1
+ * Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
+ * Liscensed under the MIT License (MIT-LICENSE.txt)
+ * http://www.opensource.org/licenses/mit-license.php
+ * Created: 2008-07-01 | Updated: 2008-07-14
+ *
+ * -----
+ *
+ * File generated: Wed Aug 18 09:10:10 GMT 2010
+ */
+(function(){function f(a,b){if(b)for(var c in b)if(b.hasOwnProperty(c))a[c]=b[c];return a}function l(a,b){var c=[];for(var d in a)if(a.hasOwnProperty(d))c[d]=b(a[d]);return c}function m(a,b,c){if(e.isSupported(b.version))a.innerHTML=e.getHTML(b,c);else if(b.expressInstall&&e.isSupported([6,65]))a.innerHTML=e.getHTML(f(b,{src:b.expressInstall}),{MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title});else{if(!a.innerHTML.replace(/\s/g,"")){a.innerHTML="<h2>Flash version "+b.version+
+" or greater is required</h2><h3>"+(g[0]>0?"Your version is "+g:"You have no flash plugin installed")+"</h3>"+(a.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+k+"'>here</a></p>");if(a.tagName=="A")a.onclick=function(){location.href=k}}if(b.onFail){var d=b.onFail.call(this);if(typeof d=="string")a.innerHTML=d}}if(i)window[b.id]=document.getElementById(b.id);f(this,{getRoot:function(){return a},getOptions:function(){return b},getConf:function(){return c},
+getApi:function(){return a.firstChild}})}var i=document.all,k="http://www.adobe.com/go/getflashplayer",n=typeof jQuery=="function",o=/(\d+)[^\d]+(\d+)[^\d]*(\d*)/,j={width:"100%",height:"100%",id:"_"+(""+Math.random()).slice(9),allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:[3,0],onFail:null,expressInstall:null,w3c:false,cachebusting:false};window.attachEvent&&window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}});
+window.flashembed=function(a,b,c){if(typeof a=="string")a=document.getElementById(a.replace("#",""));if(a){if(typeof b=="string")b={src:b};return new m(a,f(f({},j),b),c)}};var e=f(window.flashembed,{conf:j,getVersion:function(){var a,b;try{b=navigator.plugins["Shockwave Flash"].description.slice(16)}catch(c){try{b=(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"))&&a.GetVariable("$version")}catch(d){try{b=(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"))&&a.GetVariable("$version")}catch(h){}}}return(b=
+o.exec(b))?[b[1],b[3]]:[0,0]},asString:function(a){if(a===null||a===undefined)return null;var b=typeof a;if(b=="object"&&a.push)b="array";switch(b){case "string":a=a.replace(new RegExp('(["\\\\])',"g"),"\\$1");a=a.replace(/^\s?(\d+\.?\d+)%/,"$1pct");return'"'+a+'"';case "array":return"["+l(a,function(d){return e.asString(d)}).join(",")+"]";case "function":return'"function()"';case "object":b=[];for(var c in a)a.hasOwnProperty(c)&&b.push('"'+c+'":'+e.asString(a[c]));return"{"+b.join(",")+"}"}return String(a).replace(/\s/g,
+" ").replace(/\'/g,'"')},getHTML:function(a,b){a=f({},a);var c='<object width="'+a.width+'" height="'+a.height+'" id="'+a.id+'" name="'+a.id+'"';if(a.cachebusting)a.src+=(a.src.indexOf("?")!=-1?"&":"?")+Math.random();c+=a.w3c||!i?' data="'+a.src+'" type="application/x-shockwave-flash"':' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';c+=">";if(a.w3c||i)c+='<param name="movie" value="'+a.src+'" />';a.width=a.height=a.id=a.w3c=a.src=null;a.onFail=a.version=a.expressInstall=null;for(var d in a)if(a[d])c+=
+'<param name="'+d+'" value="'+a[d]+'" />';a="";if(b){for(var h in b)if(b[h]){d=b[h];a+=h+"="+(/function|object/.test(typeof d)?e.asString(d):d)+"&"}a=a.slice(0,-1);c+='<param name="flashvars" value=\''+a+"' />"}c+="</object>";return c},isSupported:function(a){return g[0]>a[0]||g[0]==a[0]&&g[1]>=a[1]}}),g=e.getVersion();if(n){jQuery.tools=jQuery.tools||{version:"1.2.4"};jQuery.tools.flashembed={conf:j};jQuery.fn.flashembed=function(a,b){return this.each(function(){$(this).data("flashembed",flashembed(this,
+a,b))})}}})();
+(function(b){function h(c){if(c){var a=d.contentWindow.document;a.open().close();a.location.hash=c}}var g,d,f,i;b.tools=b.tools||{version:"1.2.4"};b.tools.history={init:function(c){if(!i){if(b.browser.msie&&b.browser.version<"8"){if(!d){d=b("<iframe/>").attr("src","javascript:false;").hide().get(0);b("body").append(d);setInterval(function(){var a=d.contentWindow.document;a=a.location.hash;g!==a&&b.event.trigger("hash",a)},100);h(location.hash||"#")}}else setInterval(function(){var a=location.hash;
+a!==g&&b.event.trigger("hash",a)},100);f=!f?c:f.add(c);c.click(function(a){var e=b(this).attr("href");d&&h(e);if(e.slice(0,1)!="#"){location.href="#"+e;return a.preventDefault()}});i=true}}};b(window).bind("hash",function(c,a){a?f.filter(function(){var e=b(this).attr("href");return e==a||e==a.replace("#","")}).trigger("history",[a]):f.eq(0).trigger("history",[a]);g=a;window.location.hash=g});b.fn.history=function(c){b.tools.history.init(this);return this.bind("history",c)}})(jQuery);
+(function(b){function k(){if(b.browser.msie){var a=b(document).height(),d=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a-d<20?d:a]}return[b(document).width(),b(document).height()]}function h(a){if(a)return a.call(b.mask)}b.tools=b.tools||{version:"1.2.4"};var l;l=b.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,startOpacity:0,color:"#fff",onLoad:null,
+onClose:null}};var c,i,e,g,j;b.mask={load:function(a,d){if(e)return this;if(typeof a=="string")a={color:a};a=a||g;g=a=b.extend(b.extend({},l.conf),a);c=b("#"+a.maskId);if(!c.length){c=b("<div/>").attr("id",a.maskId);b("body").append(c)}var m=k();c.css({position:"absolute",top:0,left:0,width:m[0],height:m[1],display:"none",opacity:a.startOpacity,zIndex:a.zIndex});a.color&&c.css("backgroundColor",a.color);if(h(a.onBeforeLoad)===false)return this;a.closeOnEsc&&b(document).bind("keydown.mask",function(f){f.keyCode==
+27&&b.mask.close(f)});a.closeOnClick&&c.bind("click.mask",function(f){b.mask.close(f)});b(window).bind("resize.mask",function(){b.mask.fit()});if(d&&d.length){j=d.eq(0).css("zIndex");b.each(d,function(){var f=b(this);/relative|absolute|fixed/i.test(f.css("position"))||f.css("position","relative")});i=d.css({zIndex:Math.max(a.zIndex+1,j=="auto"?0:j)})}c.css({display:"block"}).fadeTo(a.loadSpeed,a.opacity,function(){b.mask.fit();h(a.onLoad);e="full"});e=true;return this},close:function(){if(e){if(h(g.onBeforeClose)===
+false)return this;c.fadeOut(g.closeSpeed,function(){h(g.onClose);i&&i.css({zIndex:j});e=false});b(document).unbind("keydown.mask");c.unbind("click.mask");b(window).unbind("resize.mask")}return this},fit:function(){if(e){var a=k();c.css({width:a[0],height:a[1]})}},getMask:function(){return c},isLoaded:function(a){return a?e=="full":e},getConf:function(){return g},getExposed:function(){return i}};b.fn.mask=function(a){b.mask.load(a);return this};b.fn.expose=function(a){b.mask.load(a,this);return this}})(jQuery);
+(function(b){function c(a){switch(a.type){case "mousemove":return b.extend(a.data,{clientX:a.clientX,clientY:a.clientY,pageX:a.pageX,pageY:a.pageY});case "DOMMouseScroll":b.extend(a,a.data);a.delta=-a.detail/3;break;case "mousewheel":a.delta=a.wheelDelta/120;break}a.type="wheel";return b.event.handle.call(this,a,a.delta)}b.fn.mousewheel=function(a){return this[a?"bind":"trigger"]("wheel",a)};b.event.special.wheel={setup:function(){b.event.add(this,d,c,{})},teardown:function(){b.event.remove(this,
+d,c)}};var d=!b.browser.mozilla?"mousewheel":"DOMMouseScroll"+(b.browser.version<"1.9"?" mousemove":"")})(jQuery);
+(function(c){function p(d,b,a){var e=this,l=d.add(this),h=d.find(a.tabs),i=b.jquery?b:d.children(b),j;h.length||(h=d.children());i.length||(i=d.parent().find(b));i.length||(i=c(b));c.extend(this,{click:function(f,g){var k=h.eq(f);if(typeof f=="string"&&f.replace("#","")){k=h.filter("[href*="+f.replace("#","")+"]");f=Math.max(h.index(k),0)}if(a.rotate){var n=h.length-1;if(f<0)return e.click(n,g);if(f>n)return e.click(0,g)}if(!k.length){if(j>=0)return e;f=a.initialIndex;k=h.eq(f)}if(f===j)return e;
+g=g||c.Event();g.type="onBeforeClick";l.trigger(g,[f]);if(!g.isDefaultPrevented()){o[a.effect].call(e,f,function(){g.type="onClick";l.trigger(g,[f])});j=f;h.removeClass(a.current);k.addClass(a.current);return e}},getConf:function(){return a},getTabs:function(){return h},getPanes:function(){return i},getCurrentPane:function(){return i.eq(j)},getCurrentTab:function(){return h.eq(j)},getIndex:function(){return j},next:function(){return e.click(j+1)},prev:function(){return e.click(j-1)},destroy:function(){h.unbind(a.event).removeClass(a.current);
+i.find("a[href^=#]").unbind("click.T");return e}});c.each("onBeforeClick,onClick".split(","),function(f,g){c.isFunction(a[g])&&c(e).bind(g,a[g]);e[g]=function(k){k&&c(e).bind(g,k);return e}});if(a.history&&c.fn.history){c.tools.history.init(h);a.event="history"}h.each(function(f){c(this).bind(a.event,function(g){e.click(f,g);return g.preventDefault()})});i.find("a[href^=#]").bind("click.T",function(f){e.click(c(this).attr("href"),f)});if(location.hash&&a.tabs==="a"&&d.find(a.tabs+location.hash).length)e.click(location.hash);
+else if(a.initialIndex===0||a.initialIndex>0)e.click(a.initialIndex)}c.tools=c.tools||{version:"1.2.4"};c.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(d,b){o[d]=b}};var o={"default":function(d,b){this.getPanes().hide().eq(d).show();b.call()},fade:function(d,b){var a=this.getConf(),e=a.fadeOutSpeed,l=this.getPanes();e?l.fadeOut(e):l.hide();l.eq(d).fadeIn(a.fadeInSpeed,b)},slide:function(d,
+b){this.getPanes().slideUp(200);this.getPanes().eq(d).slideDown(400,b)},ajax:function(d,b){this.getPanes().eq(0).load(this.getTabs().eq(d).attr("href"),b)}},m;c.tools.tabs.addEffect("horizontal",function(d,b){m||(m=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){c(this).hide()});this.getPanes().eq(d).animate({width:m},function(){c(this).show();b.call()})});c.fn.tabs=function(d,b){var a=this.data("tabs");if(a){a.destroy();this.removeData("tabs")}if(c.isFunction(b))b=
+{onBeforeClick:b};b=c.extend({},c.tools.tabs.conf,b);this.each(function(){a=new p(c(this),d,b);c(this).data("tabs",a)});return b.api?a:this}})(jQuery);
+(function(d){function r(g,a){function p(f){var e=d(f);return e.length<2?e:g.parent().find(f)}var c=this,j=g.add(this),b=g.data("tabs"),h,m,k,n=false,o=p(a.next).click(function(){b.next()}),l=p(a.prev).click(function(){b.prev()});d.extend(c,{getTabs:function(){return b},getConf:function(){return a},play:function(){if(!h){var f=d.Event("onBeforePlay");j.trigger(f);if(f.isDefaultPrevented())return c;n=false;h=setInterval(b.next,a.interval);j.trigger("onPlay");b.next()}},pause:function(){if(!h&&!k)return c;
+var f=d.Event("onBeforePause");j.trigger(f);if(f.isDefaultPrevented())return c;h=clearInterval(h);k=clearInterval(k);j.trigger("onPause")},stop:function(){c.pause();n=true}});d.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(f,e){d.isFunction(a[e])&&c.bind(e,a[e]);c[e]=function(s){return c.bind(e,s)}});if(a.autopause){var t=b.getTabs().add(o).add(l).add(b.getPanes());t.hover(function(){c.pause();m=clearInterval(m)},function(){n||(m=setTimeout(c.play,a.interval))})}if(a.autoplay)k=
+setTimeout(c.play,a.interval);else c.stop();a.clickable&&b.getPanes().click(function(){b.next()});if(!b.getConf().rotate){var i=a.disabledClass;b.getIndex()||l.addClass(i);b.onBeforeClick(function(f,e){if(e){l.removeClass(i);e==b.getTabs().length-1?o.addClass(i):o.removeClass(i)}else l.addClass(i)})}}var q;q=d.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:false,autopause:true,interval:3E3,clickable:true,api:false}};d.fn.slideshow=function(g){var a=
+this.data("slideshow");if(a)return a;g=d.extend({},q.conf,g);this.each(function(){a=new r(d(this),g);d(this).data("slideshow",a)});return g.api?a:this}})(jQuery);
+(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function u(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=a.attr("data-tooltip"),r=n[b.effect],l,s=
+a.is(":input"),v=s&&a.is(":checkbox, :radio, select, :button, :submit"),t=a.attr("type"),k=b.events[t]||b.events[s?v?"widget":"input":"def"];if(!r)throw'Nonexistent effect "'+b.effect+'"';k=k.split(/,\s*/);if(k.length!=2)throw"Tooltip: bad events configuration for "+t;a.bind(k[0],function(d){clearTimeout(i);if(b.predelay)j=setTimeout(function(){c.show(d)},b.predelay);else c.show(d)}).bind(k[1],function(d){clearTimeout(j);if(b.delay)i=setTimeout(function(){c.hide(d)},b.delay);else c.hide(d)});if(m&&
+b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,{show:function(d){if(!e){if(q)e=f(q);else if(m)e=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",
+top:g.top,left:g.left});l=true;r[0].call(c,function(){d.type="onShow";l="full";h.trigger(d)});g=b.events.tooltip.split(/,\s*/);e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(k[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){l=false;n[b.effect][1].call(c,function(){d.type="onHide";
+h.trigger(d)});return c}},isShown:function(d){return d?l=="full":l},getConf:function(){return b},getTip:function(){return e},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.4"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,
+events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,
+a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new u(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
+(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
+b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
+(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
+g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
+a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);
+(function(e){function n(f,c){var a=e(c);return a.length<2?a:f.parent().find(c)}function t(f,c){var a=this,l=f.add(a),g=f.children(),k=0,m=c.vertical;j||(j=a);if(g.length>1)g=e(c.items,f);e.extend(a,{getConf:function(){return c},getIndex:function(){return k},getSize:function(){return a.getItems().size()},getNaviButtons:function(){return o.add(p)},getRoot:function(){return f},getItemWrap:function(){return g},getItems:function(){return g.children(c.item).not("."+c.clonedClass)},move:function(b,d){return a.seekTo(k+
+b,d)},next:function(b){return a.move(1,b)},prev:function(b){return a.move(-1,b)},begin:function(b){return a.seekTo(0,b)},end:function(b){return a.seekTo(a.getSize()-1,b)},focus:function(){return j=a},addItem:function(b){b=e(b);if(c.circular){g.children("."+c.clonedClass+":last").before(b);g.children("."+c.clonedClass+":first").replaceWith(b.clone().addClass(c.clonedClass))}else g.append(b);l.trigger("onAddItem",[b]);return a},seekTo:function(b,d,h){b.jquery||(b*=1);if(c.circular&&b===0&&k==-1&&d!==
+0)return a;if(!c.circular&&b<0||b>a.getSize()||b<-1)return a;var i=b;if(b.jquery)b=a.getItems().index(b);else i=a.getItems().eq(b);var q=e.Event("onBeforeSeek");if(!h){l.trigger(q,[b,d]);if(q.isDefaultPrevented()||!i.length)return a}i=m?{top:-i.position().top}:{left:-i.position().left};k=b;j=a;if(d===undefined)d=c.speed;g.animate(i,d,c.easing,h||function(){l.trigger("onSeek",[b])});return a}});e.each(["onBeforeSeek","onSeek","onAddItem"],function(b,d){e.isFunction(c[d])&&e(a).bind(d,c[d]);a[d]=function(h){e(a).bind(d,
+h);return a}});if(c.circular){var r=a.getItems().slice(-1).clone().prependTo(g),s=a.getItems().eq(1).clone().appendTo(g);r.add(s).addClass(c.clonedClass);a.onBeforeSeek(function(b,d,h){if(!b.isDefaultPrevented())if(d==-1){a.seekTo(r,h,function(){a.end(0)});return b.preventDefault()}else d==a.getSize()&&a.seekTo(s,h,function(){a.begin(0)})});a.seekTo(0,0,function(){})}var o=n(f,c.prev).click(function(){a.prev()}),p=n(f,c.next).click(function(){a.next()});!c.circular&&a.getSize()>1&&a.onBeforeSeek(function(b,
+d){setTimeout(function(){if(!b.isDefaultPrevented()){o.toggleClass(c.disabledClass,d<=0);p.toggleClass(c.disabledClass,d>=a.getSize()-1)}},1)});c.mousewheel&&e.fn.mousewheel&&f.mousewheel(function(b,d){if(c.mousewheel){a.move(d<0?1:-1,c.wheelSpeed||50);return false}});c.keyboard&&e(document).bind("keydown.scrollable",function(b){if(!(!c.keyboard||b.altKey||b.ctrlKey||e(b.target).is(":input")))if(!(c.keyboard!="static"&&j!=a)){var d=b.keyCode;if(m&&(d==38||d==40)){a.move(d==38?-1:1);return b.preventDefault()}if(!m&&
+(d==37||d==39)){a.move(d==37?-1:1);return b.preventDefault()}}});c.initialIndex&&a.seekTo(c.initialIndex,0,function(){})}e.tools=e.tools||{version:"1.2.4"};e.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,wheelSpeed:0}};var j;e.fn.scrollable=function(f){var c=this.data("scrollable");if(c)return c;f=e.extend({},
+e.tools.scrollable.conf,f);this.each(function(){c=new t(e(this),f);e(this).data("scrollable",c)});return f.api?c:this}})(jQuery);
+(function(c){var g=c.tools.scrollable;g.autoscroll={conf:{autoplay:true,interval:3E3,autopause:true}};c.fn.autoscroll=function(d){if(typeof d=="number")d={interval:d};var b=c.extend({},g.autoscroll.conf,d),h;this.each(function(){var a=c(this).data("scrollable");if(a)h=a;var e,i,f=true;a.play=function(){if(!e){f=false;e=setInterval(function(){a.next()},b.interval);a.next()}};a.pause=function(){e=clearInterval(e)};a.stop=function(){a.pause();f=true};b.autopause&&a.getRoot().add(a.getNaviButtons()).hover(function(){a.pause();
+clearInterval(i)},function(){f||(i=setTimeout(a.play,b.interval))});b.autoplay&&setTimeout(a.play,b.interval)});return b.api?h:this}})(jQuery);
+(function(d){function p(b,g){var h=d(g);return h.length<2?h:b.parent().find(g)}var m=d.tools.scrollable;m.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:false,idPrefix:null,history:false}};d.fn.navigator=function(b){if(typeof b=="string")b={navi:b};b=d.extend({},m.navigator.conf,b);var g;this.each(function(){function h(a,c,i){e.seekTo(c);if(j){if(location.hash)location.hash=a.attr("href").replace("#","")}else return i.preventDefault()}function f(){return k.find(b.naviItem||
+"> *")}function n(a){var c=d("<"+(b.naviItem||"a")+"/>").click(function(i){h(d(this),a,i)}).attr("href","#"+a);a===0&&c.addClass(l);b.indexed&&c.text(a+1);b.idPrefix&&c.attr("id",b.idPrefix+a);return c.appendTo(k)}function o(a,c){a=f().eq(c.replace("#",""));a.length||(a=f().filter("[href="+c+"]"));a.click()}var e=d(this).data("scrollable"),k=b.navi.jquery?b.navi:p(e.getRoot(),b.navi),q=e.getNaviButtons(),l=b.activeClass,j=b.history&&d.fn.history;if(e)g=e;e.getNaviButtons=function(){return q.add(k)};
+f().length?f().each(function(a){d(this).click(function(c){h(d(this),a,c)})}):d.each(e.getItems(),function(a){n(a)});e.onBeforeSeek(function(a,c){setTimeout(function(){if(!a.isDefaultPrevented()){var i=f().eq(c);!a.isDefaultPrevented()&&i.length&&f().removeClass(l).eq(c).addClass(l)}},1)});e.onAddItem(function(a,c){c=n(e.getItems().index(c));j&&c.history(o)});j&&f().history(o)});return b.api?g:this}})(jQuery);
+(function(a){function t(d,b){var c=this,i=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+
+'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";i.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var j=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof j=="string")j=j=="center"?Math.max((o.height()-v)/2,0):parseInt(j,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:j,left:r},function(){if(m){e.type="onLoad";i.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click",
+c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";i.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";i.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f},
+getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(j){a(c).bind(h,j);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('<a class="close"></a>');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.4"};a.tools.overlay={addEffect:function(d,
+b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),i=a(window);if(!c.fixed){d.top+=i.scrollTop();d.left+=i.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed,
+d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery);
+(function(i){function j(b){var d=b.offset();return{top:d.top+b.height()/2,left:d.left+b.width()/2}}var k=i.tools.overlay,f=i(window);i.extend(k.conf,{start:{top:null,left:null},fadeInSpeed:"fast",zIndex:9999});function n(b,d){var a=this.getOverlay(),c=this.getConf(),g=this.getTrigger(),o=this,l=a.outerWidth({margin:true}),h=a.data("img");if(!h){var e=a.css("backgroundImage");if(!e)throw"background-image CSS property not set for overlay";e=e.slice(e.indexOf("(")+1,e.indexOf(")")).replace(/\"/g,"");
+a.css("backgroundImage","none");h=i('<img src="'+e+'"/>');h.css({border:0,display:"none"}).width(l);i("body").append(h);a.data("img",h)}e=c.start.top||Math.round(f.height()/2);var m=c.start.left||Math.round(f.width()/2);if(g){g=j(g);e=g.top;m=g.left}h.css({position:"absolute",top:e,left:m,width:0,zIndex:c.zIndex}).show();b.top+=f.scrollTop();b.left+=f.scrollLeft();b.position="absolute";a.css(b);h.animate({top:a.css("top"),left:a.css("left"),width:l},c.speed,function(){if(c.fixed){b.top-=f.scrollTop();
+b.left-=f.scrollLeft();b.position="fixed";h.add(a).css(b)}a.css("zIndex",c.zIndex+1).fadeIn(c.fadeInSpeed,function(){o.isOpened()&&!i(this).index(a)?d.call():a.hide()})})}function p(b){var d=this.getOverlay().hide(),a=this.getConf(),c=this.getTrigger();d=d.data("img");var g={top:a.start.top,left:a.start.left,width:0};c&&i.extend(g,j(c));a.fixed&&d.css({position:"absolute"}).animate({top:"+="+f.scrollTop(),left:"+="+f.scrollLeft()},0);d.animate(g,a.closeSpeed,b)}k.addEffect("apple",n,p)})(jQuery);
+(function(d){function R(b,c){return 32-(new Date(b,c,32)).getDate()}function S(b,c){b=""+b;for(c=c||2;b.length<c;)b="0"+b;return b}function T(b,c,i){var p=b.getDate(),h=b.getDay(),q=b.getMonth();b=b.getFullYear();var f={d:p,dd:S(p),ddd:B[i].shortDays[h],dddd:B[i].days[h],m:q+1,mm:S(q+1),mmm:B[i].shortMonths[q],mmmm:B[i].months[q],yy:String(b).slice(2),yyyy:b};c=c.replace(X,function(r){return r in f?f[r]:r.slice(1,r.length-1)});return Y.html(c).html()}function y(b){return parseInt(b,10)}function U(b,
+c){return b.getFullYear()===c.getFullYear()&&b.getMonth()==c.getMonth()&&b.getDate()==c.getDate()}function C(b){if(b){if(b.constructor==Date)return b;if(typeof b=="string"){var c=b.split("-");if(c.length==3)return new Date(y(c[0]),y(c[1])-1,y(c[2]));if(!/^-?\d+$/.test(b))return;b=y(b)}c=new Date;c.setDate(c.getDate()+b);return c}}function Z(b,c){function i(a,e,g){m=a;D=a.getFullYear();E=a.getMonth();G=a.getDate();g=g||d.Event("api");g.type="change";H.trigger(g,[a]);if(!g.isDefaultPrevented()){b.val(T(a,
+e.format,e.lang));b.data("date",a);h.hide(g)}}function p(a){a.type="onShow";H.trigger(a);d(document).bind("keydown.d",function(e){if(e.ctrlKey)return true;var g=e.keyCode;if(g==8){b.val("");return h.hide(e)}if(g==27)return h.hide(e);if(d(V).index(g)>=0){if(!v){h.show(e);return e.preventDefault()}var j=d("#"+f.weeks+" a"),s=d("."+f.focus),n=j.index(s);s.removeClass(f.focus);if(g==74||g==40)n+=7;else if(g==75||g==38)n-=7;else if(g==76||g==39)n+=1;else if(g==72||g==37)n-=1;if(n>41){h.addMonth();s=d("#"+
+f.weeks+" a:eq("+(n-42)+")")}else if(n<0){h.addMonth(-1);s=d("#"+f.weeks+" a:eq("+(n+42)+")")}else s=j.eq(n);s.addClass(f.focus);return e.preventDefault()}if(g==34)return h.addMonth();if(g==33)return h.addMonth(-1);if(g==36)return h.today();if(g==13)d(e.target).is("select")||d("."+f.focus).click();return d([16,17,18,9]).index(g)>=0});d(document).bind("click.d",function(e){var g=e.target;if(!d(g).parents("#"+f.root).length&&g!=b[0]&&(!L||g!=L[0]))h.hide(e)})}var h=this,q=new Date,f=c.css,r=B[c.lang],
+k=d("#"+f.root),M=k.find("#"+f.title),L,I,J,D,E,G,m=b.attr("data-value")||c.value||b.val(),o=b.attr("min")||c.min,t=b.attr("max")||c.max,v;if(o===0)o="0";m=C(m)||q;o=C(o||c.yearRange[0]*365);t=C(t||c.yearRange[1]*365);if(!r)throw"Dateinput: invalid language: "+c.lang;if(b.attr("type")=="date"){var N=d("<input/>");d.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(a,e){N.attr(e,b.attr(e))});b.replaceWith(N);b=N}b.addClass(f.input);var H=
+b.add(h);if(!k.length){k=d("<div><div><a/><div/><a/></div><div><div/><div/></div></div>").hide().css({position:"absolute"}).attr("id",f.root);k.children().eq(0).attr("id",f.head).end().eq(1).attr("id",f.body).children().eq(0).attr("id",f.days).end().eq(1).attr("id",f.weeks).end().end().end().find("a").eq(0).attr("id",f.prev).end().eq(1).attr("id",f.next);M=k.find("#"+f.head).find("div").attr("id",f.title);if(c.selectors){var z=d("<select/>").attr("id",f.month),A=d("<select/>").attr("id",f.year);M.append(z.add(A))}for(var $=
+k.find("#"+f.days),O=0;O<7;O++)$.append(d("<span/>").text(r.shortDays[(O+c.firstDay)%7]));d("body").append(k)}if(c.trigger)L=d("<a/>").attr("href","#").addClass(f.trigger).click(function(a){h.show();return a.preventDefault()}).insertAfter(b);var K=k.find("#"+f.weeks);A=k.find("#"+f.year);z=k.find("#"+f.month);d.extend(h,{show:function(a){if(!(b.is("[readonly]")||v)){a=a||d.Event();a.type="onBeforeShow";H.trigger(a);if(!a.isDefaultPrevented()){d.each(W,function(){this.hide()});v=true;z.unbind("change").change(function(){h.setValue(A.val(),
+d(this).val())});A.unbind("change").change(function(){h.setValue(d(this).val(),z.val())});I=k.find("#"+f.prev).unbind("click").click(function(){I.hasClass(f.disabled)||h.addMonth(-1);return false});J=k.find("#"+f.next).unbind("click").click(function(){J.hasClass(f.disabled)||h.addMonth();return false});h.setValue(m);var e=b.position();k.css({top:e.top+b.outerHeight({margins:true})+c.offset[0],left:e.left+c.offset[1]});if(c.speed)k.show(c.speed,function(){p(a)});else{k.show();p(a)}return h}}},setValue:function(a,
+e,g){var j;if(parseInt(e,10)>=-1){a=y(a);e=y(e);g=y(g);j=new Date(a,e,g)}else{j=a||m;a=j.getFullYear();e=j.getMonth();g=j.getDate()}if(e==-1){e=11;a--}else if(e==12){e=0;a++}if(!v){i(j,c);return h}E=e;D=a;g=new Date(a,e,1-c.firstDay);g=g.getDay();var s=R(a,e),n=R(a,e-1),P;if(c.selectors){z.empty();d.each(r.months,function(w,F){o<new Date(a,w+1,-1)&&t>new Date(a,w,0)&&z.append(d("<option/>").html(F).attr("value",w))});A.empty();j=q.getFullYear();for(var l=j+c.yearRange[0];l<j+c.yearRange[1];l++)o<
+new Date(l+1,-1,0)&&t>new Date(l,0,0)&&A.append(d("<option/>").text(l));z.val(e);A.val(a)}else M.html(r.months[e]+" "+a);K.empty();I.add(J).removeClass(f.disabled);l=!g?-7:0;for(var u,x;l<(!g?35:42);l++){u=d("<a/>");if(l%7===0){P=d("<div/>").addClass(f.week);K.append(P)}if(l<g){u.addClass(f.off);x=n-g+l+1;j=new Date(a,e-1,x)}else if(l>=g+s){u.addClass(f.off);x=l-s-g+1;j=new Date(a,e+1,x)}else{x=l-g+1;j=new Date(a,e,x);if(U(m,j))u.attr("id",f.current).addClass(f.focus);else U(q,j)&&u.attr("id",f.today)}o&&
+j<o&&u.add(I).addClass(f.disabled);t&&j>t&&u.add(J).addClass(f.disabled);u.attr("href","#"+x).text(x).data("date",j);P.append(u)}K.find("a").click(function(w){var F=d(this);if(!F.hasClass(f.disabled)){d("#"+f.current).removeAttr("id");F.attr("id",f.current);i(F.data("date"),c,w)}return false});f.sunday&&K.find(f.week).each(function(){var w=c.firstDay?7-c.firstDay:0;d(this).children().slice(w,w+1).addClass(f.sunday)});return h},setMin:function(a,e){o=C(a);e&&m<o&&h.setValue(o);return h},setMax:function(a,
+e){t=C(a);e&&m>t&&h.setValue(t);return h},today:function(){return h.setValue(q)},addDay:function(a){return this.setValue(D,E,G+(a||1))},addMonth:function(a){return this.setValue(D,E+(a||1),G)},addYear:function(a){return this.setValue(D+(a||1),E,G)},hide:function(a){if(v){a=d.Event();a.type="onHide";H.trigger(a);d(document).unbind("click.d").unbind("keydown.d");if(a.isDefaultPrevented())return;k.hide();v=false}return h},getConf:function(){return c},getInput:function(){return b},getCalendar:function(){return k},
+getValue:function(a){return a?T(m,a,c.lang):m},isOpen:function(){return v}});d.each(["onBeforeShow","onShow","change","onHide"],function(a,e){d.isFunction(c[e])&&d(h).bind(e,c[e]);h[e]=function(g){d(h).bind(e,g);return h}});b.bind("focus click",h.show).keydown(function(a){var e=a.keyCode;if(!v&&d(V).index(e)>=0){h.show(a);return a.preventDefault()}return a.shiftKey||a.ctrlKey||a.altKey||e==9?true:a.preventDefault()});C(b.val())&&i(m,c)}d.tools=d.tools||{version:"1.2.4"};var W=[],Q,V=[75,76,38,39,
+74,72,40,37],B={};Q=d.tools.dateinput={conf:{format:"mm/dd/yy",selectors:false,yearRange:[-5,5],lang:"en",offset:[0,0],speed:0,firstDay:0,min:undefined,max:undefined,trigger:false,css:{prefix:"cal",input:"date",root:0,head:0,title:0,prev:0,next:0,month:0,year:0,days:0,body:0,weeks:0,today:0,current:0,week:0,off:0,sunday:0,focus:0,disabled:0,trigger:0}},localize:function(b,c){d.each(c,function(i,p){c[i]=p.split(",")});B[b]=c}};Q.localize("en",{months:"January,February,March,April,May,June,July,August,September,October,November,December",
+shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",days:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",shortDays:"Sun,Mon,Tue,Wed,Thu,Fri,Sat"});var X=/d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*'/g,Y=d("<a/>");d.expr[":"].date=function(b){var c=b.getAttribute("type");return c&&c=="date"||!!d(b).data("dateinput")};d.fn.dateinput=function(b){if(this.data("dateinput"))return this;b=d.extend(true,{},Q.conf,b);d.each(b.css,function(i,p){if(!p&&i!="prefix")b.css[i]=(b.css.prefix||"")+
+(p||i)});var c;this.each(function(){var i=new Z(d(this),b);W.push(i);i=i.getInput().data("dateinput",i);c=c?c.add(i):i});return c?c:this}})(jQuery);
+(function(e){function F(d,a){a=Math.pow(10,a);return Math.round(d*a)/a}function p(d,a){if(a=parseInt(d.css(a),10))return a;return(d=d[0].currentStyle)&&d.width&&parseInt(d.width,10)}function C(d){return(d=d.data("events"))&&d.onSlide}function G(d,a){function h(c,b,f,j){if(f===undefined)f=b/k*z;else if(j)f-=a.min;if(r)f=Math.round(f/r)*r;if(b===undefined||r)b=f*k/z;if(isNaN(f))return g;b=Math.max(0,Math.min(b,k));f=b/k*z;if(j||!n)f+=a.min;if(n)if(j)b=k-b;else f=a.max-f;f=F(f,t);var q=c.type=="click";
+if(D&&l!==undefined&&!q){c.type="onSlide";A.trigger(c,[f,b]);if(c.isDefaultPrevented())return g}j=q?a.speed:0;q=q?function(){c.type="change";A.trigger(c,[f])}:null;if(n){m.animate({top:b},j,q);a.progress&&B.animate({height:k-b+m.width()/2},j)}else{m.animate({left:b},j,q);a.progress&&B.animate({width:b+m.width()/2},j)}l=f;H=b;d.val(f);return g}function s(){if(n=a.vertical||p(i,"height")>p(i,"width")){k=p(i,"height")-p(m,"height");u=i.offset().top+k}else{k=p(i,"width")-p(m,"width");u=i.offset().left}}
+function v(){s();g.setValue(a.value||a.min)}var g=this,o=a.css,i=e("<div><div/><a href='#'/></div>").data("rangeinput",g),n,l,u,k,H;d.before(i);var m=i.addClass(o.slider).find("a").addClass(o.handle),B=i.find("div").addClass(o.progress);e.each("min,max,step,value".split(","),function(c,b){c=d.attr(b);if(parseFloat(c))a[b]=parseFloat(c,10)});var z=a.max-a.min,r=a.step=="any"?0:a.step,t=a.precision;if(t===undefined)try{t=r.toString().split(".")[1].length}catch(I){t=0}if(d.attr("type")=="range"){var w=
+e("<input/>");e.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(c,b){w.attr(b,d.attr(b))});w.val(a.value);d.replaceWith(w);d=w}d.addClass(o.input);var A=e(g).add(d),D=true;e.extend(g,{getValue:function(){return l},setValue:function(c,b){return h(b||e.Event("api"),undefined,c,true)},getConf:function(){return a},getProgress:function(){return B},getHandle:function(){return m},getInput:function(){return d},step:function(c,b){b=b||e.Event();
+var f=a.step=="any"?1:a.step;g.setValue(l+f*(c||1),b)},stepUp:function(c){return g.step(c||1)},stepDown:function(c){return g.step(-c||-1)}});e.each("onSlide,change".split(","),function(c,b){e.isFunction(a[b])&&e(g).bind(b,a[b]);g[b]=function(f){e(g).bind(b,f);return g}});m.drag({drag:false}).bind("dragStart",function(){D=C(e(g))||C(d)}).bind("drag",function(c,b,f){if(d.is(":disabled"))return false;h(c,n?b:f)}).bind("dragEnd",function(c){if(!c.isDefaultPrevented()){c.type="change";A.trigger(c,[l])}}).click(function(c){return c.preventDefault()});
+i.click(function(c){if(d.is(":disabled")||c.target==m[0])return c.preventDefault();s();var b=m.width()/2;h(c,n?k-u-b+c.pageY:c.pageX-u-b)});a.keyboard&&d.keydown(function(c){if(!d.attr("readonly")){var b=c.keyCode,f=e([75,76,38,33,39]).index(b)!=-1,j=e([74,72,40,34,37]).index(b)!=-1;if((f||j)&&!(c.shiftKey||c.altKey||c.ctrlKey)){if(f)g.step(b==33?10:1,c);else if(j)g.step(b==34?-10:-1,c);return c.preventDefault()}}});d.blur(function(c){var b=e(this).val();b!==l&&g.setValue(b,c)});e.extend(d[0],{stepUp:g.stepUp,
+stepDown:g.stepDown});v();k||e(window).load(v)}e.tools=e.tools||{version:"1.2.4"};var E;E=e.tools.rangeinput={conf:{min:0,max:100,step:"any",steps:0,value:0,precision:undefined,vertical:0,keyboard:true,progress:false,speed:100,css:{input:"range",slider:"slider",progress:"progress",handle:"handle"}}};var x,y;e.fn.drag=function(d){document.ondragstart=function(){return false};d=e.extend({x:true,y:true,drag:true},d);x=x||e(document).bind("mousedown mouseup",function(a){var h=e(a.target);if(a.type=="mousedown"&&
+h.data("drag")){var s=h.position(),v=a.pageX-s.left,g=a.pageY-s.top,o=true;x.bind("mousemove.drag",function(i){var n=i.pageX-v;i=i.pageY-g;var l={};if(d.x)l.left=n;if(d.y)l.top=i;if(o){h.trigger("dragStart");o=false}d.drag&&h.css(l);h.trigger("drag",[i,n]);y=h});a.preventDefault()}else try{y&&y.trigger("dragEnd")}finally{x.unbind("mousemove.drag");y=null}});return this.data("drag",true)};e.expr[":"].range=function(d){var a=d.getAttribute("type");return a&&a=="range"||!!e(d).filter("input").data("rangeinput")};
+e.fn.rangeinput=function(d){if(this.data("rangeinput"))return this;d=e.extend(true,{},E.conf,d);var a;this.each(function(){var h=new G(e(this),e.extend(true,{},d));h=h.getInput().data("rangeinput",h);a=a?a.add(h):h});return a?a:this}})(jQuery);
+(function(e){function t(a,b,c){var k=a.offset().top,f=a.offset().left,l=c.position.split(/,?\s+/),p=l[0];l=l[1];k-=b.outerHeight()-c.offset[0];f+=a.outerWidth()+c.offset[1];c=b.outerHeight()+a.outerHeight();if(p=="center")k+=c/2;if(p=="bottom")k+=c;a=a.outerWidth();if(l=="center")f-=(a+b.outerWidth())/2;if(l=="left")f-=a;return{top:k,left:f}}function x(a){function b(){return this.getAttribute("type")==a}b.key="[type="+a+"]";return b}function u(a,b,c){function k(g,d,j){if(!(!c.grouped&&g.length)){var h;
+if(j===false||e.isArray(j)){h=i.messages[d.key||d]||i.messages["*"];h=h[c.lang]||i.messages["*"].en;(d=h.match(/\$\d/g))&&e.isArray(j)&&e.each(d,function(n){h=h.replace(this,j[n])})}else h=j[c.lang]||j;g.push(h)}}var f=this,l=b.add(f);a=a.not(":button, :image, :reset, :submit");e.extend(f,{getConf:function(){return c},getForm:function(){return b},getInputs:function(){return a},reflow:function(){a.each(function(){var g=e(this),d=g.data("msg.el");if(d){g=t(g,d,c);d.css({top:g.top,left:g.left})}});return f},
+invalidate:function(g,d){if(!d){var j=[];e.each(g,function(h,n){h=a.filter("[name='"+h+"']");if(h.length){h.trigger("OI",[n]);j.push({input:h,messages:[n]})}});g=j;d=e.Event()}d.type="onFail";l.trigger(d,[g]);d.isDefaultPrevented()||r[c.effect][0].call(f,g,d);return f},reset:function(g){g=g||a;g.removeClass(c.errorClass).each(function(){var d=e(this).data("msg.el");if(d){d.remove();e(this).data("msg.el",null)}}).unbind(c.errorInputEvent||"");return f},destroy:function(){b.unbind(c.formEvent).unbind("reset.V");
+a.unbind(c.inputEvent||"").unbind("change.V");return f.reset()},checkValidity:function(g,d){g=g||a;g=g.not(":disabled");if(!g.length)return true;d=d||e.Event();d.type="onBeforeValidate";l.trigger(d,[g]);if(d.isDefaultPrevented())return d.result;var j=[],h=c.errorInputEvent+".v";g.not(":radio:not(:checked)").each(function(){var q=[],m=e(this).unbind(h).data("messages",q);e.each(v,function(){var o=this,s=o[0];if(m.filter(s).length){o=o[1].call(f,m,m.val());if(o!==true){d.type="onBeforeFail";l.trigger(d,
+[m,s]);if(d.isDefaultPrevented())return false;var w=m.attr(c.messageAttr);if(w){q=[w];return false}else k(q,s,o)}}});if(q.length){j.push({input:m,messages:q});m.trigger("OI",[q]);c.errorInputEvent&&m.bind(h,function(o){f.checkValidity(m,o)})}if(c.singleError&&j.length)return false});var n=r[c.effect];if(!n)throw'Validator: cannot find effect "'+c.effect+'"';if(j.length){f.invalidate(j,d);return false}else{n[1].call(f,g,d);d.type="onSuccess";l.trigger(d,[g]);g.unbind(h)}return true}});e.each("onBeforeValidate,onBeforeFail,onFail,onSuccess".split(","),
+function(g,d){e.isFunction(c[d])&&e(f).bind(d,c[d]);f[d]=function(j){e(f).bind(d,j);return f}});c.formEvent&&b.bind(c.formEvent,function(g){if(!f.checkValidity(null,g))return g.preventDefault()});b.bind("reset.V",function(){f.reset()});a[0]&&a[0].validity&&a.each(function(){this.oninvalid=function(){return false}});if(b[0])b[0].checkValidity=f.checkValidity;c.inputEvent&&a.bind(c.inputEvent,function(g){f.checkValidity(e(this),g)});a.filter(":checkbox, select").filter("[required]").bind("change.V",
+function(g){var d=e(this);if(this.checked||d.is("select")&&e(this).val())r[c.effect][1].call(f,d,g)});var p=a.filter(":radio").change(function(g){f.checkValidity(p,g)});e(window).resize(function(){f.reflow()})}e.tools=e.tools||{version:"1.2.4"};var y=/\[type=([a-z]+)\]/,z=/^-?[0-9]*(\.[0-9]+)?$/,A=/^([a-z0-9_\.\-\+]+)@([\da-z\.\-]+)\.([a-z\.]{2,6})$/i,B=/^(https?:\/\/)?[\da-z\.\-]+\.[a-z\.]{2,6}[#\?\/\w \.\-=]*$/i,i;i=e.tools.validator={conf:{grouped:false,effect:"default",errorClass:"invalid",inputEvent:null,
+errorInputEvent:"keyup",formEvent:"submit",lang:"en",message:"<div/>",messageAttr:"data-message",messageClass:"error",offset:[0,0],position:"center right",singleError:false,speed:"normal"},messages:{"*":{en:"Please correct this value"}},localize:function(a,b){e.each(b,function(c,k){i.messages[c]=i.messages[c]||{};i.messages[c][a]=k})},localizeFn:function(a,b){i.messages[a]=i.messages[a]||{};e.extend(i.messages[a],b)},fn:function(a,b,c){if(e.isFunction(b))c=b;else{if(typeof b=="string")b={en:b};this.messages[a.key||
+a]=b}if(b=y.exec(a))a=x(b[1]);v.push([a,c])},addEffect:function(a,b,c){r[a]=[b,c]}};var v=[],r={"default":[function(a){var b=this.getConf();e.each(a,function(c,k){c=k.input;c.addClass(b.errorClass);var f=c.data("msg.el");if(!f){f=e(b.message).addClass(b.messageClass).appendTo(document.body);c.data("msg.el",f)}f.css({visibility:"hidden",display:"none"}).find("span").remove();e.each(k.messages,function(l,p){e("<span/>").html(p).appendTo(f)});f.outerWidth()==f.parent().width()&&f.add(f.find("p")).css({display:"inline"});
+k=t(c,f,b);f.css({visibility:"visible",position:"absolute",top:k.top,left:k.left}).fadeIn(b.speed)})},function(a){var b=this.getConf();a.removeClass(b.errorClass).each(function(){var c=e(this).data("msg.el");c&&c.css({visibility:"hidden"})})}]};e.each("email,url,number".split(","),function(a,b){e.expr[":"][b]=function(c){return c.getAttribute("type")===b}});e.fn.oninvalid=function(a){return this[a?"bind":"trigger"]("OI",a)};i.fn(":email","Please enter a valid email address",function(a,b){return!b||
+A.test(b)});i.fn(":url","Please enter a valid URL",function(a,b){return!b||B.test(b)});i.fn(":number","Please enter a numeric value.",function(a,b){return z.test(b)});i.fn("[max]","Please enter a value smaller than $1",function(a,b){if(b===""||e.tools.dateinput&&a.is(":date"))return true;a=a.attr("max");return parseFloat(b)<=parseFloat(a)?true:[a]});i.fn("[min]","Please enter a value larger than $1",function(a,b){if(b===""||e.tools.dateinput&&a.is(":date"))return true;a=a.attr("min");return parseFloat(b)>=
+parseFloat(a)?true:[a]});i.fn("[required]","Please complete this mandatory field.",function(a,b){if(a.is(":checkbox"))return a.is(":checked");return!!b});i.fn("[pattern]",function(a){var b=new RegExp("^"+a.attr("pattern")+"$");return b.test(a.val())});e.fn.validator=function(a){var b=this.data("validator");if(b){b.destroy();this.removeData("validator")}a=e.extend(true,{},i.conf,a);if(this.is("form"))return this.each(function(){var c=e(this);b=new u(c.find(":input"),c,a);c.data("validator",b)});else{b=
+new u(this,this.eq(0).closest("form"),a);return this.data("validator",b)}}})(jQuery);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.validate.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,1131 @@
+/*
+ * jQuery validation plug-in 1.5.5
+ *
+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
+ * http://docs.jquery.com/Plugins/Validation
+ *
+ * Copyright (c) 2006 - 2008 Jörn Zaefferer
+ *
+ * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+(function($) {
+
+$.extend($.fn, {
+ // http://docs.jquery.com/Plugins/Validation/validate
+ validate: function( options ) {
+
+ // if nothing is selected, return nothing; can't chain anyway
+ if (!this.length) {
+ options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
+ return;
+ }
+
+ // check if a validator for this form was already created
+ var validator = $.data(this[0], 'validator');
+ if ( validator ) {
+ return validator;
+ }
+
+ validator = new $.validator( options, this[0] );
+ $.data(this[0], 'validator', validator);
+
+ if ( validator.settings.onsubmit ) {
+
+ // allow suppresing validation by adding a cancel class to the submit button
+ this.find("input, button").filter(".cancel").click(function() {
+ validator.cancelSubmit = true;
+ });
+
+ // when a submitHandler is used, capture the submitting button
+ if (validator.settings.submitHandler) {
+ this.find("input, button").filter(":submit").click(function() {
+ validator.submitButton = this;
+ });
+ }
+
+ // validate the form on submit
+ this.submit( function( event ) {
+ if ( validator.settings.debug )
+ // prevent form submit to be able to see console output
+ event.preventDefault();
+
+ function handle() {
+ if ( validator.settings.submitHandler ) {
+ if (validator.submitButton) {
+ // insert a hidden input as a replacement for the missing submit button
+ var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
+ }
+ validator.settings.submitHandler.call( validator, validator.currentForm );
+ if (validator.submitButton) {
+ // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
+ hidden.remove();
+ }
+ return false;
+ }
+ return true;
+ }
+
+ // prevent submit for invalid forms or custom submit handlers
+ if ( validator.cancelSubmit ) {
+ validator.cancelSubmit = false;
+ return handle();
+ }
+ if ( validator.form() ) {
+ if ( validator.pendingRequest ) {
+ validator.formSubmitted = true;
+ return false;
+ }
+ return handle();
+ } else {
+ validator.focusInvalid();
+ return false;
+ }
+ });
+ }
+
+ return validator;
+ },
+ // http://docs.jquery.com/Plugins/Validation/valid
+ valid: function() {
+ if ( $(this[0]).is('form')) {
+ return this.validate().form();
+ } else {
+ var valid = true;
+ var validator = $(this[0].form).validate();
+ this.each(function() {
+ valid &= validator.element(this);
+ });
+ return valid;
+ }
+ },
+ // attributes: space seperated list of attributes to retrieve and remove
+ removeAttrs: function(attributes) {
+ var result = {},
+ $element = this;
+ $.each(attributes.split(/\s/), function(index, value) {
+ result[value] = $element.attr(value);
+ $element.removeAttr(value);
+ });
+ return result;
+ },
+ // http://docs.jquery.com/Plugins/Validation/rules
+ rules: function(command, argument) {
+ var element = this[0];
+
+ if (command) {
+ var settings = $.data(element.form, 'validator').settings;
+ var staticRules = settings.rules;
+ var existingRules = $.validator.staticRules(element);
+ switch(command) {
+ case "add":
+ $.extend(existingRules, $.validator.normalizeRule(argument));
+ staticRules[element.name] = existingRules;
+ if (argument.messages)
+ settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
+ break;
+ case "remove":
+ if (!argument) {
+ delete staticRules[element.name];
+ return existingRules;
+ }
+ var filtered = {};
+ $.each(argument.split(/\s/), function(index, method) {
+ filtered[method] = existingRules[method];
+ delete existingRules[method];
+ });
+ return filtered;
+ }
+ }
+
+ var data = $.validator.normalizeRules(
+ $.extend(
+ {},
+ $.validator.metadataRules(element),
+ $.validator.classRules(element),
+ $.validator.attributeRules(element),
+ $.validator.staticRules(element)
+ ), element);
+
+ // make sure required is at front
+ if (data.required) {
+ var param = data.required;
+ delete data.required;
+ data = $.extend({required: param}, data);
+ }
+
+ return data;
+ }
+});
+
+// Custom selectors
+$.extend($.expr[":"], {
+ // http://docs.jquery.com/Plugins/Validation/blank
+ blank: function(a) {return !$.trim(a.value);},
+ // http://docs.jquery.com/Plugins/Validation/filled
+ filled: function(a) {return !!$.trim(a.value);},
+ // http://docs.jquery.com/Plugins/Validation/unchecked
+ unchecked: function(a) {return !a.checked;}
+});
+
+// constructor for validator
+$.validator = function( options, form ) {
+ this.settings = $.extend( {}, $.validator.defaults, options );
+ this.currentForm = form;
+ this.init();
+};
+
+$.validator.format = function(source, params) {
+ if ( arguments.length == 1 )
+ return function() {
+ var args = $.makeArray(arguments);
+ args.unshift(source);
+ return $.validator.format.apply( this, args );
+ };
+ if ( arguments.length > 2 && params.constructor != Array ) {
+ params = $.makeArray(arguments).slice(1);
+ }
+ if ( params.constructor != Array ) {
+ params = [ params ];
+ }
+ $.each(params, function(i, n) {
+ source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
+ });
+ return source;
+};
+
+$.extend($.validator, {
+
+ defaults: {
+ messages: {},
+ groups: {},
+ rules: {},
+ errorClass: "error",
+ validClass: "valid",
+ errorElement: "label",
+ focusInvalid: true,
+ errorContainer: $( [] ),
+ errorLabelContainer: $( [] ),
+ onsubmit: true,
+ ignore: [],
+ ignoreTitle: false,
+ onfocusin: function(element) {
+ this.lastActive = element;
+
+ // hide error label and remove error class on focus if enabled
+ if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
+ this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
+ this.errorsFor(element).hide();
+ }
+ },
+ onfocusout: function(element) {
+ if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
+ this.element(element);
+ }
+ },
+ onkeyup: function(element) {
+ if ( element.name in this.submitted || element == this.lastElement ) {
+ this.element(element);
+ }
+ },
+ onclick: function(element) {
+ if ( element.name in this.submitted )
+ this.element(element);
+ },
+ highlight: function( element, errorClass, validClass ) {
+ $(element).addClass(errorClass).removeClass(validClass);
+ },
+ unhighlight: function( element, errorClass, validClass ) {
+ $(element).removeClass(errorClass).addClass(validClass);
+ }
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
+ setDefaults: function(settings) {
+ $.extend( $.validator.defaults, settings );
+ },
+
+ messages: {
+ required: "This field is required.",
+ remote: "Please fix this field.",
+ email: "Please enter a valid email address.",
+ url: "Please enter a valid URL.",
+ date: "Please enter a valid date.",
+ dateISO: "Please enter a valid date (ISO).",
+ dateDE: "Bitte geben Sie ein gültiges Datum ein.",
+ number: "Please enter a valid number.",
+ numberDE: "Bitte geben Sie eine Nummer ein.",
+ digits: "Please enter only digits",
+ creditcard: "Please enter a valid credit card number.",
+ equalTo: "Please enter the same value again.",
+ accept: "Please enter a value with a valid extension.",
+ maxlength: $.validator.format("Please enter no more than {0} characters."),
+ minlength: $.validator.format("Please enter at least {0} characters."),
+ rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
+ range: $.validator.format("Please enter a value between {0} and {1}."),
+ max: $.validator.format("Please enter a value less than or equal to {0}."),
+ min: $.validator.format("Please enter a value greater than or equal to {0}.")
+ },
+
+ autoCreateRanges: false,
+
+ prototype: {
+
+ init: function() {
+ this.labelContainer = $(this.settings.errorLabelContainer);
+ this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
+ this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
+ this.submitted = {};
+ this.valueCache = {};
+ this.pendingRequest = 0;
+ this.pending = {};
+ this.invalid = {};
+ this.reset();
+
+ var groups = (this.groups = {});
+ $.each(this.settings.groups, function(key, value) {
+ $.each(value.split(/\s/), function(index, name) {
+ groups[name] = key;
+ });
+ });
+ var rules = this.settings.rules;
+ $.each(rules, function(key, value) {
+ rules[key] = $.validator.normalizeRule(value);
+ });
+
+ function delegate(event) {
+ var validator = $.data(this[0].form, "validator");
+ validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
+ }
+ $(this.currentForm)
+ .delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
+ .delegate("click", ":radio, :checkbox", delegate);
+
+ if (this.settings.invalidHandler)
+ $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/form
+ form: function() {
+ this.checkForm();
+ $.extend(this.submitted, this.errorMap);
+ this.invalid = $.extend({}, this.errorMap);
+ if (!this.valid())
+ $(this.currentForm).triggerHandler("invalid-form", [this]);
+ this.showErrors();
+ return this.valid();
+ },
+
+ checkForm: function() {
+ this.prepareForm();
+ for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
+ this.check( elements[i] );
+ }
+ return this.valid();
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/element
+ element: function( element ) {
+ element = this.clean( element );
+ this.lastElement = element;
+ this.prepareElement( element );
+ this.currentElements = $(element);
+ var result = this.check( element );
+ if ( result ) {
+ delete this.invalid[element.name];
+ } else {
+ this.invalid[element.name] = true;
+ }
+ if ( !this.numberOfInvalids() ) {
+ // Hide error containers on last error
+ this.toHide = this.toHide.add( this.containers );
+ }
+ this.showErrors();
+ return result;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/showErrors
+ showErrors: function(errors) {
+ if(errors) {
+ // add items to error list and map
+ $.extend( this.errorMap, errors );
+ this.errorList = [];
+ for ( var name in errors ) {
+ this.errorList.push({
+ message: errors[name],
+ element: this.findByName(name)[0]
+ });
+ }
+ // remove items from success list
+ this.successList = $.grep( this.successList, function(element) {
+ return !(element.name in errors);
+ });
+ }
+ this.settings.showErrors
+ ? this.settings.showErrors.call( this, this.errorMap, this.errorList )
+ : this.defaultShowErrors();
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/resetForm
+ resetForm: function() {
+ if ( $.fn.resetForm )
+ $( this.currentForm ).resetForm();
+ this.submitted = {};
+ this.prepareForm();
+ this.hideErrors();
+ this.elements().removeClass( this.settings.errorClass );
+ },
+
+ numberOfInvalids: function() {
+ return this.objectLength(this.invalid);
+ },
+
+ objectLength: function( obj ) {
+ var count = 0;
+ for ( var i in obj )
+ count++;
+ return count;
+ },
+
+ hideErrors: function() {
+ this.addWrapper( this.toHide ).hide();
+ },
+
+ valid: function() {
+ return this.size() == 0;
+ },
+
+ size: function() {
+ return this.errorList.length;
+ },
+
+ focusInvalid: function() {
+ if( this.settings.focusInvalid ) {
+ try {
+ $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
+ } catch(e) {
+ // ignore IE throwing errors when focusing hidden elements
+ }
+ }
+ },
+
+ findLastActive: function() {
+ var lastActive = this.lastActive;
+ return lastActive && $.grep(this.errorList, function(n) {
+ return n.element.name == lastActive.name;
+ }).length == 1 && lastActive;
+ },
+
+ elements: function() {
+ var validator = this,
+ rulesCache = {};
+
+ // select all valid inputs inside the form (no submit or reset buttons)
+ // workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
+ return $([]).add(this.currentForm.elements)
+ .filter(":input")
+ .not(":submit, :reset, :image, [disabled]")
+ .not( this.settings.ignore )
+ .filter(function() {
+ !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
+
+ // select only the first element for each name, and only those with rules specified
+ if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
+ return false;
+
+ rulesCache[this.name] = true;
+ return true;
+ });
+ },
+
+ clean: function( selector ) {
+ return $( selector )[0];
+ },
+
+ errors: function() {
+ return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
+ },
+
+ reset: function() {
+ this.successList = [];
+ this.errorList = [];
+ this.errorMap = {};
+ this.toShow = $([]);
+ this.toHide = $([]);
+ this.formSubmitted = false;
+ this.currentElements = $([]);
+ },
+
+ prepareForm: function() {
+ this.reset();
+ this.toHide = this.errors().add( this.containers );
+ },
+
+ prepareElement: function( element ) {
+ this.reset();
+ this.toHide = this.errorsFor(element);
+ },
+
+ check: function( element ) {
+ element = this.clean( element );
+
+ // if radio/checkbox, validate first element in group instead
+ if (this.checkable(element)) {
+ element = this.findByName( element.name )[0];
+ }
+
+ var rules = $(element).rules();
+ var dependencyMismatch = false;
+ for( method in rules ) {
+ var rule = { method: method, parameters: rules[method] };
+ try {
+ var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
+
+ // if a method indicates that the field is optional and therefore valid,
+ // don't mark it as valid when there are no other rules
+ if ( result == "dependency-mismatch" ) {
+ dependencyMismatch = true;
+ continue;
+ }
+ dependencyMismatch = false;
+
+ if ( result == "pending" ) {
+ this.toHide = this.toHide.not( this.errorsFor(element) );
+ return;
+ }
+
+ if( !result ) {
+ this.formatAndAdd( element, rule );
+ return false;
+ }
+ } catch(e) {
+ this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
+ + ", check the '" + rule.method + "' method");
+ throw e;
+ }
+ }
+ if (dependencyMismatch)
+ return;
+ if ( this.objectLength(rules) )
+ this.successList.push(element);
+ return true;
+ },
+
+ // return the custom message for the given element and validation method
+ // specified in the element's "messages" metadata
+ customMetaMessage: function(element, method) {
+ if (!$.metadata)
+ return;
+
+ var meta = this.settings.meta
+ ? $(element).metadata()[this.settings.meta]
+ : $(element).metadata();
+
+ return meta && meta.messages && meta.messages[method];
+ },
+
+ // return the custom message for the given element name and validation method
+ customMessage: function( name, method ) {
+ var m = this.settings.messages[name];
+ return m && (m.constructor == String
+ ? m
+ : m[method]);
+ },
+
+ // return the first defined argument, allowing empty strings
+ findDefined: function() {
+ for(var i = 0; i < arguments.length; i++) {
+ if (arguments[i] !== undefined)
+ return arguments[i];
+ }
+ return undefined;
+ },
+
+ defaultMessage: function( element, method) {
+ return this.findDefined(
+ this.customMessage( element.name, method ),
+ this.customMetaMessage( element, method ),
+ // title is never undefined, so handle empty string as undefined
+ !this.settings.ignoreTitle && element.title || undefined,
+ $.validator.messages[method],
+ "<strong>Warning: No message defined for " + element.name + "</strong>"
+ );
+ },
+
+ formatAndAdd: function( element, rule ) {
+ var message = this.defaultMessage( element, rule.method );
+ if ( typeof message == "function" )
+ message = message.call(this, rule.parameters, element);
+ this.errorList.push({
+ message: message,
+ element: element
+ });
+ this.errorMap[element.name] = message;
+ this.submitted[element.name] = message;
+ },
+
+ addWrapper: function(toToggle) {
+ if ( this.settings.wrapper )
+ toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
+ return toToggle;
+ },
+
+ defaultShowErrors: function() {
+ for ( var i = 0; this.errorList[i]; i++ ) {
+ var error = this.errorList[i];
+ this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
+ this.showLabel( error.element, error.message );
+ }
+ if( this.errorList.length ) {
+ this.toShow = this.toShow.add( this.containers );
+ }
+ if (this.settings.success) {
+ for ( var i = 0; this.successList[i]; i++ ) {
+ this.showLabel( this.successList[i] );
+ }
+ }
+ if (this.settings.unhighlight) {
+ for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
+ this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
+ }
+ }
+ this.toHide = this.toHide.not( this.toShow );
+ this.hideErrors();
+ this.addWrapper( this.toShow ).show();
+ },
+
+ validElements: function() {
+ return this.currentElements.not(this.invalidElements());
+ },
+
+ invalidElements: function() {
+ return $(this.errorList).map(function() {
+ return this.element;
+ });
+ },
+
+ showLabel: function(element, message) {
+ var label = this.errorsFor( element );
+ if ( label.length ) {
+ // refresh error/success class
+ label.removeClass().addClass( this.settings.errorClass );
+
+ // check if we have a generated label, replace the message then
+ label.attr("generated") && label.html(message);
+ } else {
+ // create label
+ label = $("<" + this.settings.errorElement + "/>")
+ .attr({"for": this.idOrName(element), generated: true})
+ .addClass(this.settings.errorClass)
+ .html(message || "");
+ if ( this.settings.wrapper ) {
+ // make sure the element is visible, even in IE
+ // actually showing the wrapped element is handled elsewhere
+ label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
+ }
+ if ( !this.labelContainer.append(label).length )
+ this.settings.errorPlacement
+ ? this.settings.errorPlacement(label, $(element) )
+ : label.insertAfter(element);
+ }
+ if ( !message && this.settings.success ) {
+ label.text("");
+ typeof this.settings.success == "string"
+ ? label.addClass( this.settings.success )
+ : this.settings.success( label );
+ }
+ this.toShow = this.toShow.add(label);
+ },
+
+ errorsFor: function(element) {
+ return this.errors().filter("[for='" + this.idOrName(element) + "']");
+ },
+
+ idOrName: function(element) {
+ return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
+ },
+
+ checkable: function( element ) {
+ return /radio|checkbox/i.test(element.type);
+ },
+
+ findByName: function( name ) {
+ // select by name and filter by form for performance over form.find("[name=...]")
+ var form = this.currentForm;
+ return $(document.getElementsByName(name)).map(function(index, element) {
+ return element.form == form && element.name == name && element || null;
+ });
+ },
+
+ getLength: function(value, element) {
+ switch( element.nodeName.toLowerCase() ) {
+ case 'select':
+ return $("option:selected", element).length;
+ case 'input':
+ if( this.checkable( element) )
+ return this.findByName(element.name).filter(':checked').length;
+ }
+ return value.length;
+ },
+
+ depend: function(param, element) {
+ return this.dependTypes[typeof param]
+ ? this.dependTypes[typeof param](param, element)
+ : true;
+ },
+
+ dependTypes: {
+ "boolean": function(param, element) {
+ return param;
+ },
+ "string": function(param, element) {
+ return !!$(param, element.form).length;
+ },
+ "function": function(param, element) {
+ return param(element);
+ }
+ },
+
+ optional: function(element) {
+ return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
+ },
+
+ startRequest: function(element) {
+ if (!this.pending[element.name]) {
+ this.pendingRequest++;
+ this.pending[element.name] = true;
+ }
+ },
+
+ stopRequest: function(element, valid) {
+ this.pendingRequest--;
+ // sometimes synchronization fails, make sure pendingRequest is never < 0
+ if (this.pendingRequest < 0)
+ this.pendingRequest = 0;
+ delete this.pending[element.name];
+ if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
+ $(this.currentForm).submit();
+ } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
+ $(this.currentForm).triggerHandler("invalid-form", [this]);
+ }
+ },
+
+ previousValue: function(element) {
+ return $.data(element, "previousValue") || $.data(element, "previousValue", previous = {
+ old: null,
+ valid: true,
+ message: this.defaultMessage( element, "remote" )
+ });
+ }
+
+ },
+
+ classRuleSettings: {
+ required: {required: true},
+ email: {email: true},
+ url: {url: true},
+ date: {date: true},
+ dateISO: {dateISO: true},
+ dateDE: {dateDE: true},
+ number: {number: true},
+ numberDE: {numberDE: true},
+ digits: {digits: true},
+ creditcard: {creditcard: true}
+ },
+
+ addClassRules: function(className, rules) {
+ className.constructor == String ?
+ this.classRuleSettings[className] = rules :
+ $.extend(this.classRuleSettings, className);
+ },
+
+ classRules: function(element) {
+ var rules = {};
+ var classes = $(element).attr('class');
+ classes && $.each(classes.split(' '), function() {
+ if (this in $.validator.classRuleSettings) {
+ $.extend(rules, $.validator.classRuleSettings[this]);
+ }
+ });
+ return rules;
+ },
+
+ attributeRules: function(element) {
+ var rules = {};
+ var $element = $(element);
+
+ for (method in $.validator.methods) {
+ var value = $element.attr(method);
+ if (value) {
+ rules[method] = value;
+ }
+ }
+
+ // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
+ if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
+ delete rules.maxlength;
+ }
+
+ return rules;
+ },
+
+ metadataRules: function(element) {
+ if (!$.metadata) return {};
+
+ var meta = $.data(element.form, 'validator').settings.meta;
+ return meta ?
+ $(element).metadata()[meta] :
+ $(element).metadata();
+ },
+
+ staticRules: function(element) {
+ var rules = {};
+ var validator = $.data(element.form, 'validator');
+ if (validator.settings.rules) {
+ rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
+ }
+ return rules;
+ },
+
+ normalizeRules: function(rules, element) {
+ // handle dependency check
+ $.each(rules, function(prop, val) {
+ // ignore rule when param is explicitly false, eg. required:false
+ if (val === false) {
+ delete rules[prop];
+ return;
+ }
+ if (val.param || val.depends) {
+ var keepRule = true;
+ switch (typeof val.depends) {
+ case "string":
+ keepRule = !!$(val.depends, element.form).length;
+ break;
+ case "function":
+ keepRule = val.depends.call(element, element);
+ break;
+ }
+ if (keepRule) {
+ rules[prop] = val.param !== undefined ? val.param : true;
+ } else {
+ delete rules[prop];
+ }
+ }
+ });
+
+ // evaluate parameters
+ $.each(rules, function(rule, parameter) {
+ rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
+ });
+
+ // clean number parameters
+ $.each(['minlength', 'maxlength', 'min', 'max'], function() {
+ if (rules[this]) {
+ rules[this] = Number(rules[this]);
+ }
+ });
+ $.each(['rangelength', 'range'], function() {
+ if (rules[this]) {
+ rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
+ }
+ });
+
+ if ($.validator.autoCreateRanges) {
+ // auto-create ranges
+ if (rules.min && rules.max) {
+ rules.range = [rules.min, rules.max];
+ delete rules.min;
+ delete rules.max;
+ }
+ if (rules.minlength && rules.maxlength) {
+ rules.rangelength = [rules.minlength, rules.maxlength];
+ delete rules.minlength;
+ delete rules.maxlength;
+ }
+ }
+
+ // To support custom messages in metadata ignore rule methods titled "messages"
+ if (rules.messages) {
+ delete rules.messages
+ }
+
+ return rules;
+ },
+
+ // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
+ normalizeRule: function(data) {
+ if( typeof data == "string" ) {
+ var transformed = {};
+ $.each(data.split(/\s/), function() {
+ transformed[this] = true;
+ });
+ data = transformed;
+ }
+ return data;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Validator/addMethod
+ addMethod: function(name, method, message) {
+ $.validator.methods[name] = method;
+ $.validator.messages[name] = message || $.validator.messages[name];
+ if (method.length < 3) {
+ $.validator.addClassRules(name, $.validator.normalizeRule(name));
+ }
+ },
+
+ methods: {
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/required
+ required: function(value, element, param) {
+ // check if dependency is met
+ if ( !this.depend(param, element) )
+ return "dependency-mismatch";
+ switch( element.nodeName.toLowerCase() ) {
+ case 'select':
+ var options = $("option:selected", element);
+ return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
+ case 'input':
+ if ( this.checkable(element) )
+ return this.getLength(value, element) > 0;
+ default:
+ return $.trim(value).length > 0;
+ }
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/remote
+ remote: function(value, element, param) {
+ if ( this.optional(element) )
+ return "dependency-mismatch";
+
+ var previous = this.previousValue(element);
+
+ if (!this.settings.messages[element.name] )
+ this.settings.messages[element.name] = {};
+ this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
+
+ param = typeof param == "string" && {url:param} || param;
+
+ if ( previous.old !== value ) {
+ previous.old = value;
+ var validator = this;
+ this.startRequest(element);
+ var data = {};
+ data[element.name] = value;
+ $.ajax($.extend(true, {
+ url: param,
+ mode: "abort",
+ port: "validate" + element.name,
+ dataType: "json",
+ data: data,
+ success: function(response) {
+ var valid = response === true;
+ if ( valid ) {
+ var submitted = validator.formSubmitted;
+ validator.prepareElement(element);
+ validator.formSubmitted = submitted;
+ validator.successList.push(element);
+ validator.showErrors();
+ } else {
+ var errors = {};
+ errors[element.name] = previous.message = response || validator.defaultMessage( element, "remote" );
+ validator.showErrors(errors);
+ }
+ previous.valid = valid;
+ validator.stopRequest(element, valid);
+ }
+ }, param));
+ return "pending";
+ } else if( this.pending[element.name] ) {
+ return "pending";
+ }
+ return previous.valid;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/minlength
+ minlength: function(value, element, param) {
+ return this.optional(element) || this.getLength($.trim(value), element) >= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/maxlength
+ maxlength: function(value, element, param) {
+ return this.optional(element) || this.getLength($.trim(value), element) <= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/rangelength
+ rangelength: function(value, element, param) {
+ var length = this.getLength($.trim(value), element);
+ return this.optional(element) || ( length >= param[0] && length <= param[1] );
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/min
+ min: function( value, element, param ) {
+ return this.optional(element) || value >= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/max
+ max: function( value, element, param ) {
+ return this.optional(element) || value <= param;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/range
+ range: function( value, element, param ) {
+ return this.optional(element) || ( value >= param[0] && value <= param[1] );
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/email
+ email: function(value, element) {
+ // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
+ return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/url
+ url: function(value, element) {
+ // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
+ return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/date
+ date: function(value, element) {
+ return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/dateISO
+ dateISO: function(value, element) {
+ return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/dateDE
+ dateDE: function(value, element) {
+ return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/number
+ number: function(value, element) {
+ return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/numberDE
+ numberDE: function(value, element) {
+ return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/digits
+ digits: function(value, element) {
+ return this.optional(element) || /^\d+$/.test(value);
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/creditcard
+ // based on http://en.wikipedia.org/wiki/Luhn
+ creditcard: function(value, element) {
+ if ( this.optional(element) )
+ return "dependency-mismatch";
+ // accept only digits and dashes
+ if (/[^0-9-]+/.test(value))
+ return false;
+ var nCheck = 0,
+ nDigit = 0,
+ bEven = false;
+
+ value = value.replace(/\D/g, "");
+
+ for (n = value.length - 1; n >= 0; n--) {
+ var cDigit = value.charAt(n);
+ var nDigit = parseInt(cDigit, 10);
+ if (bEven) {
+ if ((nDigit *= 2) > 9)
+ nDigit -= 9;
+ }
+ nCheck += nDigit;
+ bEven = !bEven;
+ }
+
+ return (nCheck % 10) == 0;
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/accept
+ accept: function(value, element, param) {
+ param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
+ return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
+ },
+
+ // http://docs.jquery.com/Plugins/Validation/Methods/equalTo
+ equalTo: function(value, element, param) {
+ return value == $(param).val();
+ }
+
+ }
+
+});
+
+// deprecated, use $.validator.format instead
+$.format = $.validator.format;
+
+})(jQuery);
+
+// ajax mode: abort
+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
+;(function($) {
+ var ajax = $.ajax;
+ var pendingRequests = {};
+ $.ajax = function(settings) {
+ // create settings for compatibility with ajaxSetup
+ settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
+ var port = settings.port;
+ if (settings.mode == "abort") {
+ if ( pendingRequests[port] ) {
+ pendingRequests[port].abort();
+ }
+ return (pendingRequests[port] = ajax.apply(this, arguments));
+ }
+ return ajax.apply(this, arguments);
+ };
+})(jQuery);
+
+// provides cross-browser focusin and focusout events
+// IE has native support, in other browsers, use event caputuring (neither bubbles)
+
+// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
+// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
+
+// provides triggerEvent(type: String, target: Element) to trigger delegated events
+;(function($) {
+ $.each({
+ focus: 'focusin',
+ blur: 'focusout'
+ }, function( original, fix ){
+ $.event.special[fix] = {
+ setup:function() {
+ if ( $.browser.msie ) return false;
+ this.addEventListener( original, $.event.special[fix].handler, true );
+ },
+ teardown:function() {
+ if ( $.browser.msie ) return false;
+ this.removeEventListener( original,
+ $.event.special[fix].handler, true );
+ },
+ handler: function(e) {
+ arguments[0] = $.event.fix(e);
+ arguments[0].type = fix;
+ return $.event.handle.apply(this, arguments);
+ }
+ };
+ });
+ $.extend($.fn, {
+ delegate: function(type, delegate, handler) {
+ return this.bind(type, function(event) {
+ var target = $(event.target);
+ if (target.is(delegate)) {
+ return handler.apply(target, arguments);
+ }
+ });
+ },
+ triggerEvent: function(type, target) {
+ return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
+ }
+ })
+})(jQuery);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/all_tags.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,102 @@
+{% extends "hdabo_base.html" %}
+ {% block title %}HDA - BO : Tous les tags{% endblock %}
+
+ {% block js_import %}
+ {{block.super}}
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
+ {% endblock %}
+
+ {% block js_declaration %}
+ {{block.super}}
+ <script type="text/javascript">
+
+ var global_csrf_token = "{{ csrf_token }}";
+ var static_url = "{{STATIC_URL}}";
+ var tag_up_down_url = "{% url 'hdabo.views.tag_up_down' %}";
+ var remove_tag_from_list_url = "{% url 'hdabo.views.remove_tag_from_list' %}";
+ var modify_tag_url = "{% url 'hdabo.views.modify_tag' %}";
+ var reset_wp_info_url = "{% url 'hdabo.views.reset_wikipedia_info' %}";
+ var add_tag_url = "{% url 'hdabo.views.add_tag' %}";
+ var remove_wp_link_url = "{% url 'hdabo.views.remove_wp_link' %}";
+ var update_tag_alias_url = "{% url 'hdabo.views.update_tag_alias' %}";
+ var update_tag_category_url = "{% url 'hdabo.views.update_tag_category' %}";
+ var categories_list = '{{categories|safe}}';
+
+ $(document).ready(function(){
+ init_tags_events();
+ });
+ </script>
+ {% endblock %}
+
+ {% block css_import %}
+ {{block.super}}
+ <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
+ {% endblock %}
+
+ {% block css_declaration %}
+ {{block.super}}
+ <style type="text/css">
+ .ui-autocomplete {
+ max-height: 100px;
+ overflow-y: auto;
+ /* prevent horizontal scrollbar */
+ overflow-x: hidden;
+ /* add padding to account for vertical scrollbar */
+ padding-right: 20px;
+ }
+ </style>
+ {% endblock %}
+
+
+ {% block content %}
+ {{block.super}}
+ <form method="POST" action="{% url 'hdabo.views.all_tags' %}">
+ {% csrf_token %}
+ <p>Chercher :
+ {% for s in search_def %}
+ <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort searched=s.1 %}">{{s.0}}</a>
+ {% endfor %}
+ <input type="text" name="searched" value="{% if searched %}{{searched}}{% endif %}" id="searched" />
+ </p>
+ </form>
+ <p>Tags {{ current_page.start_index }} à {{ current_page.end_index }} sur {{ nb_total }}</p>
+ <div id="count_nav_top"><p>
+ {% if searched and searched != "" %}
+ <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort searched=searched %}"><<</a>
+ <a href="{% url 'hdabo.views.all_tags' num_page=prev_page nb_by_page=nb_by_page sort=sort searched=searched %}"><</a>
+ {{ num_page }}/{{ last_page }}
+ <a href="{% url 'hdabo.views.all_tags' num_page=next_page nb_by_page=nb_by_page sort=sort searched=searched %}">></a>
+ <a href="{% url 'hdabo.views.all_tags' num_page=last_page nb_by_page=nb_by_page sort=sort searched=searched %}">>></a></p>
+ {% else %}
+ <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort %}"><<</a>
+ <a href="{% url 'hdabo.views.all_tags' num_page=prev_page nb_by_page=nb_by_page sort=sort %}"><</a>
+ {{ num_page }}/{{ last_page }}
+ <a href="{% url 'hdabo.views.all_tags' num_page=next_page nb_by_page=nb_by_page sort=sort %}">></a>
+ <a href="{% url 'hdabo.views.all_tags' num_page=last_page nb_by_page=nb_by_page sort=sort %}">>></a>
+ {% endif %}</p>
+ </div>
+ <input type="hidden" name="num_page" value="{{num_page}}" id="num_page" />
+ <input type="hidden" name="nb_by_page" value="{{nb_by_page}}" id="nb_by_page" />
+ <input type="hidden" name="searched_str" value="{% if searched %}{{searched}}{% endif %}" id="searched_str" />
+ <input type="hidden" name="sort" value="{% if sort %}{{sort}}{% endif %}" id="sort" />
+ <div id="tag_table_container">
+ {% include "partial/all_tags_table.html" %}
+ </div>
+ <div id="count_nav_bottom"><p>
+ {% if searched and searched != "" %}
+ <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort searched=searched %}"><<</a>
+ <a href="{% url 'hdabo.views.all_tags' num_page=prev_page nb_by_page=nb_by_page sort=sort searched=searched %}"><</a>
+ {{ num_page }}/{{ last_page }}
+ <a href="{% url 'hdabo.views.all_tags' num_page=next_page nb_by_page=nb_by_page sort=sort searched=searched %}">></a>
+ <a href="{% url 'hdabo.views.all_tags' num_page=last_page nb_by_page=nb_by_page sort=sort searched=searched %}">>></a></p>
+ {% else %}
+ <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort %}"><<</a>
+ <a href="{% url 'hdabo.views.all_tags' num_page=prev_page nb_by_page=nb_by_page sort=sort %}"><</a>
+ {{ num_page }}/{{ last_page }}
+ <a href="{% url 'hdabo.views.all_tags' num_page=next_page nb_by_page=nb_by_page sort=sort %}">></a>
+ <a href="{% url 'hdabo.views.all_tags' num_page=last_page nb_by_page=nb_by_page sort=sort %}">>></a>
+ {% endif %}</p>
+ </div>
+ {% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/generic_sheet.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,83 @@
+{% extends "hdabo_base.html" %}
+ {% block title %}HDA - BO : Fiches pour {{ orga_name }}{% endblock %}
+
+ {% block js_import %}
+ {{block.super}}
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
+ {% endblock %}
+
+ {% block js_declaration %}
+ {{block.super}}
+ {% if valid != "2" %}
+ <script type="text/javascript">
+
+ var global_csrf_token = "{{ csrf_token }}";
+ var static_url = "{{STATIC_URL}}";
+ var tag_up_down_url = "{% url 'hdabo.views.tag_up_down' %}";
+ var remove_tag_from_list_url = "{% url 'hdabo.views.remove_tag_from_list' %}";
+ var modify_tag_url = "{% url 'hdabo.views.modify_tag_datasheet' %}";
+ var reset_wp_info_url = "{% url 'hdabo.views.reset_wikipedia_info' %}";
+ var reorder_tag_datasheet_url = "{% url 'hdabo.views.reorder_tag_datasheet' %}";
+ var add_tag_url = "{% url 'hdabo.views.add_tag' %}";
+ var remove_wp_link_url = "{% url 'hdabo.views.remove_wp_link' %}";
+ var validate_datasheet_url = "{% url 'hdabo.views.validate_datasheet' %}";
+ var update_tag_alias_url = "{% url 'hdabo.views.update_tag_alias' %}";
+ var update_tag_category_url = "{% url 'hdabo.views.update_tag_category' %}";
+ var categories_list = '{{categories|safe}}';
+
+ $(document).ready(function(){
+ init_tags_events();
+ init_datasheet_events();
+ });
+ </script>
+ {% endif %}
+ {% endblock %}
+
+ {% block css_import %}
+ {{block.super}}
+ <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
+ {% endblock %}
+
+ {% block css_declaration %}
+ {{block.super}}
+ <style type="text/css">
+ .ui-autocomplete {
+ max-height: 100px;
+ overflow-y: auto;
+ /* prevent horizontal scrollbar */
+ overflow-x: hidden;
+ /* add padding to account for vertical scrollbar */
+ padding-right: 20px;
+ }
+ </style>
+ {% endblock %}
+
+
+ {% block content %}
+ {{block.super}}
+ <p>
+ {% if tag %} Fiche(s) concernées par le tag <b>{{ tag.label }}</b>
+ {% else %} Fiche(s) {% if valid %}<b>validées</b>{% else %}<b>non validées</b>{% endif %} pour l'organisation <b>{{ orga_name }}</b>
+ {% endif %} : {{nb_sheets}} fiche(s)</p>
+ <div id="count_nav_top">
+ <p><a href="{% url 'hdabo.views.display_datasheet' ds_id=zero_id %}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index=0"><<</a>
+ <a href="{% url 'hdabo.views.display_datasheet' ds_id=prev_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{prev_index}}"><</a>
+ {{displayed_index}}/{{nb_sheets}}
+ <a href="{% url 'hdabo.views.display_datasheet' ds_id=next_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{next_index}}">></a>
+ <a href="{% url 'hdabo.views.display_datasheet' ds_id=last_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{last_index}}">>></a></p>
+ </div>
+ <table>
+ <tr class="imageline {% cycle 'hdabosimpleevenline' 'hdabosimpleoddline' %}"><td>
+ {% include "partial/one_sheet.html" %}
+ </td></tr>
+ </table>
+ <div id="count_nav_bottom">
+ <p><a href="{% url 'hdabo.views.display_datasheet' ds_id=zero_id %}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index=0"><<</a>
+ <a href="{% url 'hdabo.views.display_datasheet' ds_id=prev_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{prev_index}}"><</a>
+ {{displayed_index}}/{{nb_sheets}}
+ <a href="{% url 'hdabo.views.display_datasheet' ds_id=next_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{next_index}}">></a>
+ <a href="{% url 'hdabo.views.display_datasheet' ds_id=last_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{last_index}}">>></a></p>
+ </div>
+ {% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/hdabo_base.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,86 @@
+{% load i18n %}
+{% comment %}{% load logintag %}{% endcomment %}
+{% comment %}{% load navigation %}{% endcomment %}
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
+<head>
+{% block head %}
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
+ <link rel="SHORTCUT ICON" href="{{STATIC_URL}}hdabo/img/favicon.ico" />
+ <title>{% block title %}HDA-BO{% endblock %}</title>
+ {% block js_import %}
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/hdabo.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.min.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.nyroModal.min.js"></script>
+ <!--[if IE 6]>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.nyroModal-ie6.min.js"></script>
+ <![endif]-->
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.qtip.min.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.validate.js" ></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.textchange.min.js" ></script>
+ {% endblock %}
+
+ {% block css_declaration %}
+ <style type="text/css">
+ .rounded {
+ behavior:url("{{STATIC_URL}}hdabo/css/border-radius.htc");
+ }
+ </style>
+ {% endblock %}
+
+ {% block css_import %}
+
+ <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/style.css" type="text/css"/>
+ <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/nyroModal.css" type="text/css"/>
+ {% endblock %}
+
+ {% block js_declaration %}
+ {% endblock %}
+
+{% endblock %}
+</head>
+<body>
+{% block body %}
+<div class="container">
+<div id="header">
+ {% block header %}
+ <div id="header_left">
+ <p><a href="{% url 'hdabo.views.home' %}">HDA<span class="hda_blue">BO</span></a></p>
+ </div>
+ {% endblock %}
+</div>
+<div id="content" class="span-24 last">
+ <div id="toolbar">
+ {% block toolbar %}
+ {% if user.is_authenticated %}
+ <ul><li><a href="{% url 'hdabo.views.home' %}">Home</a></li>
+ <li><a href="{% url 'hdabo.views.all_tags' %}">Tous les tags</a></li>
+ <li><a href="{% url 'haystack_search' %}">Recherche</a></li>
+ <li><span style="float:right;">{{user.username}} | <a href="{% url 'django.contrib.auth.views.logout_then_login' %}" >Se déconnecter</a>{% if user.is_staff %} | <a href="{% url 'admin:index' %}" >admin</a>{% endif %}</span></li>
+ </ul>
+ {% endif %}
+ {% endblock %}
+ </div>
+ <div id="inner_content">
+ {% block content %}
+ {% endblock %}
+ </div>
+</div>
+<div id="footer" class="span-24 last">
+ {% block footer %}
+ <div class="footer_img">
+ <a href="http://www.iri.centrepompidou.fr" target="_blank"><img src="{{STATIC_URL}}hdabo/img/logo_IRI_footer.png" alt="Logo IRI" /></a>
+ </div>
+ <div style="float: right; text-align: right;" class="small" id="copyright_version">
+ <div>©2011 <a style="text-decoration: none; color: #4F5155;" href="http://www.iri.centrepompidou.fr" target="_blank">IRI</a></div>
+ <div id="versionwrapper"><span class="version" id="version">{{VERSION}}</span></div>
+ </div>
+ {% endblock %}
+</div>
+</div>
+{% endblock %}
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/list_for_orga.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,86 @@
+{% extends "hdabo_base.html" %}
+ {% block title %}HDA - BO : Fiches pour {{ orga_name }}{% endblock %}
+
+ {% block js_import %}
+ {{block.super}}
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
+ <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
+ {% endblock %}
+
+ {% block js_declaration %}
+ {{block.super}}
+ {% if valid != "2" %}
+ <script type="text/javascript">
+
+ var global_csrf_token = "{{ csrf_token }}";
+ var static_url = "{{STATIC_URL}}";
+ var tag_up_down_url = "{% url hdabo.views.tag_up_down %}";
+ var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
+ var modify_tag_url = "{% url hdabo.views.modify_tag_datasheet %}";
+ var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
+ var add_tag_url = "{% url hdabo.views.add_tag %}";
+ var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
+ var validate_datasheet_url = "{% url hdabo.views.validate_datasheet %}";
+ var update_tag_alias_url = "{% url hdabo.views.update_tag_alias %}";
+ var update_tag_category_url = "{% url hdabo.views.update_tag_category %}";
+ var categories_list = '{{categories|safe}}';
+
+ $(document).ready(function(){
+ init_tags_events();
+ init_datasheet_events();
+ });
+ </script>
+ {% endif %}
+ {% endblock %}
+
+ {% block css_import %}
+ {{block.super}}
+ <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
+ {% endblock %}
+
+ {% block css_declaration %}
+ {{block.super}}
+ <style type="text/css">
+ .ui-autocomplete {
+ max-height: 100px;
+ overflow-y: auto;
+ /* prevent horizontal scrollbar */
+ overflow-x: hidden;
+ /* add padding to account for vertical scrollbar */
+ padding-right: 20px;
+ }
+ </style>
+ {% endblock %}
+
+
+ {% block content %}
+ {{block.super}}
+ <p>Fiche(s) {% if valid == "1" %}<b>validées</b>{% else %}{% if valid != "2" %}<b>non validées</b>{% endif %}{% endif %}
+ pour l'organisation <b>{{ orga_name }}</b> : {{nb_sheets}} fiche(s)</p>
+ {% if valid != "2" %}
+ <div id="count_nav_top">
+ <p><a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=0 %}"><<</a>
+ <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=prev_index %}"><</a>
+ {{displayed_index}}/{{nb_sheets}}
+ <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=next_index %}">></a>
+ <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=last_index %}">>></a></p>
+ </div>
+ {% endif %}
+ <table>
+ {% for ds in datasheets %}
+ <tr class="imageline {% cycle 'hdabosimpleevenline' 'hdabosimpleoddline' %}"><td>
+ {% include "partial/one_sheet.html" %}
+ </td></tr>
+ {% endfor %}
+ </table>
+ {% if valid != "2" %}
+ <div id="count_nav_bottom">
+ <p><a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=0 %}"><<</a>
+ <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=prev_index %}"><</a>
+ {{displayed_index}}/{{nb_sheets}}
+ <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=next_index %}">></a>
+ <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=last_index %}">>></a></p>
+ </div>
+ {% endif %}
+ {% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/organisation_list.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,32 @@
+{% extends "hdabo_base.html" %}
+ {% block title %}HDA-BO : Liste des organisations{% endblock %}
+
+ {% block content %}
+ {{block.super}}
+ <p>Afficher les fiches non validées pour les lieux suivants :</p>
+ <table>
+ <tr>
+ <th class="contenttitle">Nom</th>
+ <th class="contenttitle">Fiches non validées</th>
+ <th class="contenttitle">Fiches validées</th>
+ <th class="contenttitle">Toutes les fiches</th>
+ </tr>
+ {% for item in organisations %}
+ <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline'%}">
+ <td class="contenttitle">{{ item.organisation.name|default:"_" }} (<a href="{{item.organisation.website}}" target="_blank">lien</a>)</td>
+ <td class="contenttitle">
+ {% if item.nb_unval > 0 %}
+ <a class="contenttitlelink" href="{% url 'hdabo.views.display_datasheet' ds_id=item.first_id_unval %}">{{item.nb_unval}}</a>
+ {% else %}0{% endif %}</td>
+ <td class="contenttitle">
+ {% if item.nb_val > 0 %}
+ <a class="contenttitlelink" href="{% url 'hdabo.views.display_datasheet' ds_id=item.first_id_val %}">{{item.nb_val}}</a>
+ {% else %}0{% endif %}</td>
+ <td class="contenttitle">
+ {% if item.nb_all > 0 %}
+ <a class="contenttitlelink" href="{% url 'hdabo.views.list_for_orga' orga_id=item.organisation.id valid=2 %}">{{item.nb_all}}</a>
+ {% else %}0{% endif %}</td>
+ </tr>
+ {% endfor %}
+ </table>
+ {% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/partial/all_tags_table.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,61 @@
+{% block tag_table %}
+ <table id="all_tags_table">
+ <tr><th>id</th>
+ <th>
+ {% if sort|slice:"1:" != "lab" %}
+ {% if searched and searched != "" %}
+ <a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort='+lab' searched=searched %}">label</a>
+ {% else %}
+ <a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort='+lab' %}">label</a>
+ {% endif %}
+ {% else %}label {% if searched and searched != "" %}<a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort=reverse_sort searched=searched %}">{% else %}<a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort=reverse_sort %}">{% endif %}<img src="{{STATIC_URL}}hdabo/img/sort-{% if sort|first == '+' %}asc{% else %}desc{% endif %}.png"/></a>{% endif %}
+ </th>
+ <th>original_label</th>
+ <th class="text_centered">Lien W</th>
+ <th class="text_centered">Lien D</th>
+ <th>Catégorie</th>
+ <th class="large_25 text_centered">Supprimer<br/>le lien W</th>
+ <th>Alias</th>
+ <th class="text_centered">Nb de<br/>fiches</th>
+ <th>
+ {% if sort|slice:"1:" != "pop" %}
+ {% if searched and searched != "" %}
+ <a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort='+pop' searched=searched %}">Popularité</a>
+ {% else %}
+ <a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort='+pop' %}">Popularité</a>
+ {% endif %}
+ {% else %}Popularité {% if searched and searched != "" %}<a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort=reverse_sort searched=searched %}">{% else %}<a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort=reverse_sort %}">{% endif %}<img src="{{STATIC_URL}}hdabo/img/sort-{% if sort|first == '+' %}asc{% else %}desc{% endif %}.png"/></a>{% endif %}
+ </th></tr>
+ {% for tag in tags %}
+ <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}">
+ <td class="reset_wp_info">{{tag.id}}</td>
+ <td class="{{tag.url_status_text}} wikipediatag" id="{{tag.id}}" >{{tag.label}}</td>
+ <td>{{tag.original_label}}</td>
+ <td class="text_centered">
+ {% if tag.wikipedia_url and tag.wikipedia_url != "" %}
+ <a href="{{tag.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
+ {% else %}
+ <a href="http://fr.wikipedia.org/w/index.php?search={{tag.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
+ {% endif %}
+ </td>
+ <td class="text_centered">
+ {% if tag.dbpedia_uri and tag.dbpedia_uri != "" %}
+ <a href="{{tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="tag_category" id="{{tag.id}}">{% if tag.category %}{{ tag.category }}{% endif %}</td>
+ <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/red_cross.png" class="remove_wp_link" id="{{tag.id}}" alt="{{tag.label}}" /></td>
+ <td class="tag_alias" id="{{tag.id}}" >{% if tag.alias %}{{tag.alias}}{% endif %}</td>
+ <td class="text_centered">
+ {% if tag.num_ds > 0 %}
+ <a href="{% url 'hdabo.views.display_datasheet' %}?tag={{tag.id}}" >{{tag.num_ds}}</a>
+ {% else %}
+ {{tag.num_ds}}
+ {% endif %}
+ </td>
+ <td class="text_centered">{{tag.popularity}}</td></tr>
+ {% endfor %}
+ </table>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/partial/one_sheet.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,43 @@
+{% block one_sheet %}
+<div class="complete_sheet">
+ <div class="left_sheet">
+ <p><b>id hda</b><br/>{{ds.hda_id}}</p>
+ <p><b>Titre</b><br><span class="sheet_title">{{ds.title}}</span></p>
+ <p><b>Description</b><br/>{{ds.description}}</p>
+ <p><b>Url</b><br/><a href="{{ds.url}}" target="_blank">{{ds.url}}</a></p>
+ <p><b>Domaine artistique</b><br/>{{ds.domains_text}}</p>
+ <p><b>Périodes Primaire</b><br/>{{ds.primary_periods_text}}</p>
+ <p><b>Périodes Collège</b><br/>{{ds.college_periods_text}}</p>
+ <p><b>Périodes Lycée</b><br/>{{ds.highschool_periods_text}}</p>
+ <p><b>Liste de référence du primaire</b><br/>{{ds.primary_themes_text}}</p>
+ <p><b>Thèmes Collège</b><br/>{{ds.college_themes_text}}</p>
+ <p><b>Thèmes Lycée</b><br/>{{ds.highschool_themes_text}}</p>
+ <p><b>Ville</b><br/>{{ds.town_text}}</p>
+ <p><b>Format</b><br/>{{ds.format}}</p>
+ <table><tr><th>Date de création</th><th>Date de modification</th></tr>
+ <tr><td>{{ds.original_creation_date|date:"d/m/Y"}}</td><td>{{ds.modification_datetime|date:"d/m/Y"}}</td></tr></table>
+ {# <p><b>original_modification_date</b><br/>{{ds.original_modification_date|date:"d/m/Y"}}</p> #}
+ </div>
+ <div class="right_sheet">
+ <div id="tags_commands" style="float:left;width: 100%" >
+ <div style="float:left;"><input type="radio" name="gr_validated{{ds.hda_id}}" id="not_validated" value="not_validated" {% if not ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />En cours
+ <input type="radio" name="gr_validated{{ds.hda_id}}" id="validated" value="validated" {% if ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />Validé
+ {% if ds.validated %}
+ par {{ds.validator.username}} le {{ds.validation_date|date:"d/m/Y"}}
+ {% endif %}
+ </div>
+ {% if valid != "2" %}
+ <div style="float:right;" id="tags_actions">
+ <span>Trier les tags : <input type="image" src="{{STATIC_URL}}hdabo/img/sort-descending.png" width="16" height="16" name="trier" id="tags_sort" /></span>
+ <span>Ajouter un tag : <input type="text" name="wp_search" id="wp_search" size="35" /> <span id="ok_search" class="hand_cursor"><b>OK</b></span></span>
+ </div>
+ {% endif %}
+ {% csrf_token %}
+ <input type="hidden" name="datasheet_id" value="{{ds.hda_id}}" id="datasheet_id" />
+ </div>
+ <div id="tag_table_container" style="float:left; width: 100%">
+ {% include "partial/tag_table.html" %}
+ </div>
+ </div>
+</div>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/partial/tag_table.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,87 @@
+{% block tag_table %}
+ <table id="tag_table"><tr class="nodrop nodrag">
+ {% if ordered_tags %}<th>#</th>{% endif %}
+ {% if valid != "2" and ordered_tags %}
+ <th><img src="{{STATIC_URL}}hdabo/img/arrow_up_down.png"/></th>
+ {% endif %}
+ <th>id</th>
+ <th>label</th>
+ {% comment %}<th>original_label</th>{% endcomment %}
+ <th class="text_centered">Lien W</th>
+ <th class="text_centered">pLien W</th>
+ <th class="text_centered">Lien D</th>
+ <th>Catégorie</th>
+ {% if ordered_tags %}<th class="large_25 text_centered">Supprimer<br/>le lien W</th>{% endif %}
+ <th>Alias</th>
+ {% if ordered_tags %}<th class="large_25 text_centered">Retirer le tag</th>{% endif %}</tr>
+ {% if ordered_tags %}
+ {# ordered_tags is a list of TaggedSheet #}
+ {% for t in ordered_tags %}
+ <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}" id="{{forloop.counter}}">
+ <td>{{forloop.counter}}</td>
+ {% if valid != "2" %}
+ <td class="updown_td text_centered"><img src="{{STATIC_URL}}hdabo/img/arrow_up_down.png" class="updown" alt="updown" id={{t.tag.id}} pos="{{forloop.counter0}}"></td>
+ {% endif %}
+ <td>{{t.tag.id}}</td>
+ <td class="{{t.tag.url_status_text}} wikipediatag" id="{{t.tag.id}}" >{{t.tag.label}}</td>
+ {% comment %}<td>{{t.tag.original_label}}</td>{% endcomment %}
+ <td class="text_centered">
+ {% if t.tag.wikipedia_url and t.tag.wikipedia_url != "" %}
+ <a href="{{t.tag.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
+ {% else %}
+ <a href="http://fr.wikipedia.org/w/index.php?search={{t.tag.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
+ {% endif %}
+ </td>
+ <td class="text_centered">
+ {% if t.wikipedia_revision_id %}
+ <a href="{{t.wikipedia_verion_permalink}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/clock_arrow.png" ></a>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="text_centered">
+ {% if t.tag.dbpedia_uri and t.tag.dbpedia_uri != "" %}
+ <a href="{{t.tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="tag_category" id="{{t.tag.id}}">{% if t.tag.category %}{{ t.tag.category }}{% endif %}</td>
+ <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/red_cross.png" class="remove_wp_link" id="{{t.tag.id}}" alt="{{t.tag.label}}" /></td>
+ <td>{% if t.tag.alias %}{{t.tag.alias}}{% endif %}</td>
+ <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/tag_remove.png" class="remove_tag_from_list" id="{{t.tag.id}}" alt="{{t.tag.label}}" /></td></tr>
+ {% endfor %}
+ {% else %}
+ {# ds is a DataSheet #}
+ {% for t in ds.tags.all %}
+ <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}">
+ <td>{{t.id}}</td>
+ <td class="{{t.url_status_text}}">{{t.label}}</td>
+ {% comment %}<td>{{t.original_label}}</td>{% endcomment %}
+ <td class="text_centered">
+ {% if t.wikipedia_url and t.wikipedia_url != "" %}
+ <a href="{{t.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
+ {% else %}
+ <a href="http://fr.wikipedia.org/w/index.php?search={{t.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
+ {% endif %}
+ </td>
+ <td class="text_centered">
+ {% if t.wikipedia_revision_id %}
+ <a href="{{t.wikipedia_verion_permalink}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/clock_arrow.png" ></a>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td class="text_centered">
+ {% if t.dbpedia_uri and t.dbpedia_uri != "" %}
+ <a href="{{t.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
+ {% else %}
+
+ {% endif %}
+ </td>
+ <td>{% if t.category %}{{ t.category }}{% endif %}</td>
+ <td>{% if t.alias %}{{ t.alias }}{% endif %}</td></tr>
+ {% endfor %}
+ {% endif %}
+ </table>
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/registration/login.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,28 @@
+{% extends "hdabo_base.html" %}
+{% load i18n %}
+ {% block content %}
+ {{block.super}}
+ {% if form.errors %}
+ <p class="error">{% trans "Sorry, that's not a valid username or password." %}</p>
+ {% endif %}
+ <div class="span-24 last">
+ <form action="" method='post' id="login-form">
+ <div id="loginform_div" class="span-12">
+ {% csrf_token %}
+ <input type="hidden" name="next" value="{{ next }}" />
+ <div id="login_fields_list">
+ <table>
+ {{form.as_table}}
+ </table>
+ </div>
+ <div>
+ <a href="{% url 'django.contrib.auth.views.password_reset' %}" >{% trans "Forget password?" %}</a>
+ </div>
+ <div id="submitcontent-buttons-login" class="span-24 last">
+ <button class="button"type="submit" value="login">{% trans "login" %}</button>
+ </div>
+ </div>
+ </form>
+ </div>
+ {% endblock %}
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/search/indexes/hdabo/datasheet_text.txt Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,4 @@
+{{ object.title }}
+{{ object.description }}
+{{ object.tags_text }}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/search/search.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,50 @@
+{% extends 'hdabo_base.html' %}
+
+{% block content %}
+ <h2>Recherche</h2>
+
+ <div id="search_form">
+ <form method="get" action=".">
+ <table>
+ <tr>
+ <th><label for="id_q">Recherche :</label></th>
+ <td><input type="text" name="q" id="id_q" value="{{query}}"></td>
+ </tr>
+ <tr>
+ <td> </td>
+ <td>
+ <input type="submit" value="Rechercher">
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+ <div id="search_results">
+ {% if query %}
+ <h3>Résultats</h3>
+ <div id="page_number">Page {{page.number}}/{{paginator.num_pages}}</div>
+ <table id="search_result">
+ {% for result in page.object_list %}
+ <tr>
+ <th class="result_counter">{{forloop.counter0|add:page.start_index}}.</th>
+ <td>
+ <a href="{{ result.object.get_absolute_url }}" class="result_link" >{{ result.object.title }}</a>
+ </td>
+ </tr>
+
+ {% empty %}
+ <tr><td>Pas de résultats.</td></tr>
+ {% endfor %}
+ </table>
+
+ {% if page.has_previous or page.has_next %}
+ <div id="search_prev_next">
+ {% if page.has_previous %}<a href="?q={{ query }}&page={{ page.previous_page_number }}">{% endif %}« Prec.{% if page.has_previous %}</a>{% endif %}
+ |
+ {% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Suiv. »{% if page.has_next %}</a>{% endif %}
+ </div>
+ {% endif %}
+ {% endif %}
+ </div>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/tests/__init__.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,3 @@
+from hdabo.tests.models import DatasheetTest
+
+#from hdabo.tests.sortedm2mfield import TestSortedFormField, TestSortedManyToManyField, TestStringReference
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/tests/models.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+
+from django.test import TestCase
+from hdabo.models import Datasheet
+
+
+class DatasheetTest(TestCase):
+ fixtures = ['datasheet_10']
+
+ def setUp(self):
+ self.datasheet_instance = Datasheet.objects.get(hda_id='1608')
+
+ def test_domains_text(self):
+ domains_text = self.datasheet_instance.domains_text
+ self.assertEqual(u"Arts du quotidien; Arts du visuel", domains_text)
+
+ def test_domains_list(self):
+ domains_list = self.datasheet_instance.domains_list
+ self.assertListEqual([u"Arts du quotidien", u"Arts du visuel"], domains_list)
+
+ def test_tags_text(self):
+ tags_text = [s.strip() for s in self.datasheet_instance.tags_text.split(";")]
+ tags_text.sort()
+ self.assertListEqual(tags_text, [u'XIXe s.', u'XVIIIe s.', u'XVIIe s.', u'XVIe s.', u'affichage', u'affiche', u'afficheur', u'aménagement urbain', u'colonne Morris', u'mobilier urbain', u'ordonnance de François Ier', u'publicité'], "Tags list does not match")
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/urls.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,47 @@
+from django.conf.urls import patterns, include, url
+from django.contrib import admin
+from django.contrib.auth import urls as auth_url
+
+
+# Uncomment the next two lines to enable the admin:
+admin.autodiscover()
+
+urlpatterns = patterns('',
+ # Examples:
+ # url(r'^$', 'hdabo.views.home', name='home'),
+ # url(r'^hdabo/', include('hdabo.foo.urls')),
+
+ # Uncomment the admin/doc line below to enable admin documentation:
+ # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
+
+ # Uncomment the next line to enable the admin:
+ url(r'^accounts/', include(auth_url)),
+ url(r'^logout/', 'django.contrib.auth.views.logout_then_login'),
+ url(r'^admin/', include(admin.site.urls)),
+ url(r'^search/', include('haystack.urls')),
+ url(r'^$', 'hdabo.views.home', name='home'),
+ url(r'^list/(?P<orga_id>[\w-]+)$', 'hdabo.views.list_for_orga', name='list_for_orga'),
+ url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
+ url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/(?P<start_index>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
+ url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/(?P<start_index>[\w-]+)/(?P<length>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
+ url(r'^data$', 'hdabo.views.display_datasheet', name='display_datasheet'),
+ url(r'^data/(?P<ds_id>[\w-]+)$', 'hdabo.views.display_datasheet', name='display_datasheet'),
+ url(r'^tagupdown$', 'hdabo.views.tag_up_down'),
+ url(r'^removetagfromlist$', 'hdabo.views.remove_tag_from_list'),
+ url(r'^modifytag$', 'hdabo.views.modify_tag'),
+ url(r'^modifytagds$', 'hdabo.views.modify_tag_datasheet'),
+ url(r'^resetwpinfo$', 'hdabo.views.reset_wikipedia_info'),
+ url(r'^addtag$', 'hdabo.views.add_tag'),
+ url(r'^removewplink$', 'hdabo.views.remove_wp_link'),
+ url(r'^alltags/?$', 'hdabo.views.all_tags'),
+ url(r'^alltags/(?P<num_page>[\w-]+)/?$', 'hdabo.views.all_tags'),
+ url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/?$', 'hdabo.views.all_tags'),
+ url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<sort>[+-][\w]+)/?$', 'hdabo.views.all_tags'),
+ url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<sort>[+-][\w]+)/(?P<searched>.*)/?$', 'hdabo.views.all_tags'),
+ url(r'^validatedatasheet$', 'hdabo.views.validate_datasheet'),
+ url(r'^validatedatasheet/(?P<ds_id>[\w-]+)$', 'hdabo.views.validate_datasheet'),
+ url(r'^validatedatasheet/(?P<ds_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.validate_datasheet'),
+ url(r'^updatetagalias$', 'hdabo.views.update_tag_alias'),
+ url(r'^updatetagcategory$', 'hdabo.views.update_tag_category'),
+ url(r'^ordertagsdatasheet$', 'hdabo.views.reorder_tag_datasheet'),
+)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/utils.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,374 @@
+# -*- coding: utf-8 -*-
+import collections
+import unicodedata
+import sys
+import math
+import codecs
+
+###
+# allow to declare a property as a decorator
+###
+def Property(func):
+ return property(**func())
+
+
+## {{{ http://code.activestate.com/recipes/576694/ (r7)
+
+KEY, PREV, NEXT = range(3)
+
+class OrderedSet(collections.MutableSet):
+
+ def __init__(self, iterable=None):
+ self.end = end = []
+ end += [None, end, end] # sentinel node for doubly linked list
+ self.map = {} # key --> [key, prev, next]
+ if iterable is not None:
+ self |= iterable
+
+ def __len__(self):
+ return len(self.map)
+
+ def __contains__(self, key):
+ return key in self.map
+
+ def add(self, key):
+ if key not in self.map:
+ end = self.end
+ curr = end[PREV]
+ curr[NEXT] = end[PREV] = self.map[key] = [key, curr, end]
+
+ def discard(self, key):
+ if key in self.map:
+ key, prev, next = self.map.pop(key)
+ prev[NEXT] = next
+ next[PREV] = prev
+
+ def __iter__(self):
+ end = self.end
+ curr = end[NEXT]
+ while curr is not end:
+ yield curr[KEY]
+ curr = curr[NEXT]
+
+ def __reversed__(self):
+ end = self.end
+ curr = end[PREV]
+ while curr is not end:
+ yield curr[KEY]
+ curr = curr[PREV]
+
+ def pop(self, last=True):
+ if not self:
+ raise KeyError('set is empty')
+ key = next(reversed(self)) if last else next(iter(self))
+ self.discard(key)
+ return key
+
+ def __repr__(self):
+ if not self:
+ return '%s()' % (self.__class__.__name__,)
+ return '%s(%r)' % (self.__class__.__name__, list(self))
+
+ def __eq__(self, other):
+ if isinstance(other, OrderedSet):
+ return len(self) == len(other) and list(self) == list(other)
+ return set(self) == set(other)
+
+ def __del__(self):
+ self.clear() # remove circular references
+
+
+## end of http://code.activestate.com/recipes/576694/ }}}
+
+
+## {{{ http://code.activestate.com/recipes/576693/ (r9)
+# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
+# Passes Python2.7's test suite and incorporates all the latest updates.
+
+try:
+ from thread import get_ident as _get_ident
+except ImportError:
+ from dummy_thread import get_ident as _get_ident
+
+try:
+ from _abcoll import KeysView, ValuesView, ItemsView
+except ImportError:
+ pass
+
+
+class OrderedDict(dict):
+ 'Dictionary that remembers insertion order'
+ # An inherited dict maps keys to values.
+ # The inherited dict provides __getitem__, __len__, __contains__, and get.
+ # The remaining methods are order-aware.
+ # Big-O running times for all methods are the same as for regular dictionaries.
+
+ # The internal self.__map dictionary maps keys to links in a doubly linked list.
+ # The circular doubly linked list starts and ends with a sentinel element.
+ # The sentinel element never gets deleted (this simplifies the algorithm).
+ # Each link is stored as a list of length three: [PREV, NEXT, KEY].
+
+ def __init__(self, *args, **kwds):
+ '''Initialize an ordered dictionary. Signature is the same as for
+ regular dictionaries, but keyword arguments are not recommended
+ because their insertion order is arbitrary.
+
+ '''
+ if len(args) > 1:
+ raise TypeError('expected at most 1 arguments, got %d' % len(args))
+ try:
+ self.__root
+ except AttributeError:
+ self.__root = root = [] # sentinel node
+ root[:] = [root, root, None]
+ self.__map = {}
+ self.__update(*args, **kwds)
+
+ def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
+ 'od.__setitem__(i, y) <==> od[i]=y'
+ # Setting a new item creates a new link which goes at the end of the linked
+ # list, and the inherited dictionary is updated with the new key/value pair.
+ if key not in self:
+ root = self.__root
+ last = root[0]
+ last[1] = root[0] = self.__map[key] = [last, root, key]
+ dict_setitem(self, key, value)
+
+ def __delitem__(self, key, dict_delitem=dict.__delitem__):
+ 'od.__delitem__(y) <==> del od[y]'
+ # Deleting an existing item uses self.__map to find the link which is
+ # then removed by updating the links in the predecessor and successor nodes.
+ dict_delitem(self, key)
+ link_prev, link_next, key = self.__map.pop(key)
+ link_prev[1] = link_next
+ link_next[0] = link_prev
+
+ def __iter__(self):
+ 'od.__iter__() <==> iter(od)'
+ root = self.__root
+ curr = root[1]
+ while curr is not root:
+ yield curr[2]
+ curr = curr[1]
+
+ def __reversed__(self):
+ 'od.__reversed__() <==> reversed(od)'
+ root = self.__root
+ curr = root[0]
+ while curr is not root:
+ yield curr[2]
+ curr = curr[0]
+
+ def clear(self):
+ 'od.clear() -> None. Remove all items from od.'
+ try:
+ for node in self.__map.itervalues():
+ del node[:]
+ root = self.__root
+ root[:] = [root, root, None]
+ self.__map.clear()
+ except AttributeError:
+ pass
+ dict.clear(self)
+
+ def popitem(self, last=True):
+ '''od.popitem() -> (k, v), return and remove a (key, value) pair.
+ Pairs are returned in LIFO order if last is true or FIFO order if false.
+
+ '''
+ if not self:
+ raise KeyError('dictionary is empty')
+ root = self.__root
+ if last:
+ link = root[0]
+ link_prev = link[0]
+ link_prev[1] = root
+ root[0] = link_prev
+ else:
+ link = root[1]
+ link_next = link[1]
+ root[1] = link_next
+ link_next[0] = root
+ key = link[2]
+ del self.__map[key]
+ value = dict.pop(self, key)
+ return key, value
+
+ # -- the following methods do not depend on the internal structure --
+
+ def keys(self):
+ 'od.keys() -> list of keys in od'
+ return list(self)
+
+ def values(self):
+ 'od.values() -> list of values in od'
+ return [self[key] for key in self]
+
+ def items(self):
+ 'od.items() -> list of (key, value) pairs in od'
+ return [(key, self[key]) for key in self]
+
+ def iterkeys(self):
+ 'od.iterkeys() -> an iterator over the keys in od'
+ return iter(self)
+
+ def itervalues(self):
+ 'od.itervalues -> an iterator over the values in od'
+ for k in self:
+ yield self[k]
+
+ def iteritems(self):
+ 'od.iteritems -> an iterator over the (key, value) items in od'
+ for k in self:
+ yield (k, self[k])
+
+ def update(*args, **kwds): #@NoSelf
+ '''od.update(E, **F) -> None. Update od from dict/iterable E and F.
+
+ If E is a dict instance, does: for k in E: od[k] = E[k]
+ If E has a .keys() method, does: for k in E.keys(): od[k] = E[k]
+ Or if E is an iterable of items, does: for k, v in E: od[k] = v
+ In either case, this is followed by: for k, v in F.items(): od[k] = v
+
+ '''
+ if len(args) > 2:
+ raise TypeError('update() takes at most 2 positional '
+ 'arguments (%d given)' % (len(args),))
+ elif not args:
+ raise TypeError('update() takes at least 1 argument (0 given)')
+ self = args[0]
+ # Make progressively weaker assumptions about "other"
+ other = ()
+ if len(args) == 2:
+ other = args[1]
+ if isinstance(other, dict):
+ for key in other:
+ self[key] = other[key]
+ elif hasattr(other, 'keys'):
+ for key in other.keys():
+ self[key] = other[key]
+ else:
+ for key, value in other:
+ self[key] = value
+ for key, value in kwds.items():
+ self[key] = value
+
+ __update = update # let subclasses override update without breaking __init__
+
+ __marker = object()
+
+ def pop(self, key, default=__marker):
+ '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
+ If key is not found, d is returned if given, otherwise KeyError is raised.
+
+ '''
+ if key in self:
+ result = self[key]
+ del self[key]
+ return result
+ if default is self.__marker:
+ raise KeyError(key)
+ return default
+
+ def setdefault(self, key, default=None):
+ 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
+ if key in self:
+ return self[key]
+ self[key] = default
+ return default
+
+ def __repr__(self, _repr_running={}):
+ 'od.__repr__() <==> repr(od)'
+ call_key = id(self), _get_ident()
+ if call_key in _repr_running:
+ return '...'
+ _repr_running[call_key] = 1
+ try:
+ if not self:
+ return '%s()' % (self.__class__.__name__,)
+ return '%s(%r)' % (self.__class__.__name__, self.items())
+ finally:
+ del _repr_running[call_key]
+
+ def __reduce__(self):
+ 'Return state information for pickling'
+ items = [[k, self[k]] for k in self]
+ inst_dict = vars(self).copy()
+ for k in vars(OrderedDict()):
+ inst_dict.pop(k, None)
+ if inst_dict:
+ return (self.__class__, (items,), inst_dict)
+ return self.__class__, (items,)
+
+ def copy(self):
+ 'od.copy() -> a shallow copy of od'
+ return self.__class__(self)
+
+ @classmethod
+ def fromkeys(cls, iterable, value=None):
+ '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
+ and values equal to v (which defaults to None).
+
+ '''
+ d = cls()
+ for key in iterable:
+ d[key] = value
+ return d
+
+ def __eq__(self, other):
+ '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
+ while comparison to a regular mapping is order-insensitive.
+
+ '''
+ if isinstance(other, OrderedDict):
+ return len(self) == len(other) and self.items() == other.items()
+ return dict.__eq__(self, other)
+
+ def __ne__(self, other):
+ return not self == other
+
+ # -- the following methods are only used in Python 2.7 --
+
+ def viewkeys(self):
+ "od.viewkeys() -> a set-like object providing a view on od's keys"
+ return KeysView(self)
+
+ def viewvalues(self):
+ "od.viewvalues() -> an object providing a view on od's values"
+ return ValuesView(self)
+
+ def viewitems(self):
+ "od.viewitems() -> a set-like object providing a view on od's items"
+ return ItemsView(self)
+## end of http://code.activestate.com/recipes/576693/ }}}
+
+def remove_accents(str):
+ nkfd_form = unicodedata.normalize('NFKD', unicode(str))
+ return u"".join([c for c in nkfd_form if not unicodedata.combining(c)])
+
+def normalize(str):
+ return remove_accents(str).lower().replace(u"œ",u"oe")
+
+def show_progress(current_line, total_line, label, width, writer=None):
+
+ if writer is None:
+ writer = sys.stdout
+ if sys.stdout.encoding is not None:
+ writer = codecs.getwriter(sys.stdout.encoding)(sys.stdout)
+
+ percent = (float(current_line) / float(total_line)) * 100.0
+
+ marks = math.floor(width * (percent / 100.0))
+ spaces = math.floor(width - marks)
+
+ loader = u'[' + (u'=' * int(marks)) + (u' ' * int(spaces)) + u']'
+
+ s = u"%s %3d%% %*d/%d - %*s\r" % (loader, percent, len(str(total_line)), current_line, total_line, width, label[:width])
+
+ writer.write(s) #takes the header into account
+ if percent >= 100:
+ writer.write("\n")
+ writer.flush()
+
+ return writer
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/views.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,580 @@
+# -*- coding: utf-8 -*-
+
+from django.conf import settings
+from django.contrib.auth.decorators import login_required #@UnusedImport
+from django.core.paginator import Paginator
+from django.db import connection
+from django.db.models import Max, Count, Min
+from django.http import HttpResponseBadRequest
+from django.shortcuts import render_to_response, redirect
+from django.template import RequestContext
+from django.utils.http import urlquote
+from haystack.constants import DJANGO_ID
+from haystack.query import SearchQuerySet
+from hdabo.utils import OrderedDict, remove_accents, normalize
+from hdabo.wp_utils import (normalize_tag, query_wikipedia_title,
+ get_or_create_tag, process_tag, reorder_datasheet_tags)
+from models import Datasheet, Organisation, Tag, TagCategory, TaggedSheet
+from wikitools import wiki
+import django.utils.simplejson as json
+import re
+
+
+@login_required
+def home(request):
+
+ orgas = Organisation.objects.all().order_by('name')
+
+ org_list = []
+ all_ds_mapping = dict([(res['organisation'], res['nb_all']) for res in Datasheet.objects.values("organisation").annotate(nb_all=Count("organisation"))])
+ validated_ds_mapping = dict([(res['organisation'], [res['nb_val'], res['first_id_val']]) for res in Datasheet.objects.filter(validated=True).values("organisation").annotate(nb_val=Count("organisation")).annotate(first_id_val=Min("id"))])
+ unvalidated_ds_mapping = dict([(res['organisation'], [res['nb_unval'], res['first_id_unval']]) for res in Datasheet.objects.filter(validated=False).values("organisation").annotate(nb_unval=Count("organisation")).annotate(first_id_unval=Min("id"))])
+ # We get the hda_id from the id
+ val_hda_ids = dict([(res.id, res.hda_id) for res in Datasheet.objects.filter(id__in=[v[1] for v in validated_ds_mapping.values()]).only("id", "hda_id")])
+ unval_hda_ids = dict([(res.id, res.hda_id) for res in Datasheet.objects.filter(id__in=[v[1] for v in unvalidated_ds_mapping.values()]).only("id", "hda_id")])
+
+ for orga in orgas :
+ nb_all = all_ds_mapping.get(orga.id, 0)
+ duo_val = validated_ds_mapping.get(orga.id, [0, None])
+ nb_val = duo_val[0]
+ first_id_val = val_hda_ids.get(duo_val[1], None)
+ duo_unval = unvalidated_ds_mapping.get(orga.id, [0, None])
+ nb_unval = duo_unval[0]
+ first_id_unval = unval_hda_ids.get(duo_unval[1], None)
+ org_list.append({'organisation':orga, 'nb_all':nb_all, 'nb_val':nb_val, 'first_id_val':first_id_val, 'nb_unval':nb_unval, 'first_id_unval':first_id_unval})
+
+ return render_to_response("organisation_list.html",
+ {'organisations':org_list},
+ context_instance=RequestContext(request))
+
+
+@login_required
+def display_datasheet(request, ds_id=None):
+
+ if ds_id :
+ ds = Datasheet.objects.get(hda_id=ds_id)
+
+ # In this function the context is given by the get parameters.
+ if "index" in request.GET :
+ try:
+ index = int(request.GET["index"])
+ except :
+ index = 0
+ else :
+ index = 0
+ if "nb_sheets" in request.GET :
+ try:
+ nb_sheets = int(request.GET["nb_sheets"])
+ except :
+ nb_sheets = None
+ else :
+ nb_sheets = None
+ # If there is tag parameter, it means that we display all the ds tagged by one particular tag
+ tag = None
+ if "tag" in request.GET :
+ tag = Tag.objects.get(id=int(request.GET["tag"]))
+ datasheets_qs = Datasheet.objects.filter(tags__in=[tag]).order_by("organisation__name", "original_creation_date").select_related("format")
+ # If tag is set and if ds_id is None, it means that we have to display the first ds
+ if not ds_id :
+ index = 0
+ ds = datasheets_qs[0]
+ else :
+ # The current list depends on the ds's validation state
+ datasheets_qs = Datasheet.objects.filter(organisation=ds.organisation).filter(validated=ds.validated).order_by("id").select_related("format")
+ # We calculate the number of sheets if necessary
+ if not nb_sheets :
+ nb_sheets = datasheets_qs.count()
+
+ # We get only the prev/current/next sheets
+ if nb_sheets > 1 :
+ if index == 0 :
+ select_qs = datasheets_qs[:2]
+ prev_index = 0
+ prev_id = select_qs[0].hda_id
+ next_index = 1
+ next_id = select_qs[1].hda_id
+ elif index == (nb_sheets - 1) :
+ select_qs = datasheets_qs[nb_sheets - 2:]
+ prev_index = nb_sheets - 2
+ prev_id = select_qs[0].hda_id
+ next_index = nb_sheets - 1
+ next_id = select_qs[1].hda_id
+ else :
+ select_qs = datasheets_qs[index - 1:index + 2]
+ prev_index = index - 1
+ prev_id = select_qs[0].hda_id
+ next_index = index + 1
+ next_id = select_qs[2].hda_id
+ else :
+ prev_index = next_index = 0
+ prev_id = next_id = datasheets_qs[0].hda_id
+
+ # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
+ ordered_tags = TaggedSheet.objects.filter(datasheet=ds).select_related("tag").order_by('order')
+
+ displayed_index = index + 1;
+ zero_id = datasheets_qs[0].hda_id
+ last_index = max(nb_sheets - 1, 0)
+ last_id = datasheets_qs[last_index].hda_id
+
+ return render_to_response("generic_sheet.html",
+ {'ds':ds, 'orga_name':ds.organisation.name,
+ 'nb_sheets':nb_sheets, 'ordered_tags':ordered_tags,
+ 'zero_id':zero_id, 'prev_index':prev_index, 'prev_id':prev_id,
+ 'next_index':next_index, 'next_id':next_id,
+ 'last_index':last_index, 'last_id':last_id,
+ 'displayed_index':displayed_index, 'tag':tag, 'valid':ds.validated,
+ 'categories':json.dumps(get_categories())},
+ context_instance=RequestContext(request))
+
+
+@login_required
+def list_for_orga(request, orga_id=None, valid=None, start_index=None):
+
+ orga = Organisation.objects.get(id=orga_id)
+ orga_name = orga.name
+
+ if start_index :
+ try:
+ start_index = int(start_index)
+ except :
+ start_index = 0
+ else :
+ start_index = 0
+
+ # If valid = 0, we search unvalidated sheets
+ # If valid = 1, we search validated sheets
+ # If valid = 2, we search AND DISPLAY all sheets
+ datasheets_qs = Datasheet.objects.filter(organisation=orga).order_by("id").select_related("format")
+
+ if valid == "1" :
+ # We count all the validated sheets
+ datasheets_qs = datasheets_qs.filter(validated=True)
+ # And select the current one
+ datasheets = [datasheets_qs[start_index]]
+ elif valid != "2":
+ valid = "0"
+ # We count all the validated sheets
+ datasheets_qs = datasheets_qs.filter(validated=False)
+ # And select the current one
+ datasheets = [datasheets_qs[start_index]]
+ else:
+ datasheets = datasheets_qs
+
+ nb_sheets = datasheets_qs.count()
+
+ # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
+ ordered_tags = None
+ if valid != "2" :
+ ordered_tags = TaggedSheet.objects.filter(datasheet=datasheets[0]).select_related("tag").order_by('order')
+
+ displayed_index = start_index + 1;
+ prev_index = max(start_index - 1, 0);
+ next_index = min(nb_sheets - 1, start_index + 1);
+ last_index = max(nb_sheets - 1, 0);
+
+ return render_to_response("list_for_orga.html",
+ {'datasheets':datasheets, 'orga_name':orga_name,
+ 'nb_sheets':nb_sheets, 'orga_id':orga_id, 'ordered_tags':ordered_tags,
+ 'prev_index':prev_index, 'next_index':next_index, 'last_index':last_index,
+ 'start_index':start_index, 'displayed_index':displayed_index, 'valid':valid,
+ 'categories':json.dumps(get_categories())},
+ context_instance=RequestContext(request))
+
+
+@login_required
+def all_tags(request, num_page=None, nb_by_page=None, sort="+pop", searched=None):
+
+ # If the view is asked after a form sent with post vars, it means that searched is a post var.
+ if u"searched" in request.POST :
+ searched = request.POST["searched"]
+ nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
+ num_page = 1
+
+ # Get paginator and current page
+ current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, sort, searched)
+
+ prev_page = max(num_page - 1, 1)
+ next_page = min(num_page + 1, p.num_pages)
+ last_page = p.num_pages
+
+
+ cursor = connection.cursor() #@UndefinedVariable
+ fl_list = []
+ try:
+ cursor.execute("select upper(substring(normalized_label from 1 for 1)) as fl from hdabo_tag group by fl order by fl;")
+
+ for row in cursor:
+ new_char = remove_accents(row[0])
+ if new_char not in fl_list:
+ fl_list.append(new_char)
+ finally:
+ cursor.close()
+
+ search_def = tuple([(c, urlquote(c + settings.SEARCH_STAR_CHARACTER)) for c in fl_list])
+ reverse_sort = ("-" if sort[0] == "+" else "+") + sort[1:]
+
+ return render_to_response("all_tags.html",
+ {'nb_total':p.count, 'tags':current_page.object_list, 'current_page':current_page,
+ 'prev_page':prev_page, 'next_page':next_page, 'last_page':last_page,
+ 'num_page':num_page, 'nb_by_page':nb_by_page, 'searched':searched,
+ 'categories':json.dumps(get_categories()),
+ 'search_def':search_def, 'sort':sort, 'reverse_sort': reverse_sort},
+ context_instance=RequestContext(request))
+
+
+@login_required
+def tag_up_down(request):
+ ds_id = request.POST["datasheet_id"]
+ # post vars new_order and old_order indicate the position (from 1) of the tag in the list.
+ # NB : it is different from the TagSheet.order in the database.
+ new_order = int(request.POST["new_order"]) - 1
+ old_order = int(request.POST["old_order"]) - 1
+ # First we get the datasheet's TaggedSheets (list to force evaluation)
+ ordered_tags = list(TaggedSheet.objects.filter(datasheet__hda_id=ds_id).order_by('order'))
+ # We change the moved TaggedSheets's order
+ new_ts_order = ordered_tags[new_order].order
+ moved_ts = ordered_tags[old_order]
+ moved_ts.order = new_ts_order
+ moved_ts.save()
+ # We move the TaggedSheets's order
+ if new_order > old_order :
+ # And we decrease the other ones
+ for i in range(old_order + 1, new_order + 1) :
+ ts = ordered_tags[i]
+ ts.order = ts.order - 1
+ ts.save()
+ else :
+ # And we increase the other ones
+ for i in range(new_order, old_order) :
+ ts = ordered_tags[i]
+ ts.order = ts.order + 1
+ ts.save()
+ ds = Datasheet.objects.get(hda_id=ds_id)
+ ds.manual_order = True
+ ds.save()
+
+ return get_tag_table(request=request, ds_id=ds_id, valid=0)
+
+
+@login_required
+def get_tag_table(request=None, ds_id=None, valid=None):
+
+ ordered_tags = TaggedSheet.objects.filter(datasheet__hda_id=ds_id).order_by('order')
+
+ return render_to_response("partial/tag_table.html",
+ {'ordered_tags':ordered_tags, 'valid':valid},
+ context_instance=RequestContext(request))
+
+
+@login_required
+def get_all_tags_table(request, num_page=None, nb_by_page=None, sort="+pop", searched=None):
+
+ current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, sort, searched) #@UnusedVariable
+ reverse_sort = ("-" if sort[0] == "+" else "+") + sort[1:]
+
+ return render_to_response("partial/all_tags_table.html",
+ {'tags':current_page.object_list, 'nb_by_page':nb_by_page, 'searched':searched, 'sort': sort, 'reverse_sort': reverse_sort},
+ context_instance=RequestContext(request))
+
+
+def get_current_page(num_page=None, nb_by_page=None, sort="+pop", searched=None):
+
+ base_queryset = Tag.objects
+
+ if searched and searched != "" :
+ searched = normalize(searched.strip())
+ regex = "^%s$" % (re.escape(searched).replace(re.escape(settings.SEARCH_STAR_CHARACTER), ".*"))
+ base_queryset = base_queryset.filter(normalized_label__iregex=regex)
+
+ alltags = base_queryset.annotate(num_ds=Count('datasheet'))
+
+ alltags = {
+ "+lab" : alltags.order_by('normalized_label', 'label'),
+ "-lab" : alltags.order_by('-normalized_label', '-label'),
+ "+pop" : alltags.order_by('-popularity', '-num_ds', 'normalized_label', 'label'),
+ "-pop" : alltags.order_by('popularity', 'num_ds', '-normalized_label', '-label'),
+ }.get(sort, alltags.order_by('-popularity', '-num_ds', 'normalized_label', 'label'))
+
+
+ # We build the paginator for the requested list
+ if nb_by_page :
+ try:
+ nb_by_page = int(nb_by_page)
+ except :
+ nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
+ else :
+ nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
+ if num_page :
+ try:
+ num_page = int(num_page)
+ except :
+ num_page = 1
+ else :
+ num_page = 1
+ p = Paginator(alltags, nb_by_page)
+
+ #use the much simpler base query to have the count
+ p._count = base_queryset.count()
+ current_page = p.page(num_page)
+
+ return current_page, p, num_page, nb_by_page
+
+
+@login_required
+def remove_tag_from_list(request=None):
+
+ ds_id = request.POST["datasheet_id"]
+ tag_id = request.POST["tag_id"]
+ # First we get the datasheet's TaggedSheets
+ ds_tags = TaggedSheet.objects.filter(datasheet__hda_id=ds_id)
+ # We get the current TaggedSheet and we delete it
+ ts = ds_tags.filter(tag=Tag.objects.filter(id=tag_id))[0]
+ ts.delete()
+
+ ds = Datasheet.objects.get(hda_id=ds_id)
+ ds.manual_order = True
+ ds.save()
+
+ return get_tag_table(request=request, ds_id=ds_id, valid=0)
+
+
+@login_required
+def modify_tag(request):
+
+ tag_id = request.POST["id"]
+ tag_label = request.POST["value"]
+
+ tag = Tag.objects.get(id=tag_id)
+
+ if tag.label != tag_label:
+
+ tag.label = tag_label
+
+ site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
+ wp_res = query_wikipedia_title(site, label=tag_label)
+ status, url, pageid, dbpedia_uri, revision_id = (wp_res['status'], wp_res['wikipedia_url'], wp_res['pageid'], wp_res["dbpedia_uri"], wp_res['revision_id'])
+
+ if status is not None:
+ tag.url_status = status
+
+ old_pageid = tag.wikipedia_pageid
+
+ tag.wikipedia_url = url
+ tag.wikipedia_pageid = pageid
+ tag.dbpedia_uri = dbpedia_uri
+
+ try:
+ tag.save()
+ except:
+ return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s (%s) existe déjà." % (tag_label, tag.original_label)}), mimetype="application/json")
+
+ if old_pageid != pageid:
+ TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
+
+ return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+
+
+@login_required
+def modify_tag_datasheet(request):
+
+ tag_id = request.POST["id"]
+ tag_label = request.POST["value"]
+ ds_id = request.POST["datasheet_id"]
+
+ tag = Tag.objects.get(id=tag_id)
+
+ ds = Datasheet.objects.get(hda_id=ds_id)
+
+ if tag.label != tag_label:
+
+ if tag_label.lower() in [t.label.lower() for t in ds.tags.all()]:
+ return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s existe déjà pour cette fiche." % (tag_label)}), mimetype="application/json")
+
+ tag, revision_id, created = get_or_create_tag(tag_label) #@UnusedVariable
+
+ ts = TaggedSheet.objects.get(tag=tag_id, datasheet__hda_id=ds_id)
+ ts.tag = tag
+ ts.wikipedia_revision_id = revision_id
+ kwargs = {DJANGO_ID + "__exact": unicode(ds_id)}
+ results = SearchQuerySet().filter(title=tag_label).filter_or(description=tag_label).filter(**kwargs)
+ if len(results) > 0:
+ ts.index_note = results[0].score
+
+ ts.save()
+
+ ds.manual_order = True
+ ds.save()
+
+ return get_tag_table(request=request, ds_id=ds_id, valid=0)
+
+
+
+@login_required
+def reset_wikipedia_info(request):
+ # 2 cases :
+ # - ordered tag for one datasheet : POST["datasheet_id"] is not null
+ # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
+ tag_id = request.POST["tag_id"]
+
+ tag = Tag.objects.get(id=tag_id)
+ site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
+
+ tag.label = normalize_tag(tag.original_label)
+
+ #reset tag info
+ tag.wikipedia_url = None
+ tag.wikipedia_pageid = None
+
+ try:
+ process_tag(site, tag)
+ except:
+ return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"La version sémantisée du tag %s (%s) existe déjà." % (tag.label, tag.original_label)}), mimetype="application/json")
+
+
+
+ if u"datasheet_id" in request.POST :
+ return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
+ else :
+ return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+
+
+@login_required
+def add_tag(request=None):
+
+ ds_id = request.POST["datasheet_id"]
+ tag_label = request.POST["value"]
+
+ ds = Datasheet.objects.get(hda_id=ds_id)
+ if tag_label.lower() in [t.label.lower() for t in ds.tags.all()]:
+ return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s existe déjà pour cette fiche." % (tag_label)}), mimetype="application/json")
+
+
+ tag, revision_id, created = get_or_create_tag(tag_label)
+ # We put the tag at the bottom of the datasheet's tag list
+ # if the tag is created or if the tag is not in the list
+
+ list_ts = TaggedSheet.objects.filter(datasheet=ds)
+ if created or list_ts.filter(tag=tag).count() == 0 :
+ new_order = list_ts.aggregate(Max('order'))['order__max'] + 1
+ ts = TaggedSheet.objects.create(datasheet=ds, tag=tag, original_order=new_order, order=new_order, wikipedia_revision_id=revision_id)
+ ts.save()
+ ds.manual_order = True
+ ds.save()
+
+ return get_tag_table(request=request, ds_id=ds_id, valid=0)
+
+
+@login_required
+def remove_wp_link(request=None):
+ # 2 cases :
+ # - ordered tag for one datasheet : POST["datasheet_id"] is not null
+ # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
+ tag_id = request.POST["tag_id"]
+ tag = Tag.objects.get(id=tag_id)
+
+
+ if u"datasheet_id" in request.POST :
+ #create another tag almost identical, without the W info
+ new_tag, created = Tag.objects.get_or_create(label=tag.label, original_label=tag.original_label, url_status=Tag.TAG_URL_STATUS_DICT['null_result'], #@UnusedVariable
+ defaults={'label':tag.label, 'original_label': tag.original_label, 'url_status':Tag.TAG_URL_STATUS_DICT['null_result'], 'wikipedia_url': None, 'wikipedia_pageid': None, 'dbpedia_uri': None, 'category':tag.category, 'alias':tag.alias, 'popularity':tag.popularity})
+
+ TaggedSheet.objects.filter(tag=tag, datasheet__hda_id=request.POST["datasheet_id"]).update(tag=new_tag, wikipedia_revision_id=None)
+
+ else:
+
+ if Tag.objects.filter(label=tag.label, original_label=tag.original_label, url_status=Tag.TAG_URL_STATUS_DICT['null_result']).count() > 0:
+ return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"La version désémantisée du tag %s (%s) existe déjà." % (tag.label, tag.original_label)}), mimetype="application/json")
+ tag.wikipedia_url = None
+ tag.wikipedia_pageid = None
+ tag.dbpedia_uri = None
+ tag.url_status = Tag.TAG_URL_STATUS_DICT['null_result']
+ tag.save()
+
+ TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=None)
+
+ if u"datasheet_id" in request.POST :
+ return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
+ else :
+ return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+
+
+@login_required
+def validate_datasheet(request=None, ds_id=None, valid=None):
+ # We set if valid is true of false, function of the url parameters
+ if valid == "1" or valid == "true" or not valid :
+ valid = True
+ else :
+ valid = False
+ # We validate or unvalidate the requester datasheet
+
+ if request.user.is_authenticated():
+ user = request.user
+ else:
+ user = None
+
+ ds = Datasheet.objects.get(hda_id=ds_id)
+ if valid :
+ ds.validate(user)
+ else :
+ ds.unvalidate()
+ ds.save()
+
+ # If there are still some unvalidated/validated ds for the ds's orga, we display the first one
+ same_organisation_ds = Datasheet.objects.filter(organisation=ds.organisation).filter(validated=not valid)
+ if len(same_organisation_ds) > 0 :
+ return redirect('display_datasheet', ds_id=same_organisation_ds[0].hda_id)
+ else :
+ return redirect('home')
+
+
+@login_required
+def update_tag_alias(request):
+ # 2 cases :
+ # - ordered tag for one datasheet : POST["datasheet_id"] is not null
+ # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
+ tag_id = request.POST["id"]
+ tag_alias = request.POST["value"]
+ tag = Tag.objects.get(id=tag_id)
+ tag.alias = tag_alias
+ tag.save()
+
+ if u"datasheet_id" in request.POST :
+ return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
+ else :
+ return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+
+
+def get_categories():
+ # List of categories in an OrderedDict
+ categories = OrderedDict({"":""})
+ for c in TagCategory.objects.order_by('label') :
+ categories.update({c.label:c.label})
+ return categories
+
+
+@login_required
+def update_tag_category(request):
+
+ tag_id = request.POST["id"]
+ cat = request.POST["value"]
+ tag = Tag.objects.get(id=tag_id)
+ if cat and cat != "" :
+ tag.category = TagCategory.objects.get(label=cat)
+ else :
+ tag.category = None
+ tag.save()
+
+ if u"datasheet_id" in request.POST :
+ return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
+ else :
+ return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+
+@login_required
+def reorder_tag_datasheet(request):
+
+ ds_id = request.REQUEST['datasheet_id']
+ ds = Datasheet.objects.get(hda_id=ds_id)
+ reorder_datasheet_tags(ds)
+
+ return get_tag_table(request=request, ds_id=ds_id, valid=0)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/wp_utils.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,222 @@
+# -*- coding: utf-8 -*-
+from django.conf import settings
+from django.utils.http import urlquote
+from haystack.constants import DJANGO_ID
+from haystack.query import SearchQuerySet
+from hdabo.models import Tag, TaggedSheet
+from wikitools import api, wiki
+
+
+def normalize_tag(tag):
+ if len(tag) == 0:
+ return tag
+ tag = tag.strip()
+ tag = tag.replace("_", " ")
+ tag = " ".join(tag.split())
+ tag = tag[0].upper() + tag[1:]
+ return tag
+
+def urlize_for_wikipedia(label):
+ return urlquote(label.replace(" ", "_"))
+
+
+def __is_homonymie(page_dict):
+ for cat in page_dict.get(u"categories", []):
+ if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
+ return True
+ return False
+
+
+def query_wikipedia_title(site, label=None, pageid=None):
+
+ params = {'action':'query', 'prop':'info|categories|langlinks', 'inprop':'url', 'lllimit':'500', 'cllimit':'500', 'rvprop':'ids'}
+
+ if label:
+ params['titles'] = label
+ else:
+ params['pageids'] = pageid
+ wpquery = api.APIRequest(site, params) #@UndefinedVariable
+
+ response = wpquery.query()
+ original_response = response
+ def return_null_result():
+ return { 'new_label': None, 'alternative_label': None, 'status': Tag.TAG_URL_STATUS_DICT["null_result"], 'wikipedia_url': None, 'pageid': None, 'alternative_wikipedia_url': None, 'alternative_pageid': None, 'dbpedia_uri': None, 'revision_id': None, 'response': response }
+
+
+ query_dict = response['query']
+ # get page if multiple pages or none -> return Tag.null_result
+ pages = query_dict.get("pages", {})
+ if len(pages) > 1 or len(pages) == 0:
+ return return_null_result()
+
+ page = pages.values()[0]
+
+ if u"invalid" in page or u"missing" in page:
+ return return_null_result()
+
+ url = page.get(u'fullurl', None)
+ pageid = page.get(u'pageid', None)
+ new_label = page[u'title']
+ alternative_label = None
+ alternative_url = None
+ alternative_pageid = None
+
+ if __is_homonymie(page):
+ status = Tag.TAG_URL_STATUS_DICT["homonyme"]
+ elif u"redirect" in page:
+ status = Tag.TAG_URL_STATUS_DICT["redirection"]
+ else:
+ status = Tag.TAG_URL_STATUS_DICT["match"]
+
+ if status == Tag.TAG_URL_STATUS_DICT["redirection"]:
+ params['redirects'] = True
+ wpquery = api.APIRequest(site, params) #@UndefinedVariable
+ response = wpquery.query()
+ query_dict = response['query']
+ pages = query_dict.get("pages", {})
+ #we know that we have at least one answer
+ if len(pages) > 1 or len(pages) == 0:
+ return return_null_result()
+ page = pages.values()[0]
+ alternative_label = page.get('title', None)
+ alternative_url = page.get('fullurl', None)
+ alternative_pageid = page.get('pageid',None)
+
+
+ revision_id = page.get('lastrevid', None)
+
+ #process language to extract the english label
+ english_label = None
+
+ if status == Tag.TAG_URL_STATUS_DICT['match'] or status == Tag.TAG_URL_STATUS_DICT['redirection']:
+ lang_links = page.get('langlinks', [])
+ for lang_info_dict in lang_links:
+ if lang_info_dict['lang'] == "en":
+ english_label = lang_info_dict["*"]
+ break
+
+ if english_label and "#" not in english_label:
+ dbpedia_uri = settings.DBPEDIA_URI_TEMPLATE % (urlize_for_wikipedia(english_label))
+ else:
+ dbpedia_uri = None
+
+
+ return { 'new_label': new_label, 'alternative_label': alternative_label, 'status': status, 'wikipedia_url': url, 'pageid': pageid, 'alternative_wikipedia_url': alternative_url, 'alternative_pageid': alternative_pageid, 'dbpedia_uri': dbpedia_uri, 'revision_id': revision_id, 'response': original_response }
+
+
+
+def get_or_create_tag(tag_label):
+
+ tag_label_normalized = normalize_tag(tag_label)
+ # We get the wikipedia references for the tag_label
+ # We get or create the tag object
+
+ tag = None
+ for t in Tag.objects.filter(label__iexact=tag_label_normalized):
+ if tag is None or t.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
+ tag = t
+ if tag.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
+ break
+
+ if tag is None:
+ tag = Tag(label=tag_label_normalized, original_label=tag_label)
+ created = True
+ else:
+ created = False
+
+ site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
+
+ if created:
+ wp_res = query_wikipedia_title(site, label=tag_label_normalized)
+ new_label = wp_res['new_label']
+ alternative_label= wp_res['alternative_label']
+ status = wp_res['status']
+ url = wp_res['wikipedia_url']
+ alternative_url = wp_res['alternative_wikipedia_url']
+ pageid = wp_res['pageid']
+ alternative_pageid = wp_res['alternative_pageid']
+ dbpedia_uri = wp_res["dbpedia_uri"]
+ wikipedia_revision_id = wp_res['revision_id']
+
+
+ # We save the datas
+ if new_label is not None:
+ tag.label = new_label
+ if status is not None:
+ tag.url_status = status
+ tag.alternative_label = alternative_label
+ tag.alternative_wikipedia_url = alternative_url
+ tag.alternative_wikipedia_pageid = alternative_pageid
+ tag.wikipedia_url = url
+ tag.wikipedia_pageid = pageid
+ tag.dbpedia_uri = dbpedia_uri
+
+ tag.save()
+
+ elif tag.wikipedia_pageid:
+ wp_res = query_wikipedia_title(site, pageid=tag.wikipedia_pageid)
+ wikipedia_revision_id = wp_res['revision_id']
+ else:
+ wikipedia_revision_id = None
+
+
+ return tag, wikipedia_revision_id, created
+
+def process_tag(site, tag, verbosity=0):
+
+ wp_res = query_wikipedia_title(site, label=tag.label)
+ new_label = wp_res['new_label']
+ alternative_label= wp_res['alternative_label']
+ status = wp_res['status']
+ url = wp_res['wikipedia_url']
+ alternative_url = wp_res['alternative_wikipedia_url']
+ pageid = wp_res['pageid']
+ alternative_pageid = wp_res['alternative_pageid']
+ response = wp_res['response']
+ dbpedia_uri = wp_res["dbpedia_uri"]
+ revision_id = wp_res["revision_id"]
+
+ if verbosity >= 2 :
+ print "response from query to %s with parameters %s :" % (site.apibase, repr(new_label))
+ print repr(response)
+
+ prev_wikipedia_pageid = tag.wikipedia_pageid
+
+ if new_label is not None:
+ tag.label = new_label
+ if status is not None:
+ tag.url_status = status
+ tag.wikipedia_url = url
+ tag.wikipedia_pageid = pageid
+ tag.dbpedia_uri = dbpedia_uri
+ tag.alternative_label = alternative_label
+ tag.alternative_wikipedia_url = alternative_url
+ tag.alternative_wikipedia_pageid = alternative_pageid
+
+ tag.save()
+
+ if prev_wikipedia_pageid != pageid:
+ TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
+
+
+def reorder_datasheet_tags(ds):
+ ts_list = []
+ for ts in ds.taggedsheet_set.all():
+ ts.index_note = 0
+ kwargs = {DJANGO_ID + "__exact": unicode(ds.pk)}
+
+ results = SearchQuerySet().filter(title=ts.tag.label).filter_or(description=ts.tag.label).filter(**kwargs)
+ if len(results) > 0:
+ ts.index_note += results[0].score
+ ts.save()
+
+ ts_list.append(ts)
+ ts_list.sort(key=lambda t: (-t.index_note, t.order))
+ for k, ts in enumerate(ts_list):
+ ts.order = k + 1
+ ts.save()
+ if ds.manual_order:
+ ds.manual_order = False
+ ds.save()
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/.htaccess.mod_wsgi.tmpl Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,20 @@
+
+SetEnv DJANGO_SETTINGS_MODULE hdalab.settings
+SetEnv PROJECT_PATH /Users/ymh/dev/workspace/hdabo/web
+SetEnv PYTHON_PATH /Users/ymh/dev/workspace/hdabo/virtualenv/web/env/hdabo/lib/python2.6/site-packages:/Applications/Dev/eclipse/plugins/org.python.pydev.debug_2.2.0.2011062419/pysrc/
+SetEnv PYDEV_DEBUG False
+
+Options ExecCGI FollowSymLinks
+SetHandler wsgi-script
+
+#if defined in global definition
+#defined with WSGIDaemonProcess
+#WSGIProcessGroup platform
+
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^(.*)$ /~ymh/hdabo/hdalab/modwsgi.wsgi/$1 [QSA,PT,L]
+
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/README.txt Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,47 @@
+== Inclusion géographique ==
+
+La migration 0007_geographic_inclusion crée les tables nécessaires
+
+Pour récupérer les informations d'inclusion géographique de DBpedia (nécessite le package python SparqlWrapper)
+ python manage.py query_geo_inclusion
+
+== Traitement du fichier countries.geo.json ==
+
+Le fichier a été téléchargé sur https://github.com/johan/world.geo.json/
+Afin de faire correspondre les labels des pays aux tags sémantisés, on applique le script
+ python manage.py geojson_transform <chemin/nom_du_fichier.geo.json>
+pour rajouter ces informations dans le fichier
+
+== Import des données Insee ==
+
+La migration 0008_datasheet_insee crée les tables nécessaires
+
+Il faut d'abord importer les fichiers donnant les coordonnées géographiques par code Insee dans la base.
+Le fichier data/villes.csv a été téléchargé sur http://www.pillot.fr/cartographe/fic_villes.php
+Il manque dans ce fichier quelques villes et les codes INSEE pour Paris, Marseille et Lyon n'incluent pas les arrondissements
+Les communes manquantes se trouvent dans additional_cities.csv
+Pour importer chacun de ces fichiers :
+ python manage.py import_insee_csv <chemin/nom_du_fichier.csv>
+
+Il faut ensuite importer les fichiers donnant la correspondance entre notices HDA (référencées par leur identifiant hda_id) et codes INSEE
+Celles-ci sont fournies dans un fichier Excel donné par Bertrand, que j'ai converti en CSV et corrigé. Il s'agit de data/hda_insee.csv
+Pour importer ce fichier:
+ python manage.py import_insee_hda_csv <chemin/nom_du_fichier.csv>
+
+
+=== Migration hdabo -> hdalab ===
+
+0) appliquer les migrations south
+1) lancement de la commande query_wikipedia_category
+2) lancement de la commande fill_tag_years
+3) lancement de la commande query_wikipedia
+4) lancement de la commande query_geo_inclusion
+5) lancement de la commande geo_json_transform
+6) lancement de la commande import_insee_csv
+7) lancement de la commande import_hda_insee_csv
+8) lancement de la commande query_category_inclusion
+
+Toutes ces actions sont echaînées dans la commande import_hdabo_db
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/__init__.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+VERSION = (2, 22, 0, "final", 0)
+
+
+def get_version():
+ version = '%s.%s' % (VERSION[0], VERSION[1])
+ if VERSION[2]:
+ version = '%s.%s' % (version, VERSION[2])
+ if VERSION[3:] == ('alpha', 0):
+ version = '%s pre-alpha' % version
+ else:
+ if VERSION[3] != 'final':
+ version = '%s %s %s' % (version, VERSION[3], VERSION[4])
+ return version
+
+
+__version__ = get_version()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/config.py.tmpl Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 26, 2012
+
+@author: ymh
+'''
+import os
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+ # ('Your Name', 'your_email@example.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+ 'NAME': '', # Or path to database file if using sqlite3.
+ 'USER': '', # Not used with sqlite3.
+ 'PASSWORD': '', # Not used with sqlite3.
+ 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
+ 'PORT': '', # Set to empty string for default. Not used with sqlite3.
+ }
+}
+
+BASE_DIR = os.path.dirname(os.path.abspath(__file__)).rstrip("/") + "/"
+BASE_URL = '/~ymh/hdabo/'
+WEB_URL = 'http://localhost'
+
+LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale',), )
+
+# Absolute filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = os.path.abspath(BASE_DIR + "../static/media/")
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = BASE_URL + "static/media/"
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = os.path.abspath(BASE_DIR + "../static/site/")
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = BASE_URL + "static/site/"
+
+# URL prefix for admin static files -- CSS, JavaScript and images.
+# Make sure to use a trailing slash.
+# Examples: "http://foo.com/static/admin/", "/static/admin/".
+ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
+
+GOOGLE_ANALYTICS_CODE = None
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/django_wsgi.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,11 @@
+import os
+
+os.environ['DJANGO_SETTINGS_MODULE'] = 'hdalab.settings'
+
+import django.core.handlers.wsgi
+
+application = django.core.handlers.wsgi.WSGIHandler()
+
+if os.environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
+ import pydevd #@UnresolvedImport
+ pydevd.settrace(suspend=False)
Binary file src/hdalab/locale/de/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/de/LC_MESSAGES/django.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,130 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.py:40
+msgid "French"
+msgstr "Französisch"
+
+#: settings.py:41
+msgid "English"
+msgstr "Englisch"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italienisch"
+
+#: settings.py:43
+msgid "German"
+msgstr "Deutsch"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Spanisch"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Japanisch"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Chinesisch"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Suche nach Facetten"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Die Session teilen"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "Schreibgeschützt"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "In Handschrift"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Link kopieren"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Meine Ansichten"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Eine Ansicht über die Suchergebnisse schaffen"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Eine Hinweisliste schaffen"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filter:"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Die Ansicht verwalten"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Name:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Sichtbare Blöcke:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Länder"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Stichwortwolke"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Information über ein Stichwort"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Einen Tag suchen"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr "Schnittstelle übersetzt von Mara Dumitru"
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notizen"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Künstlerische Disziplinen"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Suchergebnisse"
+
+#: templates/completion.html:37
+msgid "Recherche par liste de completion"
+msgstr "Autovervollständigen Suche"
Binary file src/hdalab/locale/de/LC_MESSAGES/djangojs.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/de/LC_MESSAGES/djangojs.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,121 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "Inhalt"
+msgstr[1] "Inhalte"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "für diesen Tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Alle Zeitspannen"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode :"
+msgstr "Zeitspanne:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "bis"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays :"
+msgstr "Länder:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag :"
+msgstr "Tag:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Anmerkungen"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Diesen Inhalt anmerken"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "An {0} hinzufügen"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Von {0} entfernen"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "Hinweis"
+msgstr[1] "Hinweise"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"Die Inhaltsliste ist leer! Fügen Sie Inhalte hinzu um die Liste sie "
+"öffentlich bekannt zu machen!"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Die Ansicht verwalten"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Diese Ansicht anmerken"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Neue Session"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "Meine Suchergebnisse"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Meine Liste"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "Schreibgeschützt"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Wie möchten Sie Ihre neue Ansicht nennen?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Neue Suchergebnisse"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Neue Liste"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source : Wikipédia"
+msgstr "Quelle: Wikipedia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation :"
+msgstr "Standort:"
Binary file src/hdalab/locale/en/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/en/LC_MESSAGES/django.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,130 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Yves-Marie Haussonne <ymh.work@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\n"
+"PO-Revision-Date: 2012-03-09 02:10+0200\n"
+"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
+"Language-Team: IRI\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.0-mac-beta-1\n"
+
+#: settings.py:40
+msgid "French"
+msgstr "French"
+
+#: settings.py:41
+msgid "English"
+msgstr "English"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italian"
+
+#: settings.py:43
+msgid "German"
+msgstr "German"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Spanish"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Japanese"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Chinese"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Faceted search"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Share session"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "Read-only"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "Read-write"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Copy link"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "My views:"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Create a view on search results"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Create datasheet list"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filters:"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Manage view"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Name:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Visible blocs:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Countries"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Keyword cloud"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Keyword information"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Tag search"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr " "
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notes"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Artistic discipline"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Search results"
+
+#: templates/completion.html:37
+msgid "Recherche par liste de completion"
+msgstr "Autocomplete Search"
Binary file src/hdalab/locale/en/LC_MESSAGES/djangojs.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/en/LC_MESSAGES/djangojs.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Yves-Marie Haussonne <ymh.work@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\n"
+"PO-Revision-Date: 2012-03-09 02:04+0200\n"
+"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
+"Language-Team: IRI\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.0-mac-beta-1\n"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "content"
+msgstr[1] "contents"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "for this tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "All periods"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode :"
+msgstr "Period:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "to"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays :"
+msgstr "Country:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag :"
+msgstr "Tag:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Annotations"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Annotate the content"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "Add to {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Remove from {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "datasheet"
+msgstr[1] "datasheets"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr "The content list is empty! Add contents to display the list!"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Manage the view"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Annotate this view"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "New Session"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "My search results"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "My list"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "read only"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "How do you want to name your new view ?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "New search results"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "New list"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source : Wikipédia"
+msgstr "Source: Wikipedia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation :"
+msgstr "Location:"
Binary file src/hdalab/locale/es/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/es/LC_MESSAGES/django.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,130 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.py:40
+msgid "French"
+msgstr "Francés"
+
+#: settings.py:41
+msgid "English"
+msgstr "Inglés"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italiano"
+
+#: settings.py:43
+msgid "German"
+msgstr "Alemán"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Español"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Japonés"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Chino"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Búsqueda por facetas"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Compartir sesión"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "Lectura sola"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "Lectura-escritura"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Enlácenos"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Mis vistas:"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Crear una lista de los resultados de búsqueda"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Crear une lista de registros"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filtros:"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Administrar la vista"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Nombre:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "bloques visibles:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "País"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Nube de palabras clave"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Información sobre una palabra llave"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Buscar una etiqueta"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr "Traducción de la interfaz en español por Roselyne Aliacar"
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notas"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Disciplinas artísticas"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Resultados de búsqueda"
+
+#: templates/completion.html:37
+msgid "Recherche par liste de completion"
+msgstr "Busqueda con autocompletar"
Binary file src/hdalab/locale/es/LC_MESSAGES/djangojs.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/es/LC_MESSAGES/djangojs.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,120 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "contenido"
+msgstr[1] "contenidos"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "para esta etiqueta"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Todos períodos"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode :"
+msgstr "Período :"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "a"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays :"
+msgstr "País :"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag :"
+msgstr "Etiqueta :"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Anotaciones"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Anotar este contenido"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "Añadir a {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Borrar {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "Registro"
+msgstr[1] "Registros"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"La lista de contenidos esta vacia! Añada contenidos (para ver la lista)!"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Administrar la vista"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Anotar esta vista"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Iniciar sesión"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "Mis resultados de búsqueda"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Mi lista"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "lectura sola"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Como desea nombrar su nueva vista?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Nuevos resultados de búsqueda"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Nueva lista"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source : Wikipédia"
+msgstr "Fuente: Wikipedia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation :"
+msgstr "Localización:"
Binary file src/hdalab/locale/fr/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/fr/LC_MESSAGES/django.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,126 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: settings.py:40
+msgid "French"
+msgstr "Français"
+
+#: settings.py:41
+msgid "English"
+msgstr "Anglais"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italien"
+
+#: settings.py:43
+msgid "German"
+msgstr "Allemand"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Espagnol"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Japonais"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Chinois"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Recherche par facettes"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Partager la session"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "En lecture seule"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "En lecture-écriture"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Copier le lien"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Mes vues :"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Créer une vue sur des résultats de recherche"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Créer une liste de notices"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filtres :"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Gérer la vue"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Nom :"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Blocs visibles :"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Pays"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Nuage de mots-clés"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Information sur un mot-clé"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Rechercher un tag"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr " "
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notes"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Disciplines artistiques"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Résultats de recherche"
Binary file src/hdalab/locale/fr/LC_MESSAGES/djangojs.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/fr/LC_MESSAGES/djangojs.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,120 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "contenu"
+msgstr[1] "contenus"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "pour ce tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Toutes périodes"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode :"
+msgstr "Période :"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "à"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays :"
+msgstr "Pays :"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag :"
+msgstr ""
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Annotations"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Annoter ce contenu"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "Ajouter à {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Retirer de {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "notice"
+msgstr[1] "notices"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Gérer la vue"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Annoter cette vue"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Nouvelle session"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "Mes résultats de recherche"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Ma liste"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "lecture seule"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Comment souhaitez-vous nommer votre nouvelle vue ?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Nouveaux résultats de recherche"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Nouvelle liste"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source : Wikipédia"
+msgstr "Source : Wikipédia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation :"
+msgstr "Localisation :"
Binary file src/hdalab/locale/it/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/it/LC_MESSAGES/django.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,130 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: settings.py:40
+msgid "French"
+msgstr "Francese"
+
+#: settings.py:41
+msgid "English"
+msgstr "Inglese"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italiano"
+
+#: settings.py:43
+msgid "German"
+msgstr "Tedesco"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Spagnolo"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Giapponese"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Cinese"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Ricerca per campo"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Dividere la sessione"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "Solo lettura"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "Lettura-scrittura"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Copiare il link"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Le mie vedute:"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Creare una veduta su i risultati della ricerca"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Creare un elenco di informazioni"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filtri:"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Gestire la veduta"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Nome:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Blocchi visibili:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Paese"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Nucleo di parole chiave"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Informazioni su una parola chiave"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Cercare un tag"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr "Traduzione dell'interfaccia informatica in italiano: Natalie Biet"
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Note"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Discipline artistiche"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Risultati della ricerca"
+
+#: templates/completion.html:37
+msgid "Recherche par liste de completion"
+msgstr "Ricerca con autocompletamento"
Binary file src/hdalab/locale/it/LC_MESSAGES/djangojs.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/it/LC_MESSAGES/djangojs.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,121 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "contenuto"
+msgstr[1] "contenuti"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "Per questo tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Qualsiasi periodo"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode :"
+msgstr "periodo:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "al"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays :"
+msgstr "Paese:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag :"
+msgstr "Tag:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Annotazioni"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Annotare questo contenuto"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "Aggiungere a {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Togliere da {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "informazion"
+msgstr[1] "informazioni"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"L'elenco dei contenuti è vuoto! Aggiungere dei contenuti per visualizzare "
+"l'elenco !"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Gestire la veduta"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Annotare questa veduta"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Nuova sessione"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "La mia ricerca"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Il mio elenco"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "solo lettura"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Come volete chiamare la vostra nuova veduta ?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Nuovi risultati di ricerca"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Nuovo elenco"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source : Wikipédia"
+msgstr "Fonte: Wikipedia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation :"
+msgstr "Localizzazione:"
Binary file src/hdalab/locale/ja/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/ja/LC_MESSAGES/django.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,127 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-03-20 11:21-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translamessage:%3C20120531030701.11087.qmail@ml.vector.co.jp%3Etor: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: settings.py:40
+msgid "French"
+msgstr "フランス語"
+
+#: settings.py:41
+msgid "English"
+msgstr "英語"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "イタリア語"
+
+#: settings.py:43
+msgid "German"
+msgstr "ドイツ語"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "スペイン語"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "日本語"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "中国語"
+
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "ファセット検索"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "このセッションを共有"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "読み出しのみ"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "読み/書き"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "この行をコピー"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "マイ・ビュー:"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "検索結果から新規ビューを作る"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "記事のリストを作る"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "フィルター"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "ビューの管理"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "名前:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "可視ブロック:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "国名"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "キーワードクラウド"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "キーワードについての情報"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "タグを検索する"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr "翻訳に関する情報"
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "注釈"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "学術・芸術分野"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "検索結果"
Binary file src/hdalab/locale/ja/LC_MESSAGES/djangojs.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/ja/LC_MESSAGES/djangojs.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,120 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "個"
+msgstr[1] "個"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "のコンツンツがこのタグと関係"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "すべての期間"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode :"
+msgstr "期間:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "から"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays :"
+msgstr "国名:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag :"
+msgstr "タグ:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "注釈"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "このコンテンツに注釈をつける"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "リストに追加 {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "リストから取り除く {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "個の記事"
+msgstr[1] "個の記事"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"リストが空です。 リストを表示するにはコンテンツを1つ以上追加してください"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "ビューの管理"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "このビューに注釈をつける"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "新規セッション"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "マイ検索結果"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "マイリスト"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "読み出しのみ"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "新規ビューに名前を付けてください"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "名称未設定の検索結果"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "名称未設定のリスト"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source : Wikipédia"
+msgstr "ウィキペディア"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation :"
+msgstr "Location:"
Binary file src/hdalab/locale/zh-tw/LC_MESSAGES/django.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/zh-tw/LC_MESSAGES/django.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,127 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: settings.py:40
+msgid "French"
+msgstr "Français"
+
+#: settings.py:41
+msgid "English"
+msgstr "Anglais"
+
+#: settings.py:42
+msgid "Italian"
+msgstr ""
+
+#: settings.py:43
+msgid "German"
+msgstr "Allemand"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Espagnol"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr ""
+
+#: settings.py:46
+msgid "Chinese"
+msgstr ""
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Recherche par facettes"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Partager la session"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "En lecture seule"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "En lecture-écriture"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Copier le lien"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Mes vues :"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Créer une vue sur des résultats de recherche"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Créer une liste de notices"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filtres :"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Gérer la vue"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Nom :"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Blocs visibles :"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Pays"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Nuage de mots-clés"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Information sur un mot-clé"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Rechercher un tag"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr ""
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notes"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Disciplines artistiques"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Résultats de recherche"
Binary file src/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.mo has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.po Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,118 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "contenu"
+msgstr[1] "contenus"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "pour ce tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Toutes périodes"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode :"
+msgstr "Période :"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "à"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays :"
+msgstr "Pays :"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag :"
+msgstr ""
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Annotations"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Annoter ce contenu"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+#, fuzzy
+msgid "Ajouter a {0}"
+msgstr "Ajouter à"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+#, fuzzy
+msgid "Retirer de {0}"
+msgstr "Retirer de"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "notice"
+msgstr[1] "notices"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Gérer la vue"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Annoter cette vue"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Nouvelle session"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "Mes résultats de recherche"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Ma liste"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "lecture seule"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Comment souhaitez-vous nommer votre nouvelle vue ?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Nouveaux résultats de recherche"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Nouvelle liste"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source : Wikipédia"
+msgstr "Source : Wikipédia"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/manage.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+from django.core.management import execute_manager
+import imp
+try:
+ imp.find_module('settings') # Assumed to be in the same directory.
+except ImportError:
+ import sys
+ sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
+ sys.exit(1)
+
+import settings
+
+if __name__ == "__main__":
+ execute_manager(settings)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/export_tags_csv.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,124 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 25, 2012
+
+@author: ymh
+'''
+
+from django.core.management.base import BaseCommand, CommandError
+from django.db.models import Q
+from hdabo import utils
+from hdabo.models import Tag
+from optparse import make_option
+from hdalab.management.utils import UnicodeWriter
+
+class Command(BaseCommand):
+ '''
+ Command to export tags
+ '''
+ args = '<path_to_name_base_csv_file>'
+ options = '[-c|--category filter by category name] [-e|--encoding csv file encoding]'
+ help = """export csv files for hdabo
+Options:
+ -c, --category : filter by category
+ --lines : max number of lines to load (for each file). 0 means all.
+ --encoding : files encoding. default to latin-1"""
+
+ option_list = BaseCommand.option_list + (
+ make_option("-c","--category",
+ action='append',
+ type='string',
+ dest='categories',
+ default=[],
+ help='filter tag by category (or)'),
+ make_option("-e","--encoding",
+ action='store',
+ type='string',
+ dest='encoding',
+ default="utf-8",
+ help='file encoding, default utf-8'),
+ make_option("-f","--force",
+ action='store_true',
+ dest='force',
+ default=False,
+ help='force file overwrite'),
+ )
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0 or not args[0]:
+ raise CommandError("Gives at last one csv file to export")
+
+ self.encoding = options.get("encoding", "utf-8")
+ self.categories = options.get("categories", [])
+ self.force = options.get("force", False)
+ self.base_path = args[0].strip()
+ self.interactive = options.get("interactive",True)
+
+ files_path = {
+ "visible" : { 'path':self.base_path + "_visible.txt",},
+ "hidden" : { 'path':self.base_path + "_hidden.txt",},
+ "infobox" : { 'path':self.base_path + "_infobox.txt",},
+ }
+
+ try:
+ for filedef in files_path.values():
+ try:
+ filedef['file'] = open(filedef['path'],'r')
+ if (not self.force) and self.interactive:
+ print filedef['path']
+ resp = raw_input("export file already exists. override ? type yes to continue : ")
+ if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
+ self.force = True
+ # clear file
+ else:
+ return "error"
+ elif not self.interactive and not self.force:
+ print "Export file %s already exists. Exit." % (filedef['path'])
+ return "error"
+
+ filedef['file'].close()
+ filedef['file'] = open(filedef['path'],'w')
+ except IOError:
+ filedef['file'] = open(filedef['path'],'w')
+
+ filedef['csv'] = UnicodeWriter(filedef['file'], doublequote=False, escapechar="\\", encoding=self.encoding)
+
+ queryset = Tag.objects.exclude(wikipedia_pageid= None)
+ cat_filter = None
+ for cat in self.categories:
+ if cat_filter is None:
+ cat_filter = Q(category__label = cat)
+ else:
+ cat_filter = cat_filter | Q(category__label = cat)
+ if cat_filter is not None:
+ queryset = queryset.filter(cat_filter)
+
+ tcount = queryset.count()
+
+ print "Exporting %d tags" % (tcount)
+ writer = None
+
+ for i,t in enumerate(queryset.order_by("label")):
+
+ writer = utils.show_progress(i+1, tcount, t.label, 50, writer)
+ #normal category
+ row = [t.label,] + [cat.wp_category.label for cat in t.wp_categories.filter(hidden=False)]
+ files_path['visible']['csv'].writerow(row)
+
+ #hidden category
+ row = [t.label,] + [cat.wp_category.label for cat in t.wp_categories.filter(hidden=True)]
+ files_path['hidden']['csv'].writerow(row)
+
+ #infobox
+ for i in t.infoboxes.all():
+ vec = [[p.param_name,p.param_value.replace('\n',"\\n")] for p in i.infoboxparameter_set.all()]
+ ib_params = [num for elem in vec for num in elem]
+ row = [t.label, i.name.strip()] + ib_params
+ files_path['infobox']['csv'].writerow(row)
+
+ finally:
+ for filedef in files_path.itervalues():
+ if filedef.get('file',None):
+ filedef['file'].close()
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/export_wpcategory_csv.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 2, 2012
+
+@author: ymh
+'''
+from django.core.management.base import BaseCommand, CommandError
+from optparse import make_option
+from hdalab.management.utils import UnicodeWriter
+from hdabo.wp_utils import normalize_tag
+from hdalab.models.categories import WpCategory
+from django.utils.http import urlquote
+from hdabo.utils import show_progress
+
+class Command(BaseCommand):
+ '''
+ Command to export tags
+ '''
+ args = '<path_to_csv_file>'
+ options = '[-e|--encoding csv file encoding]|[-f|--force force file overwrite]'
+ help = """export csv files for hdabo
+Options:
+ -e, --encoding : files encoding. default to latin-1
+ -f, --force : force file overwrite
+ """
+
+ option_list = BaseCommand.option_list + (
+ make_option("-e","--encoding",
+ action='store',
+ type='string',
+ dest='encoding',
+ default="utf-8",
+ help='file encoding, default utf-8'),
+ make_option("-f","--force",
+ action='store_true',
+ dest='force',
+ default=False,
+ help='force file overwrite'),
+ )
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0 or not args[0]:
+ raise CommandError("Gives at last one csv file to export")
+
+ self.encoding = options.get("encoding", "utf-8")
+ self.force = options.get("force", False)
+ self.path = args[0].strip()
+ self.interactive = options.get("interactive",True)
+
+ file = None
+ try:
+ try:
+ file = open(self.path,'r')
+ if (not self.force) and self.interactive:
+ print self.path
+ resp = raw_input("export file already exists. override ? type yes to continue : ")
+ if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
+ self.force = True
+ # clear file
+ else:
+ return "error"
+ elif not self.interactive and not self.force:
+ print "Export file %s already exists. Exit." % (self.path)
+ return "error"
+
+ file.close()
+ file = open(self.path,'w')
+ except IOError:
+ file = open(self.path,'w')
+
+ csv = UnicodeWriter(file, doublequote=False, escapechar="\\", encoding=self.encoding)
+ writer = None
+
+ qs = WpCategory.objects.filter(tagwpcategory__hidden=False).distinct()
+
+ total = qs.count()
+
+ for i,wpcat in enumerate(qs):
+ writer = show_progress(i+1, total, wpcat.label, 50, writer)
+ nb_ds = 0
+ for tag in wpcat.tagwpcategory_set.all():
+ nb_ds += tag.tag.datasheet_set.count()
+
+ csv.writerow([wpcat.label, u"http://fr.wikipedia.org/wiki/Catégorie:%s" % urlquote(normalize_tag(wpcat.label)), nb_ds])
+
+ finally:
+ if file is not None:
+ file.close()
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/fill_tag_years.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 29, 2012
+
+@author: ymh
+'''
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdabo.utils import show_progress
+import re
+from hdabo.models import Tag
+from hdalab.models import TagYears
+
+class Command(NoArgsCommand):
+ def handle_noargs(self, **options):
+ self.style = no_style()
+
+ qs = Tag.objects.filter(category__label="Datation")
+ total = qs.count()
+ dbptstart = len("http://dbpedia.org/resource/")
+
+ writer = None
+
+ for i,tag in enumerate(qs):
+ writer = show_progress(i+1, total, tag.label, 50, writer)
+ start = None
+ end = None
+ range = re.findall("^(Années )?(-?\d+)\-?(\d+)?( en France| au cinéma)?$", tag.label)
+ # S'il s'agit d'une année ou d'un ensemble d'années
+ if range:
+ start = int(range[0][1])
+ end = start
+ if range[0][0]:
+ end = start + 10
+ if range[0][2]:
+ end = int(range[0][2])
+ else:
+ if tag.dbpedia_uri:
+ dbptitle = tag.dbpedia_uri[dbptstart:]
+ # S'il s'agit d'un siècle, on se fie à l'URL DBpedia,
+ # car les siècles y sont en chiffres arabes.
+ century = re.findall("(\d+)(st|nd|rd|th)_century_?(BC)?", dbptitle)
+ if century:
+ val = int(century[0][0])
+ if century[0][2] == 'BC':
+ start = -100*val
+ else:
+ start = 1 + 100*(val-1)
+ end = start + 100
+
+ if start != None and end != None:
+ ty = TagYears.objects.create(tag=tag, start_year=start, end_year=end)
+ ty.save()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/geojson_transform.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+'''
+@author: raphv
+'''
+from django.core.management.base import BaseCommand, CommandError
+from django.utils.http import urlquote
+import django.utils.simplejson as json
+from SPARQLWrapper import SPARQLWrapper, JSON
+
+#import pydevd #@UnresolvedImport
+#pydevd.settrace(suspend=False)
+
+
+class Command(BaseCommand):
+ '''
+ Command to export tags
+ '''
+ args = '<path_to_geojson_file>'
+ options = ''
+ help = """Adds semantic data to countries.geo.json files"""
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0 or not args[0]:
+ raise CommandError("Give a Geo Json File to process")
+
+ geojsonfile = args[0]
+
+ f = open(geojsonfile,"r")
+ geojson = json.loads(f.read())
+ f.close()
+
+ labels = [feature['properties']['name'] for feature in geojson['features']]
+ uris = dict([(label, 'http://dbpedia.org/resource/' + urlquote(label.replace(' ','_'))) for label in labels])
+
+ uri_list = [uris[label] for label in uris]
+ base_uris = dict([(uris[label],uris[label]) for label in uris])
+
+ grp = 10
+ endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
+ endpoint.setReturnFormat(JSON)
+
+ start = 0
+ while start < len(uri_list):
+ sparql = """
+ PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
+ SELECT ?source ?target
+ WHERE {
+ ?source dbpedia-owl:wikiPageRedirects ?target .
+ Filter (?source in (<%s>)) .
+ }
+ """ % '>, <'.join(uri_list[start:start + grp])
+ endpoint.setQuery(sparql)
+ results = endpoint.query().convert()
+
+ for r in results["results"]["bindings"]:
+ source = r["source"]["value"]
+ target = r["target"]["value"]
+ base_uris[source] = target
+ #print "%s redirects to %s"%(source, target)
+ start += grp
+
+ base_uri_list = [base_uris[uri] for uri in base_uris]
+
+ french_labels = {}
+ labels = {}
+
+ start = 0
+ while start < len(base_uri_list):
+
+ sparql = """
+ PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+ SELECT ?country ?label WHERE {
+ ?country rdfs:label ?label .
+ FILTER (?country in (<%s>))
+ }
+ """ % '>, <'.join(base_uri_list[start:start + grp])
+
+ endpoint.setQuery(sparql)
+ results = endpoint.query().convert()
+
+ print repr(results)
+
+ for r in results["results"]["bindings"]:
+ country = r["country"]["value"]
+ label = r["label"]["value"]
+ if country not in labels:
+ labels[country] = {}
+ labels[country][r["label"]["xml:lang"]] = label
+ if r["label"]["xml:lang"] == 'fr':
+ french_labels[country] = label
+ print "%s label: %s"%(country, label)
+
+ start += grp
+
+ for feature in geojson['features']:
+ base_uri = base_uris[uris[feature['properties']['name']]]
+ feature['properties']['dbpedia_uri'] = base_uri
+
+ if labels.has_key(base_uri):
+ feature['properties']['labels'] = labels[base_uri]
+ if french_labels.has_key(base_uri):
+ feature['properties']['label_fr'] = french_labels[base_uri]
+ else:
+ print "No label for %s"%base_uri
+
+ f = open(geojsonfile,"w")
+ f.write(json.dumps(geojson))
+ f.close()
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/import_hda_insee_csv.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+'''
+@author: raphv
+'''
+from django.core.management.base import BaseCommand, CommandError
+import django.utils.simplejson as json
+from SPARQLWrapper import SPARQLWrapper, JSON
+from hdalab.models import InseeCoords, DatasheetExtras
+from hdabo.models import Datasheet
+import csv
+import re
+import sys
+
+class Command(BaseCommand):
+ '''
+ Command to export tags
+ '''
+ args = '<path_to_csv_file>'
+ options = ''
+ help = """Imports HDA Lab INSEE codes from a csv file"""
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0 or not args[0]:
+ raise CommandError("Give a CSV File to import")
+
+ filename = args[0]
+
+ csvfile = open(filename, "rb")
+ dialect = csv.Sniffer().sniff(csvfile.read(1024))
+ csvfile.seek(0)
+ reader = csv.reader(csvfile, dialect)
+ fieldstoget = [ 'id', 'insee' ]
+
+
+ for i,line in enumerate(reader):
+ if i == 0:
+ fields = {}
+ minlength = 0
+ for j,field in enumerate(line):
+ for fieldname in fieldstoget:
+ if re.search('(?i)%s' % fieldname, field):
+ fields[fieldname] = j
+ minlength = max(j,minlength)
+ else:
+ if len(line) > minlength:
+ rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
+ # Traitement special pour la Corse
+ insee = int(re.sub('^2(A|B)','20',rawdata['insee']))
+
+ hda_id = int(rawdata['id'])
+
+ try:
+ datasheet = Datasheet.objects.get(hda_id=hda_id)
+ except Datasheet.DoesNotExist:
+ #print "Datasheet for id %d does not exist" % hda_id
+ datasheet = None
+ try:
+ inseecoord = InseeCoords.objects.get(insee=insee)
+ except InseeCoords.DoesNotExist:
+ print "INSEE entry for Insee Code %d does not exist" % insee
+ inseecoord = None
+
+ if datasheet is not None and inseecoord is not None:
+ dsextra, created = DatasheetExtras.objects.get_or_create(datasheet=datasheet, defaults={'insee':inseecoord})
+ if not created:
+ dsextra.insee = inseecoord
+ dsextra.save()
+
+ csvfile.close()
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/import_hdabo_db.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 28, 2012
+
+@author: ymh
+'''
+from django.core.management.base import BaseCommand
+from django.core.management import call_command
+from optparse import make_option
+import os.path
+
+
+class Command(BaseCommand):
+
+ args = "[<path to the data folder>]"
+ option_list = BaseCommand.option_list + (
+ make_option('-c', '--categories',
+ action='store_true',
+ dest='categories',
+ default=False,
+ help='load categories in db'),
+ )
+
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0:
+ data_path = os.path.abspath(os.path.join(os.path.basename(__file__),'../../../../data'))
+ else:
+ data_path = args[0]
+
+ print("=========== MIGRATE ===========")
+ call_command('syncdb', migrate=True)
+ if options.get('categories', False):
+ print("=========== QUERY WIKIPEDIA CATEGORY ===========")
+ call_command('query_wikipedia_category', interactive=False, force=True)
+
+ print("=========== QUERY DBPEDIA ===========")
+ call_command('query_dbpedia', interactive=False, force=True)
+ print("=========== FILL TAG YEAR ===========")
+ call_command('fill_tag_years')
+ print("=========== GEOJSON TRANSFORM ===========")
+ call_command('geojson_transform', os.path.join(data_path,'countries.geo.json'))
+ print("=========== QUERY GEO INCLUSION ===========")
+ call_command('query_geo_inclusion')
+ print("=========== IMPORT INSEE CSV PASS 1 ===========")
+ call_command('import_insee_csv', os.path.join(data_path,'villes.csv'))
+ print("=========== IMPORT INSEE CSV PASS 2 ===========")
+ call_command('import_insee_csv', os.path.join(data_path,'additional_cities.csv'))
+ print("=========== IMPORT HDA INSEE CSV ===========")
+ call_command('import_hda_insee_csv', os.path.join(data_path,'HDA_Insee.csv'))
+ print("=========== QUERY CATEGORY INCLUSION ===========")
+ call_command('query_category_inclusion', all=True, force=True, interactive=False)
+
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/import_insee_csv.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+'''
+@author: raphv
+'''
+from django.core.management.base import BaseCommand, CommandError
+import django.utils.simplejson as json
+from SPARQLWrapper import SPARQLWrapper, JSON
+from hdalab.models import InseeCoords
+import csv
+import re
+import sys
+
+class Command(BaseCommand):
+ '''
+ Command to export tags
+ '''
+ args = '<path_to_csv_file>'
+ options = ''
+ help = """Imports Insee codes and geographic coordinates from a csv file"""
+
+ def handle(self, *args, **options):
+
+ if len(args) == 0 or not args[0]:
+ raise CommandError("Give a CSV File to import")
+
+ filename = args[0]
+
+ csvfile = open(filename, "rb")
+ dialect = csv.Sniffer().sniff(csvfile.read(1024))
+ csvfile.seek(0)
+ reader = csv.reader(csvfile, dialect)
+ fieldstoget = [ 'ville', 'insee', 'latitude', 'longitude' ]
+
+ for i,line in enumerate(reader):
+ if i == 0:
+ fields = {}
+ minlength = 0
+ for j,field in enumerate(line):
+ for fieldname in fieldstoget:
+ if re.search('(?i)%s' % fieldname, field):
+ fields[fieldname] = j
+ minlength = max(j,minlength)
+ else:
+ if len(line) > minlength:
+ rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
+ #print "Processing line %d" % i
+ #print rawdata
+ try:
+ latitude = float(rawdata['latitude'].replace(',','.'))
+ longitude = float(rawdata['longitude'].replace(',','.')) if rawdata['longitude'] != '-' else 0
+ insee = int(rawdata['insee'])
+ ville = unicode(rawdata['ville'], 'iso-8859-1')
+
+ InseeCoords.objects.get_or_create(insee=insee, city_name=ville, latitude=latitude, longitude=longitude)
+
+ except:
+ print line, "Error :", sys.exc_info()[1]
+
+ csvfile.close()
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/query_category_inclusion.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,167 @@
+# -*- coding: utf-8 -*-
+'''
+Created on July 2, 2012
+
+@author: raphv
+'''
+
+from django.conf import settings
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdalab.models import WpCategory, WpCategoryInclusion
+from optparse import make_option
+from wikitools import api,wiki
+import sys
+import re
+import itertools
+from hdabo import utils
+from django.db.models import Count
+from django.db import transaction
+
+CATEGORY_PREFIX = u'Catégorie:'
+
+class Command(NoArgsCommand):
+ '''
+ query and update wikipedia for tag title.
+ '''
+ options = ''
+ help = """query and update wikipedia for tag title."""
+
+ option_list = NoArgsCommand.option_list + (
+ make_option('--all',
+ action='store_true',
+ dest='all',
+ default=False,
+ help='force all categories to be updated, not only those not yet processed'),
+ make_option('--force',
+ action='store_true',
+ dest='force',
+ default=False,
+ help='ask no questions'),
+ make_option('--site',
+ action='store',
+ type='string',
+ dest='site_url',
+ default="http://fr.wikipedia.org/w/api.php",
+ help='the url for the wikipedia site'),
+ make_option('--limit',
+ action='store',
+ type='int',
+ dest='limit',
+ default= -1,
+ help='number of categories to process'),
+ make_option('--start',
+ action='store',
+ type='int',
+ dest='start',
+ default=0,
+ help='number of categories to ignore'),
+ make_option('--category',
+ action='append',
+ dest='category',
+ type='string',
+ default=[],
+ help='the categories to query'),
+
+ )
+
+
+ def query_all_categories(self, category_title, site):
+
+ params = {'action':'query', 'cmtitle':category_title, 'list':'categorymembers', 'cmlimit': 'max'}
+
+ res = []
+
+ wpquery = api.APIRequest(site, params) #@UndefinedVariable
+ response = wpquery.query()
+
+ if self.verbosity > 1:
+ print "Query category : " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
+ print repr(response)
+
+ members = response.get('query', {}).get('categorymembers', [])
+
+ for member in members:
+ title = member.get('title',"")
+ if re.match(CATEGORY_PREFIX, title):
+ res.append(re.sub(CATEGORY_PREFIX, "", title))
+
+ if self.verbosity > 1:
+ print "Query categories result: "
+ print repr(res)
+
+ return res
+
+ def process_categories(self, cat_list, parent_cat):
+ for cat in cat_list:
+ child_cat,created = WpCategory.objects.get_or_create(label=cat) #@UnusedVariable
+ WpCategoryInclusion.objects.get_or_create(parent_category=parent_cat, child_category=child_cat)
+
+ def handle_noargs(self, **options):
+
+ self.style = no_style()
+
+ interactive = options.get('interactive', True)
+
+ self.verbosity = int(options.get('verbosity', '1'))
+
+ force = options.get('force', False)
+
+ limit = options.get("limit", -1)
+ start = options.get("start", 0)
+
+ site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
+
+ types_mask = 0
+
+ if self.verbosity > 2:
+ print "option passed : " + repr(options)
+
+ queryset = WpCategory.objects.filter(tags__hidden = False).distinct()
+
+ cat_list = options.get("category", []);
+
+ if cat_list:
+ queryset = queryset.filter(label__in=cat_list)
+ elif options.get('all',False):
+ queryset = queryset.annotate(wpc=Count('child_categories')).filter(wpc = 0)
+
+ queryset = queryset.order_by("label")
+
+ if limit >= 0:
+ queryset = queryset[start:limit]
+ elif start > 0:
+ queryset = queryset[start:]
+
+ if self.verbosity > 2 :
+ print "Category Query is %s" % (queryset.query)
+
+ site = wiki.Wiki(site_url) #@UndefinedVariable
+
+
+ count = queryset.count()
+ if self.verbosity > 1:
+ print "Processing %d categories" % (count)
+
+ if not force and interactive:
+ confirm = raw_input("You have requested to query and replace the wikipedia information for %d categories.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
+ else:
+ confirm = 'yes'
+
+ if confirm != "yes":
+ print "wikipedia query cancelled"
+ return
+
+ for i, category in enumerate(queryset):
+
+ if self.verbosity > 1:
+ print "processing category %s (%d/%d)" % (category.label, i + 1, count)
+ else:
+ utils.show_progress(i + 1, count, category.label, 60)
+
+ title = CATEGORY_PREFIX + category.label
+ # query categories
+
+ with transaction.commit_on_success():
+ res = self.query_all_categories(title, site)
+ self.process_categories(res, category)
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/query_dbpedia.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,205 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 30, 2012
+
+@author: ymh
+'''
+
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+
+from optparse import make_option
+from django.conf import settings
+from django.db.models import Count
+from django.db import transaction
+from hdabo.models import Tag
+from hdalab.models import DbpediaFields, TagLinks
+from hdabo.utils import show_progress
+from rdflib.graph import Graph
+from rdflib import URIRef
+import traceback
+import sys
+from hdalab.models.dataviz import DbpediaFieldsTranslation
+from django import db
+from SPARQLWrapper import SPARQLWrapper, RDF
+
+class Command(NoArgsCommand):
+ '''
+ query and update wikipedia for tag title.
+ '''
+ options = ''
+ help = """query and update wikipedia for tag title."""
+
+ option_list = NoArgsCommand.option_list + (
+ make_option('--all',
+ action='store_true',
+ dest='all',
+ default=False,
+ help='force all tags to be updated, not only those not yet processed'),
+ make_option('--force',
+ action='store_true',
+ dest='force',
+ default=False,
+ help='ask no questions'),
+ make_option('--random',
+ action='store_true',
+ dest='random',
+ default=False,
+ help='randomize query on tags'),
+ make_option('--limit',
+ action='store',
+ type='int',
+ dest='limit',
+ default= -1,
+ help='number of tag to process'),
+ make_option('--start',
+ action='store',
+ type='int',
+ dest='start',
+ default=0,
+ help='number of tag to ignore'),
+ make_option('--tag',
+ action='append',
+ dest='tags',
+ type='string',
+ default=[],
+ help='the tag to query'),
+ )
+
+ def handle_noargs(self, **options):
+
+ self.style = no_style()
+
+ self.interactive = options.get('interactive', True)
+
+ self.verbosity = int(options.get('verbosity', '1'))
+
+ self.force = options.get('force', False)
+
+ self.limit = options.get("limit", -1)
+ self.start = options.get("start", 0)
+
+ self.random = options.get('random', False)
+
+ if self.verbosity > 2:
+ print "option passed : " + repr(options)
+
+ self.tag_list = options.get("tags", []);
+
+ queryset = Tag.objects.exclude(dbpedia_uri= None)
+
+
+ if self.tag_list:
+ queryset = queryset.filter(label__in=self.tag_list)
+ elif not options.get('all',False):
+ queryset = queryset.annotate(dbfc=Count('dbpedia_fields')).filter(dbfc = 0)
+
+ if self.random:
+ queryset = queryset.order_by("?")
+ else:
+ queryset = queryset.order_by("label")
+
+ if self.limit >= 0:
+ queryset = queryset[self.start:self.limit]
+ elif self.start > 0:
+ queryset = queryset[self.start:]
+
+ if self.verbosity > 2 :
+ print "Tag Query is %s" % (queryset.query)
+
+ count = queryset.count()
+
+ if count == 0:
+ print "No tag to query : exit."
+ return
+
+
+ if not self.force and self.interactive:
+ confirm = raw_input("You have requested to query and replace the dbpedia information for %d tags.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
+ else:
+ confirm = 'yes'
+
+ if confirm != "yes":
+ print "dbpedia query cancelled"
+ return
+
+ endpoint = SPARQLWrapper("http://dbpedia.org/sparql", returnFormat=RDF)
+
+ writer = None
+ for i,tag in enumerate(queryset):
+ writer = show_progress(i+1, count, tag.label, 50, writer)
+ db.reset_queries()
+
+ #abstract query
+ #"select ?y
+ # where {<%s> <http://dbpedia.org/ontology/abstract> ?y}" % (tag.dbpedia_uri)
+
+ #rdf_uri = re.sub('\/resource\/', "/data/", tag.dbpedia_uri) + ".n3"
+ #g = Graph()
+ try :
+ abstracts = {}
+ labels = {}
+ thumbnail = None
+ with transaction.commit_on_success():
+ endpoint.setQuery("select distinct ?y where {<%s> <http://dbpedia.org/ontology/abstract> ?y}" % (tag.dbpedia_uri))
+ res_abstracts = endpoint.queryAndConvert()
+ for _,_,o in res_abstracts.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
+ abstracts[o.language] = (unicode(o), True)
+
+ endpoint.setQuery("select distinct ?y where {<%s> <http://www.w3.org/2000/01/rdf-schema#label> ?y}" % (tag.dbpedia_uri))
+ res_labels = endpoint.queryAndConvert()
+ for _,_,o in res_labels.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
+ labels[o.language] = (unicode(o), True)
+
+ endpoint.setQuery("select distinct ?y where {<%s> <http://dbpedia.org/ontology/thumbnail> ?y} limit 1" % (tag.dbpedia_uri))
+ res_thumbnails = endpoint.queryAndConvert()
+ for _,_,o in res_thumbnails.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
+ thumbnail = unicode(o)
+
+ endpoint.setQuery('select distinct ?y where { <%s> ?p ?y . FILTER regex(?y, "^http://dbpedia.org/resource")}' % (tag.dbpedia_uri))
+ res_links = endpoint.queryAndConvert()
+ for _,_,o in res_links.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
+ tagqs = Tag.objects.filter(dbpedia_uri=unicode(o))
+ if tagqs:
+ TagLinks.objects.get_or_create(subject=tag, object=tagqs[0])
+
+ ref_label_lang, (ref_label, _) = ('fr',labels['fr']) if 'fr' in labels else ('en',labels['en']) if 'en' in labels else labels.items()[0] if len(labels) > 0 else ('fr',(tag.label, True))
+ ref_abstract_lang, (ref_abstract, _) = ('fr',abstracts['fr']) if 'fr' in abstracts else ('en',abstracts['en']) if 'en' in abstracts else abstracts.items()[0] if len(abstracts) > 0 else ('fr',(None, 'True'))
+
+ for lang in settings.LANGUAGES:
+ if lang[0] not in labels:
+ labels[lang[0]]= (ref_label, False)
+ if lang[0] not in abstracts:
+ abstracts[lang[0]] = (ref_abstract, False)
+
+ dbfield , created = DbpediaFields.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri,tag=tag, defaults={'abstract':ref_abstract, 'thumbnail':thumbnail, 'label':ref_label}) #@UndefinedVariable
+ if not created:
+ dbfield.abstract = ref_abstract
+ dbfield.thumbnail = thumbnail
+ dbfield.label = ref_label
+ dbfield.save()
+ DbpediaFieldsTranslation.objects.filter(master=dbfield).delete()
+
+ consolidated_trans = {}
+ for lang,label in labels.iteritems():
+ consolidated_trans[lang] = [label,(ref_abstract, lang==ref_abstract_lang)]
+ for lang,abstract in abstracts.iteritems():
+ if lang in consolidated_trans:
+ consolidated_trans[lang][1] = abstract
+ else:
+ consolidated_trans[lang] = [(ref_label, lang==ref_label_lang), abstract]
+
+ for lang, trans in consolidated_trans.iteritems():
+ label, abstract = tuple(trans)
+ DbpediaFieldsTranslation.objects.create(master=dbfield, language_code=lang, label=label[0], is_label_translated=label[1], abstract=abstract[0], is_abstract_translated=abstract[1])
+
+
+ except Exception as e:
+ print "\nError processing resource %s : %s" %(rdf_uri,unicode(e))
+ traceback.print_exception(type(e), e, sys.exc_info()[2])
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/query_geo_inclusion.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 22, 2012
+
+@author: raphv
+'''
+
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdabo.utils import show_progress
+from hdabo.models import Tag
+from hdalab.models import Country, GeoInclusion
+from SPARQLWrapper import SPARQLWrapper, JSON
+import re
+
+class Command(NoArgsCommand):
+ def handle_noargs(self, **options):
+ self.style = no_style()
+
+ qs = Tag.objects.filter(category__label="Localisation").exclude(dbpedia_uri = None)
+ total = qs.count()
+
+ endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
+ endpoint.setReturnFormat(JSON)
+ sparqltext = """
+ SELECT ?resource WHERE {
+ { <%s> ?resource <http://dbpedia.org/ontology/Country> . }
+ UNION
+ { <%s> <http://dbpedia.org/ontology/country> ?resource . }
+ }
+ """
+ resourceprefix = "http://dbpedia.org/resource/"
+ identityuri = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
+
+ writer = None
+
+ for i,tag in enumerate(qs):
+ endpoint.setQuery(sparqltext % (tag.dbpedia_uri, tag.dbpedia_uri))
+
+ results = endpoint.query().convert()['results']['bindings']
+
+ if len(results) == 1: # We don't want places located in multiple countries
+
+ resourceuri = results[0]['resource']['value']
+
+ if re.match(resourceprefix, resourceuri):
+ countrytxt = re.findall('([^/]+$)', resourceuri)[0]
+
+ country, created = Country.objects.get_or_create(dbpedia_uri=resourceuri)
+ GeoInclusion.objects.get_or_create(tag=tag, country=country)
+
+ if resourceuri == identityuri:
+ countrytxt = '<is a country>'
+
+ country, created = Country.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri)
+ GeoInclusion.objects.get_or_create(tag=tag, country=country)
+
+ else:
+ countrytxt = '<unknown>'
+
+ writer = show_progress(i+1, total, '%s => %s'%(tag.label, countrytxt), 50, writer)
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/query_wikipedia_category.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,396 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jun 7, 2011
+
+@author: ymh
+'''
+
+from django.conf import settings
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdabo.models import Tag
+from hdalab.models import WpCategory, TagWpCategory, TagInfobox, InfoboxParameter
+from optparse import make_option
+from wikitools import api,wiki
+import sys
+import re
+import itertools
+from hdabo import utils
+from django.db.models import Count
+from django.db import transaction
+
+
+TYPES_MASK_DICT = {
+ u'visible': 0b001,
+ u'hidden': 0b010,
+ u'infobox': 0b100,
+ u'all': 0b111,
+ }
+
+START_PATTERN = re.compile(u"\{\{\s?Infobox\s+([^|]+)", re.M|re.U|re.I)
+END_PATTERN = re.compile(u"\{\{|\}\}", re.M|re.U)
+SPLIT_PATTERN = re.compile("\s*?\|\s*([\w]+[^=|]*)\s*=", re.U|re.M)
+DELIMITER_PATTERN = re.compile("\{{2,3}|\}{2,3}|\[\[|\]\]|\[|\]")
+COMMENT_PATTERN = re.compile("<!--.*?-->",re.U|re.M)
+
+
+
+class Command(NoArgsCommand):
+ '''
+ query and update wikipedia for tag title.
+ '''
+ options = ''
+ help = """query and update wikipedia for tag title."""
+
+ option_list = NoArgsCommand.option_list + (
+ make_option('--all',
+ action='store_true',
+ dest='all',
+ default=False,
+ help='force all tags to be updated, not only those not yet processed'),
+ make_option('--force',
+ action='store_true',
+ dest='force',
+ default=False,
+ help='ask no questions'),
+ make_option('--random',
+ action='store_true',
+ dest='random',
+ default=False,
+ help='randomize query on tags'),
+ make_option('--site',
+ action='store',
+ type='string',
+ dest='site_url',
+ default="http://fr.wikipedia.org/w/api.php",
+ help='the url for the wikipedia site'),
+ make_option('--limit',
+ action='store',
+ type='int',
+ dest='limit',
+ default= -1,
+ help='number of tag to process'),
+ make_option('--start',
+ action='store',
+ type='int',
+ dest='start',
+ default=0,
+ help='number of tag to ignore'),
+ make_option('--type',
+ action='append',
+ dest='types',
+ type='choice',
+ choices=['visible','hidden', 'infobox', 'all'],
+ default=[],
+ help='what type of query to perform : visible : visible categories, hidden : hidden categories, infobox: infoboxes, all: all of them. This option can be assed multiple times'),
+ make_option('--use-label',
+ action='store_true',
+ dest='use_label',
+ default=False,
+ help='use label instead of pageid to query wikipedia'),
+ make_option('--tag',
+ action='append',
+ dest='tags',
+ type='string',
+ default=[],
+ help='the tag to query'),
+
+ )
+
+
+# def process_wp_response(self, label, response):
+#
+# query_dict = response['query']
+# # get page if multiple pages or none -> return Tag.null_result
+# pages = query_dict.get("pages", {})
+# if len(pages) > 1 or len(pages) == 0:
+# return None, Tag.TAG_URL_STATUS_DICT["null_result"], None, None
+#
+# page = pages.values()[0]
+#
+# if u"invalid" in page or u"missing" in page:
+# return None, Tag.TAG_URL_STATUS_DICT["null_result"], None, None
+#
+# url = page.get(u'fullurl', None)
+# pageid = page.get(u'pageid', None)
+# new_label = page[u'title']
+#
+# if self.__is_homonymie(page):
+# status = Tag.TAG_URL_STATUS_DICT["homonyme"]
+# elif u"redirect" in page:
+# status = Tag.TAG_URL_STATUS_DICT["redirection"]
+# else:
+# status = Tag.TAG_URL_STATUS_DICT["match"]
+#
+# return new_label, status, url, pageid
+
+ def query_all_categories(self, hidden, site, pageid, use_label):
+
+ clshow = 'hidden' if hidden else '!hidden'
+ params = {'action':'query', 'titles' if use_label else 'pageids': pageid, 'prop':'categories', 'clshow': clshow}
+
+ clcontinue = ""
+ res = []
+
+ while clcontinue is not None:
+ if clcontinue:
+ params['clcontinue'] = clcontinue
+
+ wpquery = api.APIRequest(site, params) #@UndefinedVariable
+ response = wpquery.query()
+
+ if self.verbosity > 1:
+ print "Query infoboxes : " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
+ print repr(response)
+
+
+ query_dict = response.get('query', None)
+
+ if query_dict is None:
+ return res
+
+ pages = query_dict.get("pages", {})
+ if len(pages) > 1 or len(pages) == 0:
+ return res
+
+ page = pages.values()[0]
+
+ for cat in page.get('categories',[]):
+ title = cat.get('title',"")
+ title = title[title.find(":")+1:]
+ if title and clcontinue != ("%s|%s" % (pageid,title)):
+ res.append(title)
+
+ clcontinue = response.get('query-continue', {}).get('categories',{}).get('clcontinue', None)
+
+ if self.verbosity > 1:
+ print "Query infoboxes RES: "
+ print repr(res)
+
+ return res
+
+ def process_categories(self, cat_list, hidden, tag):
+
+ for cat in cat_list:
+ wp_cat,created = WpCategory.objects.get_or_create(label=cat) #@UnusedVariable
+ TagWpCategory.objects.get_or_create(tag=tag, wp_category=wp_cat, hidden=hidden)
+
+
+ def query_infoboxes(self, site, pageid, use_label):
+
+ res = []
+ params = {'action':'query', 'titles' if use_label else 'pageids': pageid, 'prop':'revisions', 'rvprop': 'ids|content'}
+ wpquery = api.APIRequest(site, params) #@UndefinedVariable
+ response = wpquery.query()
+
+ query_dict = response.get('query', None)
+
+ if query_dict is None:
+ return res
+
+ pages = query_dict.get("pages", {})
+ if len(pages) > 1 or len(pages) == 0:
+ return res
+
+ page = pages.values()[0]
+
+ if 'revisions' not in page or not page['revisions']:
+ return res
+
+ rev = page['revisions'][0]
+
+ content = rev['*']
+
+ start = 0
+ depth = 0
+ current_infobox_name = None
+ current_start = 0
+
+ while start <= len(content):
+ if depth==0:
+ resm = START_PATTERN.search(content[start:])
+ if resm is None:
+ break
+ depth = 1
+ current_start = resm.start()+start
+ start += resm.end()+1
+ current_infobox_name = resm.group(1)
+ else:
+ resm = END_PATTERN.search(content[start:])
+ if resm is None:
+ break
+ if resm.group(0) == "{{":
+ depth += 1
+ elif resm.group(0) == "}}":
+ depth -= 1
+ if depth == 0:
+ res.append((content[current_start:resm.end()+start], current_infobox_name))
+ start += resm.end()+1
+
+ return_val = (rev['revid'],res)
+
+ if self.verbosity > 1:
+ print "Query infoboxes url: " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
+ print repr(return_val)
+
+ return return_val
+
+ def split_infoboxes(self, src):
+
+ start = 0
+ previous_end = 0
+ split_indexes = []
+ delimiter_stack = []
+ while start<=len(src):
+ resd = DELIMITER_PATTERN.search(src[start:])
+ ress = SPLIT_PATTERN.search(src[start:]) if len(delimiter_stack) == 0 else None
+ startd = resd.start() if resd is not None else sys.maxint
+ starts = ress.start() if ress is not None else sys.maxint
+ if starts < startd:
+ if len(split_indexes)>0:
+ split_indexes.append((previous_end, ress.start(0)+start))
+ split_indexes.append((ress.start(1)+start, ress.end(1)+start))
+ start += ress.end(0)
+ previous_end = start
+ elif startd < sys.maxint:
+ if resd.group().startswith("{") or resd.group().startswith("[") :
+ delimiter_stack.append(resd.group())
+ elif len(delimiter_stack)>0 and ( (delimiter_stack[-1].startswith('{') and resd.group()[0] == '}') or (delimiter_stack[-1].startswith('[') and resd.group()[0] == ']') ) and len(delimiter_stack[-1]) == len(resd.group()):
+ delimiter_stack.pop()
+ start += resd.end()
+ else:
+ break
+
+ if previous_end > 0:
+ split_indexes.append((previous_end,len(src)))
+ res = [src[start:end] for start,end in split_indexes]
+ return res
+
+
+
+ def process_infoboxes(self, infobox_defs, tag):
+
+ if not infobox_defs:
+ return
+
+ revision_id = infobox_defs[0]
+ for infobox in infobox_defs[1]:
+ src = infobox[0].strip(' \t\n\r')
+ name = infobox[1]
+ tag_infobox, created = TagInfobox.objects.get_or_create(tag=tag, name=name, revision_id = revision_id, defaults={'source': src})
+ if not created:
+ tag_infobox.source = src
+ tag_infobox.save()
+
+ src = COMMENT_PATTERN.sub('',src)
+ src = START_PATTERN.sub('',src[:-2]).strip()
+
+ keyvalues = self.split_infoboxes(src)
+
+ for key,value in itertools.izip(*[itertools.islice(keyvalues, i, None, 2) for i in range(2)]):
+ param, created = InfoboxParameter.objects.get_or_create(tag_infobox=tag_infobox, param_name=key.strip(), defaults={'param_value':value.strip()})
+ if not created:
+ param.param_value = value.strip()
+ param.save()
+
+ def handle_noargs(self, **options):
+
+ self.style = no_style()
+
+ interactive = options.get('interactive', True)
+
+ self.verbosity = int(options.get('verbosity', '1'))
+ use_label = options.get('use_label', False)
+
+ force = options.get('force', False)
+
+ limit = options.get("limit", -1)
+ start = options.get("start", 0)
+
+ site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
+
+ random = options.get('random', False)
+
+ types_mask = 0
+ types_list = options.get('types', [])
+
+ if len(types_list) == 0:
+ types_mask = TYPES_MASK_DICT['all']
+ else:
+ for t in types_list:
+ types_mask |= TYPES_MASK_DICT[t]
+
+ if self.verbosity > 1 :
+ print "types mask %s " % (bin(types_mask))
+
+ if self.verbosity > 2:
+ print "option passed : " + repr(options)
+
+
+ queryset = Tag.objects.exclude(wikipedia_pageid= None)
+
+ tag_list = options.get("tags", []);
+
+ if tag_list:
+ queryset = queryset.filter(label__in=tag_list)
+ elif not options.get('all',False):
+ queryset = queryset.annotate(wpc=Count('wp_categories')).filter(wpc = 0)
+ #else:
+ # queryset = Tag.objects.filter(url_status=None)
+
+ if random:
+ queryset = queryset.order_by("?")
+ else:
+ queryset = queryset.order_by("label")
+
+ if limit >= 0:
+ queryset = queryset[start:limit]
+ elif start > 0:
+ queryset = queryset[start:]
+
+ if self.verbosity > 2 :
+ print "Tag Query is %s" % (queryset.query)
+
+ site = wiki.Wiki(site_url) #@UndefinedVariable
+
+
+ count = queryset.count()
+ if self.verbosity > 1:
+ print "Processing %d tags" % (count)
+
+ if not force and interactive:
+ confirm = raw_input("You have requested to query and replace the wikipedia information for %d tags.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
+ else:
+ confirm = 'yes'
+
+ if confirm != "yes":
+ print "wikipedia query cancelled"
+ return
+
+
+
+ for i, tag in enumerate(queryset):
+
+ if self.verbosity > 1:
+ print "processing tag %s (%d/%d)" % (tag.label, i + 1, count)
+ else:
+ utils.show_progress(i + 1, count, tag.label, 60)
+
+ # query categories
+ wikipedia_pageid = tag.label if use_label else tag.wikipedia_pageid
+ if tag.url_status == Tag.TAG_URL_STATUS_DICT['redirection'] and tag.alternative_wikipedia_pageid is not None :
+ wikipedia_pageid = tag.alternative_label if use_label else tag.alternative_wikipedia_pageid
+
+ with transaction.commit_on_success():
+ if types_mask & TYPES_MASK_DICT['visible']:
+ res = self.query_all_categories(False, site, wikipedia_pageid, use_label)
+ self.process_categories(res, False, tag)
+
+ if types_mask & TYPES_MASK_DICT['hidden']:
+ res = self.query_all_categories(True, site, wikipedia_pageid, use_label)
+ self.process_categories(res, True, tag)
+
+ if types_mask & TYPES_MASK_DICT['infobox']:
+ res = self.query_infoboxes(site, wikipedia_pageid, use_label)
+ self.process_infoboxes(res, tag)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/utils.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 2, 2012
+
+@author: ymh
+'''
+
+import cStringIO
+import csv
+import codecs
+
+class UnicodeWriter:
+ """
+ A CSV writer which will write rows to CSV file "f",
+ which is encoded in the given encoding.
+ """
+
+ def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
+ # Redirect output to a queue
+ self.queue = cStringIO.StringIO()
+ self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
+ self.stream = f
+ self.encoder = codecs.getincrementalencoder(encoding)()
+
+ def writerow(self, row):
+ self.writer.writerow([unicode(s).encode("utf-8") for s in row])
+ # Fetch UTF-8 output from the queue ...
+ data = self.queue.getvalue()
+ data = data.decode("utf-8")
+ # ... and reencode it into the target encoding
+ data = self.encoder.encode(data)
+ # write to the target stream
+ self.stream.write(data)
+ # empty queue
+ self.queue.truncate(0)
+
+ def writerows(self, rows):
+ for row in rows:
+ self.writerow(row)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0001_initial.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,131 @@
+# encoding: utf-8
+from south.db import db
+from south.v2 import SchemaMigration
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'WpCategory'
+ db.create_table('hdalab_wpcategory', ( #@UndefinedVariable
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=2048)),
+ ))
+ db.send_create_signal('hdalab', ['WpCategory']) #@UndefinedVariable
+
+ # Adding model 'TagWpCategory'
+ db.create_table('hdalab_tagwpcategory', ( #@UndefinedVariable
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='wp_categories', to=orm['hdabo.Tag'])),
+ ('wp_category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.WpCategory'])),
+ ('hidden', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ))
+ db.send_create_signal('hdalab', ['TagWpCategory']) #@UndefinedVariable
+
+ # Adding unique constraint on 'TagWpCategory', fields ['tag', 'wp_category', 'hidden']
+ db.create_unique('hdalab_tagwpcategory', ['tag_id', 'wp_category_id', 'hidden']) #@UndefinedVariable
+
+ # Adding model 'TagInfobox'
+ db.create_table('hdalab_taginfobox', ( #@UndefinedVariable
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='infoboxes', to=orm['hdabo.Tag'])),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=2048)),
+ ('source', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ('revision_id', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
+ ))
+ db.send_create_signal('hdalab', ['TagInfobox']) #@UndefinedVariable
+
+ # Adding unique constraint on 'TagInfobox', fields ['tag', 'name', 'revision_id']
+ db.create_unique('hdalab_taginfobox', ['tag_id', 'name', 'revision_id']) #@UndefinedVariable
+
+ # Adding model 'InfoboxParameter'
+ db.create_table('hdalab_infoboxparameter', ( #@UndefinedVariable
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('tag_infobox', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.TagInfobox'])),
+ ('param_name', self.gf('django.db.models.fields.CharField')(max_length=2048)),
+ ('param_value', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ))
+ db.send_create_signal('hdalab', ['InfoboxParameter']) #@UndefinedVariable
+
+ # Adding unique constraint on 'InfoboxParameter', fields ['tag_infobox', 'param_name']
+ db.create_unique('hdalab_infoboxparameter', ['tag_infobox_id', 'param_name']) #@UndefinedVariable
+
+
+ def backwards(self, orm):
+
+ # Removing unique constraint on 'InfoboxParameter', fields ['tag_infobox', 'param_name']
+ db.delete_unique('hdalab_infoboxparameter', ['tag_infobox_id', 'param_name']) #@UndefinedVariable
+
+ # Removing unique constraint on 'TagInfobox', fields ['tag', 'name', 'revision_id']
+ db.delete_unique('hdalab_taginfobox', ['tag_id', 'name', 'revision_id']) #@UndefinedVariable
+
+ # Removing unique constraint on 'TagWpCategory', fields ['tag', 'wp_category', 'hidden']
+ db.delete_unique('hdalab_tagwpcategory', ['tag_id', 'wp_category_id', 'hidden']) #@UndefinedVariable
+
+ # Deleting model 'WpCategory'
+ db.delete_table('hdalab_wpcategory') #@UndefinedVariable
+
+ # Deleting model 'TagWpCategory'
+ db.delete_table('hdalab_tagwpcategory') #@UndefinedVariable
+
+ # Deleting model 'TagInfobox'
+ db.delete_table('hdalab_taginfobox') #@UndefinedVariable
+
+ # Deleting model 'InfoboxParameter'
+ db.delete_table('hdalab_infoboxparameter') #@UndefinedVariable
+
+
+ models = {
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0002_dataviz.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,144 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'DbpediaFields'
+ db.create_table('hdalab_dbpediafields', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=2048, db_index=True)),
+ ('tag', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='dbpedia_fields', null=True, to=orm['hdabo.Tag'])),
+ ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
+ ('thumbnail', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
+ ))
+ db.send_create_signal('hdalab', ['DbpediaFields'])
+
+ # Adding model 'TagLinks'
+ db.create_table('hdalab_taglinks', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('subject', self.gf('django.db.models.fields.related.ForeignKey')(related_name='taglinks_subjects', to=orm['hdabo.Tag'])),
+ ('object', self.gf('django.db.models.fields.related.ForeignKey')(related_name='taglinks_objects', to=orm['hdabo.Tag'])),
+ ))
+ db.send_create_signal('hdalab', ['TagLinks'])
+
+ # Adding model 'CountryCode'
+ db.create_table('hdalab_countrycode', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=1024, db_index=True)),
+ ('isocode', self.gf('django.db.models.fields.CharField')(unique=True, max_length=3, db_index=True)),
+ ))
+ db.send_create_signal('hdalab', ['CountryCode'])
+
+ # Adding model 'TagYears'
+ db.create_table('hdalab_tagyears', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='years', to=orm['hdabo.Tag'])),
+ ('start_year', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+ ('end_yar', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+ ))
+ db.send_create_signal('hdalab', ['TagYears'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'DbpediaFields'
+ db.delete_table('hdalab_dbpediafields')
+
+ # Deleting model 'TagLinks'
+ db.delete_table('hdalab_taglinks')
+
+ # Deleting model 'CountryCode'
+ db.delete_table('hdalab_countrycode')
+
+ # Deleting model 'TagYears'
+ db.delete_table('hdalab_tagyears')
+
+
+ models = {
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdalab.countrycode': {
+ 'Meta': {'object_name': 'CountryCode'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0003_hdasession.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,113 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'HdaSession'
+ db.create_table('hdalab_hdasession', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('sessionid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=36, db_index=True)),
+ ('data', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ))
+ db.send_create_signal('hdalab', ['HdaSession'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'HdaSession'
+ db.delete_table('hdalab_hdasession')
+
+
+ models = {
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdalab.countrycode': {
+ 'Meta': {'object_name': 'CountryCode'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0004_remove_dbpedia_unicity.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,108 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Removing unique constraint on 'DbpediaFields', fields ['dbpedia_uri']
+ db.delete_unique('hdalab_dbpediafields', ['dbpedia_uri'])
+
+
+ def backwards(self, orm):
+
+ # Adding unique constraint on 'DbpediaFields', fields ['dbpedia_uri']
+ db.create_unique('hdalab_dbpediafields', ['dbpedia_uri'])
+
+
+ models = {
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdalab.countrycode': {
+ 'Meta': {'object_name': 'CountryCode'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0005_rename_end_year.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,114 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Deleting field 'TagYears.end_yar'
+ db.delete_column('hdalab_tagyears', 'end_yar')
+
+ # Adding field 'TagYears.end_year'
+ db.add_column('hdalab_tagyears', 'end_year', self.gf('django.db.models.fields.IntegerField')(default=2012, db_index=True), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # User chose to not deal with backwards NULL issues for 'TagYears.end_yar'
+ raise RuntimeError("Cannot reverse this migration. 'TagYears.end_yar' and its values cannot be restored.")
+
+ # Deleting field 'TagYears.end_year'
+ db.delete_column('hdalab_tagyears', 'end_year')
+
+
+ models = {
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdalab.countrycode': {
+ 'Meta': {'object_name': 'CountryCode'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0006_dbpedia_fields_one_to_one.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,114 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Changing field 'DbpediaFields.tag'
+ db.alter_column('hdalab_dbpediafields', 'tag_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, to=orm['hdabo.Tag']))
+
+ # Adding unique constraint on 'DbpediaFields', fields ['tag']
+ db.create_unique('hdalab_dbpediafields', ['tag_id'])
+
+
+ def backwards(self, orm):
+
+ # Removing unique constraint on 'DbpediaFields', fields ['tag']
+ db.delete_unique('hdalab_dbpediafields', ['tag_id'])
+
+ # Changing field 'DbpediaFields.tag'
+ db.alter_column('hdalab_dbpediafields', 'tag_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['hdabo.Tag']))
+
+
+ models = {
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdalab.countrycode': {
+ 'Meta': {'object_name': 'CountryCode'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0007_geographic_inclusion.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,139 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Deleting model 'CountryCode'
+ db.delete_table('hdalab_countrycode')
+
+ # Adding model 'GeoInclusion'
+ db.create_table('hdalab_geoinclusion', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('tag', self.gf('django.db.models.fields.related.OneToOneField')(related_name='locatedin', unique=True, to=orm['hdabo.Tag'])),
+ ('country', self.gf('django.db.models.fields.related.ForeignKey')(related_name='includes', to=orm['hdalab.Country'])),
+ ))
+ db.send_create_signal('hdalab', ['GeoInclusion'])
+
+ # Adding model 'Country'
+ db.create_table('hdalab_country', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=255, db_index=True)),
+ ))
+ db.send_create_signal('hdalab', ['Country'])
+
+
+ def backwards(self, orm):
+
+ # Adding model 'CountryCode'
+ db.create_table('hdalab_countrycode', (
+ ('isocode', self.gf('django.db.models.fields.CharField')(max_length=3, unique=True, db_index=True)),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(max_length=1024, unique=True, db_index=True)),
+ ))
+ db.send_create_signal('hdalab', ['CountryCode'])
+
+ # Deleting model 'GeoInclusion'
+ db.delete_table('hdalab_geoinclusion')
+
+ # Deleting model 'Country'
+ db.delete_table('hdalab_country')
+
+
+ models = {
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdalab.country': {
+ 'Meta': {'object_name': 'Country'},
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.geoinclusion': {
+ 'Meta': {'object_name': 'GeoInclusion'},
+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0008_datasheet_insee.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,304 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'DatasheetExtras'
+ db.create_table('hdalab_datasheetextras', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('datasheet', self.gf('django.db.models.fields.related.OneToOneField')(related_name='extras', unique=True, to=orm['hdabo.Datasheet'])),
+ ('insee', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.InseeCoords'], null=True, blank=True)),
+ ))
+ db.send_create_signal('hdalab', ['DatasheetExtras'])
+
+ # Adding model 'InseeCoords'
+ db.create_table('hdalab_inseecoords', (
+ ('insee', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
+ ('city_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('latitude', self.gf('django.db.models.fields.FloatField')()),
+ ('longitude', self.gf('django.db.models.fields.FloatField')()),
+ ))
+ db.send_create_signal('hdalab', ['InseeCoords'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'DatasheetExtras'
+ db.delete_table('hdalab_datasheetextras')
+
+ # Deleting model 'InseeCoords'
+ db.delete_table('hdalab_inseecoords')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdalab.country': {
+ 'Meta': {'object_name': 'Country'},
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'hdalab.datasheetextras': {
+ 'Meta': {'object_name': 'DatasheetExtras'},
+ 'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.geoinclusion': {
+ 'Meta': {'object_name': 'GeoInclusion'},
+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.inseecoords': {
+ 'Meta': {'object_name': 'InseeCoords'},
+ 'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+ 'latitude': ('django.db.models.fields.FloatField', [], {}),
+ 'longitude': ('django.db.models.fields.FloatField', [], {})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0009_i18n.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,308 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'DbpediaFieldsTranslation'
+ db.create_table('hdalab_dbpediafieldstranslation', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', to=orm['hdalab.DbpediaFields'])),
+ ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, blank=True)),
+ ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ))
+ db.send_create_signal('hdalab', ['DbpediaFieldsTranslation'])
+
+ # Adding unique constraint on 'DbpediaFieldsTranslation', fields ['master', 'language_code']
+ db.create_unique('hdalab_dbpediafieldstranslation', ['master_id', 'language_code'])
+
+
+ def backwards(self, orm):
+
+ # Removing unique constraint on 'DbpediaFieldsTranslation', fields ['master', 'language_code']
+ db.delete_unique('hdalab_dbpediafieldstranslation', ['master_id', 'language_code'])
+
+ # Deleting model 'DbpediaFieldsTranslation'
+ db.delete_table('hdalab_dbpediafieldstranslation')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 3, 8, 13, 47, 54, 155003)'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 3, 8, 13, 47, 54, 154782)'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdalab.country': {
+ 'Meta': {'object_name': 'Country'},
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'hdalab.datasheetextras': {
+ 'Meta': {'object_name': 'DatasheetExtras'},
+ 'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.dbpediafieldstranslation': {
+ 'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
+ 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
+ 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
+ },
+ 'hdalab.geoinclusion': {
+ 'Meta': {'object_name': 'GeoInclusion'},
+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.inseecoords': {
+ 'Meta': {'object_name': 'InseeCoords'},
+ 'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+ 'latitude': ('django.db.models.fields.FloatField', [], {}),
+ 'longitude': ('django.db.models.fields.FloatField', [], {})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0010_categoryinclusion.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,312 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'WpCategoryInclusion'
+ db.create_table('hdalab_wpcategoryinclusion', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('parent_category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='child_categories', to=orm['hdalab.WpCategory'])),
+ ('child_category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='parent_categories', to=orm['hdalab.WpCategory'])),
+ ))
+ db.send_create_signal('hdalab', ['WpCategoryInclusion'])
+
+ # Adding unique constraint on 'WpCategoryInclusion', fields ['parent_category', 'child_category']
+ db.create_unique('hdalab_wpcategoryinclusion', ['parent_category_id', 'child_category_id'])
+
+
+ def backwards(self, orm):
+
+ # Removing unique constraint on 'WpCategoryInclusion', fields ['parent_category', 'child_category']
+ db.delete_unique('hdalab_wpcategoryinclusion', ['parent_category_id', 'child_category_id'])
+
+ # Deleting model 'WpCategoryInclusion'
+ db.delete_table('hdalab_wpcategoryinclusion')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 7, 2, 5, 14, 31, 895549)'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 7, 2, 5, 14, 31, 895384)'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdalab.country': {
+ 'Meta': {'object_name': 'Country'},
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'hdalab.datasheetextras': {
+ 'Meta': {'object_name': 'DatasheetExtras'},
+ 'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.dbpediafieldstranslation': {
+ 'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
+ 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
+ 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
+ },
+ 'hdalab.geoinclusion': {
+ 'Meta': {'object_name': 'GeoInclusion'},
+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.inseecoords': {
+ 'Meta': {'object_name': 'InseeCoords'},
+ 'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+ 'latitude': ('django.db.models.fields.FloatField', [], {}),
+ 'longitude': ('django.db.models.fields.FloatField', [], {})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ },
+ 'hdalab.wpcategoryinclusion': {
+ 'Meta': {'unique_together': "(('parent_category', 'child_category'),)", 'object_name': 'WpCategoryInclusion'},
+ 'child_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parent_categories'", 'to': "orm['hdalab.WpCategory']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parent_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'child_categories'", 'to': "orm['hdalab.WpCategory']"})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0011_auto__add_field_dbpediafieldstranslation_is_label_translated__add_fiel.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,309 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'DbpediaFieldsTranslation.is_label_translated'
+ db.add_column('hdalab_dbpediafieldstranslation', 'is_label_translated', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
+
+ # Adding field 'DbpediaFieldsTranslation.is_abstract_translated'
+ db.add_column('hdalab_dbpediafieldstranslation', 'is_abstract_translated', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
+
+
+ def backwards(self, orm):
+
+ # Deleting field 'DbpediaFieldsTranslation.is_label_translated'
+ db.delete_column('hdalab_dbpediafieldstranslation', 'is_label_translated')
+
+ # Deleting field 'DbpediaFieldsTranslation.is_abstract_translated'
+ db.delete_column('hdalab_dbpediafieldstranslation', 'is_abstract_translated')
+
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 6, 7, 27, 20, 166066)'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 6, 7, 27, 20, 165955)'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ 'hdabo.author': {
+ 'Meta': {'object_name': 'Author'},
+ 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet': {
+ 'Meta': {'object_name': 'Datasheet'},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+ 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+ 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
+ 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+ 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+ 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+ 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+ 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.datasheet_college_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_college_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_domains': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_highschool_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_highschool_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.datasheet_primary_periods': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+ 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+ },
+ 'hdabo.datasheet_primary_themes': {
+ 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sort_value': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.documentformat': {
+ 'Meta': {'object_name': 'DocumentFormat'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.domain': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdabo.location': {
+ 'Meta': {'object_name': 'Location'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+ },
+ 'hdabo.organisation': {
+ 'Meta': {'object_name': 'Organisation'},
+ 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tag': {
+ 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+ 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+ 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+ 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+ 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.tagcategory': {
+ 'Meta': {'object_name': 'TagCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+ },
+ 'hdabo.taggedsheet': {
+ 'Meta': {'object_name': 'TaggedSheet'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+ 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+ 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'hdabo.timeperiod': {
+ 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+ 'school_period': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'hdalab.country': {
+ 'Meta': {'object_name': 'Country'},
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+ },
+ 'hdalab.datasheetextras': {
+ 'Meta': {'object_name': 'DatasheetExtras'},
+ 'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.dbpediafields': {
+ 'Meta': {'object_name': 'DbpediaFields'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+ 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+ },
+ 'hdalab.dbpediafieldstranslation': {
+ 'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
+ 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_abstract_translated': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_label_translated': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
+ 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
+ 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
+ },
+ 'hdalab.geoinclusion': {
+ 'Meta': {'object_name': 'GeoInclusion'},
+ 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.hdasession': {
+ 'Meta': {'object_name': 'HdaSession'},
+ 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+ },
+ 'hdalab.infoboxparameter': {
+ 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+ },
+ 'hdalab.inseecoords': {
+ 'Meta': {'object_name': 'InseeCoords'},
+ 'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+ 'latitude': ('django.db.models.fields.FloatField', [], {}),
+ 'longitude': ('django.db.models.fields.FloatField', [], {})
+ },
+ 'hdalab.taginfobox': {
+ 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.taglinks': {
+ 'Meta': {'object_name': 'TagLinks'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+ 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.tagwpcategory': {
+ 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+ 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+ 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tags'", 'to': "orm['hdalab.WpCategory']"})
+ },
+ 'hdalab.tagyears': {
+ 'Meta': {'object_name': 'TagYears'},
+ 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+ },
+ 'hdalab.wpcategory': {
+ 'Meta': {'object_name': 'WpCategory'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+ },
+ 'hdalab.wpcategoryinclusion': {
+ 'Meta': {'unique_together': "(('parent_category', 'child_category'),)", 'object_name': 'WpCategoryInclusion'},
+ 'child_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parent_categories'", 'to': "orm['hdalab.WpCategory']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parent_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'child_categories'", 'to': "orm['hdalab.WpCategory']"})
+ }
+ }
+
+ complete_apps = ['hdalab']
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/models/__init__.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,5 @@
+from hdalab.models.categories import (WpCategory, InfoboxParameter, TagInfobox,
+ TagWpCategory, WpCategoryInclusion)
+from hdalab.models.dataviz import TagYears, Country, GeoInclusion, TagLinks, DbpediaFields, HdaSession, InseeCoords, DatasheetExtras, DbpediaFieldsTranslation
+
+__all__ = ['WpCategory', 'InfoboxParameter', 'TagInfobox', 'TagWpCategory', 'TagYears', 'Country', 'GeoInclusion', 'TagLinks', 'DbpediaFields', 'DbpediaFieldsTranslation', 'HdaSession', 'InseeCoords', 'DatasheetExtras', 'WpCategoryInclusion']
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/models/categories.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,56 @@
+'''
+Created on Jan 26, 2012
+
+@author: ymh
+'''
+from django.db import models
+from hdabo.models import Tag
+
+
+class WpCategory(models.Model):
+ label = models.CharField(max_length=2048, unique=True, blank=False, null=False)
+
+ def __unicode__(self):
+ return unicode(self.label)
+
+ class Meta:
+ app_label = 'hdalab'
+ verbose_name_plural = "WpCategories"
+
+class TagWpCategory(models.Model):
+ tag = models.ForeignKey(Tag, related_name="wp_categories")
+ wp_category = models.ForeignKey(WpCategory, related_name="tags")
+ hidden = models.BooleanField(blank=False, null=False)
+
+ class Meta:
+ app_label = 'hdalab'
+ unique_together = ('tag', 'wp_category', 'hidden')
+
+class TagInfobox(models.Model):
+ tag = models.ForeignKey(Tag, related_name="infoboxes")
+ name = models.CharField(max_length=2048, unique=False, blank=False, null=False)
+ source = models.TextField(unique=False, blank=True, null=True)
+ revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
+
+ class Meta:
+ app_label = 'hdalab'
+ unique_together = ('tag','name','revision_id')
+
+class InfoboxParameter(models.Model):
+ tag_infobox = models.ForeignKey(TagInfobox)
+ param_name = models.CharField(max_length=2048, unique=False, blank=False, null=False)
+ param_value = models.TextField(unique=False, blank=True, null=True)
+
+ class Meta:
+ app_label = 'hdalab'
+ unique_together = ('tag_infobox','param_name')
+
+# Added on 02/07/2012
+
+class WpCategoryInclusion(models.Model):
+ parent_category = models.ForeignKey(WpCategory, related_name="child_categories")
+ child_category = models.ForeignKey(WpCategory, related_name="parent_categories")
+
+ class Meta:
+ app_label = 'hdalab'
+ unique_together = ('parent_category','child_category')
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/models/dataviz.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 27, 2012
+
+@author: ymh
+'''
+from django.db import models
+from hdabo.models import Tag, Datasheet
+
+
+class TagYears(models.Model):
+
+ tag = models.ForeignKey(Tag, related_name="years", blank=False, null=False, db_index=True)
+ start_year = models.IntegerField(blank=False, null=False, db_index=True)
+ end_year = models.IntegerField(blank=False, null=False, db_index=True)
+
+ class Meta:
+ app_label = 'hdalab'
+
+
+class TagLinks(models.Model):
+
+ subject = models.ForeignKey(Tag, blank=False, null=False, db_index=True, related_name="taglinks_subjects")
+ object = models.ForeignKey(Tag, blank=False, null=False, db_index=True, related_name="taglinks_objects")
+
+ class Meta:
+ app_label = 'hdalab'
+
+class Country(models.Model):
+
+ dbpedia_uri = models.URLField(verify_exists=False, max_length=255, blank=False, null=False, db_index=True, unique=True)
+
+ class Meta:
+ app_label = 'hdalab'
+
+class GeoInclusion(models.Model):
+
+ tag = models.OneToOneField(Tag, related_name="locatedin", db_index=True)
+ country = models.ForeignKey(Country, blank=False, null=False, related_name="includes", db_index=True)
+
+ class Meta:
+ app_label = 'hdalab'
+
+class DbpediaFields(models.Model):
+
+ dbpedia_uri = models.URLField(verify_exists=False, max_length=2048, blank=False, null=False, db_index=True, unique=False)
+ tag = models.OneToOneField(Tag, blank=True, null=True, db_index=True, related_name="dbpedia_fields")
+ abstract = models.TextField(blank=True, null=True)
+ thumbnail = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=False)
+ label = models.CharField(max_length=2048, unique=False, blank=True, null=True)
+
+ class Meta:
+ app_label = 'hdalab'
+
+
+class DbpediaFieldsTranslation(models.Model):
+
+ master = models.ForeignKey(DbpediaFields, blank=False, null=False, db_index=True, related_name="translations")
+ language_code = models.CharField(max_length=15, blank=False, null=False, db_index=True)
+ label = models.CharField(max_length=2048, unique=False, blank=True, null=False)
+ abstract = models.TextField(blank=True, null=True)
+ is_label_translated = models.BooleanField(default=True)
+ is_abstract_translated = models.BooleanField(default=True)
+ class Meta:
+ app_label = 'hdalab'
+ unique_together = ('master', 'language_code')
+
+
+class HdaSession(models.Model):
+
+ sessionid = models.CharField(max_length=36, unique=True, blank=False, null=False, db_index=True)
+ data = models.TextField(blank=True, null=True)
+
+ class Meta:
+ app_label = 'hdalab'
+
+class InseeCoords(models.Model):
+
+ insee = models.IntegerField(primary_key=True)
+ city_name = models.CharField(max_length=255, blank=False, null=False)
+ latitude = models.FloatField(blank=False, null=False)
+ longitude = models.FloatField(blank=False, null=False)
+
+ class Meta:
+ app_label = 'hdalab'
+
+class DatasheetExtras(models.Model):
+
+ datasheet = models.OneToOneField(Datasheet, related_name="extras", db_index=True)
+ insee = models.ForeignKey(InseeCoords, blank=True, null=True, db_index=True)
+
+ class Meta:
+ app_label = 'hdalab'
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/modwsgi.wsgi Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,38 @@
+import os
+import sys
+import site
+
+
+
+def application(environ, start_response):
+
+ global g_env_set
+
+ if 'g_env_set' not in globals() or not g_env_set:
+ os.environ['DJANGO_SETTINGS_MODULE'] = environ['DJANGO_SETTINGS_MODULE']
+
+ prev_sys_path = list(sys.path)
+
+ sys.path.append(environ['PROJECT_PATH'])
+ for path in environ.get('PYTHON_PATH', "").split(os.pathsep):
+ if path:
+ site.addsitedir(path) #@UndefinedVariable
+
+ new_sys_path = []
+ for item in list(sys.path):
+ if item not in prev_sys_path and item not in new_sys_path:
+ new_sys_path.append(item)
+ sys.path.remove(item)
+ sys.path[:0] = new_sys_path
+ g_env_set = True
+
+ import django.core.handlers.wsgi
+
+ _application = django.core.handlers.wsgi.WSGIHandler()
+
+ if environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
+ import pydevd #@UnresolvedImport
+ pydevd.settrace(suspend=False)
+
+ return _application(environ, start_response)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/settings.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+# Django settings for hdalab project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+ # ('Your Name', 'your_email@example.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+ 'NAME': '', # Or path to database file if using sqlite3.
+ 'USER': '', # Not used with sqlite3.
+ 'PASSWORD': '', # Not used with sqlite3.
+ 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
+ 'PORT': '', # Set to empty string for default. Not used with sqlite3.
+ }
+}
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'America/Chicago'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'fr-fr'
+
+ugettext = lambda s:s
+
+LANGUAGES = (
+ ('fr', ugettext('French')),
+ ('en', ugettext('English')),
+ ('it', ugettext('Italian')),
+ ('de', ugettext('German')),
+ ('es', ugettext('Spanish')),
+ ('ja', ugettext('Japanese')),
+ #('zh-tw', ugettext('Chinese')),
+)
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# If you set this to False, Django will not format dates, numbers and
+# calendars according to the current locale
+USE_L10N = True
+
+# Absolute filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = ''
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = ''
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = ''
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = '/static/'
+
+# URL prefix for admin static files -- CSS, JavaScript and images.
+# Make sure to use a trailing slash.
+# Examples: "http://foo.com/static/admin/", "/static/admin/".
+#ADMIN_MEDIA_PREFIX = '/static/admin/'
+
+# Additional locations of static files
+STATICFILES_DIRS = (
+ # Put strings here, like "/home/html/static" or "C:/www/django/static".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+)
+
+# List of finder classes that know how to find static files in
+# various locations.
+STATICFILES_FINDERS = (
+ 'django.contrib.staticfiles.finders.FileSystemFinder',
+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
+)
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = 'u!@fo&-)d-hqz7==jmc2*_^__wod8$k^lb7^)y@ihbok)gn4fe'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.Loader',
+ 'django.template.loaders.app_directories.Loader',
+# 'django.template.loaders.eggs.Loader',
+)
+
+MIDDLEWARE_CLASSES = (
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.locale.LocaleMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+)
+
+ROOT_URLCONF = 'hdalab.urls'
+
+TEMPLATE_DIRS = (
+ # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+ # Always use forward slashes, even on Windows.
+ # Don't forget to use absolute paths, not relative paths.
+)
+
+INSTALLED_APPS = (
+ 'south',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'django.contrib.admin',
+ 'django_extensions',
+ 'hdabo',
+ 'hdalab',
+)
+
+# A sample logging configuration. The only tangible logging
+# performed by this configuration is to send an email to
+# the site admins on every HTTP 500 error.
+# See http://docs.djangoproject.com/en/dev/topics/logging for
+# more details on how to customize your logging configuration.
+#LOGGING = {
+# 'version': 1,
+# 'disable_existing_loggers': False,
+# 'handlers': {
+# 'mail_admins': {
+# 'level': 'ERROR',
+# 'class': 'django.utils.log.AdminEmailHandler'
+# }
+# },
+# 'loggers': {
+# 'django.request': {
+# 'handlers': ['mail_admins'],
+# 'level': 'ERROR',
+# 'propagate': True,
+# },
+# }
+#}
+
+HAYSTACK_SITECONF = 'hdabo.search.sites'
+HAYSTACK_SEARCH_ENGINE = 'hdabo.search.french_whoosh'
+#HAYSTACK_WHOOSH_PATH = os.path.abspath(BASE_DIR + "../index/").rstrip("/") + "/"
+
+WIKIPEDIA_API_URL = "http://fr.wikipedia.org/w/api.php"
+WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s"
+DBPEDIA_URI_TEMPLATE = "http://dbpedia.org/resource/%s"
+
+LOCALE_PATHS = ()
+
+from hdalab.config import * #@UnusedWildImport
+
Binary file src/hdalab/static/hdalab/css/DroidSerif-Bold.ttf has changed
Binary file src/hdalab/static/hdalab/css/DroidSerif-BoldItalic.ttf has changed
Binary file src/hdalab/static/hdalab/css/DroidSerif-Italic.ttf has changed
Binary file src/hdalab/static/hdalab/css/DroidSerif-Regular.ttf has changed
Binary file src/hdalab/static/hdalab/css/OpenSans-Bold.ttf has changed
Binary file src/hdalab/static/hdalab/css/OpenSans-BoldItalic.ttf has changed
Binary file src/hdalab/static/hdalab/css/OpenSans-Italic.ttf has changed
Binary file src/hdalab/static/hdalab/css/OpenSans-Regular.ttf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/cattree.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,52 @@
+.leftzone {
+ width: 280px;
+ min-height: 400px;
+ float: left;
+ height: 100%;
+ padding-right: 20px;
+ border-right: 1px solid #999;
+}
+
+.leftzone h2 {
+ font-size: 16px; font-weight: bold; margin-bottom: 5px;
+}
+
+.leftzone h3 {
+ font-size: 13px; font-weight: bold; margin: 30px 0 5px;
+}
+
+.leftzone input {
+ background: #ffffff; width: 260px; font-size: 14px; font-weight: bold; margin: 5px 0;
+}
+
+.results {
+ margin-top: 30px;
+}
+
+.content-results {
+ color: #000060;
+}
+
+ul.disciplist, ul.theslist {
+ list-style: none; margin: 10px 5px;
+}
+
+.disciplist li, .theslist li {
+ font-size: 12px; font-weight: bold;
+}
+
+.disciplist a, .theslist a {
+ color: #000066;
+}
+
+.disciplist .selected a, .theslist .selected a {
+ color: #0000ff;
+}
+
+.ui-autocomplete strong {
+ font-weight: bold; color: #990000;
+}
+
+div.cattree {
+ margin: 10px 0 0 320px;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/common.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,141 @@
+@font-face
+{
+ font-family: "Open Sans"; src: url(OpenSans-Regular.ttf);
+}
+
+@font-face
+{
+ font-family: "Open Sans"; font-weight: bold; src: url(OpenSans-Bold.ttf);
+}
+
+@font-face
+{
+ font-family: "Open Sans"; font-style: italic; src: url(OpenSans-Italic.ttf);
+}
+
+@font-face
+{
+ font-family: "Open Sans"; font-weight: bold; font-style: italic; src: url(OpenSans-BoldItalic.ttf);
+}
+
+/* Browser-reset CSS */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+
+input::-moz-focus-inner /*Remove button padding in FF*/
+{
+ border: 0;
+ padding: 0;
+}
+
+table {
+ border-collapse: separate; border-spacing: 0;
+}
+
+th, td {
+ vertical-align: top;
+}
+
+img a {
+ border: none;
+}
+
+/* Body */
+
+body {
+ font-family: "Open Sans", Arial, Helvetica, sans-serif; background: url(../img/bgdhdalab.png) top repeat-x #ffffff; color: #000000; font-size: 10px;
+}
+
+input, textarea {
+ font-family: "Open Sans", Arial, Helvetica, sans-serif; background: transparent;
+}
+
+a {
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+/* Main container */
+
+#header {
+ position: relative; width: 960px; margin: 0 auto; height: 65px;
+}
+
+#container {
+ position: relative; width: 960px; margin: 0 auto; min-height: 800px;
+}
+
+h1 {
+ margin: 5px 0 10px; font-size: 34px;
+}
+
+h1 a {
+ color: #ffffff;
+}
+
+h1 a:hover {
+ color: #e07000;
+}
+
+#nav {
+ float: right; list-style: none; margin-top: 3px;
+}
+
+#nav li {
+ float: left; font-size: 14px; margin-left: 15px; font-weight: bold;
+ color: #CCCCCC;
+}
+
+#nav a {
+ color: #ffffff;
+}
+
+#nav a:hover {
+ color: #e07000;
+}
+
+#nav a.actif {
+ color: #ffff80;
+}
+
+#footer {
+ width: 100%; float: left; clear: both; background: url(../img/bgdfooter.png) top repeat-x #b1b4c0; padding: 110px 0 20px 0;
+}
+
+#footer-contents {
+ list-style: none; width: 960px; margin: 0 auto; color: #ffffff;
+}
+
+#footer-contents li {
+ float: left; width: 240px;
+}
+
+#footer-contents p {
+ font-size: 13px; margin: 2px 0;
+}
+
+#footer-contents img {
+ display: block; margin: 0 auto;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/completion.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,195 @@
+#titlebar, #columns {
+ width: 100%;
+ clear: both;
+}
+
+.langbutton {
+ width: 19px; height: 13px; margin: 2px; padding: 0; border: none; text-indent: -999px; background-position: 0 -26px; cursor: pointer;
+}
+
+.langbutton:hover {
+ background-position: 0 -13px;
+}
+
+.langbutton.selected {
+ background-position: 0 0; cursor: default;
+}
+
+.barrebloc {
+ float: left; width: 473px; border: 1px solid #b0b0b0;
+ background-image: url(../img/bgdhdalab.png); background-position: 0 -22px; background-repeat: repeat-x; cursor: pointer; cursor: hand;
+ border-top-left-radius: 4px; border-top-right-radius: 4px
+}
+
+.barrebloc h2 {
+ margin: 4px 0; font-size: 16px; text-align: center; color: #ffffff; font-weight: bold;
+}
+
+.bloc {
+ float: left; width: 475px; margin-bottom: 10px;
+}
+
+#bloc_translationinfo {
+ color: #666;
+ font-style: italic;
+}
+
+.corpsbloc {
+ float: left; width: 465px; border: 1px solid #b0b0b0; padding: 8px 4px; border-top-style: none;
+ background-color: #ffffff; background-image: url(../img/bgdhdalab.png); background-position: 0 -62px; background-repeat: repeat-x;
+ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px
+}
+
+#hdatitle {
+ float: left; width: 475px; margin: 5px 0; font-size: 20px;
+}
+
+#titleleft {
+ float: left;
+}
+
+#titleright {
+ float: right;
+}
+
+#langselect {
+ float: right;
+}
+
+#leftcol {
+ float: left; width: 475px; margin-right: 5px;
+}
+
+#rightcol {
+ float: left; width: 475px; margin-left: 5px;
+}
+
+#contentlist {
+ list-style: none;
+}
+
+li.content-item {
+ margin: 2px 0 12px;
+}
+
+.content-item h3 {
+ font-size: 18px; margin: 3px 0; clear: both;
+}
+
+.content-item h4 {
+ font-size: 11px; margin: 3px 0;
+}
+
+.content-item h4 a {
+ color: #000066;
+}
+
+.maplet {
+ float: right;
+}
+
+.content-item p {
+ font-size: 12px; margin: 3px 0;
+}
+
+.content-annotation ul {
+ list-style : disc; margin: 2px 0; padding-left: 1.5em; font-size: 12px;
+ cursor: pointer; cursor: hand;
+}
+
+.content-annotation li {
+ margin: 2px 0;
+}
+
+.content-annotation textarea {
+ width: 99%; margin: 0; padding: 0; font-size: 12px;
+}
+
+ul.content-tags {
+ list-style: none;
+}
+
+li.content-tag-item {
+ display: inline-block; margin: 2px; padding: 2px; font-size: 13px; background: #666666;
+}
+
+.content-tag-item a {
+ color: #ffffff;
+}
+
+.content-tag-item a:hover {
+ color: #ff8080;
+}
+
+.content-tag-item a.tagmatch {
+ color: #ffff00; font-weight: bold;
+}
+
+#taginfo p, h2, h3 {
+ margin: 5px 0;
+}
+
+#taginfo h3 {
+ font-size: 14px;
+}
+
+#taginfo p {
+ font-size: 11px;
+}
+
+#img_wikipedia {
+ float: left; max-width: 160px; max-height: 120px; margin: 2px 2px 2px 0;
+}
+
+#tagsearch {
+ width: 100%; font-size: 16px; font-weight: bold; border-style: none; border-bottom: 1px solid #000;
+}
+
+#tagsearch.waiting {
+ background: url(../img/small-loader.gif) no-repeat right;
+}
+
+ul.ui-autocomplete {
+ font-family: "Open Sans"; max-width: 230px;
+ max-height: 400px; overflow-y: auto; overflow-x: hidden;
+}
+
+.wpinfo {
+ margin-left: 240px;
+}
+
+.ui-menu-item:hover .acwp {
+ display: block;
+}
+
+.acnb {
+ float: right; font-size: 12px; margin: 2px 0 0 2px;
+}
+
+.actitle {
+ font-size: 13px;
+}
+
+.wptitle {
+ font-size: 13px; font-weight: bold;
+}
+
+.wpimg {
+ max-width: 80px; max-height: 60px; float: left; margin: 5px 2px 2px 0; border: none;
+}
+
+.wpabstract {
+ font-size: 11px;
+}
+
+.wpsource {
+ font-size: 10px; font-style: bold;
+}
+
+.clear {
+ clear: both;
+}
+
+.actitle strong, .wptitle strong {
+ color: #c000c0;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/facettes.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,490 @@
+.langbutton {
+ width: 19px; height: 13px; margin: 2px; padding: 0; border: none; text-indent: -999px; background-position: 0 -26px; cursor: pointer;
+}
+
+.langbutton:hover {
+ background-position: 0 -13px;
+}
+
+.langbutton.selected {
+ background-position: 0 0; cursor: default;
+}
+
+.barrebloc {
+ float: left; width: 473px; border: 1px solid #b0b0b0;
+ background-image: url(../img/bgdhdalab.png); background-position: 0 -22px; background-repeat: repeat-x; cursor: pointer; cursor: hand;
+ border-top-left-radius: 4px; border-top-right-radius: 4px
+}
+
+.barrebloc h2 {
+ margin: 4px 0; font-size: 16px; text-align: center; color: #ffffff; font-weight: bold;
+}
+
+.bloc, #bloc_gestvue {
+ float: left; width: 475px; margin-bottom: 10px;
+}
+
+#bloc_translationinfo {
+ color: #666;
+ font-style: italic;
+}
+
+.corpsbloc {
+ float: left; width: 465px; border: 1px solid #b0b0b0; padding: 8px 4px; border-top-style: none;
+ background-color: #ffffff; background-image: url(../img/bgdhdalab.png); background-position: 0 -62px; background-repeat: repeat-x;
+ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px
+}
+
+#hdatitle {
+ float: left; width: 475px; margin: 5px 0; font-size: 20px;
+}
+
+#sessionname {
+ color: #600000; font-size: 22px;
+}
+
+#hdatitle .lectseul {
+ font-size: 17px;
+}
+
+#hdatitle input {
+ display: inline; font-size: 18px; font-weight: bold;
+}
+
+
+#titleleft {
+ float: left;
+}
+
+#titleright {
+ float: right;
+}
+
+#langselect {
+ float: right;
+}
+
+
+#apartager {
+ float: right; font-size: 14px; clear: right;
+}
+
+
+#vues {
+ float: right; text-align: right; width: 475px; margin: 2px 0; clear: right;
+}
+
+#vuestitre {
+ display: inline; padding: 2px 4px; font-size: 15px;
+}
+
+#ongletsvues {
+ display: inline; list-style: none;
+}
+
+li.lienvue {
+ display: inline; padding: 3px; font-size: 13px; font-weight: bold;
+}
+
+.lienvue a, #apartager a {
+ color: #666666;
+}
+
+.lienvue.actif a, #apartager.actif a {
+ color: #cc0066;
+}
+
+#nouvellevue a {
+ font-weight: bold; color: #ff3000; font-size: 16px;
+}
+
+#partageurls, #plusdevues {
+ float: right; text-align: right; clear: both; margin: 2px 0;
+ font-size: 13px; display: none; width: 100%;
+}
+
+#partageurls ul {
+ list-style: none;
+}
+
+#partageurls li {
+ float: right; margin-left: 5px; padding: 4px; font-weight: bold;
+}
+
+#partageurls li.actif {
+ background: #000080;
+}
+
+#partageurls li.actif a {
+ color: #ffffff;
+}
+
+#zc-partageligne {
+ float: right; clear: both; margin-top: 3px; width: 100%; font-size: 13px; text-align: right;
+}
+
+#zc-partageinput {
+ width: 360px; padding: 2px; border: 1px solid #999999;
+}
+
+#zc-partageinput.hover {
+ background: #000080; color: #ffffff;
+}
+
+#zc-partageinput.active {
+ background: #800000; color: #ffffff;
+}
+
+#plusdevues {
+ list-style: none;
+}
+
+.myurl {
+ font-weight: bold;
+}
+
+#timeline {
+ float: left; width: 100%; margin: 15px 0;
+}
+
+#dates {
+ list-style: none; float: left; width: 100%; height: 0;
+}
+
+#dates li {
+ position: absolute; width: 1px; height: 20px; background: rgba(0,0,0,.3); z-index: 2;
+}
+
+div.datelabel {
+ width: 60px; margin: 4px 0 0 -30px; font-size: 10px; text-align: center; opacity: .8;
+}
+
+#dateheat {
+ float: left; width: 100%; height: 20px; z-index: 1;
+}
+
+.handle {
+ position: absolute; width: 0; z-index: 2; cursor: pointer; cursor: hand;
+}
+
+.handleinner {
+ float: left; border: 5px solid #999; background: #fff;
+ height: 30px; width: 10px; margin-top: -10px; border-radius: 4px;
+ opacity: .8;
+}
+
+.handleinner:hover {
+ background: #ccc;
+}
+
+.ui-draggable-dragging .handleinner {
+ background: #660000; color: #ffffff;
+}
+
+#leftcol {
+ float: left; width: 475px; margin-right: 5px;
+}
+
+#bandefiltre {
+ float: left; width: 100%; margin-top: 10px;
+}
+
+#filtertitle {
+ float: left; margin: 1px 0; font-size: 13px; font-weight: bold;
+}
+
+#filters {
+ list-style: none; float: left; margin: 0 20px; font-size: 12px;
+}
+
+#filters li {
+ float: left; padding: 2px 3px; margin-right: 5px; font-weight: bold;
+}
+
+#filters a {
+ color: #666666;
+}
+
+#filters li.nofilter {
+ font-style: italic; color: #ff3030;
+}
+
+#filters li.filtag {
+ color: #ffffff; background: #000066;
+}
+
+#filters li.filcountry {
+ color: #ffffff; background: #cc0066;
+}
+
+#filters li.filperiod {
+ color: #ffffff; background: #e07000;
+}
+
+span.spyr {
+ cursor: pointer; cursor: hand;
+}
+
+.spyr input {
+ display: inline; margin: 0; padding: 0; font-size: 11px;
+}
+
+#contentcount {
+ float: left; width: 100%; text-align: right; font-size: 13px; margin: 2px 0;
+}
+
+#filters a.remfil {
+ color: #cccccc; margin-left: 2px;
+}
+
+#map {
+ height: 250px;
+}
+
+.leaflet-container {
+ background: #e3e9fd url(../img/bgmap.png);
+}
+
+#tagcloud {
+ text-align: center;
+}
+
+#tclist {
+ list-style: none;
+}
+
+#tclist li {
+ display: inline-block; margin: 2px 5px;
+}
+
+#tclist a {
+ color: #000000;
+}
+
+#tclist a.tagmatch {
+ color: #0000cc;
+}
+
+#tclist a:hover {
+ color: #800000;
+}
+
+#rightcol {
+ float: left; width: 475px; margin-left: 5px;
+}
+
+#disciplines {
+
+}
+
+.disc-ul {
+ float: left; clear: both; list-style: none;
+}
+
+.disc-li {
+ float: left; width: 230px; margin: 2px 0;
+}
+
+.disc-label {
+ float: left; font-size: 13px; width: 100px; text-align: right; margin-right: 5px; line-height: 13px;
+}
+
+.disc-bar {
+ float: left; height: 14px; margin: 2px 0; cursor: pointer; cursor: hand;
+}
+
+.disc-bar:hover {
+ background: #80a0ff;
+}
+
+#contentlist {
+ list-style: none;
+}
+
+li.content-item {
+ margin: 2px 0 12px;
+}
+
+.content-item h3 {
+ font-size: 18px; margin: 3px 0;
+}
+
+.content-item h3 a, .content-item p a {
+ color: #000000;
+}
+
+.content-item h4 {
+ font-size: 11px; margin: 3px 0;
+}
+
+.content-item h4 a {
+ color: #000066;
+}
+
+.maplet {
+ float: right;
+}
+
+.content-item p {
+ font-size: 12px; margin: 3px 0;
+}
+
+.content-annotation ul {
+ list-style : disc; margin: 2px 0; padding-left: 1.5em; font-size: 12px;
+ cursor: pointer; cursor: hand;
+}
+
+.content-annotation li {
+ margin: 2px 0;
+}
+
+.content-annotation textarea {
+ width: 99%; margin: 0; padding: 0; font-size: 12px;
+}
+
+ul.content-tags {
+ list-style: none;
+}
+
+li.content-tag-item {
+ display: inline-block; margin: 2px; padding: 2px; font-size: 13px; background: #666666;
+}
+
+.content-tag-item a {
+ color: #ffffff;
+}
+
+.content-tag-item a:hover {
+ color: #ff8080;
+}
+
+.content-tag-item a.tagmatch {
+ color: #ffff00; font-weight: bold;
+}
+
+#tagcount {
+ float: right; text-align: right; font-size: 14px; font-weight: bold;
+}
+
+#taginfo p, h2, h3 {
+ margin: 5px 0;
+}
+
+#taginfo h3 {
+ font-size: 14px;
+}
+
+#taginfo p {
+ font-size: 11px;
+}
+
+#img_wikipedia {
+ float: left; max-width: 160px; max-height: 120px; margin: 2px 2px 2px 0;
+}
+
+#gestvue {
+ display: none;
+}
+
+#div_titrevue {
+ margin: 5px 0;
+}
+
+#div_titrevue label {
+ font-size: 14px;
+}
+
+#titrevue {
+ font-size: 15px; margin: 0 0 0 5px; width: 220px; padding: 2px; border-style: none; border-bottom: 1px solid #000;
+}
+
+#gestvue h4 {
+ margin: 2px 0; font-size: 14px;
+}
+
+#widgetlist {
+ list-style: none; width: 100%;
+}
+
+#widgetlist li {
+ float: left; width: 48%;
+}
+
+#widgetlist label {
+ font-size: 13px;
+}
+
+#notes ul {
+ font-size: 13px; margin: 0; padding-left: 1.5em;
+}
+
+#notes textarea {
+ width: 99%; font-size: 13px;
+}
+
+#waitcontainer {
+ float: left; clear: both; width: 100%; height: 0; position: relative;
+}
+
+#waiting {
+ position: absolute; width: 100%; height: 600px; background: #ffffff; opacity: .8; z-index: 100;
+}
+
+.waittick {
+ position: absolute; width: 10px; height: 10px; background: #000000; border-radius: 5px; display: none;
+}
+
+/* COMPLETION */
+
+#tagsearch {
+ width: 100%; font-size: 16px; font-weight: bold; border-style: none; border-bottom: 1px solid #000;
+}
+
+#tagsearch.waiting {
+ background: url(../img/small-loader.gif) no-repeat right;
+}
+
+ul.ui-autocomplete {
+ font-family: "Open Sans"; max-width: 230px;
+ max-height: 400px; overflow-y: auto; overflow-x: hidden;
+}
+
+.wpinfo {
+ margin-left: 240px;
+}
+
+.ui-menu-item:hover .acwp {
+ display: block;
+}
+
+.acnb {
+ float: right; font-size: 12px; margin: 2px 0 0 2px;
+}
+
+.actitle {
+ font-size: 13px;
+}
+
+.wptitle {
+ font-size: 13px; font-weight: bold;
+}
+
+.wpimg {
+ max-width: 80px; max-height: 60px; float: left; margin: 5px 2px 2px 0; border: none;
+}
+
+.wpabstract {
+ font-size: 11px;
+}
+
+.wpsource {
+ font-size: 10px; font-style: bold;
+}
+
+.clear {
+ clear: both;
+}
+
+.actitle strong, .wptitle strong {
+ color: #c000c0;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/index.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,89 @@
+@font-face
+{
+ font-family: "Droid Serif"; src: url(DroidSerif-Regular.ttf);
+}
+
+@font-face
+{
+ font-family: "Droid Serif"; font-weight: bold; src: url(DroidSerif-Bold.ttf);
+}
+
+@font-face
+{
+ font-family: "Droid Serif"; font-style: italic; src: url(DroidSerif-Italic.ttf);
+}
+
+@font-face
+{
+ font-family: "Droid Serif"; font-weight: bold; font-style: italic; src: url(DroidSerif-BoldItalic.ttf);
+}
+
+#container h2 {
+ text-align: center; font-size: 24px; font-style: italic; font-weight: bold; color: #999; margin: 20px 0;
+ font-family: "Droid Serif", "Times New Roman", Times, serif;
+}
+
+#container h3 {
+ color: #666; font-weight: bold; font-size: 18px; text-transform: uppercase; margin: 20px 0 5px;
+}
+
+#container h4 {
+ color: #666; font-weight: bold; font-size: 16px; margin: 0; padding: 10px 0 5px; clear: both;
+}
+
+#container p, #container li {
+ font-size: 13px; margin: 5px 0;
+ font-family: "Droid Serif", "Times New Roman", Times, serif;
+}
+
+#container ul {
+ padding-left: 18px;
+}
+
+#container strong {
+ font-weight: bold;
+}
+
+.liste {
+ clear: both;
+}
+
+.bloc-appli {
+ width: 310px; float: left;
+}
+
+.separateur-applis {
+ width: 15px; height: 100px; float: left;
+}
+
+.fond-bloc {
+ cursor: pointer; height: 290px; margin: 5px 0 15px; padding: 5px;
+}
+
+.overlay-bloc {
+ padding: 5px 10px; background: rgba(255, 190, 100, 0.85); display: none;
+}
+
+p.goto {
+ text-align: right; font-size: 20px;
+}
+
+#bloc-facettes {
+ background: url(../img/facettes-thumb.jpg);
+}
+
+#bloc-categories {
+ background: url(../img/categories-thumb.jpg);
+}
+
+#bloc-thesaurus {
+ background: url(../img/thesaurus-thumb.jpg);
+}
+
+.mini-table {
+ float: left; width: 960px; clear: both; margin: 5px 0;
+}
+
+.half-bloc {
+ float: left; width: 470px; margin-right: 10px;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/notice.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,115 @@
+h2 {
+ font-size: 20px; font-weight: bold; text-align: center;
+}
+
+.main-datasheet {
+ float: left; width: 300px; border-radius: 3px; padding: 9px; border: 1px solid #999;
+ background: #FFF8F0; margin-top: 10px;
+}
+
+.main-datasheet a {
+ color: #000000;
+}
+
+.main-datasheet h3 {
+ font-size: 16px; font-weight: bold; font-style: italic; margin: 10px 0;
+}
+
+.main-datasheet img {
+ max-width: 173px; float: right; margin: 5px 0 2px 2px; border: 1px solid #999;
+}
+
+.main-datasheet p {
+ font-size: 12px; margin: 5px 0;
+}
+
+.main-datasheet ul {
+ padding-left: 15px; margin: 10px 0 5px;
+}
+
+.main-datasheet li {
+ font-size: 13px; margin: 5px 0; font-weight: bold;
+}
+
+.main-datasheet li a {
+ text-decoration: underline;
+}
+
+.tag-container {
+ float: left; width: 320px; height: 1px; position: relative;
+}
+
+.tag-container h2, .related-datasheets h2 {
+ margin: 10px;
+}
+
+.tag-canvas, .tags-main {
+ position: absolute; top: 0; left: 0;
+}
+
+.tags-main {
+ width: 320px;
+}
+
+.tags {
+ list-style: none; text-align: center;
+}
+
+.tags li {
+ font-size: 12px; line-height: 14px; min-height: 14px; margin: 20px 0; cursor: pointer;
+}
+
+
+.tags span {
+ color: #ffffff; padding: 4px; background: #666680;
+}
+
+.tags span.selected {
+ color: #FFFF00; font-weight: bold;
+}
+
+.related-datasheets {
+ float: left; width: 320px;
+}
+
+.datasheets {
+ list-style: none;
+}
+
+.datasheet {
+ border-radius: 3px; padding: 4px; border: 1px solid #999; margin: 5px 0;
+ background: #FFF8F0;
+}
+
+.datasheet img {
+ max-width: 86px; float: right; margin: 2px 0 2px 2px; border: 1px solid #999;
+}
+
+.datasheet h3 {
+ font-size: 13px; font-weight: bold; line-height: 13px; margin: 4px 0;
+}
+
+.datasheet h3 a {
+ color: #000000;
+}
+
+.datasheet h4 {
+ font-size: 12px; font-style: italic; line-height: 12px; margin: 4px 0;
+}
+
+.datasheet-tags {
+ list-style: none; /* display: none; */
+}
+
+.datasheet-tags li {
+ padding: 2px; color: #ffffff; background: #999999; margin: 2px 2px 0 0;
+ font-size: 11px; display: inline-block;
+}
+
+.datasheet-tags li.common-tag {
+ font-weight: bold; background: #666680;
+}
+
+.datasheet:hover .datasheet-tags {
+ display: block;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/thesaurus.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,25 @@
+.column {
+ float: left; width: 449px;
+ padding-left: 20px;
+}
+
+.separator {
+ float: left; width: 1px; height: 500px; margin: 30px 10px 0; background: #666;
+}
+
+.column h3 {
+ font-size: 14px; font-weight: bold;
+ margin: 10px 0;
+}
+
+.explain {
+ font-size: 12px;
+}
+
+.explain p, li {
+ margin: 5px 0;
+}
+
+.explain ul {
+ margin-left: 16px;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/trees.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,125 @@
+.hidden {
+ display: none;
+}
+
+.cattree .content p.title {
+ font-weight: bold; cursor: pointer;
+}
+
+.cattree .content p.title:before {
+ font-weight: normal;
+}
+
+.cattree .score_0, .cattree .score_1, .cattree .score_0 a, .cattree .score_1 a {
+ color: #80d080;
+}
+
+.cattree .score_2, .cattree .score_3, .cattree .score_4, .cattree .score_2 a, .cattree .score_3 a, .cattree .score_4 a {
+ color: #409840;
+}
+
+.cattree .score_5, .cattree .score_6, .cattree .score_7, .cattree .score_5 a, .cattree .score_6 a, .cattree .score_7 a {
+ color: #006000;
+}
+
+.cattree .score_0:before, .cattree .score_1:before {
+ content: "★☆☆ ";
+}
+
+.cattree .score_2:before, .cattree .score_3:before, .cattree .score_4:before {
+ content: "★★☆ ";
+}
+
+.cattree .score_5:before, .cattree .score_6:before, .cattree .score_7:before {
+ content: "★★★ ";
+}
+
+.cattree .img-container {
+ float: left; margin: 10px 0 0; width: 60px; height: 50px; background: #dddddd;
+}
+
+.cattree .img-container img {
+ min-width: 30px; max-width: 60px; max-height: 50px; margin: 0px auto;
+}
+
+.cattree .content p.description {
+ margin: 4px 0 4px 64px; font-size: 12px; min-height: 50px;
+}
+
+.cattree a.content {
+ color: #000000;
+}
+
+.cattree li, .cattree p.theme {
+ margin: 4px 0; font-size: 12px; position: relative;
+}
+
+.cattree p.theme {
+ color: #000080; height: 20px; cursor: pointer;
+}
+
+.cattree p.theme:after {
+ font-weight: bold;
+ content: " [-]"
+}
+
+.cattree .folded p.theme:after {
+ font-weight: bold;
+ content: " [+]"
+}
+
+.cattree .theme span {
+ font-weight: bold; line-height: 12px;
+}
+
+.cattree ul {
+ list-style: none; position: relative; padding: 0; margin: 0;
+}
+
+.cattree .folded ul {
+ display: none;
+}
+
+.cattree .foldedcontent {
+ height: 0px; overflow: hidden;
+}
+
+.cattree .show_more {
+ color: #800000; font-style: italic; cursor: pointer;
+}
+
+.cattree li {
+ list-style: none;
+}
+
+.cattree ul li {
+ margin-left: 38px;
+}
+
+.cattree ul li:after {
+ content: ""; position: absolute; left: -50px; top: 9px; width: 40px; bottom: 0; border-style: solid none none solid; border-width: 1px; border-color: #333;
+}
+
+.cattree ul li:before {
+ content: ""; position: absolute; left: -50px; top: -10px; height: 19px; width: 1px; background: #333;
+}
+
+.cattree ul li:last-child:after {
+ border-style: solid none none;
+}
+
+.cattree .eltype {
+ font-style: italic; display: none;
+}
+
+.cattree li.themeli {
+ list-style: square;
+}
+
+.cattree li.content {
+ list-style: disc;
+}
+
+.loading {
+ height: 128px; background: url(../img/loader.gif) no-repeat center;
+}
\ No newline at end of file
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_222222_256x240.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_228ef1_256x240.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ef8c08_256x240.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffd27a_256x240.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffffff_256x240.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,405 @@
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
+.ui-widget-content a { color: #333333; }
+.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
+.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
+ * jQuery UI Resizable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Autocomplete 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.16
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+ list-style:none;
+ padding: 2px;
+ margin: 0;
+ display:block;
+ float: left;
+}
+.ui-menu .ui-menu {
+ margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+ margin:0;
+ padding: 0;
+ zoom: 1;
+ float: left;
+ clear: left;
+ width: 100%;
+}
+.ui-menu .ui-menu-item a {
+ text-decoration:none;
+ display:block;
+ padding:.2em .4em;
+ line-height:1.5;
+ zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+ font-weight: normal;
+ margin: -1px;
+}
+/*
+ * jQuery UI Slider 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Progressbar 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
Binary file src/hdalab/static/hdalab/img/bgdfooter.png has changed
Binary file src/hdalab/static/hdalab/img/bgdhdalab.png has changed
Binary file src/hdalab/static/hdalab/img/bgmap.png has changed
Binary file src/hdalab/static/hdalab/img/categories-thumb.jpg has changed
Binary file src/hdalab/static/hdalab/img/facettes-thumb.jpg has changed
Binary file src/hdalab/static/hdalab/img/favicon.ico has changed
Binary file src/hdalab/static/hdalab/img/flag_de.png has changed
Binary file src/hdalab/static/hdalab/img/flag_en.png has changed
Binary file src/hdalab/static/hdalab/img/flag_es.png has changed
Binary file src/hdalab/static/hdalab/img/flag_fr.png has changed
Binary file src/hdalab/static/hdalab/img/flag_it.png has changed
Binary file src/hdalab/static/hdalab/img/flag_ja.png has changed
Binary file src/hdalab/static/hdalab/img/flag_zh-tw.png has changed
Binary file src/hdalab/static/hdalab/img/loader.gif has changed
Binary file src/hdalab/static/hdalab/img/logo_iri.png has changed
Binary file src/hdalab/static/hdalab/img/logo_iri_blanc.png has changed
Binary file src/hdalab/static/hdalab/img/logo_mcc.png has changed
Binary file src/hdalab/static/hdalab/img/logo_mcc_blanc.png has changed
Binary file src/hdalab/static/hdalab/img/small-loader.gif has changed
Binary file src/hdalab/static/hdalab/img/thesaurus-thumb.jpg has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/cattree.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,60 @@
+function showData(_label, _data) {
+ $(".disciplist li").each(function() {
+ if ($(this).text().trim().toLowerCase() === _label.toLowerCase()) {
+ $(this).addClass("selected");
+ }
+ })
+ $(".label-name").html(_label);
+ if (_data) {
+ renderData($("#tree"), _data, 1);
+ $(".results").show();
+ $(".content-count").html($(".cattree a.content").length);
+ $(".category-count").html(Math.max(0, $("p.category").length - 1));
+ $(".tag-count").html($("p.tag").length);
+ } else {
+ $("#tree").html("");
+ $(".results").hide();
+ }
+}
+
+function gettree(_label) {
+ $(".disciplist li").removeClass("selected");
+ $("#tree").html('<div class="loading"></div>');
+ $.getJSON(
+ endpoints.cat_tree,
+ { label: _label },
+ function(_data) {
+ showData(_label, _data);
+ }
+ );
+}
+
+$(function() {
+ $("#catsearch").autocomplete({
+ source: endpoints.cat_search,
+ minLength: 2,
+ select: function( event, ui ) {
+ gettree(ui.item.value);
+ }
+ })
+ .data("autocomplete")._renderItem = function(ul, item) {
+ return $( "<li></li>" )
+ .data( "item.autocomplete", item )
+ .append(
+ "<a>"
+ + item.label.replace(
+ new RegExp('('
+ + $("#catsearch").val().replace(/(\W)/g, '\\$1')
+ + ')','gi') ,
+ '<strong>$1</strong>')
+ + "</a>" )
+ .appendTo( ul )
+ };
+ $("#catform").submit(function() {
+ gettree($("#catsearch").val());
+ });
+ gettree("cinéma");
+ $(".disciplist li").click(function() {
+ gettree($(this).text().trim());
+ });
+});
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/gomina.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,905 @@
+/**
+ * @author raph
+ */
+
+str_format = function() {
+ var s = arguments[0];
+ for (var i = 0; i < arguments.length - 1; i++) {
+ var reg = new RegExp("\\{" + i + "\\}", "gm");
+ s = s.replace(reg, arguments[i + 1]);
+ }
+
+ return s;
+}
+
+var gomNs = {
+ minYear: -5000,
+ maxYear: 2010,
+ tlPixels: 960,
+ tlGamma: 6,
+ heatGamma: 2,
+ displayedDates: [ -5000, 0, 500, 1000, 1200, 1400, 1600, 1700, 1750, 1800, 1850, 1900, 1950, 2010 ],
+ mappingLibrary: 'leaflet',
+ gradientStart: [ 255, 255, 240 ],
+ gradientEnd: [ 255, 160, 30 ],
+ zeroColor: [ 230, 230, 235 ],
+ languageCode: 'fr'
+}
+
+function yearToPx(year) {
+ return gomNs.tlPixels * Math.pow( ( year - gomNs.minYear ) / ( gomNs.maxYear - gomNs.minYear ), gomNs.tlGamma );
+}
+
+function pxToYear(px) {
+ return gomNs.minYear + ( gomNs.maxYear - gomNs.minYear ) * Math.pow( px / gomNs.tlPixels, 1 / gomNs.tlGamma );
+}
+
+function getGradient(_pos) {
+ if (_pos == 0) {
+ var _rgb = gomNs.zeroColor;
+ } else {
+ var _rgb = [],
+ _exp = Math.pow(_pos, 1/gomNs.heatGamma);
+ for (var i=0; i<3; i++) {
+ _rgb.push(Math.floor(_exp*gomNs.gradientEnd[i] + (1-_exp)*gomNs.gradientStart[i]));
+ }
+ }
+ return "rgb(" + _rgb.join(",") + ")"
+}
+
+function polygon_to_gmap(polycoords, dbpedia_uri) {
+ var _opts = {
+ strokeColor: "#000000",
+ strokeWeight: .5,
+ fillColor: "rgb(" + gomNs.zeroColor.join(",") + ")",
+ fillOpacity: 1
+ }
+ _opts.paths = polycoords.map(function(path) {
+ return path.map(function(coord) {
+ return new google.maps.LatLng(coord[1], coord[0]);
+ });
+ });
+ var _polygon = new google.maps.Polygon(_opts);
+ _polygon.setMap(gomNs.map);
+ google.maps.event.addListener(_polygon, 'click', function(a,b) {
+ addFilter('country', dbpedia_uri);
+ })
+ return _polygon;
+}
+
+function showCountriesGmap(geoJson) {
+ gomNs.countries = {};
+ _(geoJson.features).each(function(feature) {
+ var _el = { "properties" : feature.properties };
+ if (feature.id == 'ATA') {
+ _el.gPolygons = [];
+ } else {
+ switch(feature.geometry.type) {
+ case('Polygon'):
+ _el.gPolygons = [ polygon_to_gmap(feature.geometry.coordinates, feature.properties.dbpedia_uri) ];
+ break;
+ case('MultiPolygon'):
+ _el.gPolygons = feature.geometry.coordinates.map(function(polygon) {
+ return polygon_to_gmap(polygon, feature.properties.dbpedia_uri);
+ })
+ break;
+ }
+ }
+ gomNs.countries[feature.properties.dbpedia_uri] = _el;
+ });
+}
+
+function showCountriesLeaflet(geoJson) {
+ gomNs.countries = {};
+ var gJ = new L.GeoJSON();
+ gJ.on('featureparse', function(_f) {
+ var isocode = _f.id;
+ _f.layer.setStyle({
+ color: "#000000",
+ weight: .5,
+ fillOpacity: 1,
+ fillColor: "rgb(" + gomNs.zeroColor.join(",") + ")"
+ });
+ _f.layer.on('click', function() {
+ addFilter('country', _f.properties.dbpedia_uri);
+ });
+ gomNs.countries[_f.properties.dbpedia_uri] = {
+ "properties" : _f.properties,
+ "layer" : _f.layer
+ }
+ });
+ gJ.addGeoJSON(geoJson);
+ gomNs.map.addLayer(gJ);
+}
+
+function addFilter(_type, _label) {
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ if (_curView.type == 'filter') {
+ if (_curView[_type].indexOf(_label) < 0) {
+ _curView[_type].push(_label);
+ }
+ updateFilters();
+ debouncedSaveChanges();
+ }
+}
+
+function removeFilter(_type, _index) {
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ if (_curView.type == 'filter') {
+ _curView[_type].splice(_index,1);
+ updateFilters();
+ debouncedSaveChanges();
+ }
+}
+
+function getUpdates() {
+ var _params = {},
+ _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ if (_curView.type == 'filter') {
+ if (!(_curView.period[0] == gomNs.minYear && _curView.period[1] == gomNs.maxYear)) {
+ _params.period = _curView.period.join(',');
+ }
+ if (_curView.tag.length) {
+ _params.label = _curView.tag.join(',');
+ }
+ if (_curView.country.length) {
+ _params.country = _curView.country.join(',');
+ }
+ $.getJSON(gomNs.urls['filter'], _params, updateDisplay);
+ animLoad();
+ }
+}
+
+var debouncedGetUpdates = _.debounce(getUpdates, 300);
+
+function updatePeriod(_n, _val) {
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ if (_curView.type == 'filter') {
+ var _int = parseInt(_val);
+ if (_int != NaN) {
+ if ((_n == 1 && _val >= _curView.period[0]) || (_n == 0 && _val <= _curView.period[1])) {
+ _curView.period[_n] = _int;
+ }
+ updateFilters();
+ debouncedSaveChanges();
+ }
+ }
+}
+
+function removePeriod() {
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ if (_curView.type == 'filter') {
+ _curView.period[0] = gomNs.minYear;
+ _curView.period[1] = gomNs.maxYear;
+ updateFilters();
+ debouncedSaveChanges();
+ }
+}
+
+function changeSpan(_this) {
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ if (_curView.type == 'filter') {
+ if (!$(_this).children().length) {
+ var _el = document.createElement('input'),
+ _n = _this.id.split('_')[1];
+ _el.value = _curView.period[_n];
+ _el.style.width = $(_this).width() + 'px';
+ $(_el).focusout(function() {
+ updatePeriod(_n, this.value);
+ }).keypress(function(e) {
+ if (e.keyCode == 13) {
+ updatePeriod(_n, this.value);
+ }
+ });
+ $(_this).html(_el);
+ _el.focus();
+ _el.select();
+ }
+ }
+}
+
+function updateFilters() {
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ if (_curView.type != 'filter') {
+ return;
+ }
+ var _htmFilters = '',
+ _fl = _curView.tag.length,
+ _cl = _curView.country.length;
+ if (_curView.period[0] == gomNs.minYear && _curView.period[1] == gomNs.maxYear) {
+ _htmFilters += '<li class="filperiod">'+gettext("Toutes periodes")+'</li>';
+ } else {
+ _htmFilters += '<li class="filperiod">'+gettext("Periode :")+' <span class="spyr" id="sp_0" onclick="changeSpan(this);">'
+ + _curView.period[0]
+ + '</span> ' + gettext('a')+' <span class="spyr" id="sp_1" onclick="changeSpan(this);">'
+ + _curView.period[1]
+ + '</span><a href="#" class="remfil" onclick="removePeriod(); return false;">[x]</a></li>';
+ }
+ $("#handle_0").css({
+ "left" : yearToPx(_curView.period[0])+"px",
+ }).attr("year", _curView.period[0])
+ .find(".handleinner")
+ .css({
+ "margin-left" : "-20px"
+ });
+ $("#handle_1").css({
+ "left" : yearToPx(_curView.period[1])+"px",
+ }).attr("year", _curView.period[1])
+ .find(".handleinner")
+ .css({
+ "margin-left" : "0"
+ });
+ if (_cl) {
+ _htmFilters += _(_curView.country).map(function(_t, _i) {
+ return '<li class="filcountry">'+gettext('Pays :')+' '
+ + ( (typeof gomNs.countries == "object" && typeof gomNs.countries[_t] == "object") ? gomNs.countries[_t].properties.labels[gomNs.languageCode] : decodeURIComponent(_t.match('[^/]+$')[0]).replace('_',' '))
+ + '<a href="#" class="remfil" onclick="removeFilter(\'country\','
+ + _i
+ + '); return false;">[x]</a></li>';
+ }).join("");
+ }
+ if (_fl) {
+ _htmFilters += _(_curView.tag).map(function(_t, _i) {
+ return '<li class="filtag">'+gettext('Tag :')+' '
+ + '<span class="filtag_label">'+_t+'</span>'
+ + '<a href="#" class="remfil" onclick="removeFilter(\'tag\','
+ + _i
+ + '); return false;">[x]</a></li>';
+ }).join("");
+ }
+ $("#filters").html(_htmFilters).hide();
+ debouncedGetUpdates();
+}
+
+function displayContents(contentdata) {
+ if (contentdata && contentdata.length) {
+ var _htmlCl = '<ul id="contentlist">'
+ + contentdata.map(function(_d) {
+ var _dsurl = gomNs.urls.datasheet.replace(/ID$/,_d.hda_id);
+ var _html = '<li class="content-item"><h3><a href="'
+ + _dsurl
+ + '">'
+ + _d.title
+ + '</a></h3>'
+ + ( typeof _d.coords == "object" ?
+ '<div class="maplet"><img src="http://maps.googleapis.com/maps/api/staticmap?center=47,1.5&zoom=4&size=160x160&maptype=roadmap&markers=color:red%7C'
+ + _d.coords.latitude
+ + ','
+ + _d.coords.longitude
+ + '&sensor=false" /><h4>'
+ + gettext('Localisation :')
+ + ' '
+ + _d.coords.city_name
+ + '</h4></div>'
+ : '')
+ + '<h4><a href="'
+ + _d.url
+ + '" target="_blank">'
+ + _d.url.replace(/(^.{40}).+(.{30}$)/m,'$1 … $2')
+ + '</a></h4><p><a href="'
+ + _dsurl
+ + '">'
+ + _d.description.replace(/(^.{0,160})([\s]|$)(.*)/,'$1…')
+ + '</a></p><ul class="content-tags">'
+ + _d.tags.map(function(_t) {
+ return '<li class="content-tag-item"><a href="#" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
+ + _t.label
+ + '"'
+ + (_t.match ? ' class="tagmatch"' : '')
+ + '>'
+ + _t.translated_label
+ + '</a></li>';
+ }).join('')
+ + '</ul><h4>'+gettext("Annotations")+'</h4><div class="content-annotation" contentid="'
+ + _d.id
+ + '">'
+ + ( gomNs.sessiondata.annotations[_d.id] && gomNs.sessiondata.annotations[_d.id].texte
+ ? '<ul><li>'
+ + _.escape(gomNs.sessiondata.annotations[_d.id].texte).replace(/\n/gm,"</li><li>")
+ + '</li>'
+ : ( gomNs.write_allowed ? '<ul><li>'+gettext("Annoter ce contenu")+'...</li></ul>' : '' ) )
+ + '</div>';
+ if (gomNs.write_allowed) {
+ _(gomNs.sessiondata.views).each(function(_view, _k) {
+ if (_view.type == 'list') {
+ _html += '<p><a href="#" class="addremlist" contentid="'
+ + _d.id
+ + '" viewid="'
+ + _k
+ + '">'
+ + str_format(( _view.list.indexOf(_d.id) == -1 ? gettext('Ajouter a {0}') : gettext('Retirer de {0}') ),'"'+ _.escape(_view.name)+ '"')
+ + '</a></p>'
+ }
+ });
+ }
+ _html += '</li>';
+ return _html;
+ }).join('')
+ + '</ul>';
+ $("#contents").html(_htmlCl).scrollTop(0);
+ $("a.addremlist").click(function() {
+ var _id = $(this).attr("contentid"),
+ _vid =
+ _view = gomNs.sessiondata.views[$(this).attr("viewid")],
+ _io = _view.list.indexOf(_id);
+ if ( _io == -1) {
+ _view.list.push(_id);
+ $(this).html(str_format(gettext('Retirer de {0}'),'"' + _.escape(_view.name) + '"' ));
+ } else {
+ _view.list.splice(_io, 1);
+ $(this).html(str_format(gettext('Ajouter a {0}'),'"' + _.escape(_view.name) + '"'));
+ }
+ if (gomNs.sessiondata.view == 1) {
+ showView();
+ }
+ debouncedSaveChanges();
+ return false;
+ })
+ if (gomNs.write_allowed) {
+ $("div.content-annotation").click(function() {
+ if (this.children[0].tagName == 'UL') {
+ var _el = document.createElement('textarea'),
+ _id = $(this).attr("contentid");
+ _el.innerHTML = (gomNs.sessiondata.annotations[_id] && gomNs.sessiondata.annotations[_id].texte) ? gomNs.sessiondata.annotations[_id].texte : '';
+ $(_el).focusout(function() {
+ var _id = this.parentNode.attributes.contentid.nodeValue;
+ if (!gomNs.sessiondata.annotations[_id]) {
+ gomNs.sessiondata.annotations[_id] = {};
+ }
+ gomNs.sessiondata.annotations[_id].texte = this.value;
+ this.parentNode.innerHTML = '<ul><li>' + (this.value.length ? _.escape(gomNs.sessiondata.annotations[_id].texte).replace(/\n/gm,"</li><li>") : gettext('Annoter ce contenu')+'...' ) + '</ul>';
+ debouncedSaveChanges();
+ });
+ $(this).html(_el);
+ _el.focus();
+ _el.select();
+ }
+ });
+ }
+ }
+ else {
+ $("#contents").html("");
+ }
+}
+
+function updateDisplay(data) {
+ animStop();
+
+ // translate filters
+ $('.filtag_label').each(function(index, elt) {
+ txt = $(this).text();
+ if(txt in data.tagtranslations) {
+ $(this).text(data.tagtranslations[txt]);
+ }
+ });
+ $("#filters").show();
+
+
+ if (gomNs.dhmPaper) {
+ gomNs.dhmPaper.clear();
+ } else {
+ gomNs.dhmPaper = new Raphael("dateheat");
+ }
+ $("#contentcount").html('<b>'+data.count+'</b> ' + ngettext('notice', 'notices', data.count));
+ if (!data.sparkline.length || data.sparkline[0].year != gomNs.minYear) {
+ data.sparkline.splice(0,0,{"year": gomNs.minYear, "score": 0});
+ }
+ var _maxheat = _(data.sparkline).max(function(_d) { return parseInt(_d.score); }).score;
+ _(data.sparkline).each(function(_d, _i) {
+ var _nxt = (_i == data.sparkline.length - 1) ? (gomNs.maxYear + 1) : data.sparkline[_i + 1].year,
+ _x1 = yearToPx(_d.year),
+ _x2 = yearToPx(_nxt),
+ _heat = _d.score / _maxheat;
+ gomNs.dhmPaper.rect(_x1, 0, _x2 - _x1, 20).attr({
+ "fill" : getGradient(_heat),
+ "stroke" : "none"
+ })
+ });
+ if (gomNs.sessiondata.view == 0) {
+ var _h0 = $("#handle_0").position().left,
+ _h1 = $("#handle_1").position().left;
+ gomNs.dhmPaper.rect(Math.min(_h0, _h1) - 1, 0, Math.abs(_h0 - _h1) + 2, 20).attr({
+ "stroke" : "#cc0066",
+ "stroke-width" : "3"
+ });
+ }
+ if (data.tags.length) {
+ var _scores = _(data.tags).map(function(_d) { return parseInt(_d.score)}),
+ _maxTag = _(_scores).max(),
+ _minTag = Math.min(_(_scores).min(), _maxTag - 1),
+ _scale = 10 / Math.sqrt(_maxTag - _minTag),
+ _htmlTc = '<ul id="tclist">'
+ + _(data.tags).map(function(_d) {
+ return '<li style="font-size:'
+ + parseInt(10 + _scale * Math.sqrt(_d.score - _minTag))
+ + 'px;"><a href="#" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
+ + _d.label
+ +'"'
+ + (_d.match ? ' class="tagmatch"' : '')
+ + '>'
+ + _d.translated_label
+ + '</a></li>';
+ }).join('')
+ + '</ul>';
+ $("#tagcloud").html(_htmlTc);
+ }
+ else {
+ $("#tagcloud").html("<h4>Pas de mots-clés trouvés</h4>");
+ }
+ displayContents(data.contents);
+ if (gomNs.countries && data.countries) {
+ var _max = Math.max(1, _(data.countries).max());
+ _(gomNs.countries).each(function(_country, _k) {
+ var _val = data.countries[_k] || 0,
+ _fill = getGradient(_val/_max);
+ switch(gomNs.mappingLibrary) {
+ case 'gmaps':
+ _(_country.gPolygons).each(function(_p) {
+ _p.setOptions({
+ "fillColor" : _fill,
+ "fillOpacity" : 1
+ });
+ });
+ break;
+ case 'leaflet':
+ _country.layer.setStyle({
+ "fillColor" : _fill,
+ "fillOpacity" : 1
+ })
+ break;
+ }
+ });
+ }
+ if (data.disciplines) {
+ var _disc = data.disciplines.filter(function(_d) {
+ return +_d.score > 0;
+ }),
+ _max = _disc.reduce(function(_a, _b) {
+ return Math.max(_a,_b.score)
+ }, 1);
+ $("#disciplines").html(
+ '<ul class="disc-ul">'
+ + _disc.map(function(_d) {
+ var _col = getGradient(_d.score / _max);
+ return '<li class="disc-li" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
+ + _d.label
+ + '"><div class="disc-label"><a href="#">'
+ + _d.translated_label
+ + '</a></div><div class="disc-bar" style="background:'
+ + _col
+ + '; width:'
+ + Math.floor(120 * (_d.score / _max))
+ + 'px">'
+ }).join("")
+ + '</ul>'
+ )
+
+ }
+}
+
+function saveChanges() {
+ if (gomNs.sessionid && gomNs.sessionkey) {
+ $.getJSON(gomNs.urls['session_info'], {
+ "sessionid" : gomNs.sessionid,
+ "sessionkey" : gomNs.sessionkey,
+ "data" : JSON.stringify(gomNs.sessiondata),
+ });
+ }
+}
+
+var debouncedSaveChanges = _.debounce(saveChanges, 3000);
+
+function changeView(nview) {
+ var _curView = gomNs.sessiondata.views[nview];
+ if (_curView.type == 'list' && (!_curView.list || !_curView.list.length)) {
+ alert(gettext("La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"));
+ } else {
+ gomNs.sessiondata.view = nview;
+ debouncedSaveChanges();
+ showView();
+ }
+}
+
+function showView() {
+ $(".lienvue").removeClass("actif");
+ $("#view_" + gomNs.sessiondata.view).addClass("actif");
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ $("#titrevue").val(_curView.name);
+ $("#bloc_gestvue h2").html(gettext('Gerer la vue')+' "' + _.escape(_curView.name) + '"');
+ $("div.bloc").show();
+ $("#widgetlist input").prop("checked",true);
+ _(_curView.hiddenWidgets).each(function(_w) {
+ $("#chbx_" + _w).prop("checked",false);
+ $("#" + _w).hide();
+ });
+ $("#notes").html( _curView.notes
+ ? '<ul><li>' + _.escape(_curView.notes).replace(/\n/gm,"</li><li>") + '</li></ul>'
+ : ( gomNs.write_allowed ? '<ul><li>'+gettext('Annoter cette vue')+'...</li></ul>' : '' ) );
+ switch(_curView.type) {
+ case 'list':
+ $("#bandefiltre, .handle").hide();
+ $.getJSON(gomNs.urls['filter'], {
+ contentlist: _curView.list.join(',')
+ }, updateDisplay);
+ animLoad();
+ break;
+ case 'filter':
+ $("#bandefiltre, .handle").show();
+ updateFilters();
+ break;
+ }
+}
+
+function displayViewList() {
+ $("#ongletsvues").html(gomNs.sessiondata.views.map(function(_v, _k) {
+ return '<li class="lienvue" id="view_'
+ + _k
+ + '" onclick="changeView('
+ + _k
+ + '); return false;"><a href="#">'
+ + _.escape(_v.name)
+ + '</a></li>';
+ }).join(""))
+}
+
+function getInitialView() {
+ var _urlParam = {};
+ if (document.location.hash) {
+ var _tab = document.location.hash.replace("#","").split(":");
+ _urlParam.sessionid = _tab[0];
+ if (_tab.length > 1) {
+ _urlParam.sessionkey = _tab[1];
+ }
+ }
+ $.getJSON(gomNs.urls['session_info'], _urlParam, function(data) {
+ gomNs.sessionid = data.sessionid;
+ if (data.sessionkey) {
+ gomNs.sessionkey = data.sessionkey;
+ }
+ gomNs.write_allowed = data.write_allowed;
+ if (data.write_allowed) {
+ $("#partagerw").show();
+ } else {
+ $("#partagerw").hide();
+ }
+ var _baseUrl = document.location.href.split("#")[0];
+ gomNs.hash = "#" + data.sessionid + (data.sessionkey ? (':' + data.sessionkey) : '');
+ document.location.hash = gomNs.hash;
+ gomNs.sessiondata = typeof data.data == "string" ? JSON.parse(data.data) : (typeof data.data == "object" ? data.data : {});
+ if (!gomNs.sessiondata.title) {
+ gomNs.sessiondata.title = gettext('Nouvelle session');
+ }
+ if (!gomNs.sessiondata.views) {
+ gomNs.sessiondata.views = [];
+ }
+ if (!gomNs.sessiondata.views.length) {
+ addView( 'filter', gettext('Mes resultats de recherche') );
+ addView( 'list', gettext('Ma liste') );
+ }
+ if (!gomNs.sessiondata.annotations) {
+ gomNs.sessiondata.annotations = {};
+ }
+ if (data.write_allowed) {
+ $("#bloc_gestvue").show();
+ } else {
+ $("#bloc_gestvue").hide();
+ }
+ $("#sessionname").html(_.escape(gomNs.sessiondata.title)
+ + ( data.write_allowed ? '' : '<span class="lectseul"> ('+gettext("lecture seule")+')</span>' ) );
+ gomNs.hrefinterval = setInterval(function() {
+ if (document.location.hash != gomNs.hash) {
+ clearInterval(gomNs.hrefinterval);
+ getInitialView();
+ }
+ }, 500);
+ displayViewList();
+ showView();
+ });
+}
+
+function changeSessionTitle(title) {
+ gomNs.sessiondata.title = title;
+ $("#sessionname").html(_.escape(gomNs.sessiondata.title));
+ debouncedSaveChanges();
+}
+
+function addView(viewtype, viewname) {
+ var _content = {
+ type: viewtype,
+ name: viewname,
+ hiddenWidgets: [],
+ };
+ switch(viewtype) {
+ case 'filter':
+ _content.period = [ gomNs.minYear, gomNs.maxYear ];
+ _content.tag = [];
+ _content.country = [];
+ gomNs.sessiondata.view = gomNs.sessiondata.views.length;
+ break;
+ case 'list':
+ _content.list = [];
+ break;
+ }
+ gomNs.sessiondata.views.push(_content);
+ debouncedSaveChanges();
+}
+
+function animLoad() {
+ //console.log("animLoad");
+ var _d = $("#waiting"),
+ _w = _d.width(),
+ _h = _d.height(),
+ _r = .33*Math.min(_w,_h),
+ _count = 24,
+ _html = '',
+ _f = 2* Math.PI / _count;
+ _d.empty().show();
+ for (var _i = 0; _i < _count; _i++) {
+ var _x = Math.floor(Math.sin(_i * _f)*_r + _w/2),
+ _y = Math.floor(-Math.cos(_i * _f)*_r + _h/2),
+ _el = document.createElement('div');
+ _el.className = 'waittick';
+ _d.append(_el);
+ $(_el).css({
+ "left": _x + "px",
+ "top": _y + "px"
+ }).delay(200*_i).fadeIn(400).delay(600 + 200* _i).fadeOut();
+ }
+}
+
+function animStop() {
+ $("#waiting").empty().fadeOut();
+}
+function ellipse(_text, _length) {
+ var _rgxp = new RegExp('(^.{0,' + _length + '})([\s]|$)(.*)')
+ return _text.replace(/(\n|\r|\r\n)/mg,' ').trim().replace(_rgxp,'$1…')
+}
+
+function highlightText(_text, _search) {
+ var _rgxp = new RegExp('(' + _search.replace(/(\W)/g, '\\$1') + ')','gi');
+ return _text.replace(_rgxp, '<strong>$1</strong>');
+}
+
+function wikipediaUrl(_text) {
+ return "http://" + gomNs.languageCode + ".wikipedia.org/wiki/" + encodeURI(_text.replace(/ /g,'_'))
+}
+
+wpTemplate = _.template(
+ '<h4 class="wptitle"><% print(highlightText(item.label, inputvalue)); %></h4><% if (item.thumbnail) { %><img class="wpimg" src="<%-item.thumbnail%>" /><% };'
+ + ' if (item.abstract) { %><p class="wpabstract"><% print(ellipse(item.abstract,250))%></p><p class="wpsource"><a href="<% print(wikipediaUrl(item.label)) %>" target="_blank"><% print(gettext("Source : Wikipédia")) %></a></p><% }; %><div class="clear"></div>'
+);
+
+acTemplate = _.template(
+ '<a><span class="acnb"><%- item.nb %></span><h4 class="actitle"><% print(highlightText(item.label, inputvalue)); %></h4></a>'
+);
+
+$(document).ready(function() {
+ switch(gomNs.mappingLibrary) {
+ case 'gmaps':
+ gomNs.map = new google.maps.Map(document.getElementById("map"),
+ {
+ center: new google.maps.LatLng(30, 0),
+ zoom: 1,
+ mapTypeId: google.maps.MapTypeId.SATELLITE
+ });
+ $.getJSON(gomNs.urls['countries'], showCountriesGmap);
+ break;
+ case 'leaflet':
+ gomNs.map = new L.Map('map', {
+ center: new L.LatLng(30, 0),
+ zoom: 1
+ });
+ //gomNs.map.addLayer(new L.TileLayer("http://s3.amazonaws.com/com.modestmaps.bluemarble/{z}-r{y}-c{x}.jpg", {maxZoom: 9}));
+ $.getJSON(gomNs.urls['countries'], showCountriesLeaflet);
+ break;
+ }
+ var _html = gomNs.displayedDates.map(function(_v) {
+ return '<li style="left: '
+ + parseInt(yearToPx(_v))
+ + 'px"><div class="datelabel">'
+ + _v
+ + '</div></li>'
+ }).join('');
+ $("#dates").html(_html);
+ $("#apartager").click(function() {
+ var _pu = $("#partageurls");
+ if (_pu.is(":visible")) {
+ $(this).removeClass("actif");
+ } else {
+ $(this).addClass("actif");
+ $("#partagero").addClass("actif");
+ $("#partagerw").removeClass("actif");
+ var _url = document.location.href.split("#")[0] + "#" + gomNs.sessionid;
+ $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
+ }
+ $(this).attr("class",_pu.is(":visible") ? "" : "actif");
+ _pu.slideToggle(function() {
+ if ($(this).is(":visible")) {
+ if (typeof gomNs.clip == "undefined") {
+ gomNs.clip = new ZeroClipboard.Client();
+ gomNs.clip.setHandCursor( true );
+ gomNs.clip.glue('zc-partageinput');
+ }
+ gomNs.clip.show();
+ gomNs.clip.setText( _url );
+ } else {
+ gomNs.clip.hide();
+ }
+ });
+ return false;
+ })
+ $("#partagero").click(function() {
+ $("#partagero").addClass("actif");
+ $("#partagerw").removeClass("actif");
+ var _url = document.location.href.split("#")[0] + "#" + gomNs.sessionid;
+ $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
+ gomNs.clip.setText( _url );
+ return false;
+ });
+ $("#partagerw").click(function() {
+ $("#partagerw").addClass("actif");
+ $("#partagero").removeClass("actif");
+ var _url = document.location.href.split("#")[0] + gomNs.hash;
+ $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
+ gomNs.clip.setText( _url );
+ return false;
+ });
+ $(".handle").draggable({
+ "axis" : "x",
+ "containment" : "parent",
+ "drag": function() {
+ $(this).attr("year",parseInt(pxToYear($(this).position().left)));
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ if (_curView.type == 'filter') {
+ var _h0 = $("#handle_0"),
+ _h1 = $("#handle_1"),
+ _h0v = parseInt(_h0.attr("year")),
+ _h1v = parseInt(_h1.attr("year"));
+ _curView.period = [ Math.min(_h0v, _h1v), Math.max(_h0v, _h1v)];
+ _h0.find(".handleinner").css({
+ "margin-left" : (_h0v>_h1v ? "0" : "-20px")
+ })
+ _h1.find(".handleinner").css({
+ "margin-left" : (_h1v>_h0v ? "0" : "-20px")
+ })
+ updateFilters();
+ debouncedSaveChanges();
+ }
+ }
+ });
+ $("#sessionname").click(function() {
+ if (gomNs.write_allowed && !$(this).children().length) {
+ var _el = document.createElement('input');
+ _el.value = gomNs.sessiondata.title;
+ $(_el).focusout(function() {
+ changeSessionTitle(this.value);
+ }).keypress(function(e) {
+ if (e.keyCode == 13) {
+ changeSessionTitle(this.value);
+ }
+ });
+ $(this).html(_el);
+ _el.focus();
+ _el.select();
+ }
+ });
+ $("#titrevue").keyup(function() {
+ var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ _curView.name = $(this).val();
+ $("#view_" + gomNs.sessiondata.view + " a").html(_.escape(_curView.name))
+ $("#bloc_gestvue h2").html(gettext('Gerer la vue')+' "' + _.escape(_curView.name) + '"');
+ debouncedSaveChanges();
+ });
+ $("#notes").click(function() {
+ if (gomNs.write_allowed) {
+ if (this.children[0].tagName == 'UL') {
+ var _el = document.createElement('textarea'),
+ _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+ _el.innerHTML = _curView.notes ? _curView.notes : '';
+ $(_el).focusout(function() {
+ _curView.notes = this.value;
+ this.parentNode.innerHTML = '<ul><li>' + (this.value.length ? _.escape(_curView.notes).replace(/\n/gm,"</li><li>") : gettext('Annoter cette vue')+'...' ) + '</ul>';
+ debouncedSaveChanges();
+ });
+ $(this).html(_el);
+ _el.focus();
+ _el.select();
+ }
+ }
+ });
+/* gomNs.disChart = d3.select("#disciplines")
+ .append("svg:svg")
+ .attr("width", 475)
+ .attr("height", 120); */
+ getInitialView();
+ $(".barrebloc").click(function() {
+ $(this).next().slideToggle();
+ });
+ gomNs.widgetList = [];
+ var _html = '<ul id="widgetlist">';
+ $("div.bloc").each(function() {
+ gomNs.widgetList.push(this.id);
+ _html += '<li><input type="checkbox" id="chbx_'
+ + this.id
+ + '" /><label>' + $(this).find("h2").html() + '</label></li>'
+ });
+ _html + '</ul>';
+ $("#gestvue").append(_html);
+ $("#nouvellevue").click(function() {
+ $("#plusdevues").slideToggle();
+ return false;
+ })
+ $("#widgetlist input").change(function() {
+ var _newWL = [];
+ $("#widgetlist input").each(function(_k, _e) {
+ var _id = _e.id.substr(5);
+ if (!$(_e).prop("checked")) {
+ $("#" + _id).hide();
+ _newWL.push(_id);
+ } else {
+ $("#" + _id).show();
+ }
+ });
+ gomNs.sessiondata.views[gomNs.sessiondata.view].hiddenWidgets = _newWL;
+ debouncedSaveChanges();
+ });
+ $("#nouv_resrech").click(function() {
+ var _txt = prompt(gettext("Comment souhaitez-vous nommer votre nouvelle vue ?"),gettext("Nouveaux resultats de recherche"));
+ if (_txt !== null) {
+ addView('filter', _txt);
+ displayViewList();
+ }
+ return false;
+ });
+ $("#nouv_liste").click(function() {
+ var _txt = prompt(gettext("Comment souhaitez-vous nommer votre nouvelle vue ?"),gettext("Nouvelle liste"));
+ if (_txt !== null) {
+ addView('list', _txt);
+ displayViewList();
+ }
+ return false;
+ });
+ $(" #tagform ").submit(function() {
+ return false;
+ });
+ var cache = {}, /*CACHE => http://jqueryui.com/demos/autocomplete/#remote-with-cache */
+ lastXhr;
+ $( "#tagsearch" ).autocomplete({
+ source: function( request, response ) {
+ var term = request.term;
+ if ( term in cache ) {
+ $("#tagsearch").removeClass("waiting");
+ response( cache[ term ] );
+ return;
+ }
+ $("#tagsearch").addClass("waiting");
+ lastXhr = $.getJSON( gomNs.urls['tag_search'], request, function( data, status, xhr ) {
+ cache[ term ] = data;
+ if ( xhr === lastXhr ) {
+ response( data );
+ $("#tagsearch").removeClass("waiting");
+ }
+ });
+ },
+ minLength: ( gomNs.languageCode == 'ja' ? 1 : 2 ),
+ focus: function( event, ui ) {
+ $(".wpinfo").html(wpTemplate({
+ item: ui.item,
+ inputvalue: $("#tagsearch").val()
+ }));
+ },
+ select: function( event, ui ) {
+ addFilter('tag', ui.item.original_label);
+ }
+ })
+ .data("autocomplete")._renderItem = function(ul, item) {
+ var _contents = acTemplate({
+ item: item,
+ inputvalue: $("#tagsearch").val()
+ });
+ return $( "<li>" )
+ .data( "item.autocomplete", item )
+ .html( _contents )
+ .appendTo( ul );
+ };
+});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/notice.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,99 @@
+var selectedelement = null;
+
+function drawlinks() {
+ var w$ = $(window)
+ scroll = w$.scrollTop(),
+ windowheight = w$.height();
+ $(".tags-main, .main-datasheet").css({
+ "margin-top": Math.max(0, scroll - 60) + "px"
+ });
+ var cvheight = Math.max($(".tags-main").outerHeight(), $(".related-datasheets").outerHeight()),
+ cvwidth = $(".tag-container").width(),
+ cv$ = $(".tag-canvas"),
+ cvo = cv$.offset(),
+ colors = ["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];
+ cv$.attr({
+ width: cvwidth,
+ height: cvheight
+ }).css({
+ width: cvwidth,
+ height: cvheight
+ });
+
+ $(".main-datasheet-tag, .datasheet").css("opacity", selectedelement ? .7 : 1);
+ $(selectedelement).css("opacity",1);
+
+ var ctx = cv$[0].getContext('2d'),
+ mds$ = $(".main-datasheet"),
+ ymain = Math.floor(mds$.height() / 2 + mds$.offset().top - cvo.top);
+
+ $(".main-datasheet-tag").each(function() {
+ var tag$ = $(this),
+ ytag = Math.floor(tag$.offset().top + tag$.outerHeight() / 2 - cvo.top);
+ ctx.strokeStyle = "#999999";
+ ctx.lineWidth = (this === selectedelement ? 4 : 1);
+ ctx.beginPath();
+ ctx.moveTo(0, ymain);
+ ctx.bezierCurveTo(80,ymain, 40,ytag, 120, ytag);
+ ctx.lineTo(160, ytag);
+ ctx.stroke();
+
+ var tagid = tag$.attr("data-tag-id"),
+ relds = $(".related-datasheet-tag[data-tag-id=" + tagid + "]").parent().parent();
+
+ if (this === selectedelement) {
+ relds.css("opacity", 1);
+ }
+
+ relds.each(function(i) {
+ var ds$ = $(this),
+ dst = ds$.offset().top,
+ dsh = ds$.outerHeight(),
+ visible = ds$.is(":visible") && (dst - scroll < windowheight) && (dst + dsh - scroll > 0);
+ if (visible) {
+ var yds = Math.floor(dst + dsh / 2 - cvo.top);
+ ctx.lineWidth = (this === selectedelement || tag$[0] === selectedelement ? 4 : 1);
+ ctx.strokeStyle = colors[ds$.index() % colors.length];
+ ctx.beginPath();
+ ctx.moveTo(160, ytag);
+ ctx.lineTo(200, ytag);
+ ctx.bezierCurveTo(280,ytag, 280,yds, 320, yds);
+ ctx.stroke();
+ if (this === selectedelement) {
+ tag$.css("opacity",1);
+ }
+ }
+ })
+ });
+}
+
+$(function() {
+ $(window).scroll(drawlinks);
+ $(window).resize(drawlinks);
+ $(".main-datasheet-tag").click(function() {
+ var tag$ = $(this);
+ if (tag$.hasClass("selected")) {
+ $(".datasheet").show();
+ tag$.removeClass("selected");
+ } else {
+ $(".datasheet").hide();
+ var tagid = tag$.attr("data-tag-id");
+ $(".related-datasheet-tag[data-tag-id=" + tagid + "]").parent().parent().show();
+ $(".main-datasheet-tag").removeClass("selected");
+ tag$.addClass("selected");
+ }
+ drawlinks();
+ });
+ $(".main-datasheet-tag, .datasheet").mouseover(function() {
+ if (selectedelement !== this) {
+ selectedelement = this;
+ drawlinks();
+ }
+ }).mouseout(function() {
+ if (selectedelement) {
+ selectedelement = null;
+ drawlinks();
+ }
+ });
+ drawlinks();
+});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/thesaurus.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,178 @@
+var trees = [
+ {
+ title: "Thésaurus de l'Architecture et de l'Urbanisme : Secteur urbain",
+ tree: {
+ label: "secteur urbain",
+ contents: [
+ {
+ label: "banlieue",
+ contents: [
+ {
+ label: "faubourg"
+ }
+ ]
+ },
+ {
+ label: "îlot"
+ },
+ {
+ label: "quartier",
+ contents: [
+ {
+ label: "centre-ville"
+ }
+ ]
+ },
+ {
+ label: "secteur urbain concerté",
+ contents: [
+ {
+ label: "grand ensemble"
+ },
+ {
+ label: "lotissement",
+ contents: [
+ {
+ label: "lotissement concerté",
+ contents: [
+ {
+ label: "cité-jardin"
+ },
+ {
+ label: "cité ouvrière"
+ },
+ {
+ label: "courée"
+ },
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ ]
+ }
+ },
+ {
+ title: "Thésaurus Garnier : Architecture d'habitation",
+ tree: {
+ label: "architecture d'habitation",
+ contents: [
+ {
+ label: "cité-jardin"
+ },
+ {
+ label: "édifice d'habitation",
+ contents: [
+ {
+ label: "demeure",
+ contents: [
+ {
+ label: "chalet"
+ },
+ {
+ label: "château"
+ },
+ {
+ label: "château-fort",
+ contents: [
+ {
+ label: "chemin de ronde"
+ },
+ {
+ label: "donjon"
+ }
+ ]
+ },
+ {
+ label: "hôtel particulier"
+ },
+ {
+ label: "maison"
+ },
+ {
+ label: "manoir"
+ },
+ {
+ label: "palais"
+ }
+ ]
+ },
+ {
+ label: "abri",
+ contents: [
+ {
+ label: "buron"
+ },
+ {
+ label: "cabane"
+ },
+ {
+ label: "campement",
+ contents: [
+ {
+ label: "tente"
+ },
+ {
+ label: "tipi"
+ },
+ {
+ label: "igloo"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ title: "Thésaurus Garnier : Sciences occultes",
+ tree: {
+ label: "sciences occultes",
+ contents: [
+ {
+ label: "alchimie"
+ },
+ {
+ label: "astrologie"
+ },
+ {
+ label: "divination"
+ },
+ {
+ label: "magie",
+ contents: [
+ {
+ label: "sorcellerie"
+ },
+ {
+ label: "sorcière"
+ }
+ ]
+ }
+ ]
+ }
+ }
+];
+$(function() {
+ $(".column").each(function(_key) {
+ var _tree = trees[_key],
+ _el = $(this);
+ _el.find("h3").text(_tree.title);
+ $.getJSON(
+ endpoints.fill_tree,
+ { tree: JSON.stringify(_tree.tree) },
+ function(_data) {
+ renderData(_el.find(".cattree"), _data, 2);
+ _el.find("p.theme:contains('cité-jardin')")
+ .css("background-color","#ffff80")
+ .parent()
+ .parentsUntil(".cattree")
+ .removeClass("folded");
+ }
+ );
+ });
+});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/trees.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,81 @@
+
+function countContentsAndThemes(_data) {
+ _data.counts = {
+ contents: (typeof _data.contents == "object" && typeof _data.contents.slice == "function" ? _data.contents.length : 0),
+ themes: (typeof _data.themes == "object" && typeof _data.themes.slice == "function" ? _data.themes.length : 0)
+ }
+ if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
+ for (var _i = 0; _i < _data.themes.length; _i++) {
+ countContentsAndThemes(_data.themes[_i]);
+ var _subres = _data.themes[_i].counts;
+ _data.counts.contents += _subres.contents;
+ _data.counts.themes += _subres.themes;
+ }
+ }
+}
+
+function renderTemplate(_data, _level, _scale, _maxlevel) {
+ _data.isfolded = _level >= _maxlevel;
+ _(_data.tags).each(function(_tag) {
+ _(_tag.contents).each(function(_content, _key) {
+ _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1…');
+ _content.hidden = (_key >= 5);
+ });
+ _tag.show_more = _tag.contents && _tag.contents.length > 5 ? _tag.contents.length - 5 : 0;
+ });
+ _(_data.contents).each(function(_content, _key) {
+ _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1…');
+ _content.hidden = (_key >= 5);
+ });
+ _data.show_more = _data.contents && _data.contents.length > 5 ? _data.contents.length - 5 : 0;
+ _data.font_size = (10+Math.log(_data.counts.contents)*_scale);
+ var _dsurl = endpoints.datasheet.replace(/ID$/,'');
+ var _prefix = '<li class="themeli{{#isfolded}} folded{{/isfolded}}"><p class="theme"><span style="font-size: {{font_size}}px">{{label}}</span> — {{#counts.themes}}{{counts.themes}} thème(s){{#counts.contents}}, {{/counts.contents}}{{/counts.themes}}{{#counts.contents}}{{counts.contents}} notice(s){{/counts.contents}}</p><ul>',
+ _suffix = '{{#contents}}<li class="content{{#hidden}} hidden{{/hidden}}" id="content_{{id}}"><p class="title score_{{score}}"><a href="'
+ + _dsurl
+ + '{{hda_id}}">{{title}}</a></p><div class="foldedcontent"><div class="img-container"><img src="http://www.histoiredesarts.culture.fr/images/cached/images/{{hda_id}}.jpg" />'
+ + '</div><p class="description">Source: <a href="{{organization_url}}" target="_blank">{{organization}}</a><br /><a href="'
+ + _dsurl
+ + '{{hda_id}}" class="content">{{trimmed_description}}</a></p></div></li>{{/contents}}{{#show_more}}<li class="show_more">Plus de contenus (<span class="show_more_count">{{show_more}}</span>)…</li>{{/show_more}}</ul></li>',
+ _html = Mustache.to_html(_prefix, _data);
+ if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
+ for (var _i = 0; _i < _data.themes.length; _i++) {
+ _html += renderTemplate(_data.themes[_i], _level + 1, _scale, _maxlevel);
+ }
+ }
+ _html += Mustache.to_html(_suffix, _data);
+ return _html;
+}
+
+function renderData(_selector, _data, _maxlevel) {
+ countContentsAndThemes(_data);
+ var _scale = 8 / Math.max(1,Math.log(_data.counts.contents));
+ _selector.html(renderTemplate(_data, 0, _scale, _maxlevel));
+ _selector.find("p.theme").click(function() {
+ $(this).parent().toggleClass("folded")
+ return false;
+ });
+ _selector.find("li.content").mouseenter(function() {
+ $(this).find(".foldedcontent")
+ .dequeue()
+ .animate({
+ height: 5 + $(this).find("p.description").outerHeight()
+ },
+ 500);
+ }).mouseleave(function() {
+ $(this).find(".foldedcontent")
+ .dequeue()
+ .animate({
+ height: "0"
+ },
+ 500);
+ });
+ _selector.find(".show_more").click(function() {
+ $(this).siblings(".hidden:lt(5)").removeClass("hidden");
+ var _l = $(this).siblings(".hidden").length;
+ $(this).find(".show_more_count").html(_l);
+ if (!_l) {
+ $(this).detach();
+ }
+ });
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/ZeroClipboard.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,311 @@
+// Simple Set Clipboard System
+// Author: Joseph Huckaby
+
+var ZeroClipboard = {
+
+ version: "1.0.7",
+ clients: {}, // registered upload clients on page, indexed by id
+ moviePath: 'ZeroClipboard.swf', // URL to movie
+ nextId: 1, // ID of next movie
+
+ $: function(thingy) {
+ // simple DOM lookup utility function
+ if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
+ if (!thingy.addClass) {
+ // extend element with a few useful methods
+ thingy.hide = function() { this.style.display = 'none'; };
+ thingy.show = function() { this.style.display = ''; };
+ thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
+ thingy.removeClass = function(name) {
+ var classes = this.className.split(/\s+/);
+ var idx = -1;
+ for (var k = 0; k < classes.length; k++) {
+ if (classes[k] == name) { idx = k; k = classes.length; }
+ }
+ if (idx > -1) {
+ classes.splice( idx, 1 );
+ this.className = classes.join(' ');
+ }
+ return this;
+ };
+ thingy.hasClass = function(name) {
+ return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
+ };
+ }
+ return thingy;
+ },
+
+ setMoviePath: function(path) {
+ // set path to ZeroClipboard.swf
+ this.moviePath = path;
+ },
+
+ dispatch: function(id, eventName, args) {
+ // receive event from flash movie, send to client
+ var client = this.clients[id];
+ if (client) {
+ client.receiveEvent(eventName, args);
+ }
+ },
+
+ register: function(id, client) {
+ // register new client to receive events
+ this.clients[id] = client;
+ },
+
+ getDOMObjectPosition: function(obj, stopObj) {
+ // get absolute coordinates for dom element
+ var info = {
+ left: 0,
+ top: 0,
+ width: obj.width ? obj.width : obj.offsetWidth,
+ height: obj.height ? obj.height : obj.offsetHeight
+ };
+
+ while (obj && (obj != stopObj)) {
+ info.left += obj.offsetLeft;
+ info.top += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+
+ return info;
+ },
+
+ Client: function(elem) {
+ // constructor for new simple upload client
+ this.handlers = {};
+
+ // unique ID
+ this.id = ZeroClipboard.nextId++;
+ this.movieId = 'ZeroClipboardMovie_' + this.id;
+
+ // register client with singleton to receive flash events
+ ZeroClipboard.register(this.id, this);
+
+ // create movie
+ if (elem) this.glue(elem);
+ }
+};
+
+ZeroClipboard.Client.prototype = {
+
+ id: 0, // unique ID for us
+ ready: false, // whether movie is ready to receive events or not
+ movie: null, // reference to movie object
+ clipText: '', // text to copy to clipboard
+ handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
+ cssEffects: true, // enable CSS mouse effects on dom container
+ handlers: null, // user event handlers
+
+ glue: function(elem, appendElem, stylesToAdd) {
+ // glue to DOM element
+ // elem can be ID or actual DOM element object
+ this.domElement = ZeroClipboard.$(elem);
+
+ // float just above object, or zIndex 99 if dom element isn't set
+ var zIndex = 99;
+ if (this.domElement.style.zIndex) {
+ zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
+ }
+
+ if (typeof(appendElem) == 'string') {
+ appendElem = ZeroClipboard.$(appendElem);
+ }
+ else if (typeof(appendElem) == 'undefined') {
+ appendElem = document.getElementsByTagName('body')[0];
+ }
+
+ // find X/Y position of domElement
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
+
+ // create floating DIV above element
+ this.div = document.createElement('div');
+ var style = this.div.style;
+ style.position = 'absolute';
+ style.left = '' + box.left + 'px';
+ style.top = '' + box.top + 'px';
+ style.width = '' + box.width + 'px';
+ style.height = '' + box.height + 'px';
+ style.zIndex = zIndex;
+
+ if (typeof(stylesToAdd) == 'object') {
+ for (addedStyle in stylesToAdd) {
+ style[addedStyle] = stylesToAdd[addedStyle];
+ }
+ }
+
+ // style.backgroundColor = '#f00'; // debug
+
+ appendElem.appendChild(this.div);
+
+ this.div.innerHTML = this.getHTML( box.width, box.height );
+ },
+
+ getHTML: function(width, height) {
+ // return HTML for movie
+ var html = '';
+ var flashvars = 'id=' + this.id +
+ '&width=' + width +
+ '&height=' + height;
+
+ if (navigator.userAgent.match(/MSIE/)) {
+ // IE gets an OBJECT tag
+ var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
+ html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
+ }
+ else {
+ // all other browsers get an EMBED tag
+ html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
+ }
+ return html;
+ },
+
+ hide: function() {
+ // temporarily hide floater offscreen
+ if (this.div) {
+ this.div.style.left = '-2000px';
+ }
+ },
+
+ show: function() {
+ // show ourselves after a call to hide()
+ this.reposition();
+ },
+
+ destroy: function() {
+ // destroy control and floater
+ if (this.domElement && this.div) {
+ this.hide();
+ this.div.innerHTML = '';
+
+ var body = document.getElementsByTagName('body')[0];
+ try { body.removeChild( this.div ); } catch(e) {;}
+
+ this.domElement = null;
+ this.div = null;
+ }
+ },
+
+ reposition: function(elem) {
+ // reposition our floating div, optionally to new container
+ // warning: container CANNOT change size, only position
+ if (elem) {
+ this.domElement = ZeroClipboard.$(elem);
+ if (!this.domElement) this.hide();
+ }
+
+ if (this.domElement && this.div) {
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
+ var style = this.div.style;
+ style.left = '' + box.left + 'px';
+ style.top = '' + box.top + 'px';
+ }
+ },
+
+ setText: function(newText) {
+ // set text to be copied to clipboard
+ this.clipText = newText;
+ if (this.ready) this.movie.setText(newText);
+ },
+
+ addEventListener: function(eventName, func) {
+ // add user event listener for event
+ // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+ if (!this.handlers[eventName]) this.handlers[eventName] = [];
+ this.handlers[eventName].push(func);
+ },
+
+ setHandCursor: function(enabled) {
+ // enable hand cursor (true), or default arrow cursor (false)
+ this.handCursorEnabled = enabled;
+ if (this.ready) this.movie.setHandCursor(enabled);
+ },
+
+ setCSSEffects: function(enabled) {
+ // enable or disable CSS effects on DOM container
+ this.cssEffects = !!enabled;
+ },
+
+ receiveEvent: function(eventName, args) {
+ // receive event from flash
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+
+ // special behavior for certain events
+ switch (eventName) {
+ case 'load':
+ // movie claims it is ready, but in IE this isn't always the case...
+ // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
+ this.movie = document.getElementById(this.movieId);
+ if (!this.movie) {
+ var self = this;
+ setTimeout( function() { self.receiveEvent('load', null); }, 1 );
+ return;
+ }
+
+ // firefox on pc needs a "kick" in order to set these in certain cases
+ if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
+ var self = this;
+ setTimeout( function() { self.receiveEvent('load', null); }, 100 );
+ this.ready = true;
+ return;
+ }
+
+ this.ready = true;
+ this.movie.setText( this.clipText );
+ this.movie.setHandCursor( this.handCursorEnabled );
+ break;
+
+ case 'mouseover':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.addClass('hover');
+ if (this.recoverActive) this.domElement.addClass('active');
+ }
+ break;
+
+ case 'mouseout':
+ if (this.domElement && this.cssEffects) {
+ this.recoverActive = false;
+ if (this.domElement.hasClass('active')) {
+ this.domElement.removeClass('active');
+ this.recoverActive = true;
+ }
+ this.domElement.removeClass('hover');
+ }
+ break;
+
+ case 'mousedown':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.addClass('active');
+ }
+ break;
+
+ case 'mouseup':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.removeClass('active');
+ this.recoverActive = false;
+ }
+ break;
+ } // switch eventName
+
+ if (this.handlers[eventName]) {
+ for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
+ var func = this.handlers[eventName][idx];
+
+ if (typeof(func) == 'function') {
+ // actual function reference
+ func(this, args);
+ }
+ else if ((typeof(func) == 'object') && (func.length == 2)) {
+ // PHP style object + method, i.e. [myObject, 'myMethod']
+ func[0][ func[1] ](this, args);
+ }
+ else if (typeof(func) == 'string') {
+ // name of function
+ window[func](this, args);
+ }
+ } // foreach event handler defined
+ } // user defined handler for event
+ }
+
+};
Binary file src/hdalab/static/hdalab/lib/ZeroClipboard.swf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/countries.geo.json Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,1 @@
+{"type": "FeatureCollection", "features": [{"geometry": {"type": "Polygon", "coordinates": [[[61.210816999999999, 35.650072000000002], [62.230651000000002, 35.270663999999996], [62.984662, 35.404040999999999], [63.193537999999997, 35.857165999999999], [63.982895999999997, 36.007956999999998], [64.546479000000005, 36.312072999999998], [64.746105, 37.111818], [65.588948000000002, 37.305216999999999], [65.745631000000003, 37.661163999999999], [66.217384999999993, 37.393790000000003], [66.518607000000003, 37.362783999999998], [67.075782000000004, 37.356144], [67.829999999999998, 37.144993999999997], [68.135561999999993, 37.023114999999997], [68.859446000000005, 37.344335999999998], [69.196273000000005, 37.151144000000002], [69.518784999999994, 37.608997000000002], [70.116578000000004, 37.588222999999999], [70.270573999999996, 37.735165000000002], [70.376304000000005, 38.138396], [70.806820999999999, 38.486282000000003], [71.348130999999995, 38.258904999999999], [71.239403999999993, 37.953265000000002], [71.541917999999995, 37.905774000000001], [71.448693000000006, 37.065645000000004], [71.844638000000003, 36.738171000000001], [72.193040999999994, 36.948287999999998], [72.636889999999994, 37.047558000000002], [73.260056000000006, 37.495257000000002], [73.948695999999998, 37.421565999999999], [74.980001999999999, 37.419989999999999], [75.158028000000002, 37.133031000000003], [74.575892999999994, 37.020840999999997], [74.067552000000006, 36.836176000000002], [72.920024999999995, 36.720007000000003], [71.846292000000005, 36.509942000000002], [71.262348000000003, 36.074387999999999], [71.498767999999998, 35.650562999999998], [71.613076000000007, 35.153202999999998], [71.115019000000004, 34.733125999999999], [71.156773000000001, 34.348911000000001], [70.881803000000005, 33.988855999999998], [69.930543, 34.020119999999999], [70.323594, 33.358533000000001], [69.687146999999996, 33.105499000000002], [69.262522000000004, 32.501944000000002], [69.317763999999997, 31.901412000000001], [68.926676999999998, 31.620189], [68.556932000000003, 31.71331], [67.792688999999996, 31.582930000000001], [67.683394000000007, 31.303153999999999], [66.938890999999998, 31.304911000000001], [66.381457999999995, 30.738899], [66.346473000000003, 29.887943], [65.046862000000004, 29.472180999999999], [64.350419000000002, 29.560030999999999], [64.148002000000005, 29.340819], [63.550260999999999, 29.468330999999999], [62.549857000000003, 29.318572], [60.874248000000001, 29.829239000000001], [61.781222, 30.735849999999999], [61.699314000000001, 31.379505999999999], [60.941944999999997, 31.548075000000001], [60.863655000000001, 32.182920000000003], [60.536078000000003, 32.981268999999998], [60.963700000000003, 33.528832000000001], [60.52843, 33.676445999999999], [60.803193, 34.404102000000002], [61.210816999999999, 35.650072000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d", "fr": "Afghanistan", "en": "Afghanistan", "nl": "Afghanistan", "pt": "Afeganist\u00e3o", "no": "Afghanistan", "de": "Afghanistan", "it": "Afghanistan", "sv": "Afghanistan", "pl": "Afganistan", "fi": "Afganistan", "zh": "\u963f\u5bcc\u6c57", "ja": "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3", "es": "Afganist\u00e1n"}, "label_fr": "Afghanistan", "name": "Afghanistan", "dbpedia_uri": "http://dbpedia.org/resource/Afghanistan"}, "id": "AFG"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[16.326528, -5.8774699999999998], [16.573180000000001, -6.6226450000000003], [16.860191, -7.2222980000000003], [17.089995999999999, -7.5456890000000003], [17.47297, -8.0685509999999994], [18.134222000000001, -7.9876779999999998], [18.464175999999998, -7.8470139999999997], [19.016752, -7.9882460000000002], [19.166613000000002, -7.7381840000000004], [19.417501999999999, -7.1554289999999998], [20.037723, -7.1163610000000004], [20.091622000000001, -6.9430899999999998], [20.601823, -6.9393180000000001], [20.514748000000001, -7.2996059999999998], [21.728110999999998, -7.2908720000000002], [21.746455999999998, -7.9200850000000003], [21.949131000000001, -8.3059010000000004], [21.801801000000001, -8.9087069999999997], [21.875181999999999, -9.5237079999999992], [22.208753000000002, -9.8947959999999995], [22.155268, -11.084801000000001], [22.402798000000001, -10.993074999999999], [22.837344999999999, -11.017621999999999], [23.456790999999999, -10.867863], [23.912215, -10.926826], [24.017893999999998, -11.237297999999999], [23.904153999999998, -11.722282], [24.079905, -12.191297], [23.930921999999999, -12.565848000000001], [24.016137000000001, -12.911046000000001], [21.933886000000001, -12.898436999999999], [21.887843, -16.080310000000001], [22.562477999999999, -16.898451000000001], [23.215047999999999, -17.523116000000002], [21.377175999999999, -17.930636], [18.956187, -17.789095], [18.263309, -17.309951000000002], [14.209707, -17.353100999999999], [14.058501, -17.423380999999999], [13.462362000000001, -16.971212000000001], [12.814081, -16.941343], [12.215460999999999, -17.111668000000002], [11.734199, -17.301888999999999], [11.640096, -16.673141999999999], [11.778537, -15.793816], [12.123581, -14.878316], [12.175618999999999, -14.449144], [12.500095, -13.547700000000001], [12.738479, -13.137905999999999], [13.312913999999999, -12.48363], [13.633721, -12.038645000000001], [13.738728, -11.297863], [13.686379000000001, -10.731076], [13.387328, -10.373578], [13.120988000000001, -9.7668970000000002], [12.87537, -9.1669339999999995], [12.929061000000001, -8.9590910000000008], [13.236433, -8.5626289999999994], [12.93304, -7.5965389999999999], [12.728298000000001, -6.9271219999999998], [12.227347, -6.294448], [12.322431999999999, -6.1000920000000001], [12.735170999999999, -5.9656820000000002], [13.024869000000001, -5.9843890000000002], [13.375597000000001, -5.8642409999999998], [16.326528, -5.8774699999999998]]], [[[12.436688, -5.684304], [12.182337, -5.7899310000000002], [11.914963, -5.0379870000000002], [12.318607999999999, -4.60623], [12.620760000000001, -4.4380230000000003], [12.995517, -4.7811029999999999], [12.631612000000001, -4.9912710000000002], [12.468004000000001, -5.2483620000000002], [12.436688, -5.684304]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043d\u0433\u043e\u043b\u0430", "fr": "Angola", "en": "Angola", "nl": "Angola", "pt": "Angola", "no": "Angola", "de": "Angola", "it": "Angola", "sv": "Angola", "pl": "Angola", "fi": "Angola", "zh": "\u5b89\u54e5\u62c9", "ja": "\u30a2\u30f3\u30b4\u30e9", "es": "Angola"}, "label_fr": "Angola", "name": "Angola", "dbpedia_uri": "http://dbpedia.org/resource/Angola"}, "id": "AGO"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.590247000000002, 41.855404], [20.463175, 41.515089000000003], [20.605181999999999, 41.086226000000003], [21.020040000000002, 40.842726999999996], [20.99999, 40.580004000000002], [20.674997000000001, 40.435000000000002], [20.614999999999998, 40.110007000000003], [20.150016000000001, 39.624997999999998], [19.98, 39.694992999999997], [19.960001999999999, 39.915005999999998], [19.406082000000001, 40.250773000000002], [19.319058999999999, 40.727229999999999], [19.403549999999999, 41.409565999999998], [19.540026999999998, 41.719985999999999], [19.371769, 41.877547999999997], [19.304486000000001, 42.195745000000002], [19.738050999999999, 42.688246999999997], [19.801613, 42.500093], [20.070699999999999, 42.588630000000002], [20.283754999999999, 42.320259999999998], [20.522950000000002, 42.217869999999998], [20.590247000000002, 41.855404]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043b\u0431\u0430\u043d\u0438\u044f", "fr": "Albanie", "en": "Albania", "nl": "Albani\u00eb", "pt": "Alb\u00e2nia", "no": "Albania", "de": "Albanien", "it": "Albania", "sv": "Albanien", "pl": "Albania", "fi": "Albania", "zh": "\u963f\u5c14\u5df4\u5c3c\u4e9a", "ja": "\u30a2\u30eb\u30d0\u30cb\u30a2", "es": "Albania"}, "label_fr": "Albanie", "name": "Albania", "dbpedia_uri": "http://dbpedia.org/resource/Albania"}, "id": "ALB"}, {"geometry": {"type": "Polygon", "coordinates": [[[51.579518999999998, 24.245497], [51.757441, 24.294073000000001], [51.794389000000002, 24.019825999999998], [52.577081, 24.177439], [53.404007, 24.151316999999999], [54.008001, 24.121758], [54.693024000000001, 24.797892000000001], [55.439025000000001, 25.439145], [56.070821000000002, 26.055464000000001], [56.261042000000003, 25.714606], [56.396847000000001, 24.924731999999999], [55.886232999999997, 24.920831], [55.804119, 24.269604000000001], [55.981214000000001, 24.130542999999999], [55.528632000000002, 23.933603999999999], [55.525841, 23.524868999999999], [55.234489000000004, 23.110993000000001], [55.208340999999997, 22.70833], [55.006802999999998, 22.496948], [52.000732999999997, 23.001154], [51.617708, 24.014219000000001], [51.579518999999998, 24.245497]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0410\u0440\u0430\u0431\u0441\u043a\u0438\u0435 \u042d\u043c\u0438\u0440\u0430\u0442\u044b", "fr": "\u00c9mirats arabes unis", "en": "United Arab Emirates", "nl": "Verenigde Arabische Emiraten", "pt": "Emirados \u00c1rabes Unidos", "no": "De forente arabiske emirater", "de": "Vereinigte Arabische Emirate", "it": "Emirati Arabi Uniti", "sv": "F\u00f6renade Arabemiraten", "pl": "Zjednoczone Emiraty Arabskie", "fi": "Yhdistyneet arabiemiirikunnat", "zh": "\u963f\u62c9\u4f2f\u8054\u5408\u914b\u957f\u56fd", "ja": "\u30a2\u30e9\u30d6\u9996\u9577\u56fd\u9023\u90a6", "es": "Emiratos \u00c1rabes Unidos"}, "label_fr": "\u00c9mirats arabes unis", "name": "United Arab Emirates", "dbpedia_uri": "http://dbpedia.org/resource/United_Arab_Emirates"}, "id": "ARE"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-65.5, -55.200000000000003], [-66.450000000000003, -55.25], [-66.959919999999997, -54.896810000000002], [-67.562439999999995, -54.870010000000001], [-68.633349999999993, -54.869500000000002], [-68.634010000000004, -52.636369999999999], [-68.25, -53.100000000000001], [-67.75, -53.850000000000001], [-66.450000000000003, -54.450000000000003], [-65.049999999999997, -54.700000000000003], [-65.5, -55.200000000000003]]], [[[-64.964892000000006, -22.075862000000001], [-64.377020999999999, -22.798090999999999], [-63.986837999999999, -21.993644], [-62.846468000000002, -22.034984999999999], [-62.685057, -22.249029], [-60.846564999999998, -23.880713], [-60.028965999999997, -24.032796000000001], [-58.807127999999999, -24.771459], [-57.777217, -25.16234], [-57.633659999999999, -25.603656999999998], [-58.618174000000003, -27.123719000000001], [-57.609760000000001, -27.395899], [-56.486702000000001, -27.548499], [-55.695846000000003, -27.387837000000001], [-54.788795, -26.621786], [-54.625290999999997, -25.739255], [-54.130049999999997, -25.547639], [-53.628349, -26.124865], [-53.648735000000002, -26.923473000000001], [-54.490724999999998, -27.474757], [-55.162286000000002, -27.881914999999999], [-56.290900000000001, -28.852761000000001], [-57.625132999999998, -30.216294999999999], [-57.874937000000003, -31.016556000000001], [-58.142440000000001, -32.044504000000003], [-58.132648000000003, -33.040567000000003], [-58.349611000000003, -33.263188999999997], [-58.427073999999998, -33.909453999999997], [-58.495441999999997, -34.431489999999997], [-57.225830000000002, -35.288027], [-57.362358999999998, -35.97739], [-56.737487000000002, -36.413125999999998], [-56.788285000000002, -36.901572000000002], [-57.749156999999997, -38.183871000000003], [-59.231856999999998, -38.720219999999998], [-61.237445000000001, -38.928424999999997], [-62.335957000000001, -38.827706999999997], [-62.125762999999999, -39.424104999999997], [-62.330531000000001, -40.172586000000003], [-62.145994000000002, -40.676896999999997], [-62.745803000000002, -41.028761000000003], [-63.770494999999997, -41.166789000000001], [-64.732089999999999, -40.802677000000003], [-65.118035000000006, -41.064315000000001], [-64.978560999999999, -42.058000999999997], [-64.303408000000005, -42.359015999999997], [-63.755947999999997, -42.043686999999998], [-63.458058999999999, -42.563138000000002], [-64.378804000000002, -42.873558000000003], [-65.181804, -43.495381000000002], [-65.328823, -44.501365999999997], [-65.565269000000001, -45.036785999999999], [-66.509966000000006, -45.039628], [-67.293794000000005, -45.551895999999999], [-67.580545999999998, -46.301772999999997], [-66.597065999999998, -47.033925000000004], [-65.641026999999994, -47.236134999999997], [-65.985088000000005, -48.133288999999998], [-67.166179, -48.697336999999997], [-67.816087999999993, -49.869669000000002], [-68.728745000000004, -50.264218], [-69.138538999999994, -50.732509999999998], [-68.815561000000002, -51.771104000000001], [-68.149995000000004, -52.349983000000002], [-68.571545, -52.299444000000001], [-69.498362, -52.142761], [-71.914804000000004, -52.009022000000002], [-72.329403999999997, -51.425955999999999], [-72.309973999999997, -50.677010000000003], [-72.975746999999998, -50.74145], [-73.328051000000002, -50.378785000000001], [-73.415436, -49.318435999999998], [-72.648246999999998, -48.878618000000003], [-72.331160999999994, -48.244238000000003], [-72.447355000000002, -47.738532999999997], [-71.917258000000004, -46.884838000000002], [-71.552008999999998, -45.560732999999999], [-71.659316000000004, -44.973689], [-71.222779000000003, -44.784242999999996], [-71.329801000000003, -44.407522], [-71.793622999999997, -44.207172], [-71.464055999999999, -43.787610999999998], [-71.915424000000002, -43.408565000000003], [-72.148898000000003, -42.254888000000001], [-71.746803999999997, -42.051386000000001], [-71.915734, -40.832338999999997], [-71.680761000000004, -39.808163999999998], [-71.413516999999999, -38.916021999999998], [-70.814663999999993, -38.552995000000003], [-71.118624999999994, -37.576827000000002], [-71.121881000000002, -36.658124000000001], [-70.364768999999995, -36.005088999999998], [-70.388048999999995, -35.169688000000001], [-69.817308999999995, -34.193570999999999], [-69.814777000000007, -33.273885999999997], [-70.074399, -33.091209999999997], [-70.535068999999993, -31.365010000000002], [-69.919008000000005, -30.336338999999999], [-70.013549999999995, -29.367923000000001], [-69.656130000000005, -28.459140999999999], [-69.001234999999994, -27.521214000000001], [-68.295541999999998, -26.899339999999999], [-68.594800000000006, -26.506909], [-68.386000999999993, -26.185016000000001], [-68.417653000000001, -24.518554999999999], [-67.328442999999993, -24.025303000000001], [-66.985234000000005, -22.986349000000001], [-67.106673999999998, -22.735925000000002], [-66.273339000000007, -21.83231], [-64.964892000000006, -22.075862000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430", "fr": "Argentine", "en": "Argentina", "nl": "Argentini\u00eb", "pt": "Argentina", "no": "Argentina", "de": "Argentinien", "it": "Argentina", "sv": "Argentina", "pl": "Argentyna", "fi": "Argentiina", "zh": "\u963f\u6839\u5ef7", "ja": "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3", "es": "Argentina"}, "label_fr": "Argentine", "name": "Argentina", "dbpedia_uri": "http://dbpedia.org/resource/Argentina"}, "id": "ARG"}, {"geometry": {"type": "Polygon", "coordinates": [[[43.582746, 41.092143], [44.972479999999997, 41.248128999999999], [45.179496, 40.985354000000001], [45.560350999999997, 40.812289999999997], [45.359175, 40.561503999999999], [45.891907000000003, 40.218476000000003], [45.610011999999998, 39.899994], [46.034534000000001, 39.628020999999997], [46.483499000000002, 39.464154999999998], [46.505719999999997, 38.770605000000003], [46.143622999999998, 38.741200999999997], [45.735379000000002, 39.319718999999999], [45.739978000000001, 39.473998999999999], [45.298144999999998, 39.471750999999998], [45.001987, 39.740003999999999], [44.793990000000001, 39.713003], [44.400008999999997, 40.005000000000003], [43.656435999999999, 40.253563999999997], [43.752657999999997, 40.740200999999999], [43.582746, 41.092143]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0440\u043c\u0435\u043d\u0438\u044f", "fr": "Arm\u00e9nie", "en": "Armenia", "nl": "Armeni\u00eb", "pt": "Arm\u00e9nia", "no": "Armenia", "de": "Armenien", "it": "Armenia", "sv": "Armenien", "pl": "Armenia", "fi": "Armenia", "zh": "\u4e9e\u7f8e\u5c3c\u4e9e", "ja": "\u30a2\u30eb\u30e1\u30cb\u30a2", "es": "Armenia"}, "label_fr": "Arm\u00e9nie", "name": "Armenia", "dbpedia_uri": "http://dbpedia.org/resource/Armenia"}, "id": "ARM"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-59.572094999999997, -80.040178999999995], [-59.865848999999997, -80.549656999999996], [-60.159655999999998, -81.000326999999999], [-62.255392999999998, -80.863178000000005], [-64.488124999999997, -80.921933999999993], [-65.741665999999995, -80.588826999999995], [-65.741665999999995, -80.549656999999996], [-66.290030999999999, -80.255773000000005], [-64.037688000000003, -80.294944000000001], [-61.883246, -80.392870000000002], [-61.138976, -79.981370999999996], [-60.610118999999997, -79.628679000000005], [-59.572094999999997, -80.040178999999995]]], [[[-159.20818399999999, -79.497058999999993], [-161.127601, -79.634208999999998], [-162.43984699999999, -79.281464999999997], [-163.02740800000001, -78.928774000000004], [-163.06660400000001, -78.869966000000005], [-163.712896, -78.595667000000006], [-163.712896, -78.595667000000006], [-163.10580100000001, -78.223337999999998], [-161.245113, -78.380176000000006], [-160.246208, -78.693645000000004], [-159.482405, -79.046338000000006], [-159.20818399999999, -79.497058999999993]]], [[[-45.154758000000001, -78.047070000000005], [-43.920828, -78.478103000000004], [-43.48995, -79.085560000000001], [-43.372438000000002, -79.516644999999997], [-43.333266999999999, -80.026122999999998], [-44.880536999999997, -80.339644000000007], [-46.506174000000001, -80.594357000000002], [-48.386420999999999, -80.829485000000005], [-50.482106999999999, -81.025441999999998], [-52.851987999999999, -80.966684999999998], [-54.164259000000001, -80.633527999999998], [-53.987991000000001, -80.222027999999995], [-51.853133999999997, -79.947730000000007], [-50.991326000000001, -79.614622999999995], [-50.364595000000001, -79.183487], [-49.914130999999998, -78.811209000000005], [-49.306958999999999, -78.458568999999997], [-48.660615999999997, -78.047017999999994], [-48.660615999999997, -78.047019000000006], [-48.151395999999998, -78.047070000000005], [-46.662857000000002, -77.831475999999995], [-45.154758000000001, -78.047070000000005]]], [[[-121.211511, -73.500990000000002], [-119.918851, -73.657724999999999], [-118.724143, -73.481352999999999], [-119.292119, -73.834097], [-120.23221700000001, -74.088809999999995], [-121.62282999999999, -74.010468000000003], [-122.621735, -73.657777999999993], [-122.621735, -73.657776999999996], [-122.406245, -73.324618999999998], [-121.211511, -73.500990000000002]]], [[[-125.559566, -73.481352999999999], [-124.031882, -73.873267999999996], [-124.619469, -73.834097], [-125.912181, -73.736118000000005], [-127.28313, -73.461769000000004], [-127.28313, -73.461768000000006], [-126.55847199999999, -73.246225999999993], [-125.559566, -73.481352999999999]]], [[[-98.981549999999999, -71.933334000000002], [-97.884743, -72.070535000000007], [-96.787936999999999, -71.952971000000005], [-96.20035, -72.521204999999995], [-96.983765000000005, -72.442864], [-98.198082999999997, -72.482034999999996], [-99.432012999999998, -72.442864], [-100.783455, -72.501620000000003], [-101.801868, -72.305662999999996], [-102.330725, -71.894164000000004], [-102.330725, -71.894164000000004], [-101.70396700000001, -71.717792000000003], [-100.430919, -71.854992999999993], [-98.981549999999999, -71.933334000000002]]], [[[-68.451346000000001, -70.955822999999995], [-68.333833999999996, -71.406492999999998], [-68.510127999999995, -71.798406999999997], [-68.784296999999995, -72.170736000000005], [-69.959470999999994, -72.307884999999999], [-71.075889000000004, -72.503842000000006], [-72.388133999999994, -72.484256999999999], [-71.898499999999999, -72.092343], [-73.073622, -72.229491999999993], [-74.190039999999996, -72.366692999999998], [-74.953895000000003, -72.072756999999996], [-75.012625, -71.661258000000004], [-73.915818999999999, -71.269345000000001], [-73.915818999999999, -71.269344000000004], [-73.230331000000007, -71.151780000000002], [-72.074717000000007, -71.190950999999998], [-71.780962000000002, -70.681472999999997], [-71.722179999999994, -70.309196], [-71.741791000000006, -69.505781999999996], [-71.173815000000005, -69.035475000000005], [-70.253252000000003, -68.878739999999993], [-69.724446999999998, -69.251017000000004], [-69.489422000000005, -69.623345999999998], [-69.058518000000007, -70.074016], [-68.725541000000007, -70.505153000000007], [-68.451346000000001, -70.955822999999995]]], [[[-58.614142999999999, -64.152467000000001], [-59.045073000000002, -64.368009999999998], [-59.789341999999998, -64.211223000000004], [-60.611927999999999, -64.309201999999999], [-61.297415999999998, -64.544330000000002], [-62.022100000000002, -64.799093999999997], [-62.511760000000002, -65.093029999999999], [-62.648857999999997, -65.484942000000004], [-62.590128, -65.857219000000001], [-62.120078999999997, -66.190325999999999], [-62.805567000000003, -66.425505000000001], [-63.745690000000003, -66.503846999999993], [-64.294105999999999, -66.837003999999993], [-64.881692999999999, -67.150474000000003], [-65.508425000000003, -67.581609999999998], [-65.665081999999998, -67.953886999999995], [-65.312545, -68.365335000000002], [-64.783715000000001, -68.678908000000007], [-63.961103000000001, -68.913983999999999], [-63.197299999999998, -69.227556000000007], [-62.785955000000001, -69.619418999999994], [-62.570515999999998, -69.991747000000004], [-62.276736, -70.383661000000004], [-61.806660999999998, -70.716768000000002], [-61.512906000000001, -71.089044999999999], [-61.375808999999997, -72.010074000000003], [-61.081977000000002, -72.382351], [-61.003661000000001, -72.774265], [-60.690269000000001, -73.166179], [-60.827367000000002, -73.695241999999993], [-61.375808999999997, -74.106741999999997], [-61.963369999999998, -74.439847999999998], [-63.295200999999999, -74.576997000000006], [-63.745690000000003, -74.929739999999995], [-64.352835999999996, -75.262846999999994], [-65.860986999999994, -75.635124000000005], [-67.192818000000003, -75.791910000000001], [-68.446281999999997, -76.007452000000001], [-69.797724000000002, -76.222994999999997], [-70.600724, -76.634494000000004], [-72.206776000000005, -76.673665], [-73.969536000000005, -76.634494000000004], [-75.555976999999999, -76.712886999999995], [-77.240369999999999, -76.712886999999995], [-76.926979000000003, -77.104802000000007], [-75.399293999999998, -77.28107], [-74.282876000000002, -77.555419999999998], [-73.656119000000004, -77.908112000000003], [-74.772536000000002, -78.221632999999997], [-76.496099999999998, -78.123654000000002], [-77.925858000000005, -78.378418999999994], [-77.984666000000004, -78.789918], [-78.023785000000004, -79.181832999999997], [-76.848636999999997, -79.514938999999998], [-76.633223999999998, -79.887215999999995], [-75.360096999999996, -80.259545000000003], [-73.244851999999995, -80.416331], [-71.442946000000006, -80.690629999999999], [-70.013163000000006, -81.004150999999993], [-68.191646000000006, -81.317672000000002], [-65.704279, -81.474457999999998], [-63.256030000000003, -81.748756999999998], [-61.552025999999998, -82.042692000000002], [-59.691415999999997, -82.37585], [-58.712121000000003, -82.846106000000006], [-58.222487000000001, -83.218434000000002], [-57.008116999999999, -82.865690999999998], [-55.362893999999997, -82.571754999999996], [-53.619771, -82.258234999999999], [-51.543644, -82.003521000000006], [-49.76135, -81.729170999999994], [-47.273930999999997, -81.709586000000002], [-44.825707999999999, -81.846734999999995], [-42.808363, -82.081914999999995], [-42.162019999999998, -81.650829999999999], [-40.771433000000002, -81.356893999999997], [-38.244818000000002, -81.337309000000005], [-36.266669999999998, -81.121714999999995], [-34.386397000000002, -80.906171999999998], [-32.310296000000001, -80.769023000000004], [-30.097097999999999, -80.592651000000004], [-28.549802, -80.337937999999994], [-29.254901, -79.985195000000004], [-29.685804999999998, -79.632503], [-29.685804999999998, -79.260226000000003], [-31.624808000000002, -79.299396999999999], [-33.681323999999996, -79.456131999999997], [-35.639912000000002, -79.456131999999997], [-35.914107000000001, -79.083855], [-35.777009999999997, -78.339247999999998], [-35.326546, -78.123654000000002], [-33.896763, -77.888525999999999], [-32.212369000000002, -77.653450000000007], [-30.998051, -77.359515000000002], [-29.783732000000001, -77.065579], [-28.882778999999999, -76.673665], [-27.511752000000001, -76.497344999999996], [-26.160336000000001, -76.360144000000005], [-25.474822, -76.281802999999996], [-23.927551999999999, -76.242580000000004], [-22.458597999999999, -76.105430999999996], [-21.224694, -75.909474000000003], [-20.010375, -75.674346], [-18.913543000000001, -75.439217999999997], [-17.522981999999999, -75.125698], [-16.641589, -74.792540000000002], [-15.701491000000001, -74.498604], [-15.40771, -74.106741999999997], [-16.465319999999998, -73.871613999999994], [-16.112784000000001, -73.460114000000004], [-15.446854999999999, -73.146541999999997], [-14.408804999999999, -72.950585000000004], [-13.311973, -72.715457000000001], [-12.293507999999999, -72.401936000000006], [-11.510066999999999, -72.010074000000003], [-11.020433000000001, -71.539766999999998], [-10.295774, -71.265416000000002], [-9.1010150000000003, -71.324224000000001], [-8.6113809999999997, -71.657330000000002], [-7.4166220000000003, -71.696500999999998], [-7.3774509999999998, -71.324224000000001], [-6.8682319999999999, -70.932310000000001], [-5.790985, -71.030288999999996], [-5.5363749999999996, -71.402617000000006], [-4.3416670000000002, -71.461372999999995], [-3.0489809999999999, -71.285053000000005], [-1.7954920000000001, -71.167438000000004], [-0.65948899999999999, -71.226246000000003], [-0.22863700000000001, -71.637744999999995], [0.86819500000000005, -71.304638999999995], [1.8866860000000001, -71.128266999999994], [3.0226380000000002, -70.991118], [4.1390549999999999, -70.853916999999996], [5.157546, -70.618789000000007], [6.2739120000000002, -70.462055000000007], [7.1357200000000001, -70.246511999999996], [7.7428660000000002, -69.893769000000006], [8.4871099999999995, -70.148533999999998], [9.5251350000000006, -70.011332999999993], [10.249845000000001, -70.481639999999999], [10.817821, -70.834332000000003], [11.953823999999999, -70.638374999999996], [12.404287, -70.246511999999996], [13.422777999999999, -69.972161999999997], [14.734997999999999, -70.030918], [15.126757, -70.403246999999993], [15.949342, -70.030918], [17.026589000000001, -69.913353999999998], [18.201711, -69.874183000000002], [19.259373, -69.893769000000006], [20.375738999999999, -70.011332999999993], [21.452985000000002, -70.070139999999995], [21.923034000000001, -70.403246999999993], [22.569403000000001, -70.697181999999998], [23.666184000000001, -70.520810999999995], [24.841356999999999, -70.481639999999999], [25.977309000000002, -70.481639999999999], [27.093726, -70.462055000000007], [28.092580000000002, -70.324854000000002], [29.150241999999999, -70.20729], [30.031583000000001, -69.932940000000002], [30.971733, -69.756619999999998], [31.990172000000001, -69.658641000000003], [32.754052999999999, -69.384291000000005], [33.302442999999997, -68.835642000000007], [33.870418999999998, -68.502588000000003], [34.908495000000002, -68.659271000000004], [35.300201999999999, -69.012013999999994], [36.162010000000002, -69.247141999999997], [37.200035, -69.168747999999994], [37.905107999999998, -69.521439999999998], [38.649403999999997, -69.776205000000004], [39.667893999999997, -69.541077000000001], [40.020431000000002, -69.109941000000006], [40.921357999999998, -68.933621000000002], [41.959434000000002, -68.600514000000004], [42.938701999999999, -68.463312999999999], [44.113875999999998, -68.267408000000003], [44.897291000000003, -68.051866000000004], [45.719928000000003, -67.816738000000001], [46.503343000000001, -67.601196000000002], [47.443440000000002, -67.718759000000006], [48.344419000000002, -67.366067999999999], [48.990735999999998, -67.091718], [49.930885000000004, -67.111303000000007], [50.753470999999998, -66.876175000000003], [50.949325000000002, -66.523483999999996], [51.791547000000001, -66.249133], [52.614133000000002, -66.053175999999993], [53.613038000000003, -65.896389999999997], [54.533549999999998, -65.818049000000002], [55.414943000000001, -65.876805000000004], [56.355041, -65.974783000000002], [57.158093000000001, -66.249133], [57.255968000000003, -66.680217999999996], [58.137360999999999, -67.013323999999997], [58.744508000000003, -67.287674999999993], [59.939318, -67.405238999999995], [60.605221, -67.679589000000007], [61.427805999999997, -67.953886999999995], [62.387489000000002, -68.012694999999994], [63.190489999999997, -67.816738000000001], [64.052349000000007, -67.405238999999995], [64.992446999999999, -67.620728999999997], [65.971715000000003, -67.738344999999995], [66.911863999999994, -67.855908999999997], [67.891132999999996, -67.934302000000002], [68.890038000000004, -67.934302000000002], [69.712624000000005, -68.972791000000001], [69.673452999999995, -69.227556000000007], [69.555941000000004, -69.678225999999995], [68.596258000000006, -69.932940000000002], [67.812740000000005, -70.305267999999998], [67.949888999999999, -70.697181999999998], [69.066306999999995, -70.677544999999995], [68.929157000000004, -71.069458999999995], [68.419989000000001, -71.441788000000003], [67.949888999999999, -71.853286999999995], [68.713769999999997, -72.166808000000003], [69.869307000000006, -72.264786999999998], [71.024895000000001, -72.088414999999998], [71.573284999999998, -71.696500999999998], [71.906288000000004, -71.324224000000001], [72.454627000000002, -71.010703000000007], [73.081410000000005, -70.716768000000002], [73.336020000000005, -70.364024000000001], [73.864877000000007, -69.874183000000002], [74.491557, -69.776205000000004], [75.627560000000003, -69.737033999999994], [76.626464999999996, -69.619418999999994], [77.644903999999997, -69.462683999999996], [78.134539000000004, -69.070769999999996], [78.428370999999999, -68.698441000000003], [79.113859000000005, -68.326216000000002], [80.093126999999996, -68.071503000000007], [80.93535, -67.875546], [81.483791999999994, -67.542388000000003], [82.051766999999998, -67.366067999999999], [82.776426000000001, -67.209282000000002], [83.775330999999994, -67.307259999999999], [84.676205999999993, -67.209282000000002], [85.655527000000006, -67.091718], [86.752358999999998, -67.150474000000003], [87.477017000000004, -66.876175000000003], [87.986288999999999, -66.209911000000005], [88.358411000000004, -66.484261000000004], [88.828407999999996, -66.954567999999995], [89.670630000000003, -67.150474000000003], [90.630364999999998, -67.228866999999994], [91.590100000000007, -67.111303000000007], [92.608538999999993, -67.189695999999998], [93.548636999999999, -67.209282000000002], [94.175420000000003, -67.111303000000007], [95.017590999999996, -67.170111000000006], [95.781471999999994, -67.385653000000005], [96.682399000000004, -67.248503999999997], [97.759646000000004, -67.248503999999997], [98.680210000000002, -67.111303000000007], [99.718181999999999, -67.248503999999997], [100.38418799999999, -66.915346], [100.893356, -66.582239999999999], [101.578896, -66.30789], [102.83241099999999, -65.563283999999996], [103.47867599999999, -65.700485], [104.24255700000001, -65.974783000000002], [104.90846000000001, -66.327527000000003], [106.181561, -66.934931000000006], [107.160881, -66.954567999999995], [108.08139300000001, -66.954567999999995], [109.15864000000001, -66.837003999999993], [110.23583499999999, -66.699804], [111.05847199999999, -66.425505000000001], [111.74396, -66.131569999999996], [112.860378, -66.092347000000004], [113.60467300000001, -65.876805000000004], [114.388088, -66.072761999999997], [114.897308, -66.386283000000006], [115.60238099999999, -66.699804], [116.699161, -66.660633000000004], [117.38470100000001, -66.915346], [118.57946, -67.170111000000006], [119.83292400000001, -67.268089000000003], [120.871, -67.189695999999998], [121.654415, -66.876175000000003], [122.320369, -66.562653999999995], [123.221296, -66.484261000000004], [124.122274, -66.621461999999994], [125.160247, -66.719389000000007], [126.100396, -66.562653999999995], [127.00142700000001, -66.562653999999995], [127.882768, -66.660633000000004], [128.80328, -66.758611000000002], [129.70425900000001, -66.582239999999999], [130.781454, -66.425505000000001], [131.79994500000001, -66.386283000000006], [132.93589600000001, -66.386283000000006], [133.85646, -66.288303999999997], [134.75738699999999, -66.209963000000002], [135.03158199999999, -65.720070000000007], [135.070753, -65.308571000000001], [135.697485, -65.582869000000002], [135.873805, -66.033591000000001], [136.206705, -66.445089999999993], [136.61804900000001, -66.778197000000006], [137.46027100000001, -66.954567999999995], [138.59622300000001, -66.895760999999993], [139.90844200000001, -66.876175000000003], [140.80942099999999, -66.817367000000004], [142.121692, -66.817367000000004], [143.06184200000001, -66.797781999999998], [144.37406100000001, -66.837003999999993], [145.49042700000001, -66.915346], [146.19555199999999, -67.228866999999994], [145.99969899999999, -67.601196000000002], [146.64606699999999, -67.895131000000006], [147.723263, -68.130258999999995], [148.839629, -68.385024000000001], [150.13231400000001, -68.561291999999995], [151.48370499999999, -68.718130000000002], [152.50224700000001, -68.874813000000003], [153.63819899999999, -68.894502000000003], [154.28456700000001, -68.561291999999995], [155.16585699999999, -68.835642000000007], [155.92979, -69.149214999999998], [156.81113199999999, -69.384291000000005], [158.02552800000001, -69.482269000000002], [159.18101300000001, -69.599833000000004], [159.67069900000001, -69.991747000000004], [160.80664999999999, -70.226875000000007], [161.57047900000001, -70.579617999999996], [162.68689699999999, -70.736352999999994], [163.842434, -70.716768000000002], [164.919681, -70.775524000000004], [166.11444, -70.755938], [167.30909500000001, -70.834332000000003], [168.42561599999999, -70.971480999999997], [169.46358900000001, -71.206659999999999], [170.501665, -71.402617000000006], [171.20679000000001, -71.696500999999998], [171.08922699999999, -72.088414999999998], [170.56042199999999, -72.441158999999999], [170.10995800000001, -72.891829000000001], [169.75737000000001, -73.244519999999994], [169.28732099999999, -73.656019999999998], [167.975101, -73.812805999999995], [167.38748899999999, -74.165497999999999], [166.09480300000001, -74.381039999999999], [165.64439100000001, -74.772953999999999], [164.95885100000001, -75.145283000000006], [164.234193, -75.458804000000001], [163.82279700000001, -75.870303000000007], [163.56823900000001, -76.242580000000004], [163.47026, -76.693302000000003], [163.48989700000001, -77.065579], [164.057873, -77.457442], [164.27336299999999, -77.829769999999996], [164.74346399999999, -78.182513999999998], [166.60412600000001, -78.319610999999995], [166.99578099999999, -78.750748000000002], [165.19387599999999, -78.907482999999999], [163.66621699999999, -79.123024999999998], [161.76638500000001, -79.162248000000005], [160.924162, -79.730481999999995], [160.747894, -80.200737000000004], [160.31696400000001, -80.573065999999997], [159.78821099999999, -80.945395000000005], [161.12001599999999, -81.278501000000006], [161.62928700000001, -81.690000999999995], [162.49099200000001, -82.062278000000006], [163.70533599999999, -82.395435000000006], [165.09594899999999, -82.708956000000001], [166.60412600000001, -83.022476999999995], [168.89566500000001, -83.335998000000004], [169.40478200000001, -83.825890999999999], [172.28393399999999, -84.041432999999998], [172.47704899999999, -84.117913999999999], [173.22408300000001, -84.413709999999995], [175.98567199999999, -84.158996999999999], [178.27721199999999, -84.472517999999994], [180, -84.713380000000001], [-179.942499, -84.721442999999994], [-179.05867699999999, -84.139411999999993], [-177.25677200000001, -84.452933000000002], [-177.140807, -84.417940999999999], [-176.08467300000001, -84.099259000000004], [-175.94723500000001, -84.110449000000003], [-175.829882, -84.117913999999999], [-174.38250300000001, -84.534323000000001], [-173.116559, -84.117913999999999], [-172.889106, -84.061019000000002], [-169.951223, -83.884647000000001], [-168.999989, -84.117913999999999], [-168.53019900000001, -84.237390000000005], [-167.022099, -84.570497000000003], [-164.18214399999999, -84.825209999999998], [-161.92977500000001, -85.138731000000007], [-158.07138, -85.373909999999995], [-155.19225299999999, -85.099559999999997], [-150.94209900000001, -85.295517000000004], [-148.533073, -85.609037999999998], [-145.88891799999999, -85.315101999999996], [-143.10771800000001, -85.040751999999998], [-142.892279, -84.570497000000003], [-146.82906800000001, -84.531273999999996], [-150.060732, -84.296145999999993], [-150.902928, -83.904231999999993], [-153.58620099999999, -83.688689999999994], [-153.409907, -83.238020000000006], [-153.03775899999999, -82.826520000000002], [-152.665637, -82.454192000000006], [-152.86151699999999, -82.042692000000002], [-154.52629899999999, -81.768394000000001], [-155.29017999999999, -81.415649999999999], [-156.83744999999999, -81.102129000000005], [-154.40878699999999, -81.160937000000004], [-152.09766200000001, -81.004150999999993], [-150.648293, -81.337309000000005], [-148.86599799999999, -81.043373000000003], [-147.22075000000001, -80.671045000000007], [-146.41774899999999, -80.337937999999994], [-146.770286, -79.926439000000002], [-148.06294700000001, -79.652089000000004], [-149.531901, -79.358204999999998], [-151.588416, -79.299396999999999], [-153.390322, -79.162248000000005], [-155.329376, -79.064268999999996], [-155.97566800000001, -78.691940000000002], [-157.26830200000001, -78.378418999999994], [-158.05176800000001, -78.025676000000004], [-158.36513400000001, -76.889206999999999], [-157.875474, -76.987238000000005], [-156.97457299999999, -77.300758999999999], [-155.329376, -77.202727999999993], [-153.74283199999999, -77.065579], [-152.92024699999999, -77.496663999999996], [-151.33377999999999, -77.398736999999997], [-150.00194999999999, -77.183143000000001], [-148.74848600000001, -76.908844999999999], [-147.612483, -76.575738000000001], [-146.104409, -76.477760000000004], [-146.143528, -76.105430999999996], [-146.49609100000001, -75.733153999999999], [-146.20231000000001, -75.380410999999995], [-144.90962400000001, -75.204038999999995], [-144.32203699999999, -75.537197000000006], [-142.794353, -75.341239999999999], [-141.63876400000001, -75.086474999999993], [-140.20900700000001, -75.066890000000001], [-138.85758999999999, -74.968911000000006], [-137.50620000000001, -74.733783000000003], [-136.428901, -74.518241000000003], [-135.214583, -74.302699000000004], [-134.431194, -74.361455000000007], [-133.745654, -74.439847999999998], [-132.25716800000001, -74.302699000000004], [-130.92531099999999, -74.479018999999994], [-129.554284, -74.459433000000004], [-128.24203800000001, -74.322283999999996], [-126.89062199999999, -74.420263000000006], [-125.40208199999999, -74.518241000000003], [-124.01149599999999, -74.479018999999994], [-122.562152, -74.498604], [-121.07361299999999, -74.518241000000003], [-119.70256000000001, -74.479018999999994], [-118.684145, -74.185083000000006], [-117.469801, -74.028347999999994], [-116.216312, -74.243891000000005], [-115.021552, -74.067519000000004], [-113.94433100000001, -73.714827999999997], [-113.297988, -74.028347999999994], [-112.945452, -74.381039999999999], [-112.299083, -74.714197999999996], [-111.261059, -74.420263000000006], [-110.06632500000001, -74.792540000000002], [-108.71490900000001, -74.910103000000007], [-107.55934600000001, -75.184454000000002], [-106.149148, -75.125698], [-104.876074, -74.949325999999999], [-103.367949, -74.988496999999995], [-102.016507, -75.125698], [-100.64553100000001, -75.302018000000004], [-100.11669999999999, -74.870932999999994], [-100.763043, -74.537825999999995], [-101.252703, -74.185083000000006], [-102.545337, -74.106741999999997], [-103.11331300000001, -73.734413000000004], [-103.32875199999999, -73.362083999999996], [-103.68128900000001, -72.617530000000002], [-102.917485, -72.754678999999996], [-101.60523999999999, -72.813435999999996], [-100.312528, -72.754678999999996], [-99.137379999999993, -72.911413999999994], [-98.118888999999996, -73.205349999999996], [-97.688036999999994, -73.558041000000003], [-96.336595000000003, -73.616849000000002], [-95.043960999999996, -73.479699999999994], [-93.672906999999995, -73.283743000000001], [-92.439003, -73.166179], [-91.420563999999999, -73.401307000000003], [-90.088733000000005, -73.322913999999997], [-89.226951, -72.558722000000003], [-88.423951000000002, -73.009393000000003], [-87.268337000000002, -73.185764000000006], [-86.014821999999995, -73.087785999999994], [-85.192235999999994, -73.479699999999994], [-83.879991000000004, -73.518871000000004], [-82.665645999999995, -73.636433999999994], [-81.470912999999996, -73.851977000000005], [-80.687447000000006, -73.479699999999994], [-80.295790999999994, -73.126956000000007], [-79.296886000000001, -73.518871000000004], [-77.925858000000005, -73.420891999999995], [-76.907366999999994, -73.636433999999994], [-76.221879000000001, -73.969541000000007], [-74.890049000000005, -73.871613999999994], [-73.852024, -73.656019999999998], [-72.833533000000003, -73.401307000000003], [-71.619214999999997, -73.264156999999997], [-70.209041999999997, -73.146541999999997], [-68.935916000000006, -73.009393000000003], [-67.956621999999996, -72.793850000000006], [-67.369061000000002, -72.480328999999998], [-67.134035999999995, -72.049244000000002], [-67.251548, -71.637744999999995], [-67.564940000000007, -71.245830999999995], [-67.917477000000005, -70.853916999999996], [-68.230842999999993, -70.462055000000007], [-68.485451999999995, -70.109311000000005], [-68.544208999999995, -69.717397000000005], [-68.446281999999997, -69.325535000000002], [-67.976232999999993, -68.953205999999994], [-67.584500000000006, -68.541707000000002], [-67.427842999999996, -68.149844000000002], [-67.623670000000004, -67.718759000000006], [-67.741183000000007, -67.326845000000006], [-67.251548, -66.876175000000003], [-66.703183999999993, -66.582239999999999], [-66.056815, -66.209963000000002], [-65.371326999999994, -65.896389999999997], [-64.568275999999997, -65.602506000000005], [-64.176541999999998, -65.171423000000004], [-63.628152, -64.897073000000006], [-63.001393999999998, -64.642308], [-62.041685999999999, -64.583551999999997], [-61.414928000000003, -64.270031000000003], [-60.709854999999997, -64.074073999999996], [-59.887269000000003, -63.956510000000002], [-59.162585, -63.701745000000003], [-58.594557000000002, -63.388224000000001], [-57.811143000000001, -63.270659999999999], [-57.223582, -63.525424999999998], [-57.595730000000003, -63.858531999999997], [-58.614142999999999, -64.152467000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0434\u0430", "fr": "Antarctique", "en": "Antarctica", "nl": "Antarctica", "pt": "Ant\u00e1rtica", "no": "Antarktika", "de": "Antarktika", "it": "Antartide", "sv": "Antarktis", "pl": "Antarktyda", "fi": "Etel\u00e4manner", "zh": "\u5357\u6781\u6d32", "ja": "\u5357\u6975\u5927\u9678", "es": "Ant\u00e1rtida"}, "label_fr": "Antarctique", "name": "Antarctica", "dbpedia_uri": "http://dbpedia.org/resource/Antarctica"}, "id": "ATA"}, {"geometry": {"type": "Polygon", "coordinates": [[[68.935000000000002, -48.625], [69.579999999999998, -48.939999999999998], [70.525000000000006, -49.064999999999998], [70.560000000000002, -49.255000000000003], [70.280000000000001, -49.710000000000001], [68.745000000000005, -49.774999999999999], [68.719999999999999, -49.2425], [68.867500000000007, -48.829999999999998], [68.935000000000002, -48.625]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0435 \u042e\u0436\u043d\u044b\u0435 \u0438 \u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438", "fr": "Terres australes et antarctiques fran\u00e7aises", "en": "French Southern and Antarctic Lands", "nl": "Franse Zuidelijke en Antarctische Gebieden", "pt": "Terras Austrais e Ant\u00e1rticas Francesas", "no": "De franske s\u00f8rterritorier", "de": "Franz\u00f6sische S\u00fcd- und Antarktisgebiete", "it": "Terre australi e antartiche francesi", "sv": "Franska sydterritorierna", "pl": "Francuskie Terytoria Po\u0142udniowe i Antarktyczne", "fi": "Ranskan etel\u00e4iset ja antarktiset alueet", "zh": "\u6cd5\u5c5e\u5357\u90e8\u9886\u5730", "ja": "\u30d5\u30e9\u30f3\u30b9\u9818\u5357\u65b9\u30fb\u5357\u6975\u5730\u57df", "es": "Tierras Australes y Ant\u00e1rticas Francesas"}, "label_fr": "Terres australes et antarctiques fran\u00e7aises", "name": "French Southern and Antarctic Lands", "dbpedia_uri": "http://dbpedia.org/resource/French_Southern_and_Antarctic_Lands"}, "id": "ATF"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[145.39797799999999, -40.792549000000001], [146.36412100000001, -41.137695000000001], [146.90858399999999, -41.000546], [147.68925899999999, -40.808258000000002], [148.28906799999999, -40.875438000000003], [148.35986500000001, -42.062444999999997], [148.017301, -42.407024], [147.914052, -43.211522000000002], [147.56456399999999, -42.937688999999999], [146.87034299999999, -43.634596999999999], [146.66332700000001, -43.580854000000002], [146.04837800000001, -43.549745000000001], [145.43192999999999, -42.693776], [145.29508999999999, -42.033610000000003], [144.71807100000001, -41.162551999999998], [144.74375499999999, -40.703975], [145.39797799999999, -40.792549000000001]]], [[[143.56181100000001, -13.763655999999999], [143.922099, -14.548311], [144.563714, -14.171176000000001], [144.89490799999999, -14.594457999999999], [145.37472399999999, -14.984976], [145.27199100000001, -15.428205], [145.48526000000001, -16.285672000000002], [145.637033, -16.784918000000001], [145.888904, -16.906925999999999], [146.16030900000001, -17.761655000000001], [146.06367399999999, -18.280073000000002], [146.38747799999999, -18.958273999999999], [147.471082, -19.480723000000001], [148.17760200000001, -19.955939000000001], [148.84841399999999, -20.391210000000001], [148.717465, -20.633469000000002], [149.28942000000001, -21.260511000000001], [149.678337, -22.342511999999999], [150.077382, -22.122783999999999], [150.48293899999999, -22.556142000000001], [150.72726499999999, -22.402405000000002], [150.89955399999999, -23.462236999999998], [151.60917499999999, -24.076256000000001], [152.07354000000001, -24.457886999999999], [152.855197, -25.267500999999999], [153.13616200000001, -26.071173000000002], [153.16194899999999, -26.641318999999999], [153.09290899999999, -27.260300000000001], [153.569469, -28.110067000000001], [153.51210800000001, -28.995076999999998], [153.33909499999999, -29.458202], [153.06924100000001, -30.350239999999999], [153.08960200000001, -30.923642000000001], [152.89157800000001, -31.640446000000001], [152.45000200000001, -32.550002999999997], [151.70911699999999, -33.041342], [151.34397200000001, -33.816023000000001], [151.01055500000001, -34.310360000000003], [150.71413899999999, -35.173459999999999], [150.32821999999999, -35.671878999999997], [150.07521199999999, -36.420206], [149.946124, -37.109051999999998], [149.99728400000001, -37.425260999999999], [149.42388199999999, -37.772680999999999], [148.30462199999999, -37.809061], [147.381733, -38.219217], [146.922123, -38.606532000000001], [146.31792200000001, -39.035756999999997], [145.48965200000001, -38.593767999999997], [144.87697600000001, -38.417448], [145.03221199999999, -37.896188000000002], [144.485682, -38.085324], [143.60997399999999, -38.809465000000003], [142.74542700000001, -38.538268000000002], [142.17832999999999, -38.380034000000002], [141.606582, -38.308514000000002], [140.63857899999999, -38.019333000000003], [139.99215799999999, -37.402935999999997], [139.806588, -36.643602999999999], [139.57414800000001, -36.138362000000001], [139.082808, -35.732754], [138.12074799999999, -35.612296000000001], [138.44946200000001, -35.127260999999997], [138.20756399999999, -34.384723000000001], [137.71916999999999, -35.076824999999999], [136.82940600000001, -35.260534999999997], [137.35237100000001, -34.707338999999997], [137.50388599999999, -34.130268000000001], [137.89011600000001, -33.640478999999999], [137.810328, -32.900007000000002], [136.996837, -33.752771000000003], [136.37206900000001, -34.094766], [135.98904300000001, -34.890118000000001], [135.208213, -34.478670000000001], [135.23921799999999, -33.947952999999998], [134.613417, -33.222777999999998], [134.085904, -32.848072000000002], [134.27390299999999, -32.617234000000003], [132.99077700000001, -32.011223999999999], [132.28808100000001, -31.982647], [131.32633100000001, -31.495802999999999], [129.53579400000001, -31.590423000000001], [128.240938, -31.948488999999999], [127.102867, -32.282266999999997], [126.148714, -32.215966000000002], [125.088623, -32.728751000000003], [124.221648, -32.959487000000003], [124.028947, -33.483846999999997], [123.659667, -33.890179000000003], [122.811036, -33.914467000000002], [122.183064, -34.003402000000001], [121.29919099999999, -33.821035999999999], [120.580268, -33.930177], [119.89369499999999, -33.976064999999998], [119.29889900000001, -34.509366], [119.007341, -34.464148999999999], [118.505718, -34.746819000000002], [118.02497200000001, -35.064732999999997], [117.295507, -35.025458999999998], [116.62510899999999, -35.025097000000002], [115.564347, -34.386428000000002], [115.026809, -34.196517], [115.048616, -33.623424999999997], [115.545123, -33.487257999999997], [115.714674, -33.259571999999999], [115.679379, -32.900368999999998], [115.80164499999999, -32.205061999999998], [115.689611, -31.612437], [115.160909, -30.601593999999999], [114.99704300000001, -30.030725], [115.040038, -29.461095], [114.641974, -28.810231000000002], [114.61649800000001, -28.516399], [114.173579, -28.118077], [114.048884, -27.334765000000001], [113.477498, -26.543133999999998], [113.338953, -26.116544999999999], [113.778358, -26.549025], [113.440962, -25.621278], [113.93690100000001, -25.911235000000001], [114.23285199999999, -26.298445999999998], [114.216161, -25.786280999999999], [113.721255, -24.998939], [113.625344, -24.683971], [113.393523, -24.384764000000001], [113.502044, -23.806349999999998], [113.706993, -23.560214999999999], [113.843418, -23.059987], [113.736552, -22.475474999999999], [114.149756, -21.755880999999999], [114.225307, -22.517488], [114.647762, -21.829519999999999], [115.460167, -21.495173000000001], [115.947373, -21.068688000000002], [116.71161499999999, -20.701682000000002], [117.16631599999999, -20.623598999999999], [117.441545, -20.746898999999999], [118.22955899999999, -20.374207999999999], [118.836085, -20.263311000000002], [118.987807, -20.044203], [119.252494, -19.952942], [119.80522499999999, -19.976506000000001], [120.85621999999999, -19.683707999999999], [121.399856, -19.239756], [121.65513799999999, -18.705317999999998], [122.241665, -18.197648999999998], [122.286624, -17.798603], [122.312772, -17.254967000000001], [123.012574, -16.405200000000001], [123.433789, -17.268557999999999], [123.859345, -17.069035], [123.503242, -16.596506000000002], [123.81707299999999, -16.111315999999999], [124.258287, -16.327943999999999], [124.37972600000001, -15.56706], [124.926153, -15.075100000000001], [125.167275, -14.680396], [125.670087, -14.510070000000001], [125.685796, -14.230656], [126.12514899999999, -14.347341], [126.14282300000001, -14.095986999999999], [126.582589, -13.952790999999999], [127.065867, -13.817968], [127.804633, -14.276906], [128.35969, -14.86917], [128.98554300000001, -14.875991000000001], [129.62147300000001, -14.969784000000001], [129.40960000000001, -14.420669999999999], [129.88864100000001, -13.618703], [130.33946599999999, -13.357376], [130.18350599999999, -13.107519999999999], [130.617795, -12.536391999999999], [131.22349500000001, -12.183649000000001], [131.73509100000001, -12.302453], [132.575298, -12.114041], [132.55721199999999, -11.603012], [131.82469800000001, -11.273782000000001], [132.357224, -11.128519000000001], [133.01956100000001, -11.376410999999999], [133.55084600000001, -11.786515], [134.393068, -12.042365], [134.67863199999999, -11.941183000000001], [135.29849100000001, -12.248606000000001], [135.88269299999999, -11.962267000000001], [136.25838100000001, -12.049341999999999], [136.49247500000001, -11.857208999999999], [136.95161999999999, -12.351959000000001], [136.685125, -12.887223000000001], [136.305407, -13.291230000000001], [135.961758, -13.324509000000001], [136.077617, -13.724278], [135.78383600000001, -14.223989], [135.428664, -14.715432], [135.50018399999999, -14.997741], [136.295175, -15.550265], [137.06536, -15.870761999999999], [137.58047099999999, -16.215081999999999], [138.30321699999999, -16.807604000000001], [138.58516399999999, -16.806622000000001], [139.108543, -17.062678999999999], [139.26057499999999, -17.371600999999998], [140.21524500000001, -17.710805000000001], [140.875463, -17.369069], [141.07111, -16.832046999999999], [141.27409499999999, -16.388870000000001], [141.398222, -15.840532], [141.70218299999999, -15.044921], [141.56338, -14.561332999999999], [141.63552000000001, -14.270395000000001], [141.519869, -13.698078000000001], [141.65092000000001, -12.944687999999999], [141.842691, -12.741548], [141.68699000000001, -12.407614000000001], [141.928629, -11.877466], [142.11848800000001, -11.328042], [142.14370600000001, -11.042737000000001], [142.51526000000001, -10.668186], [142.79731000000001, -11.157355000000001], [142.86676299999999, -11.784706999999999], [143.11594700000001, -11.90563], [143.15863200000001, -12.325656], [143.52212399999999, -12.834358], [143.59715800000001, -13.400422000000001], [143.56181100000001, -13.763655999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f", "fr": "Australie", "en": "Australia", "nl": "Australi\u00eb (land)", "pt": "Austr\u00e1lia", "no": "Australia", "de": "Australien", "it": "Australia", "sv": "Australien", "pl": "Australia", "fi": "Australia", "zh": "\u6fb3\u5927\u5229\u4e9a", "ja": "\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2", "es": "Australia"}, "label_fr": "Australie", "name": "Australia", "dbpedia_uri": "http://dbpedia.org/resource/Australia"}, "id": "AUS"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.979666999999999, 48.123497], [16.903753999999999, 47.714866000000001], [16.340584, 47.712902], [16.534268000000001, 47.496170999999997], [16.202297999999999, 46.852386000000003], [16.011664, 46.683610999999999], [15.137092000000001, 46.658703000000003], [14.632472, 46.431817000000002], [13.806475000000001, 46.509306000000002], [12.376485000000001, 46.767558999999999], [12.153088, 47.115392999999997], [11.164828, 46.941578999999997], [11.048556, 46.751359000000001], [10.442701, 46.893546000000001], [9.9324480000000008, 46.920727999999997], [9.4799699999999998, 47.102809999999998], [9.6329320000000003, 47.347600999999997], [9.5942260000000008, 47.525058000000001], [9.8960679999999996, 47.580196999999998], [10.402084, 47.302487999999997], [10.544504, 47.566398999999997], [11.426413999999999, 47.523766000000002], [12.141356999999999, 47.703082999999999], [12.620760000000001, 47.672387999999998], [12.932627, 47.467646000000002], [13.025850999999999, 47.637583999999997], [12.884103, 48.289146000000002], [13.243357, 48.416114999999998], [13.595946, 48.877172000000002], [14.338898, 48.555304999999997], [14.901446999999999, 48.964402], [15.253416, 49.039073999999999], [16.029647000000001, 48.733899000000001], [16.499282999999998, 48.785808000000003], [16.960287999999998, 48.596981999999997], [16.879982999999999, 48.470013000000002], [16.979666999999999, 48.123497]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0432\u0441\u0442\u0440\u0438\u044f", "fr": "Autriche", "en": "Austria", "nl": "Oostenrijk", "pt": "\u00c1ustria", "no": "\u00d8sterrike", "de": "\u00d6sterreich", "it": "Austria", "sv": "\u00d6sterrike", "pl": "Austria", "fi": "It\u00e4valta", "zh": "\u5965\u5730\u5229", "ja": "\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2", "es": "Austria"}, "label_fr": "Autriche", "name": "Austria", "dbpedia_uri": "http://dbpedia.org/resource/Austria"}, "id": "AUT"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[45.001987, 39.740003999999999], [45.298144999999998, 39.471750999999998], [45.739978000000001, 39.473998999999999], [45.735379000000002, 39.319718999999999], [46.143622999999998, 38.741200999999997], [45.457721999999997, 38.874139], [44.952688000000002, 39.335765000000002], [44.793990000000001, 39.713003], [45.001987, 39.740003999999999]]], [[[47.373314999999998, 41.219732], [47.815666, 41.151415999999998], [47.987282999999998, 41.405819000000001], [48.584353, 41.808869999999999], [49.110264000000001, 41.282286999999997], [49.618915000000001, 40.572924], [50.084829999999997, 40.526156999999998], [50.392820999999998, 40.256560999999998], [49.569201999999997, 40.176101000000003], [49.395259000000003, 39.399481999999999], [49.223227999999999, 39.049219000000001], [48.856532000000001, 38.815486], [48.883248999999999, 38.320245], [48.634374999999999, 38.270378000000001], [48.010744000000003, 38.794015000000002], [48.355528999999997, 39.288764999999998], [48.060094999999997, 39.582234999999997], [47.685079000000002, 39.508364], [46.505719999999997, 38.770605000000003], [46.483499000000002, 39.464154999999998], [46.034534000000001, 39.628020999999997], [45.610011999999998, 39.899994], [45.891907000000003, 40.218476000000003], [45.359175, 40.561503999999999], [45.560350999999997, 40.812289999999997], [45.179496, 40.985354000000001], [44.972479999999997, 41.248128999999999], [45.217426000000003, 41.411451999999997], [45.962600999999999, 41.123873000000003], [46.501637000000002, 41.064444999999999], [46.637908000000003, 41.181673000000004], [46.145432, 41.722802000000001], [46.404950999999997, 41.860675000000001], [46.686070999999998, 41.827137], [47.373314999999998, 41.219732]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "fr": "Azerba\u00efdjan", "en": "Azerbaijan", "nl": "Azerbeidzjan", "pt": "Azerbaij\u00e3o", "no": "Aserbajdsjan", "de": "Aserbaidschan", "it": "Azerbaigian", "sv": "Azerbajdzjan", "pl": "Azerbejd\u017can", "fi": "Azerbaid\u017ean", "zh": "\u963f\u585e\u62dc\u7586", "ja": "\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3", "es": "Azerbaiy\u00e1n"}, "label_fr": "Azerba\u00efdjan", "name": "Azerbaijan", "dbpedia_uri": "http://dbpedia.org/resource/Azerbaijan"}, "id": "AZE"}, {"geometry": {"type": "Polygon", "coordinates": [[[29.339998000000001, -4.4999830000000003], [29.276384, -3.2939069999999999], [29.024926000000001, -2.8392580000000001], [29.632176000000001, -2.9178579999999998], [29.938358999999998, -2.348487], [30.469695999999999, -2.4138579999999998], [30.527677000000001, -2.8076319999999999], [30.743013000000001, -3.0342850000000001], [30.752262999999999, -3.3593299999999999], [30.505559999999999, -3.5685669999999998], [30.116333000000001, -4.0901379999999996], [29.753512000000001, -4.4523890000000002], [29.339998000000001, -4.4999830000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0440\u0443\u043d\u0434\u0438", "fr": "Burundi", "en": "Burundi", "nl": "Burundi", "pt": "Burundi", "no": "Burundi", "de": "Burundi", "it": "Burundi", "sv": "Burundi", "pl": "Burundi", "fi": "Burundi", "zh": "\u84b2\u9686\u5730", "ja": "\u30d6\u30eb\u30f3\u30b8", "es": "Burundi"}, "label_fr": "Burundi", "name": "Burundi", "dbpedia_uri": "http://dbpedia.org/resource/Burundi"}, "id": "BDI"}, {"geometry": {"type": "Polygon", "coordinates": [[[3.3149709999999999, 51.345781000000002], [4.0470709999999999, 51.267259000000003], [4.9739909999999998, 51.475023999999998], [5.6069760000000004, 51.037298], [6.1566580000000002, 50.803721000000003], [6.0430729999999997, 50.128051999999997], [5.7824169999999997, 50.090328], [5.6740519999999997, 49.529483999999997], [4.7992220000000003, 49.985373000000003], [4.2860230000000001, 49.907496999999999], [3.588184, 50.378991999999997], [3.1232519999999999, 50.780363000000001], [2.6584219999999998, 50.796847999999997], [2.5135730000000001, 51.148505999999998], [3.3149709999999999, 51.345781000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u044c\u0433\u0438\u044f", "fr": "Belgique", "en": "Belgium", "nl": "Belgi\u00eb", "pt": "B\u00e9lgica", "no": "Belgia", "de": "Belgien", "it": "Belgio", "sv": "Belgien", "pl": "Belgia", "fi": "Belgia", "zh": "\u6bd4\u5229\u65f6", "ja": "\u30d9\u30eb\u30ae\u30fc", "es": "B\u00e9lgica"}, "label_fr": "Belgique", "name": "Belgium", "dbpedia_uri": "http://dbpedia.org/resource/Belgium"}, "id": "BEL"}, {"geometry": {"type": "Polygon", "coordinates": [[[2.6917019999999998, 6.2588169999999996], [1.8652409999999999, 6.1421580000000002], [1.618951, 6.8320379999999998], [1.6644779999999999, 9.1285900000000009], [1.4630430000000001, 9.3346239999999998], [1.4250609999999999, 9.8253950000000003], [1.0777950000000001, 10.175606999999999], [0.77233600000000002, 10.470808], [0.899563, 10.997339], [1.2434700000000001, 11.110511000000001], [1.4471780000000001, 11.547719000000001], [1.935986, 11.64115], [2.154474, 11.940149999999999], [2.490164, 12.233052000000001], [2.848643, 12.235636], [3.6111800000000001, 11.660167], [3.5722160000000001, 11.327939000000001], [3.7971119999999998, 10.734745999999999], [3.6000700000000001, 10.332186], [3.705438, 10.06321], [3.2203520000000001, 9.444153], [2.9123079999999999, 9.1376080000000002], [2.7237930000000001, 8.5068450000000002], [2.749063, 7.8707339999999997], [2.6917019999999998, 6.2588169999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043d\u0438\u043d", "fr": "B\u00e9nin", "en": "Benin", "nl": "Benin", "pt": "Cultura do Benim", "no": "Benin", "de": "Benin", "it": "Benin", "sv": "Benin", "pl": "Benin", "fi": "Benin", "zh": "\u8d1d\u5b81", "ja": "\u30d9\u30ca\u30f3", "es": "Ben\u00edn"}, "label_fr": "B\u00e9nin", "name": "Benin", "dbpedia_uri": "http://dbpedia.org/resource/Benin"}, "id": "BEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-2.827496, 9.6424610000000008], [-3.5118990000000001, 9.9003259999999997], [-3.9804490000000001, 9.8623440000000002], [-4.330247, 9.6108349999999998], [-4.779884, 9.8219849999999997], [-4.9546530000000004, 10.152714], [-5.4043419999999998, 10.370737], [-5.4705649999999997, 10.951269999999999], [-5.1978429999999998, 11.375146000000001], [-5.220942, 11.713858999999999], [-4.4271659999999997, 12.542646], [-4.280405, 13.228444], [-4.0063909999999998, 13.472485000000001], [-3.5228030000000001, 13.337662], [-3.103707, 13.541266999999999], [-2.9676939999999998, 13.79815], [-2.1918250000000001, 14.246418], [-2.0010349999999999, 14.559008], [-1.0663629999999999, 14.973815], [-0.51585400000000003, 15.116158], [-0.26625700000000002, 14.924308999999999], [0.374892, 14.928908], [0.29564600000000002, 14.444235000000001], [0.42992799999999998, 13.988733], [0.99304599999999998, 13.335750000000001], [1.024103, 12.851826000000001], [2.177108, 12.625018000000001], [2.154474, 11.940149999999999], [1.935986, 11.64115], [1.4471780000000001, 11.547719000000001], [1.2434700000000001, 11.110511000000001], [0.899563, 10.997339], [0.023803000000000001, 11.018682], [-0.43870199999999998, 11.098341], [-0.76157600000000003, 10.93693], [-1.2033579999999999, 11.009819], [-2.9404089999999998, 10.96269], [-2.9638960000000001, 10.395334999999999], [-2.827496, 9.6424610000000008]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0440\u043a\u0438\u043d\u0430 \u0424\u0430\u0441\u043e", "fr": "Burkina Faso", "en": "Burkina Faso", "nl": "Burkina Faso", "pt": "Burkina Faso", "no": "Burkina Faso", "de": "Burkina Faso", "it": "Burkina Faso", "sv": "Burkina Faso", "pl": "Burkina Faso", "fi": "Burkina Faso", "zh": "\u5e03\u5409\u7d0d\u6cd5\u7d22", "ja": "\u30d6\u30eb\u30ad\u30ca\u30d5\u30a1\u30bd", "es": "Burkina Faso"}, "label_fr": "Burkina Faso", "name": "Burkina Faso", "dbpedia_uri": "http://dbpedia.org/resource/Burkina_Faso"}, "id": "BFA"}, {"geometry": {"type": "Polygon", "coordinates": [[[92.672720999999996, 22.041239000000001], [92.652257000000006, 21.324048000000001], [92.303234000000003, 21.475484999999999], [92.368554000000003, 20.670883], [92.082886000000002, 21.192195000000002], [92.025215000000003, 21.70157], [91.834890999999999, 22.182936000000002], [91.417086999999995, 22.765018999999999], [90.496005999999994, 22.805016999999999], [90.586956999999998, 22.392793999999999], [90.272970999999998, 21.836368], [89.847466999999995, 22.039145999999999], [89.70205, 21.857116000000001], [89.418863000000002, 21.966179], [89.031960999999995, 22.055707999999999], [88.876311999999999, 22.879145999999999], [88.529769999999999, 23.631142000000001], [88.699939999999998, 24.233715], [88.084422000000004, 24.501657000000002], [88.306372999999994, 24.866078999999999], [88.931554000000006, 25.238692], [88.209789000000001, 25.768066000000001], [88.563049000000007, 26.446525999999999], [89.355093999999994, 26.014406999999999], [89.832481000000001, 25.965081999999999], [89.920693, 25.269749999999998], [90.872210999999993, 25.132601000000001], [91.799595999999994, 25.147431999999998], [92.376202000000006, 24.976693000000001], [91.915092999999999, 24.130413999999998], [91.467730000000003, 24.072638999999999], [91.158963, 23.503526999999998], [91.706474999999998, 22.985264000000001], [91.869928000000002, 23.624345999999999], [92.146034999999998, 23.627499], [92.672720999999996, 22.041239000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448", "fr": "Bangladesh", "en": "Bangladesh", "nl": "Bangladesh", "pt": "Bangladesh", "no": "Bangladesh", "de": "Bangladesch", "it": "Bangladesh", "sv": "Bangladesh", "pl": "Bangladesz", "fi": "Bangladesh", "zh": "\u5b5f\u52a0\u62c9\u56fd", "ja": "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5", "es": "Banglad\u00e9s"}, "label_fr": "Bangladesh", "name": "Bangladesh", "dbpedia_uri": "http://dbpedia.org/resource/Bangladesh"}, "id": "BGD"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.657150000000001, 44.234923000000002], [22.944832000000002, 43.823785000000001], [23.332301999999999, 43.897010999999999], [24.100679, 43.741050999999999], [25.569272000000002, 43.688445000000002], [26.065159000000001, 43.943494000000001], [27.2424, 44.175986000000002], [27.970106999999999, 43.812468000000003], [28.558081000000001, 43.707462], [28.039095, 43.293171999999998], [27.673898000000001, 42.577891999999999], [27.99672, 42.007359000000001], [27.135739000000001, 42.141485000000003], [26.117042000000001, 41.826904999999996], [26.106138000000001, 41.328899], [25.197201, 41.234485999999997], [24.492645, 41.583896000000003], [23.692074000000002, 41.309080999999999], [22.952376999999998, 41.337994000000002], [22.881374000000001, 41.999296999999999], [22.380526, 42.320259999999998], [22.545012, 42.461362000000001], [22.436595000000001, 42.580320999999998], [22.604800999999998, 42.898519], [22.986018999999999, 43.211160999999997], [22.500157000000002, 43.642814000000001], [22.410446, 44.008063], [22.657150000000001, 44.234923000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044f", "fr": "Bulgarie", "en": "Bulgaria", "nl": "Bulgarije", "pt": "Bulg\u00e1ria", "no": "Bulgaria", "de": "Bulgarien", "it": "Bulgaria", "sv": "Bulgarien", "pl": "Bu\u0142garia", "fi": "Bulgaria", "zh": "\u4fdd\u52a0\u5229\u4e9a", "ja": "\u30d6\u30eb\u30ac\u30ea\u30a2", "es": "Bulgaria"}, "label_fr": "Bulgarie", "name": "Bulgaria", "dbpedia_uri": "http://dbpedia.org/resource/Bulgaria"}, "id": "BGR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-77.534660000000002, 23.75975], [-77.780000000000001, 23.710000000000001], [-78.034049999999993, 24.286149999999999], [-78.408479999999997, 24.57564], [-78.190870000000004, 25.2103], [-77.890000000000001, 25.170000000000002], [-77.540000000000006, 24.34], [-77.534660000000002, 23.75975]]], [[[-77.819999999999993, 26.579999999999998], [-78.909999999999997, 26.420000000000002], [-78.980000000000004, 26.789999999999999], [-78.510000000000005, 26.870000000000001], [-77.849999999999994, 26.84], [-77.819999999999993, 26.579999999999998]]], [[[-77, 26.59], [-77.172550000000001, 25.879180000000002], [-77.356409999999997, 26.007349999999999], [-77.340000000000003, 26.530000000000001], [-77.788020000000003, 26.925160000000002], [-77.790000000000006, 27.039999999999999], [-77, 26.59]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0430\u0433\u0430\u043c\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "Bahamas", "en": "The Bahamas", "nl": "Bahama's", "pt": "Bahamas", "no": "Bahamas", "de": "Bahamas", "it": "Bahamas", "sv": "Bahamas", "pl": "Bahamy", "fi": "Bahama", "zh": "\u5df4\u54c8\u9a6c", "ja": "\u30d0\u30cf\u30de", "es": "Bahamas"}, "label_fr": "Bahamas", "name": "The Bahamas", "dbpedia_uri": "http://dbpedia.org/resource/The_Bahamas"}, "id": "BHS"}, {"geometry": {"type": "Polygon", "coordinates": [[[19.005486000000001, 44.860233999999998], [19.368030000000001, 44.863], [19.117609999999999, 44.423070000000003], [19.59976, 44.038469999999997], [19.454000000000001, 43.568100000000001], [19.218520000000002, 43.52384], [19.031649999999999, 43.43253], [18.706479999999999, 43.200110000000002], [18.559999999999999, 42.649999999999999], [17.674921999999999, 43.028562999999998], [17.297373, 43.446340999999997], [16.916156000000001, 43.667721999999998], [16.456443, 44.041240000000002], [16.239660000000001, 44.351143], [15.750026, 44.818711999999998], [15.959367, 45.233777000000003], [16.318156999999999, 45.004126999999997], [16.534939000000001, 45.211607999999998], [17.002146, 45.233777000000003], [17.861782999999999, 45.067740000000001], [18.553214000000001, 45.081589999999998], [19.005486000000001, 44.860233999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u0441\u043d\u0438\u044f \u0438 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430", "fr": "Bosnie-Herz\u00e9govine", "en": "Bosnia and Herzegovina", "nl": "Bosni\u00eb en Herzegovina", "pt": "B\u00f3snia e Herzegovina", "no": "Bosnia-Hercegovina", "de": "Bosnien und Herzegowina", "it": "Bosnia-Erzegovina", "sv": "Bosnien och Hercegovina", "pl": "Bo\u015bnia i Hercegowina", "fi": "Bosnia ja Hertsegovina", "zh": "\u6ce2\u65af\u5c3c\u4e9a\u548c\u9ed1\u585e\u54e5\u7ef4\u90a3", "ja": "\u30dc\u30b9\u30cb\u30a2\u30fb\u30d8\u30eb\u30c4\u30a7\u30b4\u30d3\u30ca", "es": "Bosnia y Herzegovina"}, "label_fr": "Bosnie-Herz\u00e9govine", "name": "Bosnia and Herzegovina", "dbpedia_uri": "http://dbpedia.org/resource/Bosnia_and_Herzegovina"}, "id": "BIH"}, {"geometry": {"type": "Polygon", "coordinates": [[[23.484127999999998, 53.912497999999999], [24.450683999999999, 53.905701999999998], [25.536353999999999, 54.282423000000001], [25.768433000000002, 54.846963000000002], [26.588279, 55.167175999999998], [26.494330999999999, 55.615107000000002], [27.102460000000001, 55.783313999999997], [28.176708999999999, 56.169130000000003], [29.229513000000001, 55.918343999999998], [29.371572, 55.670090999999999], [29.896294000000001, 55.789462999999998], [30.873909000000001, 55.550975999999999], [30.971836, 55.081547999999998], [30.757534, 54.811771], [31.384471999999999, 54.157055999999997], [31.791423999999999, 53.974639000000003], [31.731273000000002, 53.794029000000002], [32.405599000000002, 53.618045000000002], [32.693643000000002, 53.351421000000002], [32.304518999999999, 53.132725999999998], [31.497644000000001, 53.167427000000004], [31.305201, 53.073996000000001], [31.540018, 52.742052000000001], [31.785997999999999, 52.101678], [30.927548999999999, 52.042352999999999], [30.619454000000001, 51.822806], [30.555116999999999, 51.319502999999997], [30.157364000000001, 51.416137999999997], [29.254937999999999, 51.368234000000001], [28.992834999999999, 51.602043999999999], [28.617612999999999, 51.427714000000002], [28.241614999999999, 51.572226999999998], [27.454066000000001, 51.592303000000001], [26.337959000000001, 51.832289000000003], [25.327788000000002, 51.910656000000003], [24.553106, 51.888461], [24.005078000000001, 51.617443999999999], [23.527070999999999, 51.578454000000001], [23.508002000000001, 52.023646999999997], [23.199494000000001, 52.486977000000003], [23.799199000000002, 52.691099000000001], [23.804935, 53.089731], [23.527536000000001, 53.470122000000003], [23.484127999999998, 53.912497999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u0438\u044f", "fr": "Bi\u00e9lorussie", "en": "Belarus", "nl": "Wit-Rusland", "pt": "Bielorr\u00fassia", "no": "Hviterussland", "de": "Wei\u00dfrussland", "it": "Bielorussia", "sv": "Vitryssland", "pl": "Bia\u0142oru\u015b", "fi": "Valko-Ven\u00e4j\u00e4", "zh": "\u767d\u4fc4\u7f57\u65af", "ja": "\u30d9\u30e9\u30eb\u30fc\u30b7", "es": "Bielorrusia"}, "label_fr": "Bi\u00e9lorussie", "name": "Belarus", "dbpedia_uri": "http://dbpedia.org/resource/Belarus"}, "id": "BLR"}, {"geometry": {"type": "Polygon", "coordinates": [[[-89.143079999999998, 17.808319000000001], [-89.150908999999999, 17.955468], [-89.029857000000007, 18.001511000000001], [-88.848343999999997, 17.883198], [-88.490122999999997, 18.486830999999999], [-88.300031000000004, 18.499981999999999], [-88.296335999999997, 18.353273000000002], [-88.106813000000002, 18.348673999999999], [-88.123479000000003, 18.076675000000002], [-88.285354999999996, 17.644143], [-88.197867000000002, 17.489474999999999], [-88.302640999999994, 17.131694], [-88.239518000000004, 17.036066000000002], [-88.355428000000003, 16.530774000000001], [-88.551824999999994, 16.265467000000001], [-88.732433999999998, 16.233635], [-88.930612999999994, 15.887273], [-89.229122000000004, 15.886938000000001], [-89.150806000000003, 17.015577], [-89.143079999999998, 17.808319000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u0438\u0437", "fr": "Belize", "en": "Belize", "nl": "Belize (land)", "pt": "Belize", "no": "Belize", "de": "Belize", "it": "Belize", "sv": "Belize", "pl": "Belize", "fi": "Belize", "zh": "\u4f2f\u5229\u5179", "ja": "\u30d9\u30ea\u30fc\u30ba", "es": "Belice"}, "label_fr": "Belize", "name": "Belize", "dbpedia_uri": "http://dbpedia.org/resource/Belize"}, "id": "BLZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-62.846468000000002, -22.034984999999999], [-63.986837999999999, -21.993644], [-64.377020999999999, -22.798090999999999], [-64.964892000000006, -22.075862000000001], [-66.273339000000007, -21.83231], [-67.106673999999998, -22.735925000000002], [-67.828180000000003, -22.872919], [-68.219913000000005, -21.494347000000001], [-68.757166999999995, -20.372658000000001], [-68.442224999999993, -19.405068], [-68.966818000000004, -18.981683], [-69.100246999999996, -18.260124999999999], [-69.590423999999999, -17.580012], [-68.959635000000006, -16.500698], [-69.389764, -15.660129], [-69.160347000000002, -15.323974], [-69.339534999999998, -14.953194999999999], [-68.948886999999999, -14.453639000000001], [-68.929224000000005, -13.602684], [-68.880080000000007, -12.899729000000001], [-68.665080000000003, -12.561299999999999], [-69.529678000000004, -10.951734], [-68.786158, -11.036379999999999], [-68.271253999999999, -11.014521], [-68.048192, -10.712059], [-67.173800999999997, -10.306812000000001], [-66.646907999999996, -9.9313310000000001], [-65.338435000000004, -9.7619880000000006], [-65.444837000000007, -10.511450999999999], [-65.321899000000002, -10.895872000000001], [-65.402281000000002, -11.566269999999999], [-64.316353000000007, -12.461978], [-63.196499000000003, -12.627033000000001], [-62.803060000000002, -13.000653], [-62.127080999999997, -13.198781], [-61.713203999999998, -13.489202000000001], [-61.084121000000003, -13.479384], [-60.503304, -13.775955], [-60.459198000000001, -14.354006999999999], [-60.264325999999997, -14.645979000000001], [-60.251148999999998, -15.077218999999999], [-60.542966, -15.093909999999999], [-60.158389999999997, -16.258284], [-58.241219999999998, -16.299572999999999], [-58.388058000000001, -16.877109000000001], [-58.280804000000003, -17.271709999999999], [-57.734558, -17.552468000000001], [-57.498370999999999, -18.174188000000001], [-57.676009000000001, -18.961839999999999], [-57.949997000000003, -19.400003999999999], [-57.853802000000002, -19.969995000000001], [-58.166392000000002, -20.176701000000001], [-58.183470999999997, -19.868399], [-59.115042000000003, -19.356905999999999], [-60.043565000000001, -19.342746999999999], [-61.786326000000003, -19.633737], [-62.265960999999997, -20.513735], [-62.291179, -21.051635000000001], [-62.685057, -22.249029], [-62.846468000000002, -22.034984999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u043b\u0438\u0432\u0438\u044f", "fr": "Bolivie", "en": "Bolivia", "nl": "Bolivia", "pt": "Bol\u00edvia", "no": "Bolivia", "de": "Bolivien", "it": "Bolivia", "sv": "Bolivia", "pl": "Boliwia", "fi": "Bolivia", "zh": "\u73bb\u5229\u7dad\u4e9e", "ja": "\u30dc\u30ea\u30d3\u30a2", "es": "Bolivia"}, "label_fr": "Bolivie", "name": "Bolivia", "dbpedia_uri": "http://dbpedia.org/resource/Bolivia"}, "id": "BOL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.625132999999998, -30.216294999999999], [-56.290900000000001, -28.852761000000001], [-55.162286000000002, -27.881914999999999], [-54.490724999999998, -27.474757], [-53.648735000000002, -26.923473000000001], [-53.628349, -26.124865], [-54.130049999999997, -25.547639], [-54.625290999999997, -25.739255], [-54.428946000000003, -25.162185000000001], [-54.293475999999998, -24.570799999999998], [-54.292960000000001, -24.021014000000001], [-54.652833999999999, -23.839577999999999], [-55.027901999999997, -24.001273999999999], [-55.400747000000003, -23.956935000000001], [-55.517639000000003, -23.571998000000001], [-55.610683000000002, -22.655619000000002], [-55.797958000000001, -22.356929999999998], [-56.473317000000002, -22.086300000000001], [-56.881509999999999, -22.282153999999998], [-57.937156000000002, -22.090176], [-57.870674000000001, -20.732688], [-58.166392000000002, -20.176701000000001], [-57.853802000000002, -19.969995000000001], [-57.949997000000003, -19.400003999999999], [-57.676009000000001, -18.961839999999999], [-57.498370999999999, -18.174188000000001], [-57.734558, -17.552468000000001], [-58.280804000000003, -17.271709999999999], [-58.388058000000001, -16.877109000000001], [-58.241219999999998, -16.299572999999999], [-60.158389999999997, -16.258284], [-60.542966, -15.093909999999999], [-60.251148999999998, -15.077218999999999], [-60.264325999999997, -14.645979000000001], [-60.459198000000001, -14.354006999999999], [-60.503304, -13.775955], [-61.084121000000003, -13.479384], [-61.713203999999998, -13.489202000000001], [-62.127080999999997, -13.198781], [-62.803060000000002, -13.000653], [-63.196499000000003, -12.627033000000001], [-64.316353000000007, -12.461978], [-65.402281000000002, -11.566269999999999], [-65.321899000000002, -10.895872000000001], [-65.444837000000007, -10.511450999999999], [-65.338435000000004, -9.7619880000000006], [-66.646907999999996, -9.9313310000000001], [-67.173800999999997, -10.306812000000001], [-68.048192, -10.712059], [-68.271253999999999, -11.014521], [-68.786158, -11.036379999999999], [-69.529678000000004, -10.951734], [-70.093751999999995, -11.123972], [-70.548686000000004, -11.009147], [-70.481893999999997, -9.4901180000000007], [-71.302412000000004, -10.079435999999999], [-72.184890999999993, -10.053597999999999], [-72.563033000000004, -9.520194], [-73.226713000000004, -9.4622130000000002], [-73.015383, -9.0328330000000001], [-73.571059000000005, -8.4244470000000007], [-73.987234999999998, -7.5238300000000002], [-73.723400999999996, -7.3409990000000001], [-73.724486999999996, -6.9185949999999998], [-73.120026999999993, -6.629931], [-73.219711000000004, -6.0891890000000002], [-72.964506999999998, -5.7412510000000001], [-72.891927999999993, -5.2745610000000003], [-71.748406000000003, -4.5939829999999997], [-70.928843000000001, -4.4015909999999998], [-70.794769000000002, -4.2512650000000001], [-69.893635000000003, -4.2981870000000004], [-69.444102000000001, -1.556287], [-69.420485999999997, -1.122619], [-69.577065000000005, -0.54999200000000004], [-70.020656000000002, -0.18515599999999999], [-70.015566000000007, 0.54141399999999995], [-69.452395999999993, 0.70615899999999998], [-69.252433999999994, 0.60265100000000005], [-69.218637999999999, 0.98567700000000003], [-69.804597000000001, 1.089081], [-69.816973000000004, 1.7148049999999999], [-67.868565000000004, 1.692455], [-67.537809999999993, 2.0371630000000001], [-67.259997999999996, 1.7199990000000001], [-67.065048000000004, 1.130112], [-66.876326000000006, 1.2533609999999999], [-66.325765000000004, 0.72445199999999998], [-65.548266999999996, 0.78925400000000001], [-65.354713000000004, 1.0952820000000001], [-64.611012000000002, 1.3287310000000001], [-64.199306000000007, 1.492855], [-64.083084999999997, 1.916369], [-63.368788000000002, 2.2008999999999999], [-63.422866999999997, 2.4110680000000002], [-64.269998999999999, 2.4970059999999998], [-64.408828, 3.1267860000000001], [-64.368493999999998, 3.7972100000000002], [-64.816063999999997, 4.0564450000000001], [-64.628658999999999, 4.1484810000000003], [-63.888342999999999, 4.0205299999999999], [-63.093198000000001, 3.7705709999999999], [-62.804532999999999, 4.0069650000000001], [-62.085430000000002, 4.1621240000000004], [-60.966892999999999, 4.5364680000000002], [-60.601179000000002, 4.9180979999999996], [-60.733573999999997, 5.2002769999999998], [-60.213683000000003, 5.2444860000000002], [-59.980958999999999, 5.0140609999999999], [-60.111001999999999, 4.574967], [-59.767406000000001, 4.4235030000000002], [-59.538040000000002, 3.9588030000000001], [-59.815412999999999, 3.6064989999999999], [-59.974525, 2.755233], [-59.718546000000003, 2.2496299999999998], [-59.646044000000003, 1.786894], [-59.030861999999999, 1.317698], [-58.540013000000002, 1.2680880000000001], [-58.429476999999999, 1.4639420000000001], [-58.11345, 1.5071950000000001], [-57.660971000000004, 1.682585], [-57.335822999999998, 1.9485380000000001], [-56.782704000000003, 1.8637109999999999], [-56.539386, 1.8995230000000001], [-55.995697999999997, 1.8176669999999999], [-55.9056, 2.0219960000000001], [-56.073341999999997, 2.2207949999999999], [-55.973322000000003, 2.510364], [-55.569755000000001, 2.4215059999999999], [-55.097586999999997, 2.5237479999999999], [-54.524754000000001, 2.311849], [-54.088062999999998, 2.1055570000000001], [-53.778520999999998, 2.376703], [-53.554839000000001, 2.3348969999999998], [-53.418464999999998, 2.0533890000000001], [-52.939656999999997, 2.1248580000000001], [-52.556424999999997, 2.504705], [-52.249338000000002, 3.2410939999999999], [-51.657797000000002, 4.1562320000000001], [-51.317146000000001, 4.2034909999999996], [-51.069771000000003, 3.650398], [-50.508875000000003, 1.901564], [-49.974075999999997, 1.736483], [-49.947101000000004, 1.04619], [-50.699250999999997, 0.22298399999999999], [-50.388210999999998, -0.078445000000000001], [-48.620567000000001, -0.235489], [-48.584496999999999, -1.237805], [-47.824956, -0.58161799999999997], [-46.566583999999999, -0.94102799999999998], [-44.905703000000003, -1.5517399999999999], [-44.417619000000002, -2.13775], [-44.581589000000001, -2.6913079999999998], [-43.418790999999999, -2.3831099999999998], [-41.472656999999998, -2.9120180000000002], [-39.978664999999999, -2.8730540000000002], [-38.500382999999999, -3.7006519999999998], [-37.223252000000002, -4.8209460000000002], [-36.452936999999999, -5.1094039999999996], [-35.597796000000002, -5.1495040000000003], [-35.235388999999998, -5.4649369999999999], [-34.896030000000003, -6.7381929999999999], [-34.729993, -7.3432209999999998], [-35.128211999999998, -8.9964010000000005], [-35.636966999999999, -9.6492819999999995], [-37.046519000000004, -11.040721], [-37.683611999999997, -12.171195000000001], [-38.423876999999997, -13.038119], [-38.673887000000001, -13.057651999999999], [-38.953276000000002, -13.793369999999999], [-38.882297999999999, -15.667054], [-39.161091999999996, -17.208407000000001], [-39.267339, -17.867746], [-39.583520999999998, -18.262295999999999], [-39.760823000000002, -19.599112999999999], [-40.774740999999999, -20.904512], [-40.944755999999998, -21.937317], [-41.754164000000003, -22.370676], [-41.988284, -22.97007], [-43.074703999999997, -22.967693000000001], [-44.647812000000002, -23.351959000000001], [-45.352136000000002, -23.796842000000002], [-46.472093000000001, -24.088968999999999], [-47.648972000000001, -24.885199], [-48.495457999999999, -25.877025], [-48.641005, -26.623698000000001], [-48.474736, -27.175912], [-48.661520000000003, -28.186135], [-48.888457000000002, -28.674115], [-49.587328999999997, -29.224468999999999], [-50.696874000000001, -30.984465], [-51.576225999999998, -31.777698000000001], [-52.256081000000002, -32.245370000000001], [-52.7121, -33.196578000000002], [-53.373662000000003, -33.768377999999998], [-53.650543999999996, -33.202004000000002], [-53.209589000000001, -32.727665999999999], [-53.787951999999997, -32.047243000000002], [-54.572451999999998, -31.494510999999999], [-55.601509999999998, -30.853878999999999], [-55.973244999999999, -30.883075999999999], [-56.976025999999997, -30.109686], [-57.625132999999998, -30.216294999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f", "fr": "Br\u00e9sil", "en": "Brazil", "nl": "Brazili\u00eb", "pt": "Brasil", "no": "Brasil", "de": "Brasilien", "it": "Brasile", "sv": "Brasilien", "pl": "Brazylia", "fi": "Brasilia", "zh": "\u5df4\u897f", "ja": "\u30d6\u30e9\u30b8\u30eb", "es": "Brasil"}, "label_fr": "Br\u00e9sil", "name": "Brazil", "dbpedia_uri": "http://dbpedia.org/resource/Brazil"}, "id": "BRA"}, {"geometry": {"type": "Polygon", "coordinates": [[[114.20401699999999, 4.525874], [114.59996099999999, 4.9000110000000001], [115.45071, 5.44773], [115.4057, 4.955228], [115.347461, 4.3166359999999999], [114.869557, 4.3483140000000002], [114.65959599999999, 4.0076369999999999], [114.20401699999999, 4.525874]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0440\u0443\u043d\u0435\u0439", "fr": "Brunei", "en": "Brunei", "nl": "Brunei", "pt": "Brunei", "no": "Brunei", "de": "Brunei", "it": "Brunei", "sv": "Brunei", "pl": "Brunei", "fi": "Brunei", "zh": "\u6587\u83b1", "ja": "\u30d6\u30eb\u30cd\u30a4", "es": "Brun\u00e9i"}, "label_fr": "Brunei", "name": "Brunei", "dbpedia_uri": "http://dbpedia.org/resource/Brunei"}, "id": "BRN"}, {"geometry": {"type": "Polygon", "coordinates": [[[91.696657000000002, 27.771742], [92.103712000000002, 27.452614000000001], [92.033484000000001, 26.83831], [91.217512999999997, 26.808648000000002], [90.373275000000007, 26.875724000000002], [89.744528000000003, 26.719403], [88.835643000000005, 27.098966000000001], [88.814248000000006, 27.299316000000001], [89.475809999999996, 28.042759], [90.015828999999997, 28.296438999999999], [90.730513999999999, 28.064954], [91.258853999999999, 28.040614000000001], [91.696657000000002, 27.771742]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0442\u0430\u043d", "fr": "Bhoutan", "en": "Bhutan", "nl": "Bhutan", "pt": "But\u00e3o", "no": "Bhutan", "de": "Bhutan", "it": "Bhutan", "sv": "Bhutan", "pl": "Bhutan", "fi": "Bhutan", "zh": "\u4e0d\u4e39", "ja": "\u30d6\u30fc\u30bf\u30f3", "es": "But\u00e1n"}, "label_fr": "Bhoutan", "name": "Bhutan", "dbpedia_uri": "http://dbpedia.org/resource/Bhutan"}, "id": "BTN"}, {"geometry": {"type": "Polygon", "coordinates": [[[25.649163000000001, -18.536026], [25.850390999999998, -18.714413], [26.164791000000001, -19.293085999999999], [27.296505, -20.39152], [27.724747000000001, -20.499058999999999], [27.727228, -20.851801999999999], [28.021370000000001, -21.485975], [28.794656, -21.639454000000001], [29.432188, -22.091313], [28.017236, -22.827753999999999], [27.119409999999998, -23.574323], [26.786407000000001, -24.240691000000002], [26.485752999999999, -24.616326999999998], [25.941652000000001, -24.696373000000001], [25.765848999999999, -25.174845000000001], [25.664666, -25.486816000000001], [25.025171, -25.719670000000001], [24.211266999999999, -25.670216], [23.73357, -25.390129000000002], [23.312097000000001, -25.268689999999999], [22.824271, -25.500458999999999], [22.579532, -25.979448000000001], [22.105969000000002, -26.280256000000001], [21.605896000000001, -26.726534000000001], [20.889609, -26.828543], [20.66647, -26.477453000000001], [20.758609, -25.868136], [20.165725999999999, -24.917961999999999], [19.895768, -24.767790000000002], [19.895458000000001, -21.849157000000002], [20.881133999999999, -21.814326999999999], [20.910640999999998, -18.252219], [21.65504, -18.219145999999999], [23.196857999999999, -17.869038], [23.579006, -18.281261000000001], [24.217365000000001, -17.889347000000001], [24.520705, -17.887125000000001], [25.084443, -17.661816000000002], [25.264226000000001, -17.736540000000002], [25.649163000000001, -18.536026]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430", "fr": "Botswana", "en": "Botswana", "nl": "Botswana", "pt": "Botswana", "no": "Botswana", "de": "Botsuana", "it": "Botswana", "sv": "Botswana", "pl": "Botswana", "fi": "Botswana", "zh": "\u6ce2\u672d\u90a3", "ja": "\u30dc\u30c4\u30ef\u30ca", "es": "Botsuana"}, "label_fr": "Botswana", "name": "Botswana", "dbpedia_uri": "http://dbpedia.org/resource/Botswana"}, "id": "BWA"}, {"geometry": {"type": "Polygon", "coordinates": [[[15.27946, 7.4219249999999999], [16.106231999999999, 7.4970879999999998], [16.290562000000001, 7.7543069999999998], [16.456185000000001, 7.7347739999999998], [16.705988000000001, 7.5083279999999997], [17.964929999999999, 7.8909140000000004], [18.389555000000001, 8.2813040000000004], [18.911021999999999, 8.6308950000000006], [18.812010000000001, 8.9829150000000002], [19.094007999999999, 9.0748470000000001], [20.059685000000002, 9.0127059999999997], [21.000868000000001, 9.4759849999999997], [21.723821999999998, 10.567055999999999], [22.231128999999999, 10.971888999999999], [22.864165, 11.142395], [22.977544000000002, 10.714463], [23.554303999999998, 10.089255], [23.55725, 9.6812179999999994], [23.394779, 9.2650679999999994], [23.459012999999999, 8.9542859999999997], [23.805813000000001, 8.6663189999999997], [24.567368999999999, 8.2291880000000006], [25.114932, 7.8251039999999996], [25.124130999999998, 7.5000850000000003], [25.796648000000001, 6.9793159999999999], [26.213418000000001, 6.5466030000000002], [26.465909, 5.9467169999999996], [27.213408999999999, 5.5509529999999998], [27.374226, 5.2339440000000002], [27.044065, 5.127853], [26.402761000000002, 5.1508750000000001], [25.650455000000001, 5.2560880000000001], [25.278797999999998, 5.1704080000000001], [25.128833, 4.9272450000000001], [24.805029000000001, 4.8972470000000001], [24.410530999999999, 5.108784], [23.297214, 4.609693], [22.841480000000001, 4.7101259999999998], [22.704124, 4.633051], [22.405124000000001, 4.0291600000000001], [21.659123000000001, 4.224342], [20.927591, 4.3227859999999998], [20.290679000000001, 4.6916779999999996], [19.467784000000002, 5.0315279999999998], [18.932312, 4.7095060000000002], [18.542981999999999, 4.2017850000000001], [18.453064999999999, 3.5043859999999998], [17.809899999999999, 3.5601959999999999], [17.133042, 3.7281970000000002], [16.537057999999998, 3.1982550000000001], [16.012851999999999, 2.2676400000000001], [15.907381000000001, 2.5573890000000001], [15.862731999999999, 3.0135369999999999], [15.405396, 3.3353009999999998], [15.03622, 3.8513670000000002], [14.950953, 4.2103890000000002], [14.478372, 4.7326050000000004], [14.558935999999999, 5.0305980000000003], [14.459407000000001, 5.4517610000000003], [14.53656, 6.2269589999999999], [14.776545, 6.4084979999999998], [15.27946, 7.4219249999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "R\u00e9publique centrafricaine", "en": "Central African Republic", "nl": "Centraal-Afrikaanse Republiek", "pt": "Rep\u00fablica Centro-Africana", "no": "Den sentralafrikanske republikk", "de": "Zentralafrikanische Republik", "it": "Repubblica Centrafricana", "sv": "Centralafrikanska republiken", "pl": "Republika \u015arodkowoafryka\u0144ska", "fi": "Keski-Afrikan tasavalta", "zh": "\u4e2d\u975e\u5171\u548c\u570b", "ja": "\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "es": "Rep\u00fablica Centroafricana"}, "label_fr": "R\u00e9publique centrafricaine", "name": "Central African Republic", "dbpedia_uri": "http://dbpedia.org/resource/Central_African_Republic"}, "id": "CAF"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-63.664499999999997, 46.55001], [-62.939300000000003, 46.415869999999998], [-62.012079999999997, 46.44314], [-62.503909999999998, 46.033389999999997], [-62.87433, 45.968179999999997], [-64.142799999999994, 46.392650000000003], [-64.392610000000005, 46.727469999999997], [-64.014859999999999, 47.036009999999997], [-63.664499999999997, 46.55001]]], [[[-61.806305000000002, 49.105060000000002], [-62.29318, 49.08717], [-63.589260000000003, 49.400689999999997], [-64.519120000000001, 49.873040000000003], [-64.173220000000001, 49.957180000000001], [-62.858289999999997, 49.706409999999998], [-61.835585000000002, 49.288550000000001], [-61.806305000000002, 49.105060000000002]]], [[[-123.510002, 48.510010999999999], [-124.012891, 48.370846], [-125.655013, 48.825004999999997], [-125.954994, 49.179996000000003], [-126.850004, 49.530000000000001], [-127.029993, 49.814996000000001], [-128.059336, 49.994959000000001], [-128.44458399999999, 50.539138000000001], [-128.35841400000001, 50.770648000000001], [-127.308581, 50.552574], [-126.695001, 50.400903], [-125.75500700000001, 50.295017999999999], [-125.415002, 49.950001], [-124.920768, 49.475275000000003], [-123.92250900000001, 49.062483999999998], [-123.510002, 48.510010999999999]]], [[[-56.134036000000002, 50.687010000000001], [-56.795881999999999, 49.812308999999999], [-56.143104999999998, 50.150117000000002], [-55.471491999999998, 49.935814999999998], [-55.822400999999999, 49.587128999999997], [-54.935142999999997, 49.313011000000003], [-54.473775000000003, 49.556691000000001], [-53.476548999999999, 49.249139], [-53.786014000000002, 48.516781000000002], [-53.086134000000001, 48.687804], [-52.958647999999997, 48.157164000000002], [-52.648099000000002, 47.535547999999999], [-53.069158000000002, 46.655498999999999], [-53.521456000000001, 46.618291999999997], [-54.178936, 46.807065999999999], [-53.961869, 47.625207000000003], [-54.240482, 47.752279000000001], [-55.400773000000001, 46.884993999999999], [-55.997481000000001, 46.919719999999998], [-55.291218999999998, 47.389561999999998], [-56.250799000000001, 47.632545], [-57.325229, 47.572806999999997], [-59.266015000000003, 47.603347999999997], [-59.419494, 47.899453999999999], [-58.796585999999998, 48.251525000000001], [-59.231625000000001, 48.523187999999998], [-58.391804999999998, 49.125580999999997], [-57.358690000000003, 50.718274000000001], [-56.73865, 51.287438000000002], [-55.870977000000003, 51.632094000000002], [-55.406973999999998, 51.588273000000001], [-55.600217999999998, 51.317075000000003], [-56.134036000000002, 50.687010000000001]]], [[[-132.71000799999999, 54.040008999999998], [-132.71000900000001, 54.040008999999998], [-132.71000799999999, 54.040008999999998], [-132.71000799999999, 54.040008999999998], [-131.74999, 54.120004000000002], [-132.04947999999999, 52.984620999999997], [-131.17904300000001, 52.180433000000001], [-131.57783000000001, 52.182371000000003], [-132.18042800000001, 52.639707000000001], [-132.549992, 53.100014999999999], [-133.05461099999999, 53.411468999999997], [-133.239664, 53.851080000000003], [-133.180004, 54.169975000000001], [-132.71000799999999, 54.040008999999998]]], [[[-79.265820000000005, 62.158675000000002], [-79.657520000000005, 61.63308], [-80.099559999999997, 61.7181], [-80.36215, 62.016489999999997], [-80.315394999999995, 62.085565000000003], [-79.929389999999998, 62.385599999999997], [-79.520020000000002, 62.363709999999998], [-79.265820000000005, 62.158675000000002]]], [[[-81.898250000000004, 62.710799999999999], [-83.068569999999994, 62.159219999999998], [-83.774619999999999, 62.182310000000001], [-83.993669999999995, 62.452800000000003], [-83.250479999999996, 62.914090000000002], [-81.876990000000006, 62.904580000000003], [-81.898250000000004, 62.710799999999999]]], [[[-85.161308000000005, 65.657285000000002], [-84.975763999999998, 65.217517999999998], [-84.464011999999997, 65.371772000000007], [-83.882626000000002, 65.109617999999998], [-82.787576999999999, 64.766693000000004], [-81.642014000000003, 64.455135999999996], [-81.553439999999995, 63.979609000000004], [-80.817361000000005, 64.057485999999997], [-80.103451000000007, 63.725980999999997], [-80.991020000000006, 63.411245999999998], [-82.547178000000002, 63.651721999999999], [-83.108797999999993, 64.101876000000004], [-84.100416999999993, 63.569712000000003], [-85.523404999999997, 63.052379000000002], [-85.866769000000005, 63.637253000000001], [-87.221982999999994, 63.541238], [-86.352760000000004, 64.035832999999997], [-86.224885999999998, 64.822917000000004], [-85.883848, 65.738777999999996], [-85.161308000000005, 65.657285000000002]]], [[[-75.865880000000004, 67.148859999999999], [-76.986869999999996, 67.098730000000003], [-77.236400000000003, 67.588089999999994], [-76.811660000000003, 68.148560000000003], [-75.895210000000006, 68.287210000000002], [-75.114500000000007, 68.010360000000006], [-75.10333, 67.58202], [-75.215969999999999, 67.444249999999997], [-75.865880000000004, 67.148859999999999]]], [[[-95.647681000000006, 69.107690000000005], [-96.269520999999997, 68.757040000000003], [-97.617401000000001, 69.060029999999998], [-98.431800999999993, 68.950699999999998], [-99.797400999999994, 69.400030000000001], [-98.917400999999998, 69.710030000000003], [-98.218260999999998, 70.143540000000002], [-97.157400999999993, 69.860029999999995], [-96.557400999999999, 69.680030000000002], [-96.257401000000002, 69.490030000000004], [-95.647681000000006, 69.107690000000005]]], [[[-90.5471, 69.497659999999996], [-90.551509999999993, 68.474990000000005], [-89.215149999999994, 69.25873], [-88.019660000000002, 68.615080000000006], [-88.317490000000006, 67.873379999999997], [-87.350170000000006, 67.198719999999994], [-86.306070000000005, 67.921459999999996], [-85.576639999999998, 68.784559999999999], [-85.521969999999996, 69.882109999999997], [-84.100809999999996, 69.805390000000003], [-82.622579999999999, 69.658259999999999], [-81.280429999999996, 69.162019999999998], [-81.220200000000006, 68.665670000000006], [-81.964359999999999, 68.132530000000003], [-81.259280000000004, 67.597160000000002], [-81.386529999999993, 67.110780000000005], [-83.344560000000001, 66.411540000000002], [-84.735420000000005, 66.257300000000001], [-85.76943, 66.558329999999998], [-86.067599999999999, 66.056250000000006], [-87.03143, 65.212969999999999], [-87.323239999999998, 64.775630000000007], [-88.482960000000006, 64.098969999999994], [-89.914439999999999, 64.032730000000001], [-90.703980000000001, 63.610169999999997], [-90.770039999999995, 62.960209999999996], [-91.933419999999998, 62.835079999999998], [-93.156980000000004, 62.02469], [-94.241529999999997, 60.898650000000004], [-94.629310000000004, 60.110210000000002], [-94.684600000000003, 58.948819999999998], [-93.215019999999996, 58.782119999999999], [-92.764619999999994, 57.845709999999997], [-92.297030000000007, 57.087090000000003], [-90.897689999999997, 57.284680000000002], [-89.039529999999999, 56.85172], [-88.039779999999993, 56.471620000000001], [-87.324209999999994, 55.999139999999997], [-86.071209999999994, 55.72383], [-85.011809999999997, 55.302599999999998], [-83.360550000000003, 55.244889999999998], [-82.272850000000005, 55.148319999999998], [-82.436199999999999, 54.282269999999997], [-82.125020000000006, 53.277030000000003], [-81.400750000000002, 52.157879999999999], [-79.912890000000004, 51.208419999999997], [-79.143010000000004, 51.533929999999998], [-78.601910000000004, 52.562080000000002], [-79.124210000000005, 54.141449999999999], [-79.829580000000007, 54.667720000000003], [-78.228740000000002, 55.136450000000004], [-77.095600000000005, 55.837409999999998], [-76.541370000000001, 56.534230000000001], [-76.623189999999994, 57.202629999999999], [-77.302260000000004, 58.05209], [-78.51688, 58.804580000000001], [-77.336759999999998, 59.852609999999999], [-77.772720000000007, 60.75788], [-78.106870000000001, 62.31964], [-77.410669999999996, 62.550530000000002], [-75.696209999999994, 62.278399999999998], [-74.668199999999999, 62.181109999999997], [-73.839879999999994, 62.443800000000003], [-72.908529999999999, 62.105069999999998], [-71.677080000000004, 61.525350000000003], [-71.373689999999996, 61.137169999999998], [-69.590419999999995, 61.061410000000002], [-69.620329999999996, 60.221249999999998], [-69.287899999999993, 58.957360000000001], [-68.374549999999999, 58.80106], [-67.649760000000001, 58.212060000000001], [-66.201779999999999, 58.767310000000002], [-65.245170000000002, 59.870710000000003], [-64.583519999999993, 60.33558], [-63.804749999999999, 59.442599999999999], [-62.502360000000003, 58.167079999999999], [-61.396549999999998, 56.967449999999999], [-61.798659999999998, 56.339449999999999], [-60.468530000000001, 55.775480000000002], [-59.56962, 55.204070000000002], [-57.975079999999998, 54.945489999999999], [-57.333199999999998, 54.6265], [-56.936889999999998, 53.780320000000003], [-56.158110000000001, 53.647489999999998], [-55.756320000000002, 53.270359999999997], [-55.68338, 52.146639999999998], [-56.40916, 51.770699999999998], [-57.126910000000002, 51.419719999999998], [-58.774819999999998, 51.064300000000003], [-60.033090000000001, 50.24277], [-61.723660000000002, 50.080460000000002], [-63.86251, 50.290990000000001], [-65.363309999999998, 50.298200000000001], [-66.399050000000003, 50.228969999999997], [-67.236310000000003, 49.511560000000003], [-68.511139999999997, 49.068359999999998], [-69.953620000000001, 47.744880000000002], [-71.104579999999999, 46.821710000000003], [-70.255219999999994, 46.986060000000002], [-68.650000000000006, 48.299999999999997], [-66.552430000000001, 49.133099999999999], [-65.056259999999995, 49.232779999999998], [-64.170990000000003, 48.74248], [-65.115449999999996, 48.07085], [-64.798540000000003, 46.99297], [-64.472189999999998, 46.238489999999999], [-63.173290000000001, 45.739019999999996], [-61.520719999999997, 45.883769999999998], [-60.518149999999999, 47.007930000000002], [-60.448599999999999, 46.282640000000001], [-59.802869999999999, 45.920400000000001], [-61.039879999999997, 45.265250000000002], [-63.254710000000003, 44.670140000000004], [-64.246560000000002, 44.265529999999998], [-65.364059999999995, 43.545229999999997], [-66.123400000000004, 43.618670000000002], [-66.161730000000006, 44.465119999999999], [-64.425489999999996, 45.29204], [-66.026049999999998, 45.259309999999999], [-67.137410000000003, 45.137529999999998], [-67.791340000000005, 45.702809999999999], [-67.790459999999996, 47.066360000000003], [-68.234440000000006, 47.354860000000002], [-68.905000000000001, 47.185000000000002], [-69.237216000000004, 47.447780999999999], [-69.999970000000005, 46.693069999999999], [-70.305000000000007, 45.914999999999999], [-70.659999999999997, 45.460000000000001], [-71.084819999999993, 45.305239999999998], [-71.405000000000001, 45.255000000000003], [-71.50506, 45.008200000000002], [-73.347830000000002, 45.007379999999998], [-74.867000000000004, 45.000480000000003], [-75.318209999999993, 44.816450000000003], [-76.375, 44.096310000000003], [-76.5, 44.018459], [-76.820034000000007, 43.628784000000003], [-77.737885000000006, 43.629055999999999], [-78.720280000000002, 43.625089000000003], [-79.171673999999996, 43.466338999999998], [-79.010000000000005, 43.270000000000003], [-78.920000000000002, 42.965000000000003], [-78.939362000000003, 42.863610999999999], [-80.247448000000006, 42.366199999999999], [-81.277747000000005, 42.209026000000001], [-82.439278000000002, 41.675105000000002], [-82.690089, 41.675105000000002], [-83.029809999999998, 41.832796000000002], [-83.141999999999996, 41.975681000000002], [-83.120000000000005, 42.079999999999998], [-82.900000000000006, 42.43], [-82.430000000000007, 42.979999999999997], [-82.137642, 43.571088000000003], [-82.337762999999995, 44.439999999999998], [-82.550925000000007, 45.347517000000003], [-83.592850999999996, 45.816893999999998], [-83.469550999999996, 45.994686000000002], [-83.616130999999996, 46.116926999999997], [-83.890765000000002, 46.116926999999997], [-84.091851000000005, 46.275418999999999], [-84.142120000000006, 46.512225999999998], [-84.336699999999993, 46.408769999999997], [-84.604900000000001, 46.439599999999999], [-84.543749000000005, 46.538684000000003], [-84.779238000000007, 46.637101999999999], [-84.876080000000002, 46.900083000000002], [-85.652362999999994, 47.220219], [-86.461990999999998, 47.553337999999997], [-87.439792999999995, 47.939999999999998], [-88.378113999999997, 48.302917999999998], [-89.272917000000007, 48.019807999999998], [-89.599999999999994, 48.009999999999998], [-90.829999999999998, 48.270000000000003], [-91.640000000000001, 48.140000000000001], [-92.609999999999999, 48.450000000000003], [-93.630870000000002, 48.609259999999999], [-94.329139999999995, 48.670740000000002], [-94.640000000000001, 48.840000000000003], [-94.817580000000007, 49.389049999999997], [-95.156090000000006, 49.384250000000002], [-95.15907, 49], [-97.228719999999996, 49.000700000000002], [-100.65000000000001, 49], [-104.04826, 48.999859999999998], [-107.05, 49], [-110.05, 49], [-113, 49], [-116.04818, 49], [-117.03121, 49], [-120, 49], [-122.84, 49], [-122.97421, 49.002538000000001], [-124.91024, 49.984560000000002], [-125.62461, 50.416559999999997], [-127.43561, 50.83061], [-127.99276, 51.715829999999997], [-127.85032, 52.329610000000002], [-129.12979000000001, 52.755380000000002], [-129.30522999999999, 53.561590000000002], [-130.51497000000001, 54.287570000000002], [-130.53611000000001, 54.802779999999998], [-129.97999999999999, 55.284999999999997], [-130.00778, 55.91583], [-131.70780999999999, 56.552120000000002], [-132.73042000000001, 57.692889999999998], [-133.35556, 58.41028], [-134.27110999999999, 58.861109999999996], [-134.94499999999999, 59.270560000000003], [-135.47583, 59.787779999999998], [-136.47971999999999, 59.463889999999999], [-137.45249999999999, 58.905000000000001], [-138.34089, 59.562109999999997], [-139.03899999999999, 60], [-140.01300000000001, 60.276820000000001], [-140.99778000000001, 60.30639], [-140.99250000000001, 66.000029999999995], [-140.98599999999999, 69.712000000000003], [-139.12052, 69.471019999999996], [-137.54635999999999, 68.990020000000001], [-136.50358, 68.898039999999995], [-135.62576000000001, 69.315119999999993], [-134.41463999999999, 69.627430000000004], [-132.92925, 69.505340000000004], [-131.43136000000001, 69.944509999999994], [-129.79471000000001, 70.193690000000004], [-129.10773, 69.779269999999997], [-128.36156, 70.012860000000003], [-128.13817, 70.483840000000001], [-127.44712, 70.377210000000005], [-125.75632, 69.480580000000003], [-124.42483, 70.1584], [-124.28968, 69.399690000000007], [-123.06108, 69.563720000000004], [-122.6835, 69.855530000000002], [-121.47226000000001, 69.797780000000003], [-119.94288, 69.377859999999998], [-117.60268000000001, 69.011279999999999], [-116.22642999999999, 68.84151], [-115.2469, 68.905910000000006], [-113.89794000000001, 68.398899999999998], [-115.30489, 67.902609999999996], [-113.49727, 67.688149999999993], [-110.798, 67.806120000000007], [-109.94619, 67.981039999999993], [-108.8802, 67.381439999999998], [-107.79239, 67.887360000000001], [-108.81299, 68.311639999999997], [-108.16721, 68.653919999999999], [-106.95, 68.700000000000003], [-106.15000000000001, 68.799999999999997], [-105.34282, 68.561220000000006], [-104.33790999999999, 68.018000000000001], [-103.22114999999999, 68.097750000000005], [-101.45433, 67.646889999999999], [-99.901949999999999, 67.805660000000003], [-98.443200000000004, 67.781649999999999], [-98.558599999999998, 68.403940000000006], [-97.669479999999993, 68.578639999999993], [-96.119910000000004, 68.23939], [-96.125879999999995, 67.293379999999999], [-95.489429999999999, 68.090699999999998], [-94.685000000000002, 68.063829999999996], [-94.232820000000004, 69.069029999999998], [-95.304079999999999, 69.68571], [-96.471310000000003, 70.089759999999998], [-96.391149999999996, 71.194820000000007], [-95.208799999999997, 71.920529999999999], [-93.889970000000005, 71.760149999999996], [-92.87818, 71.318690000000004], [-91.519639999999995, 70.191289999999995], [-92.40692, 69.699969999999993], [-90.5471, 69.497659999999996]]], [[[-114.16717, 73.121449999999996], [-114.66634000000001, 72.652770000000004], [-112.44101999999999, 72.955399999999997], [-111.05038999999999, 72.450400000000002], [-109.92035, 72.961129999999997], [-109.00654, 72.633349999999993], [-108.18835, 71.650890000000004], [-107.68599, 72.065479999999994], [-108.39639, 73.089529999999996], [-107.51645000000001, 73.235979999999998], [-106.52258999999999, 73.076009999999997], [-105.40246, 72.67259], [-104.77484, 71.698400000000007], [-104.46476, 70.99297], [-102.78537, 70.49776], [-100.98078, 70.024320000000003], [-101.08929000000001, 69.584469999999996], [-102.73116, 69.504019999999997], [-102.09329, 69.119619999999998], [-102.43024, 68.75282], [-104.23999999999999, 68.909999999999997], [-105.95999999999999, 69.180000000000007], [-107.12254, 69.119219999999999], [-109, 68.780000000000001], [-111.534149, 68.630059000000003], [-113.31319999999999, 68.535539999999997], [-113.85496000000001, 69.007440000000003], [-115.22, 69.280000000000001], [-116.10794, 69.168210000000002], [-117.34, 69.959999999999994], [-116.67473, 70.066550000000007], [-115.13112, 70.237300000000005], [-113.72141000000001, 70.192369999999997], [-112.4161, 70.366380000000007], [-114.34999999999999, 70.599999999999994], [-116.48684, 70.520449999999997], [-117.90479999999999, 70.540559999999999], [-118.43237999999999, 70.909199999999998], [-116.11311000000001, 71.309179999999998], [-117.65568, 71.295199999999994], [-119.40199, 71.558589999999995], [-118.56267, 72.307850000000002], [-117.86642000000001, 72.705939999999998], [-115.18908999999999, 73.314589999999995], [-114.16717, 73.121449999999996]]], [[[-104.5, 73.420000000000002], [-105.38, 72.760000000000005], [-106.94, 73.459999999999994], [-106.59999999999999, 73.599999999999994], [-105.26000000000001, 73.640000000000001], [-104.5, 73.420000000000002]]], [[[-76.340000000000003, 73.102684999999994], [-76.251403999999994, 72.826385000000002], [-77.314437999999996, 72.855545000000006], [-78.391670000000005, 72.876655999999997], [-79.486251999999993, 72.742203000000003], [-79.775833000000006, 72.802902000000003], [-80.876098999999996, 73.333183000000005], [-80.833884999999995, 73.693184000000002], [-80.353058000000004, 73.759720000000002], [-78.064437999999996, 73.651932000000002], [-76.340000000000003, 73.102684999999994]]], [[[-86.562179, 73.157447000000005], [-85.774371000000002, 72.534126000000001], [-84.850111999999996, 73.340277999999998], [-82.31559, 73.750951000000001], [-80.600088, 72.716543999999999], [-80.748942, 72.061907000000005], [-78.770639000000003, 72.352172999999993], [-77.824624, 72.749617000000001], [-75.605845000000002, 72.243678000000003], [-74.228616000000002, 71.767144000000002], [-74.099141000000003, 71.330839999999995], [-72.242226000000002, 71.556925000000007], [-71.200014999999993, 70.920012999999997], [-68.786053999999993, 70.525024000000002], [-67.914969999999997, 70.121948000000003], [-66.969032999999996, 69.186087000000001], [-68.805122999999995, 68.720197999999996], [-66.449866, 68.067162999999994], [-64.862313999999998, 67.847538999999998], [-63.424934, 66.928472999999997], [-61.851981000000002, 66.862121000000002], [-62.163176999999997, 66.160251000000002], [-63.918444000000001, 64.998669000000007], [-65.148859999999999, 65.426033000000004], [-66.721219000000005, 66.388041000000001], [-68.015016000000003, 66.262726000000001], [-68.141287000000005, 65.689789000000005], [-67.089646000000002, 65.108455000000006], [-65.732079999999996, 64.648405999999994], [-65.320167999999995, 64.382737000000006], [-64.669405999999995, 63.392927], [-65.013803999999993, 62.674185000000001], [-66.275045000000006, 62.945098999999999], [-68.783186000000001, 63.745669999999997], [-67.369681, 62.883966000000001], [-66.328297000000006, 62.280074999999997], [-66.165567999999993, 61.930897000000002], [-68.877367000000007, 62.330148999999999], [-71.023437000000001, 62.910708], [-72.235378999999995, 63.397835999999998], [-71.886278000000004, 63.679988999999999], [-73.378305999999995, 64.193962999999997], [-74.834418999999997, 64.679075999999995], [-74.818503000000007, 64.389093000000003], [-77.709980000000002, 64.229541999999995], [-78.555948999999998, 64.572906000000003], [-77.897281000000007, 65.309191999999996], [-76.018274000000005, 65.326969000000005], [-73.959795, 65.454764999999995], [-74.293882999999994, 65.811770999999993], [-73.944912000000002, 66.310578000000007], [-72.651167000000001, 67.284576000000001], [-72.926060000000007, 67.726926000000006], [-73.311617999999996, 68.069436999999994], [-74.843306999999996, 68.554626999999996], [-76.869101000000001, 68.894735999999995], [-76.228649000000004, 69.147768999999997], [-77.287369999999996, 69.769540000000006], [-78.168633999999997, 69.826487999999998], [-78.957241999999994, 70.166880000000006], [-79.492455000000007, 69.871808000000001], [-81.305470999999997, 69.743184999999997], [-84.944705999999996, 69.966633999999999], [-87.060002999999995, 70.260001000000003], [-88.681713000000002, 70.410741000000002], [-89.513419999999996, 70.762038000000004], [-88.467720999999997, 71.218186000000003], [-89.888150999999993, 71.222551999999993], [-90.205160000000006, 72.235073999999997], [-89.436577, 73.129463999999999], [-88.408242000000001, 73.537889000000007], [-85.826150999999996, 73.803815999999998], [-86.562179, 73.157447000000005]]], [[[-100.35642, 73.843890000000002], [-99.163870000000003, 73.633390000000006], [-97.379999999999995, 73.760000000000005], [-97.120000000000005, 73.469999999999999], [-98.05359, 72.990520000000004], [-96.540000000000006, 72.560000000000002], [-96.719999999999999, 71.659999999999997], [-98.359660000000005, 71.272850000000005], [-99.322860000000006, 71.356390000000005], [-100.01482, 71.73827], [-102.5, 72.510000000000005], [-102.48, 72.829999999999998], [-100.43836, 72.705879999999993], [-101.54000000000001, 73.359999999999999], [-100.35642, 73.843890000000002]]], [[[-93.196296000000004, 72.771991999999997], [-94.269047, 72.024596000000003], [-95.409856000000005, 72.061881], [-96.033744999999996, 72.940276999999995], [-96.018268000000006, 73.437430000000006], [-95.495793000000006, 73.862416999999994], [-94.503658000000001, 74.134906999999998], [-92.420012, 74.100025000000002], [-90.509793000000002, 73.856731999999994], [-92.003964999999994, 72.966244000000003], [-93.196296000000004, 72.771991999999997]]], [[[-120.45999999999999, 71.383601999999996], [-123.09219, 70.90164], [-123.62, 71.340000000000003], [-125.928949, 71.868688000000006], [-125.5, 72.292260999999996], [-124.80728999999999, 73.022559999999999], [-123.94, 73.680000000000007], [-124.91775, 74.292749999999998], [-121.53788, 74.448930000000004], [-120.10978, 74.241349999999997], [-117.55564, 74.185770000000005], [-116.58441999999999, 73.896069999999995], [-115.51081000000001, 73.475189999999998], [-116.76794, 73.222920000000002], [-119.22, 72.519999999999996], [-120.45999999999999, 71.819999999999993], [-120.45999999999999, 71.383601999999996]]], [[[-93.612756000000005, 74.979996999999997], [-94.156908999999999, 74.592347000000004], [-95.608681000000004, 74.666864000000004], [-96.820931999999999, 74.927622999999997], [-96.288587000000007, 75.377827999999994], [-94.850819999999999, 75.647217999999995], [-93.977746999999994, 75.296490000000006], [-93.612756000000005, 74.979996999999997]]], [[[-98.5, 76.719999999999999], [-97.735585, 76.256559999999993], [-97.704414999999997, 75.743440000000007], [-98.159999999999997, 75], [-99.80874, 74.897440000000003], [-100.88366000000001, 75.057360000000003], [-100.86292, 75.640749999999997], [-102.50209, 75.563800000000001], [-102.56552000000001, 76.336600000000004], [-101.48972999999999, 76.305369999999996], [-99.983490000000003, 76.646339999999995], [-98.576989999999995, 76.588589999999996], [-98.5, 76.719999999999999]]], [[[-108.21141, 76.201679999999996], [-107.81943, 75.845519999999993], [-106.92892999999999, 76.012820000000005], [-105.881, 75.969399999999993], [-105.70498000000001, 75.479510000000005], [-106.31347, 75.005269999999996], [-109.7, 74.849999999999994], [-112.22307000000001, 74.416960000000003], [-113.74381, 74.394270000000006], [-113.87135000000001, 74.720290000000006], [-111.79421000000001, 75.162499999999994], [-116.31220999999999, 75.043430000000001], [-117.71040000000001, 75.222200000000001], [-116.34602, 76.199029999999993], [-115.40487, 76.478870000000001], [-112.59056, 76.14134], [-110.81422000000001, 75.549189999999996], [-109.0671, 75.473209999999995], [-110.49726, 76.429820000000007], [-109.58110000000001, 76.794169999999994], [-108.54859, 76.678319999999999], [-108.21141, 76.201679999999996]]], [[[-94.684085999999994, 77.097877999999994], [-93.573920999999999, 76.776296000000002], [-91.605023000000003, 76.778518000000005], [-90.741845999999995, 76.449596999999997], [-90.969661000000002, 76.074012999999994], [-89.822237999999999, 75.847774000000001], [-89.187083000000001, 75.610166000000007], [-87.838275999999993, 75.566188999999994], [-86.379192000000003, 75.482421000000002], [-84.789625000000001, 75.699203999999995], [-82.753444999999999, 75.784315000000007], [-81.128530999999995, 75.713982999999999], [-80.057511000000005, 75.336849000000001], [-79.833933000000002, 74.923126999999994], [-80.457770999999994, 74.657303999999996], [-81.948842999999997, 74.442458999999999], [-83.228893999999997, 74.564027999999993], [-86.097452000000004, 74.410032000000001], [-88.150350000000003, 74.392307000000002], [-89.764722000000006, 74.515555000000006], [-92.422441000000006, 74.837757999999994], [-92.768285000000006, 75.38682], [-92.889905999999996, 75.882655], [-93.893823999999995, 76.319243999999998], [-95.962457000000001, 76.441381000000007], [-97.121379000000005, 76.751078000000007], [-96.745123000000007, 77.161389], [-94.684085999999994, 77.097877999999994]]], [[[-116.198587, 77.645286999999996], [-116.335813, 76.876962000000006], [-117.10605099999999, 76.530032000000006], [-118.040412, 76.481172000000001], [-119.89931799999999, 76.053213], [-121.499995, 75.900019], [-122.854924, 76.116542999999993], [-122.85492499999999, 76.116542999999993], [-121.157535, 76.864508000000001], [-119.103939, 77.512219999999999], [-117.570131, 77.498318999999995], [-116.198587, 77.645286999999996]]], [[[-93.840002999999996, 77.519997000000004], [-94.295608000000001, 77.491343000000001], [-96.169653999999994, 77.555110999999997], [-96.436304000000007, 77.834629000000007], [-94.422577000000004, 77.820004999999995], [-93.720656000000005, 77.634331000000003], [-93.840002999999996, 77.519997000000004]]], [[[-110.186938, 77.697014999999993], [-112.051191, 77.409228999999996], [-113.534279, 77.732207000000002], [-112.724587, 78.051050000000004], [-111.264443, 78.152956000000003], [-109.85445199999999, 77.996324999999999], [-110.186938, 77.697014999999993]]], [[[-109.663146, 78.601973000000001], [-110.881314, 78.40692], [-112.542091, 78.407902000000007], [-112.525891, 78.550555000000003], [-111.50001, 78.849993999999995], [-110.963661, 78.804440999999997], [-109.663146, 78.601973000000001]]], [[[-95.830295000000007, 78.056940999999995], [-97.309843000000001, 77.850596999999993], [-98.124289000000005, 78.082857000000004], [-98.552868000000004, 78.458105000000003], [-98.631984000000003, 78.871930000000006], [-97.337231000000003, 78.831984000000006], [-96.754399000000006, 78.765812999999994], [-95.559278000000006, 78.418315000000007], [-95.830295000000007, 78.056940999999995]]], [[[-100.060192, 78.324753999999999], [-99.670939000000004, 77.907544999999999], [-101.30394, 78.018985000000001], [-102.949809, 78.343228999999994], [-105.17613299999999, 78.380331999999996], [-104.210429, 78.677419999999998], [-105.41958, 78.918335999999996], [-105.492289, 79.301593999999994], [-103.52928199999999, 79.165349000000006], [-100.825158, 78.800461999999996], [-100.060192, 78.324753999999999]]], [[[-87.019999999999996, 79.659999999999997], [-85.814350000000005, 79.3369], [-87.187560000000005, 79.039299999999997], [-89.035349999999994, 78.287229999999994], [-90.804360000000003, 78.215329999999994], [-92.876689999999996, 78.343329999999995], [-93.951160000000002, 78.750990000000002], [-93.935739999999996, 79.113730000000004], [-93.145240000000001, 79.380099999999999], [-94.974000000000004, 79.372479999999996], [-96.076139999999995, 79.705020000000005], [-96.709720000000004, 80.157769999999999], [-96.016440000000003, 80.602329999999995], [-95.323449999999994, 80.907290000000003], [-94.298429999999996, 80.977270000000004], [-94.735420000000005, 81.206460000000007], [-92.409840000000003, 81.257390000000001], [-91.132890000000003, 80.72345], [-89.450000000000003, 80.509321999999997], [-87.810000000000002, 80.319999999999993], [-87.019999999999996, 79.659999999999997]]], [[[-68.5, 83.106322000000006], [-65.827349999999996, 83.028009999999995], [-63.68, 82.900000000000006], [-61.850000000000001, 82.628600000000006], [-61.893880000000003, 82.361649999999997], [-64.334000000000003, 81.927750000000003], [-66.753420000000006, 81.725269999999995], [-67.657550000000001, 81.501410000000007], [-65.480310000000003, 81.506569999999996], [-67.840000000000003, 80.900000000000006], [-69.469700000000003, 80.616829999999993], [-71.180000000000007, 79.799999999999997], [-73.242800000000003, 79.634150000000005], [-73.879999999999995, 79.430161999999996], [-76.907730000000001, 79.323089999999993], [-75.529240000000001, 79.197659999999999], [-76.220460000000003, 79.019069999999999], [-75.393450000000001, 78.525810000000007], [-76.343540000000004, 78.182959999999994], [-77.888509999999997, 77.899910000000006], [-78.362690000000001, 77.508589999999998], [-79.759510000000006, 77.209680000000006], [-79.619649999999993, 76.983360000000005], [-77.910889999999995, 77.022045000000006], [-77.889110000000002, 76.777955000000006], [-80.561250000000001, 76.178120000000007], [-83.174390000000002, 76.454030000000003], [-86.111840000000001, 76.299009999999996], [-87.599999999999994, 76.420000000000002], [-89.490679999999998, 76.472390000000004], [-89.616100000000003, 76.952129999999997], [-87.767390000000006, 77.178330000000003], [-88.260000000000005, 77.900000000000006], [-87.650000000000006, 77.970222000000007], [-84.976339999999993, 77.538730000000001], [-86.340000000000003, 78.180000000000007], [-87.961920000000006, 78.371809999999996], [-87.151979999999995, 78.758669999999995], [-85.378680000000003, 78.996899999999997], [-85.094949999999997, 79.345429999999993], [-86.507339999999999, 79.736239999999995], [-86.931790000000007, 80.251450000000006], [-84.198440000000005, 80.208359999999999], [-83.408696000000006, 80.099999999999994], [-81.848230000000001, 80.464420000000004], [-84.099999999999994, 80.579999999999998], [-87.598950000000002, 80.516270000000006], [-89.366630000000001, 80.855689999999996], [-90.200000000000003, 81.260000000000005], [-91.367859999999993, 81.553100000000001], [-91.587019999999995, 81.894289999999998], [-90.099999999999994, 82.084999999999994], [-88.932270000000003, 82.117509999999996], [-86.970240000000004, 82.279610000000005], [-85.5, 82.652272999999994], [-84.260005000000007, 82.599999999999994], [-83.180000000000007, 82.319999999999993], [-82.420000000000002, 82.859999999999999], [-81.099999999999994, 83.019999999999996], [-79.306640000000002, 83.130560000000003], [-76.25, 83.172059000000004], [-75.718779999999995, 83.064040000000006], [-72.831530000000001, 83.233239999999995], [-70.665764999999993, 83.169781], [-68.5, 83.106322000000006]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043d\u0430\u0434\u0430", "fr": "Canada", "en": "Canada", "nl": "Canada", "pt": "Canad\u00e1", "no": "Canada", "de": "Kanada", "it": "Canada", "sv": "Kanada", "pl": "Kanada", "fi": "Kanada", "zh": "\u52a0\u62ff\u5927", "ja": "\u30ab\u30ca\u30c0", "es": "Canad\u00e1"}, "label_fr": "Canada", "name": "Canada", "dbpedia_uri": "http://dbpedia.org/resource/Canada"}, "id": "CAN"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.5942260000000008, 47.525058000000001], [9.6329320000000003, 47.347600999999997], [9.4799699999999998, 47.102809999999998], [9.9324480000000008, 46.920727999999997], [10.442701, 46.893546000000001], [10.363378000000001, 46.483570999999998], [9.9228369999999995, 46.314898999999997], [9.1828819999999993, 46.440215000000002], [8.9663059999999994, 46.036932], [8.4899520000000006, 46.005150999999998], [8.31663, 46.163642000000003], [7.755992, 45.824489999999997], [7.2738509999999996, 45.776947999999997], [6.8435930000000003, 45.991146999999998], [6.5000999999999998, 46.429673000000001], [6.0226090000000001, 46.27299], [6.0373890000000001, 46.725779000000003], [6.7687140000000001, 47.287708000000002], [6.7365709999999996, 47.541801], [7.192202, 47.449765999999997], [7.4667589999999997, 47.620581999999999], [8.3173010000000005, 47.613579999999999], [8.5226120000000005, 47.830827999999997], [9.5942260000000008, 47.525058000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f", "fr": "Suisse", "en": "Switzerland", "nl": "Zwitserland", "pt": "Su\u00ed\u00e7a", "no": "Sveits", "de": "Schweiz", "it": "Svizzera", "sv": "Schweiz", "pl": "Szwajcaria", "fi": "Sveitsi", "zh": "\u745e\u58eb", "ja": "\u30b9\u30a4\u30b9", "es": "Suiza"}, "label_fr": "Suisse", "name": "Switzerland", "dbpedia_uri": "http://dbpedia.org/resource/Switzerland"}, "id": "CHE"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-68.634010000000004, -52.636369999999999], [-68.633349999999993, -54.869500000000002], [-67.562439999999995, -54.870010000000001], [-66.959919999999997, -54.896810000000002], [-67.291030000000006, -55.30124], [-68.148629999999997, -55.611829999999998], [-68.639990999999995, -55.580018000000003], [-69.232100000000003, -55.49906], [-69.958089999999999, -55.198430000000002], [-71.005679999999998, -55.053829999999998], [-72.263900000000007, -54.495139999999999], [-73.285200000000003, -53.957520000000002], [-74.662530000000004, -52.837490000000003], [-73.838099999999997, -53.047429999999999], [-72.434179999999998, -53.715400000000002], [-71.107730000000004, -54.074330000000003], [-70.59178, -53.615830000000003], [-70.267480000000006, -52.931229999999999], [-69.345650000000006, -52.518300000000004], [-68.634010000000004, -52.636369999999999]]], [[[-68.219913000000005, -21.494347000000001], [-67.828180000000003, -22.872919], [-67.106673999999998, -22.735925000000002], [-66.985234000000005, -22.986349000000001], [-67.328442999999993, -24.025303000000001], [-68.417653000000001, -24.518554999999999], [-68.386000999999993, -26.185016000000001], [-68.594800000000006, -26.506909], [-68.295541999999998, -26.899339999999999], [-69.001234999999994, -27.521214000000001], [-69.656130000000005, -28.459140999999999], [-70.013549999999995, -29.367923000000001], [-69.919008000000005, -30.336338999999999], [-70.535068999999993, -31.365010000000002], [-70.074399, -33.091209999999997], [-69.814777000000007, -33.273885999999997], [-69.817308999999995, -34.193570999999999], [-70.388048999999995, -35.169688000000001], [-70.364768999999995, -36.005088999999998], [-71.121881000000002, -36.658124000000001], [-71.118624999999994, -37.576827000000002], [-70.814663999999993, -38.552995000000003], [-71.413516999999999, -38.916021999999998], [-71.680761000000004, -39.808163999999998], [-71.915734, -40.832338999999997], [-71.746803999999997, -42.051386000000001], [-72.148898000000003, -42.254888000000001], [-71.915424000000002, -43.408565000000003], [-71.464055999999999, -43.787610999999998], [-71.793622999999997, -44.207172], [-71.329801000000003, -44.407522], [-71.222779000000003, -44.784242999999996], [-71.659316000000004, -44.973689], [-71.552008999999998, -45.560732999999999], [-71.917258000000004, -46.884838000000002], [-72.447355000000002, -47.738532999999997], [-72.331160999999994, -48.244238000000003], [-72.648246999999998, -48.878618000000003], [-73.415436, -49.318435999999998], [-73.328051000000002, -50.378785000000001], [-72.975746999999998, -50.74145], [-72.309973999999997, -50.677010000000003], [-72.329403999999997, -51.425955999999999], [-71.914804000000004, -52.009022000000002], [-69.498362, -52.142761], [-68.571545, -52.299444000000001], [-69.461284000000006, -52.291950999999997], [-69.942779999999999, -52.537931], [-70.845101999999997, -52.899200999999998], [-71.006332, -53.833252000000002], [-71.429794999999999, -53.856454999999997], [-72.557942999999995, -53.531410000000001], [-73.702757000000005, -52.835068999999997], [-73.702757000000005, -52.835070000000002], [-74.946763000000004, -52.262754000000001], [-75.260025999999996, -51.629354999999997], [-74.976631999999995, -51.043396000000001], [-75.479754, -50.378371999999999], [-75.608014999999995, -48.673772999999997], [-75.182770000000005, -47.711919000000002], [-74.126581000000002, -46.939253000000001], [-75.644395000000003, -46.647643000000002], [-74.692154000000002, -45.763976], [-74.351709, -44.103043999999997], [-73.240356000000006, -44.454960999999997], [-72.717804000000001, -42.383355999999999], [-73.388900000000007, -42.117531999999997], [-73.701335999999998, -43.365775999999997], [-74.331942999999995, -43.224958000000001], [-74.017956999999996, -41.794812999999998], [-73.677098999999998, -39.942213000000002], [-73.217592999999994, -39.258688999999997], [-73.505559000000005, -38.282882999999998], [-73.588060999999996, -37.156284999999997], [-73.166717000000006, -37.123779999999996], [-72.553137000000007, -35.508839999999999], [-71.861732000000003, -33.909092999999999], [-71.438450000000003, -32.418899000000003], [-71.668721000000005, -30.920645], [-71.370082999999994, -30.095682], [-71.489894000000007, -28.861442], [-70.905124000000001, -27.64038], [-70.724953999999997, -25.705924], [-70.403965999999997, -23.628996999999998], [-70.091245999999998, -21.393319000000002], [-70.164420000000007, -19.756468000000002], [-70.372572000000005, -18.347975000000002], [-69.858444000000006, -18.092694000000002], [-69.590423999999999, -17.580012], [-69.100246999999996, -18.260124999999999], [-68.966818000000004, -18.981683], [-68.442224999999993, -19.405068], [-68.757166999999995, -20.372658000000001], [-68.219913000000005, -21.494347000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0438\u043b\u0438", "fr": "Chili", "en": "Chile", "nl": "Chili", "pt": "Chile", "no": "Chile", "de": "Chile", "it": "Cile", "sv": "Chile", "pl": "Chile", "fi": "Chile", "zh": "\u667a\u5229", "ja": "\u30c1\u30ea", "es": "Chile"}, "label_fr": "Chili", "name": "Chile", "dbpedia_uri": "http://dbpedia.org/resource/Chile"}, "id": "CHL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[110.33918799999999, 18.678394999999998], [109.47521, 18.197700999999999], [108.655208, 18.507681999999999], [108.626217, 19.367888000000001], [109.119056, 19.821038999999999], [110.21159900000001, 20.101254000000001], [110.786551, 20.077534], [111.010051, 19.695930000000001], [110.57064699999999, 19.255879], [110.33918799999999, 18.678394999999998]]], [[[127.65740700000001, 49.760269999999998], [129.397818, 49.440600000000003], [130.58229299999999, 48.729686999999998], [130.98728199999999, 47.790132], [132.50667200000001, 47.788969999999999], [133.37359599999999, 48.183441999999999], [135.02631099999999, 48.478230000000003], [134.50081399999999, 47.578440000000001], [134.11236199999999, 47.212466999999997], [133.769644, 46.116926999999997], [133.097127, 45.144066000000002], [131.883454, 45.321162000000001], [131.02521200000001, 44.967953000000001], [131.288555, 44.111519999999999], [131.144688, 42.929989999999997], [130.63386600000001, 42.903015000000003], [130.640016, 42.395009000000002], [129.99426700000001, 42.985387000000003], [129.59666899999999, 42.424982], [128.05221499999999, 41.994284999999998], [128.20843300000001, 41.466771999999999], [127.343783, 41.503152], [126.869083, 41.816569000000001], [126.182045, 41.107335999999997], [125.079942, 40.569823999999997], [124.265625, 39.928493000000003], [122.86757, 39.637788], [122.131388, 39.170451999999997], [121.054554, 38.897471000000003], [121.585995, 39.360854000000003], [121.376757, 39.750261000000002], [122.168595, 40.422443000000001], [121.640359, 40.946390000000001], [120.768629, 40.593387999999997], [119.639602, 39.898055999999997], [119.023464, 39.252333], [118.042749, 39.204273999999998], [117.532702, 38.737636000000002], [118.05969899999999, 38.061475999999999], [118.87815000000001, 37.897325000000002], [118.911636, 37.448464000000001], [119.70280200000001, 37.156388999999997], [120.823457, 37.870427999999997], [121.711259, 37.481122999999997], [122.35793700000001, 37.454484000000001], [122.51999499999999, 36.930613999999998], [121.104164, 36.651328999999997], [120.63700900000001, 36.111440000000002], [119.664562, 35.609791000000001], [119.151208, 34.909858999999997], [120.227525, 34.360332], [120.620369, 33.376722999999998], [121.22901400000001, 32.460318999999998], [121.908146, 31.692174000000001], [121.891919, 30.949352000000001], [121.264257, 30.676266999999999], [121.503519, 30.142914999999999], [122.092114, 29.832519999999999], [121.938428, 29.018021999999998], [121.684439, 28.225512999999999], [121.12566099999999, 28.135673000000001], [120.395473, 27.053207], [119.585497, 25.740780999999998], [118.656871, 24.547391000000001], [117.281606, 23.624500999999999], [115.89073500000001, 22.782872999999999], [114.76382700000001, 22.668074000000001], [114.152547, 22.223759999999999], [113.80678, 22.54834], [113.241078, 22.051366999999999], [111.843592, 21.550494], [110.785466, 21.397144000000001], [110.444039, 20.341032999999999], [109.889861, 20.282457000000001], [109.627655, 21.008227000000002], [109.86448799999999, 21.395050999999999], [108.522813, 21.715212000000001], [108.05018, 21.552379999999999], [107.04342, 21.811899], [106.567273, 22.218205000000001], [106.725403, 22.794267999999999], [105.81124699999999, 22.976891999999999], [105.32920900000001, 23.352063000000001], [104.47685799999999, 22.81915], [103.504515, 22.703757], [102.706992, 22.708794999999999], [102.170436, 22.464753000000002], [101.652018, 22.318199], [101.80312000000001, 21.174367], [101.270026, 21.201651999999999], [101.18000499999999, 21.436572999999999], [101.15003299999999, 21.849983999999999], [100.416538, 21.558838999999999], [99.983489000000006, 21.742937000000001], [99.240898999999999, 22.118314000000002], [99.531992000000002, 22.949038999999999], [98.898748999999995, 23.142721999999999], [98.660262000000003, 24.063286000000002], [97.60472, 23.897404999999999], [97.724609000000001, 25.083637], [98.671837999999994, 25.918703000000001], [98.712093999999993, 26.743535999999999], [98.682689999999994, 27.508811999999999], [98.246230999999995, 27.747221], [97.911987999999994, 28.335944999999999], [97.327113999999995, 28.261583000000002], [96.248833000000005, 28.411031000000001], [96.586590999999999, 28.83098], [96.117678999999995, 29.452801999999998], [95.404802000000004, 29.031717], [94.565989999999999, 29.277438], [93.413347999999999, 28.640629000000001], [92.503118999999998, 27.896875999999999], [91.696657000000002, 27.771742], [91.258853999999999, 28.040614000000001], [90.730513999999999, 28.064954], [90.015828999999997, 28.296438999999999], [89.475809999999996, 28.042759], [88.814248000000006, 27.299316000000001], [88.730326000000005, 28.086865], [88.120441, 27.876542000000001], [86.954516999999996, 27.974262], [85.823319999999995, 28.203576000000002], [85.011638000000005, 28.642773999999999], [84.234579999999994, 28.839894000000001], [83.898993000000004, 29.320226000000002], [83.337114999999997, 29.463732], [82.327512999999996, 30.115268], [81.525803999999994, 30.422716999999999], [81.111255999999997, 30.183481], [79.721367000000001, 30.882715000000001], [78.738894000000002, 31.515906000000001], [78.458445999999995, 32.618164], [79.176129000000003, 32.483780000000003], [79.208892000000006, 32.994394999999997], [78.811086000000003, 33.506197999999998], [78.912268999999995, 34.321936000000001], [77.837451000000001, 35.494010000000003], [76.192847999999998, 35.898403000000002], [75.896896999999996, 36.666806000000001], [75.158028000000002, 37.133031000000003], [74.980001999999999, 37.419989999999999], [74.829986000000005, 37.990006999999999], [74.864816000000005, 38.378846000000003], [74.257514, 38.606507000000001], [73.928852000000006, 38.505814999999998], [73.675379000000007, 39.431237000000003], [73.960013000000004, 39.660007999999998], [73.822243999999998, 39.893973000000003], [74.776861999999994, 40.366425], [75.467827999999997, 40.562072000000001], [76.526368000000005, 40.427945999999999], [76.904483999999997, 41.066485999999998], [78.187196999999998, 41.185316], [78.543661, 41.582242999999998], [80.119429999999994, 42.123941000000002], [80.259990000000002, 42.349998999999997], [80.180149999999998, 42.920068000000001], [80.866206000000005, 43.180362000000002], [79.966105999999996, 44.917516999999997], [81.947070999999994, 45.317027000000003], [82.458926000000005, 45.539650000000002], [83.180484000000007, 47.330030999999998], [85.164289999999994, 47.000956000000002], [85.720483999999999, 47.452969000000003], [85.768232999999995, 48.455750999999999], [86.598776000000001, 48.549182000000002], [87.359970000000004, 49.214981000000002], [87.751264000000006, 49.297198000000002], [88.013831999999994, 48.599463], [88.854298, 48.069082000000002], [90.280826000000005, 47.693548999999997], [90.970809000000003, 46.888145999999999], [90.585768000000002, 45.719715999999998], [90.945539999999994, 45.286073000000002], [92.133891000000006, 45.115076000000002], [93.480733999999998, 44.975472000000003], [94.688929000000002, 44.352331999999997], [95.306875000000005, 44.241331000000002], [95.762455000000003, 43.319448999999999], [96.349395999999999, 42.725634999999997], [97.451757000000001, 42.748890000000003], [99.515816999999998, 42.524690999999997], [100.845866, 42.663803999999999], [101.83304, 42.514873000000001], [103.31227800000001, 41.907468000000001], [104.522282, 41.908346999999999], [104.964994, 41.597410000000004], [106.129316, 42.134327999999996], [107.744773, 42.481515999999999], [109.243596, 42.519446000000002], [110.412103, 42.871234000000001], [111.129682, 43.406834000000003], [111.829588, 43.743118000000003], [111.667737, 44.073175999999997], [111.348377, 44.457442], [111.873306, 45.102079000000003], [112.43606200000001, 45.011645999999999], [113.46390700000001, 44.808892999999998], [114.46033199999999, 45.339816999999996], [115.985096, 45.727235], [116.717868, 46.388202], [117.421701, 46.672733000000001], [118.874326, 46.805411999999997], [119.66327, 46.692680000000003], [119.772824, 47.048059000000002], [118.866574, 47.747059999999998], [118.064143, 48.06673], [117.295507, 47.697709000000003], [116.308953, 47.853409999999997], [115.74283699999999, 47.726545000000002], [115.485282, 48.135382999999997], [116.191802, 49.134597999999997], [116.67880100000001, 49.888531], [117.879244, 49.510983000000003], [119.288461, 50.142882999999998], [119.279366, 50.582908000000003], [120.18205, 51.643566], [120.738191, 51.964115], [120.72578900000001, 52.516226000000003], [120.177089, 52.753886000000001], [121.003085, 53.251401000000001], [122.24574800000001, 53.431725999999998], [123.571507, 53.458804000000001], [125.06821100000001, 53.161045000000001], [125.946349, 52.792799000000002], [126.56439899999999, 51.784255000000002], [126.93915699999999, 51.353893999999997], [127.28745600000001, 50.739797000000003], [127.65740700000001, 49.760269999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0438\u0442\u0430\u0439 (\u0441\u0442\u0440\u0430\u043d\u0430)", "fr": "Chine", "en": "China", "nl": "China", "pt": "China (civiliza\u00e7\u00e3o)", "no": "Kina", "de": "China (Kulturraum)", "sv": "Kina (region)", "pl": "Chiny", "zh": "\u4e2d\u56fd", "ja": "\u4e2d\u56fd", "es": "China (regi\u00f3n)"}, "label_fr": "Chine", "name": "China", "dbpedia_uri": "http://dbpedia.org/resource/China"}, "id": "CHN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-2.856125, 4.9944759999999997], [-3.3110840000000001, 4.9842959999999996], [-4.0088200000000001, 5.1798130000000002], [-4.6499170000000003, 5.1682639999999997], [-5.8344959999999997, 4.9937009999999997], [-6.5287689999999996, 4.7050879999999999], [-7.5189409999999999, 4.3382880000000004], [-7.7121589999999998, 4.3645659999999999], [-7.6353679999999997, 5.1881589999999997], [-7.5397150000000002, 5.313345], [-7.5701530000000004, 5.7073520000000002], [-7.9936930000000004, 6.1261900000000002], [-8.3113480000000006, 6.1930329999999998], [-8.6028800000000007, 6.4675640000000003], [-8.3854520000000008, 6.9118009999999996], [-8.4854459999999996, 7.3952080000000002], [-8.4392980000000009, 7.6860429999999997], [-8.2807030000000008, 7.6871799999999997], [-8.2217920000000007, 8.123329], [-8.2990490000000001, 8.3164440000000006], [-8.2034990000000008, 8.4554530000000003], [-7.8320999999999996, 8.575704], [-8.0791140000000006, 9.3762240000000006], [-8.3096160000000001, 9.7895319999999995], [-8.2293369999999992, 10.129020000000001], [-8.0299440000000004, 10.206535000000001], [-7.8995899999999999, 10.297382000000001], [-7.6227590000000003, 10.147235999999999], [-6.8505070000000003, 10.138994], [-6.666461, 10.430811], [-6.4939650000000002, 10.411303], [-6.2052230000000002, 10.524061], [-6.0504519999999999, 10.096361], [-5.8169259999999996, 10.222555], [-5.4043419999999998, 10.370737], [-4.9546530000000004, 10.152714], [-4.779884, 9.8219849999999997], [-4.330247, 9.6108349999999998], [-3.9804490000000001, 9.8623440000000002], [-3.5118990000000001, 9.9003259999999997], [-2.827496, 9.6424610000000008], [-2.5621900000000002, 8.2196280000000002], [-2.9835850000000002, 7.3797050000000004], [-3.24437, 6.2504720000000002], [-2.8107009999999999, 5.3890510000000003], [-2.856125, 4.9944759999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0442-\u0434\u2019\u0418\u0432\u0443\u0430\u0440", "fr": "C\u00f4te d'Ivoire", "en": "C\u00f4te d'Ivoire", "nl": "Ivoorkust", "pt": "Costa do Marfim", "no": "Elfenbenskysten", "de": "Elfenbeink\u00fcste", "it": "Costa d'Avorio", "sv": "Elfenbenskusten", "pl": "Wybrze\u017ce Ko\u015bci S\u0142oniowej", "fi": "Norsunluurannikko", "zh": "\u79d1\u7279\u8fea\u74e6", "ja": "\u30b3\u30fc\u30c8\u30b8\u30dc\u30ef\u30fc\u30eb", "es": "Costa de Marfil"}, "label_fr": "C\u00f4te d'Ivoire", "name": "Ivory Coast", "dbpedia_uri": "http://dbpedia.org/resource/C%C3%B4te_d%27Ivoire"}, "id": "CIV"}, {"geometry": {"type": "Polygon", "coordinates": [[[13.075822000000001, 2.2670970000000001], [12.951333999999999, 2.3216160000000001], [12.35938, 2.192812], [11.751664999999999, 2.3267579999999999], [11.276449, 2.2610510000000001], [9.6491579999999999, 2.2838660000000002], [9.7951960000000007, 3.073404], [9.4043670000000006, 3.7345269999999999], [8.9481160000000006, 3.9041290000000002], [8.7449239999999993, 4.3522150000000002], [8.4888159999999999, 4.4956170000000002], [8.5002879999999994, 4.7719829999999996], [8.7575330000000005, 5.4796659999999999], [9.2331629999999993, 6.4444910000000002], [9.5227059999999994, 6.4534820000000002], [10.118277000000001, 7.0387700000000004], [10.497375, 7.055358], [11.058788, 6.6444270000000003], [11.745774000000001, 6.9813830000000001], [11.839309, 7.3970419999999999], [12.063946, 7.7998079999999996], [12.218871999999999, 8.3058239999999994], [12.753672, 8.7177629999999997], [12.955468, 9.4177719999999994], [13.1676, 9.6406259999999993], [13.308676, 10.160361999999999], [13.572950000000001, 10.798565999999999], [14.415379, 11.572369], [14.468192, 11.904752], [14.577178, 12.085361000000001], [14.181336, 12.483656999999999], [14.213531, 12.802035], [14.495787, 12.859396], [14.893386, 12.219048000000001], [14.960152000000001, 11.555574], [14.923565, 10.891325], [15.467873000000001, 9.9823369999999993], [14.909354, 9.9921290000000003], [14.627200999999999, 9.9209189999999996], [14.171466000000001, 10.021378], [13.954217999999999, 9.5494950000000003], [14.544466999999999, 8.9658610000000003], [14.979996, 8.7961039999999997], [15.120865999999999, 8.3821499999999993], [15.436092, 7.692812], [15.27946, 7.4219249999999999], [14.776545, 6.4084979999999998], [14.53656, 6.2269589999999999], [14.459407000000001, 5.4517610000000003], [14.558935999999999, 5.0305980000000003], [14.478372, 4.7326050000000004], [14.950953, 4.2103890000000002], [15.03622, 3.8513670000000002], [15.405396, 3.3353009999999998], [15.862731999999999, 3.0135369999999999], [15.907381000000001, 2.5573890000000001], [16.012851999999999, 2.2676400000000001], [15.940918999999999, 1.727673], [15.146342000000001, 1.9640150000000001], [14.337813000000001, 2.227875], [13.075822000000001, 2.2670970000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043c\u0435\u0440\u0443\u043d", "fr": "Cameroun", "en": "Cameroon", "nl": "Kameroen", "pt": "Camar\u00f5es", "no": "Kamerun", "de": "Kamerun", "it": "Camerun", "sv": "Kamerun", "pl": "Kamerun", "fi": "Kamerun", "zh": "\u5580\u9ea6\u9686", "ja": "\u30ab\u30e1\u30eb\u30fc\u30f3", "es": "Camer\u00fan"}, "label_fr": "Cameroun", "name": "Cameroon", "dbpedia_uri": "http://dbpedia.org/resource/Cameroon"}, "id": "CMR"}, {"geometry": {"type": "Polygon", "coordinates": [[[30.833860000000001, 3.509166], [30.773347000000001, 2.3398829999999999], [31.174149, 2.2044649999999999], [30.85267, 1.849396], [30.468508, 1.5838049999999999], [30.086154000000001, 1.0623130000000001], [29.875779000000001, 0.59738000000000002], [29.819503000000001, -0.20530999999999999], [29.587838000000001, -0.58740599999999998], [29.579466, -1.341313], [29.291886999999999, -1.6200559999999999], [29.254835, -2.2151100000000001], [29.117478999999999, -2.292211], [29.024926000000001, -2.8392580000000001], [29.276384, -3.2939069999999999], [29.339998000000001, -4.4999830000000003], [29.519987, -5.4199789999999997], [29.419993000000002, -5.9399990000000003], [29.620031999999998, -6.5200149999999999], [30.199997, -7.0799810000000001], [30.740015, -8.3400069999999999], [30.346086, -8.2382570000000008], [29.002911999999998, -8.4070319999999992], [28.734867000000001, -8.5265590000000007], [28.449871000000002, -9.1649180000000001], [28.673681999999999, -9.6059249999999992], [28.49607, -10.789884000000001], [28.372253000000001, -11.793647], [28.642416999999998, -11.971569000000001], [29.341548, -12.360744], [29.616001000000001, -12.178895000000001], [29.699614, -13.257227], [28.934286, -13.248958], [28.523561999999998, -12.698604], [28.155108999999999, -12.272481000000001], [27.388798999999999, -12.132747], [27.16442, -11.608748], [26.553087999999999, -11.924440000000001], [25.752310000000001, -11.784965], [25.418118, -11.330935999999999], [24.783169999999998, -11.238694000000001], [24.314516000000001, -11.262826], [24.257155000000001, -10.951993], [23.912215, -10.926826], [23.456790999999999, -10.867863], [22.837344999999999, -11.017621999999999], [22.402798000000001, -10.993074999999999], [22.155268, -11.084801000000001], [22.208753000000002, -9.8947959999999995], [21.875181999999999, -9.5237079999999992], [21.801801000000001, -8.9087069999999997], [21.949131000000001, -8.3059010000000004], [21.746455999999998, -7.9200850000000003], [21.728110999999998, -7.2908720000000002], [20.514748000000001, -7.2996059999999998], [20.601823, -6.9393180000000001], [20.091622000000001, -6.9430899999999998], [20.037723, -7.1163610000000004], [19.417501999999999, -7.1554289999999998], [19.166613000000002, -7.7381840000000004], [19.016752, -7.9882460000000002], [18.464175999999998, -7.8470139999999997], [18.134222000000001, -7.9876779999999998], [17.47297, -8.0685509999999994], [17.089995999999999, -7.5456890000000003], [16.860191, -7.2222980000000003], [16.573180000000001, -6.6226450000000003], [16.326528, -5.8774699999999998], [13.375597000000001, -5.8642409999999998], [13.024869000000001, -5.9843890000000002], [12.735170999999999, -5.9656820000000002], [12.322431999999999, -6.1000920000000001], [12.182337, -5.7899310000000002], [12.436688, -5.684304], [12.468004000000001, -5.2483620000000002], [12.631612000000001, -4.9912710000000002], [12.995517, -4.7811029999999999], [13.258240000000001, -4.8829570000000002], [13.600235, -4.5001379999999997], [14.144956000000001, -4.5100090000000002], [14.209035, -4.7930919999999997], [14.582604, -4.9702390000000003], [15.170992, -4.3435069999999998], [15.753539999999999, -3.855165], [16.00629, -3.5351330000000001], [15.972803000000001, -2.7123919999999999], [16.407091999999999, -1.7409269999999999], [16.865307000000001, -1.225816], [17.523716, -0.74382999999999999], [17.638645, -0.42483199999999999], [17.663553, -0.058083999999999997], [17.826540000000001, 0.28892299999999999], [17.774191999999999, 0.85565899999999995], [17.898834999999998, 1.741832], [18.094276000000001, 2.3657219999999999], [18.393792000000001, 2.9004430000000001], [18.453064999999999, 3.5043859999999998], [18.542981999999999, 4.2017850000000001], [18.932312, 4.7095060000000002], [19.467784000000002, 5.0315279999999998], [20.290679000000001, 4.6916779999999996], [20.927591, 4.3227859999999998], [21.659123000000001, 4.224342], [22.405124000000001, 4.0291600000000001], [22.704124, 4.633051], [22.841480000000001, 4.7101259999999998], [23.297214, 4.609693], [24.410530999999999, 5.108784], [24.805029000000001, 4.8972470000000001], [25.128833, 4.9272450000000001], [25.278797999999998, 5.1704080000000001], [25.650455000000001, 5.2560880000000001], [26.402761000000002, 5.1508750000000001], [27.044065, 5.127853], [27.374226, 5.2339440000000002], [27.979977000000002, 4.4084130000000004], [28.428993999999999, 4.2871550000000003], [28.696677999999999, 4.4550770000000002], [29.159078000000001, 4.3892670000000003], [29.715994999999999, 4.6008050000000003], [29.953499999999998, 4.173699], [30.833860000000001, 3.509166]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u043d\u0433\u043e", "fr": "R\u00e9publique d\u00e9mocratique du Congo", "en": "Democratic Republic of the Congo", "nl": "Congo-Kinshasa", "pt": "Rep\u00fablica Democr\u00e1tica do Congo", "no": "Den demokratiske republikken Kongo", "de": "Demokratische Republik Kongo", "it": "Repubblica Democratica del Congo", "sv": "Demokratiska republiken Kongo", "pl": "Demokratyczna Republika Konga", "fi": "Kongon demokraattinen tasavalta", "zh": "\u521a\u679c\u6c11\u4e3b\u5171\u548c\u56fd", "ja": "\u30b3\u30f3\u30b4\u6c11\u4e3b\u5171\u548c\u56fd", "es": "Rep\u00fablica Democr\u00e1tica del Congo"}, "label_fr": "R\u00e9publique d\u00e9mocratique du Congo", "name": "Democratic Republic of the Congo", "dbpedia_uri": "http://dbpedia.org/resource/Democratic_Republic_of_the_Congo"}, "id": "COD"}, {"geometry": {"type": "Polygon", "coordinates": [[[12.995517, -4.7811029999999999], [12.620760000000001, -4.4380230000000003], [12.318607999999999, -4.60623], [11.914963, -5.0379870000000002], [11.093773000000001, -3.9788269999999999], [11.855122, -3.4268709999999998], [11.478039000000001, -2.765619], [11.820964, -2.5141610000000001], [12.495703000000001, -2.3916879999999998], [12.575284, -1.9485110000000001], [13.109619, -2.4287399999999999], [13.992407, -2.4708049999999999], [14.29921, -1.9982759999999999], [14.425456000000001, -1.333407], [14.316418000000001, -0.55262699999999998], [13.843321, 0.038758000000000001], [14.276266, 1.19693], [14.026669, 1.3956770000000001], [13.282631, 1.314184], [13.003114, 1.8308960000000001], [13.075822000000001, 2.2670970000000001], [14.337813000000001, 2.227875], [15.146342000000001, 1.9640150000000001], [15.940918999999999, 1.727673], [16.012851999999999, 2.2676400000000001], [16.537057999999998, 3.1982550000000001], [17.133042, 3.7281970000000002], [17.809899999999999, 3.5601959999999999], [18.453064999999999, 3.5043859999999998], [18.393792000000001, 2.9004430000000001], [18.094276000000001, 2.3657219999999999], [17.898834999999998, 1.741832], [17.774191999999999, 0.85565899999999995], [17.826540000000001, 0.28892299999999999], [17.663553, -0.058083999999999997], [17.638645, -0.42483199999999999], [17.523716, -0.74382999999999999], [16.865307000000001, -1.225816], [16.407091999999999, -1.7409269999999999], [15.972803000000001, -2.7123919999999999], [16.00629, -3.5351330000000001], [15.753539999999999, -3.855165], [15.170992, -4.3435069999999998], [14.582604, -4.9702390000000003], [14.209035, -4.7930919999999997], [14.144956000000001, -4.5100090000000002], [13.600235, -4.5001379999999997], [13.258240000000001, -4.8829570000000002], [12.995517, -4.7811029999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u043d\u0433\u043e", "fr": "R\u00e9publique du Congo", "en": "Republic of the Congo", "nl": "Congo-Brazzaville", "pt": "Congo", "no": "Republikken Kongo", "de": "Republik Kongo", "it": "Repubblica del Congo", "sv": "Kongo-Brazzaville", "pl": "Kongo", "fi": "Kongon tasavalta", "zh": "\u521a\u679c\u5171\u548c\u56fd", "ja": "\u30b3\u30f3\u30b4\u5171\u548c\u56fd", "es": "Rep\u00fablica del Congo"}, "label_fr": "R\u00e9publique du Congo", "name": "Republic of the Congo", "dbpedia_uri": "http://dbpedia.org/resource/Republic_of_the_Congo"}, "id": "COG"}, {"geometry": {"type": "Polygon", "coordinates": [[[-75.373222999999996, -0.152032], [-75.801466000000005, 0.084801000000000001], [-76.292314000000005, 0.416047], [-76.57638, 0.256936], [-77.424983999999995, 0.39568700000000001], [-77.668612999999993, 0.82589299999999999], [-77.855061000000006, 0.80992500000000001], [-78.855259000000004, 1.380924], [-78.990934999999993, 1.69137], [-78.617830999999995, 1.7664040000000001], [-78.662118000000007, 2.2673549999999998], [-78.427610000000001, 2.629556], [-77.931543000000005, 2.6966060000000001], [-77.510430999999997, 3.3250169999999999], [-77.127690000000001, 3.8496359999999998], [-77.496272000000005, 4.0876060000000001], [-77.307601000000005, 4.6679839999999997], [-77.533220999999998, 5.5828119999999997], [-77.318815000000001, 5.8453540000000004], [-77.476660999999993, 6.6911160000000001], [-77.881570999999994, 7.2237710000000002], [-77.753414000000006, 7.7098399999999998], [-77.431107999999995, 7.6380610000000004], [-77.242565999999997, 7.9352780000000003], [-77.474722999999997, 8.524286], [-77.353361000000007, 8.6705050000000004], [-76.836674000000002, 8.6387490000000007], [-76.086383999999995, 9.3368210000000005], [-75.674599999999998, 9.4432480000000005], [-75.664704, 9.7740030000000004], [-75.480425999999994, 10.61899], [-74.906895000000006, 11.083045], [-74.276752999999999, 11.102036], [-74.197222999999994, 11.310473], [-73.414764000000005, 11.227015], [-72.627835000000005, 11.731972000000001], [-72.238195000000005, 11.955550000000001], [-71.754090000000005, 12.437303], [-71.399822, 12.376041000000001], [-71.137461000000002, 12.112982000000001], [-71.331584000000007, 11.776284], [-71.973922000000002, 11.608672], [-72.227575000000002, 11.108701999999999], [-72.614658000000006, 10.821975], [-72.905286000000004, 10.450343999999999], [-73.027603999999997, 9.7367699999999999], [-73.304952, 9.1519999999999992], [-72.788730000000001, 9.0850270000000002], [-72.660494999999997, 8.6252879999999994], [-72.439862000000005, 8.4052749999999996], [-72.360900999999998, 8.0026379999999993], [-72.479679000000004, 7.6325060000000002], [-72.444486999999995, 7.4237849999999996], [-72.198352, 7.3404309999999997], [-71.960176000000004, 6.9916150000000004], [-70.674233999999998, 7.0877850000000002], [-70.093312999999995, 6.9603760000000001], [-69.389480000000006, 6.0998609999999998], [-68.985319000000004, 6.2068050000000001], [-68.265051999999997, 6.1532679999999997], [-67.695087000000001, 6.2673180000000004], [-67.341440000000006, 6.0954680000000003], [-67.521531999999993, 5.55687], [-67.744697000000002, 5.2211290000000004], [-67.823012000000006, 4.5039369999999996], [-67.621836000000002, 3.8394819999999998], [-67.337564, 3.5423420000000001], [-67.303173000000001, 3.318454], [-67.809938000000002, 2.8206549999999999], [-67.447091999999998, 2.6002809999999998], [-67.181293999999994, 2.2506379999999999], [-66.876326000000006, 1.2533609999999999], [-67.065048000000004, 1.130112], [-67.259997999999996, 1.7199990000000001], [-67.537809999999993, 2.0371630000000001], [-67.868565000000004, 1.692455], [-69.816973000000004, 1.7148049999999999], [-69.804597000000001, 1.089081], [-69.218637999999999, 0.98567700000000003], [-69.252433999999994, 0.60265100000000005], [-69.452395999999993, 0.70615899999999998], [-70.015566000000007, 0.54141399999999995], [-70.020656000000002, -0.18515599999999999], [-69.577065000000005, -0.54999200000000004], [-69.420485999999997, -1.122619], [-69.444102000000001, -1.556287], [-69.893635000000003, -4.2981870000000004], [-70.394043999999994, -3.766591], [-70.692682000000005, -3.7428720000000002], [-70.047708999999998, -2.7251560000000001], [-70.813475999999994, -2.2568649999999999], [-71.413646, -2.3428019999999998], [-71.774760999999998, -2.1697899999999999], [-72.325787000000005, -2.434218], [-73.070391999999998, -2.308954], [-73.659503999999998, -1.260491], [-74.122394999999997, -1.0028330000000001], [-74.441601000000006, -0.53081999999999996], [-75.106624999999994, -0.057204999999999999], [-75.373222999999996, -0.152032]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f", "fr": "Colombie", "en": "Colombia", "nl": "Colombia", "pt": "Col\u00f4mbia", "no": "Colombia", "de": "Kolumbien", "it": "Colombia", "sv": "Colombia", "pl": "Kolumbia", "fi": "Kolumbia", "zh": "\u54e5\u4f26\u6bd4\u4e9a", "ja": "\u30b3\u30ed\u30f3\u30d3\u30a2", "es": "Colombia"}, "label_fr": "Colombie", "name": "Colombia", "dbpedia_uri": "http://dbpedia.org/resource/Colombia"}, "id": "COL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-82.965783000000002, 8.225028], [-83.508437000000001, 8.4469270000000005], [-83.711473999999995, 8.6568360000000002], [-83.596312999999995, 8.8304430000000007], [-83.632642000000004, 9.0513860000000008], [-83.909886, 9.2908030000000004], [-84.303402000000006, 9.4873539999999998], [-84.647644, 9.6155369999999998], [-84.713351000000003, 9.9080519999999996], [-84.975660000000005, 10.086722999999999], [-84.911375000000007, 9.795992], [-85.110923, 9.5570400000000006], [-85.339488000000003, 9.8345420000000008], [-85.660786999999999, 9.9333469999999995], [-85.797444999999996, 10.134886], [-85.791708999999997, 10.439337], [-85.659313999999995, 10.754331000000001], [-85.941725000000005, 10.895277999999999], [-85.712540000000004, 11.088445], [-85.561852000000002, 11.217119], [-84.903002999999998, 10.952303000000001], [-84.673068999999998, 11.082656999999999], [-84.355930999999998, 10.999226], [-84.190179000000001, 10.79345], [-83.895054000000002, 10.726839], [-83.655612000000005, 10.938764000000001], [-83.402320000000003, 10.395438], [-83.015676999999997, 9.9929819999999996], [-82.546195999999995, 9.5661349999999992], [-82.932890999999998, 9.4768120000000007], [-82.927154999999999, 9.0743299999999998], [-82.719183000000001, 8.9257089999999994], [-82.868656999999999, 8.8072660000000003], [-82.829770999999994, 8.6262950000000007], [-82.913176000000007, 8.4235170000000004], [-82.965783000000002, 8.225028]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430", "fr": "Costa Rica", "en": "Costa Rica", "nl": "Costa Rica", "pt": "Costa Rica", "no": "Costa Rica", "de": "Costa Rica", "it": "Costa Rica", "sv": "Costa Rica", "pl": "Kostaryka", "fi": "Costa Rica", "zh": "\u54e5\u65af\u8fbe\u9ece\u52a0", "ja": "\u30b3\u30b9\u30bf\u30ea\u30ab", "es": "Costa Rica"}, "label_fr": "Costa Rica", "name": "Costa Rica", "dbpedia_uri": "http://dbpedia.org/resource/Costa_Rica"}, "id": "CRI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-82.268151000000003, 23.188611000000002], [-81.404456999999994, 23.117270999999999], [-80.618769, 23.105979999999999], [-79.679524000000001, 22.765302999999999], [-79.281486000000001, 22.399201999999999], [-78.347434000000007, 22.512166000000001], [-77.993296000000001, 22.277194000000001], [-77.146422000000001, 21.657851000000001], [-76.523825000000002, 21.20682], [-76.19462, 21.220565000000001], [-75.598222000000007, 21.016624], [-75.671059999999997, 20.735091000000001], [-74.933896000000004, 20.693905000000001], [-74.178025000000005, 20.284628000000001], [-74.296648000000005, 20.050379], [-74.961595000000003, 19.923435000000001], [-75.634680000000003, 19.873774000000001], [-76.323656, 19.952891000000001], [-77.755481000000003, 19.855481000000001], [-77.085108000000005, 20.413354000000002], [-77.492654999999999, 20.673105], [-78.137292000000002, 20.739948999999999], [-78.482827, 21.028613], [-78.719866999999994, 21.598113999999999], [-79.284999999999997, 21.559175], [-80.217474999999993, 21.827324000000001], [-80.517534999999995, 22.037078999999999], [-81.820943, 22.192056999999998], [-82.169991999999993, 22.387108999999999], [-81.795001999999997, 22.636965], [-82.775897999999998, 22.68815], [-83.494459000000006, 22.168517999999999], [-83.908799999999999, 22.154565000000002], [-84.052150999999995, 21.910575000000001], [-84.547030000000007, 21.801227999999998], [-84.974911000000006, 21.896028000000001], [-84.447062000000003, 22.20495], [-84.230356999999998, 22.565754999999999], [-83.778239999999997, 22.788118000000001], [-83.267548000000005, 22.983042000000001], [-82.510435999999999, 23.078747], [-82.268151000000003, 23.188611000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0443\u0431\u0430", "fr": "Cuba", "en": "Cuba", "nl": "Cuba (land)", "pt": "Cuba", "no": "Cuba", "de": "Kuba", "it": "Cuba", "sv": "Kuba", "pl": "Kuba", "fi": "Kuuba", "zh": "\u53e4\u5df4", "ja": "\u30ad\u30e5\u30fc\u30d0", "es": "Cuba"}, "label_fr": "Cuba", "name": "Cuba", "dbpedia_uri": "http://dbpedia.org/resource/Cuba"}, "id": "CUB"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.731780000000001, 35.140025999999999], [32.802473999999997, 35.145504000000003], [32.946961000000002, 35.386702999999997], [33.667226999999997, 35.373215999999999], [34.576473999999997, 35.671596000000001], [33.900804000000001, 35.245756], [33.973616999999997, 35.058506000000001], [33.866439999999997, 35.093595000000001], [33.675392000000002, 35.017862999999998], [33.525685000000003, 35.038688], [33.475816999999999, 35.000345000000003], [33.455922000000001, 35.101424000000002], [33.383833000000003, 35.162711999999999], [33.190976999999997, 35.173124999999999], [32.919572000000002, 35.087833000000003], [32.731780000000001, 35.140025999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u0435\u0446\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u041a\u0438\u043f\u0440\u0430", "fr": "Chypre du Nord", "en": "Northern Cyprus", "nl": "Turkse Republiek Noord-Cyprus", "pt": "Rep\u00fablica Turca do Chipre do Norte", "no": "Nord-Kypros", "de": "T\u00fcrkische Republik Nordzypern", "it": "Repubblica Turca di Cipro del Nord", "sv": "Nordcypern", "pl": "Cypr P\u00f3\u0142nocny", "fi": "Pohjois-Kyproksen turkkilainen tasavalta", "zh": "\u5317\u8cfd\u666e\u52d2\u65af\u571f\u8033\u5176\u5171\u548c\u570b", "ja": "\u5317\u30ad\u30d7\u30ed\u30b9\u30fb\u30c8\u30eb\u30b3\u5171\u548c\u56fd", "es": "Rep\u00fablica Turca del Norte de Chipre"}, "label_fr": "Chypre du Nord", "name": "Northern Cyprus", "dbpedia_uri": "http://dbpedia.org/resource/Northern_Cyprus"}, "id": "-99"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.973616999999997, 35.058506000000001], [34.004880999999997, 34.978098000000003], [32.979827, 34.571869], [32.490296000000001, 34.701655000000002], [32.256667, 35.103231999999998], [32.731780000000001, 35.140025999999999], [32.919572000000002, 35.087833000000003], [33.190976999999997, 35.173124999999999], [33.383833000000003, 35.162711999999999], [33.455922000000001, 35.101424000000002], [33.475816999999999, 35.000345000000003], [33.525685000000003, 35.038688], [33.675392000000002, 35.017862999999998], [33.866439999999997, 35.093595000000001], [33.973616999999997, 35.058506000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u0438\u043f\u0440", "fr": "Chypre (pays)", "en": "Cyprus", "nl": "Cyprus", "pt": "Chipre", "no": "Kypros", "de": "Republik Zypern", "it": "Cipro", "sv": "Cypern", "pl": "Cypr", "fi": "Kyproksen tasavalta", "zh": "\u8cfd\u666e\u52d2\u65af", "ja": "\u30ad\u30d7\u30ed\u30b9", "es": "Chipre"}, "label_fr": "Chypre (pays)", "name": "Cyprus", "dbpedia_uri": "http://dbpedia.org/resource/Cyprus"}, "id": "CYP"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.960287999999998, 48.596981999999997], [16.499282999999998, 48.785808000000003], [16.029647000000001, 48.733899000000001], [15.253416, 49.039073999999999], [14.901446999999999, 48.964402], [14.338898, 48.555304999999997], [13.595946, 48.877172000000002], [13.031328999999999, 49.307068000000001], [12.521024000000001, 49.547415000000001], [12.415191, 49.969121000000001], [12.240111000000001, 50.266337999999998], [12.966837, 50.484076000000002], [13.338132, 50.733234000000003], [14.056228000000001, 50.926918000000001], [14.307013, 51.117268000000003], [14.570717999999999, 51.002338999999999], [15.016996000000001, 51.106673999999998], [15.490971999999999, 50.784730000000003], [16.238627000000001, 50.697732999999999], [16.176252999999999, 50.422606999999999], [16.719476, 50.215747], [16.868769, 50.473973999999998], [17.554566999999999, 50.362146000000003], [17.649445, 50.049038000000003], [18.392914000000001, 49.988629000000003], [18.853144, 49.496229999999997], [18.554970999999998, 49.495015000000002], [18.399994, 49.315001000000002], [18.170497999999998, 49.271515000000001], [18.104973000000001, 49.043982999999997], [17.913512000000001, 48.996493000000001], [17.886485, 48.903475], [17.545006999999998, 48.800018999999999], [17.101984999999999, 48.816969], [16.960287999999998, 48.596981999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0435\u0445\u0438\u044f", "fr": "R\u00e9publique tch\u00e8que", "en": "Czech Republic", "nl": "Tsjechi\u00eb", "pt": "Rep\u00fablica Checa", "no": "Tsjekkia", "de": "Tschechien", "it": "Repubblica Ceca", "sv": "Tjeckien", "pl": "Czechy", "fi": "T\u0161ekki", "zh": "\u6377\u514b", "ja": "\u30c1\u30a7\u30b3", "es": "Rep\u00fablica Checa"}, "label_fr": "R\u00e9publique tch\u00e8que", "name": "Czech Republic", "dbpedia_uri": "http://dbpedia.org/resource/Czech_Republic"}, "id": "CZE"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.9219059999999999, 54.983103999999997], [9.9395799999999994, 54.596642000000003], [10.950112000000001, 54.363607000000002], [10.939467, 54.008693000000001], [11.956251999999999, 54.196486], [12.51844, 54.470371], [13.647467000000001, 54.075510999999999], [14.119686, 53.757029000000003], [14.353315, 53.248170999999999], [14.074521000000001, 52.981262999999998], [14.4376, 52.624850000000002], [14.685026000000001, 52.089947000000002], [14.607098000000001, 51.745187999999999], [15.016996000000001, 51.106673999999998], [14.570717999999999, 51.002338999999999], [14.307013, 51.117268000000003], [14.056228000000001, 50.926918000000001], [13.338132, 50.733234000000003], [12.966837, 50.484076000000002], [12.240111000000001, 50.266337999999998], [12.415191, 49.969121000000001], [12.521024000000001, 49.547415000000001], [13.031328999999999, 49.307068000000001], [13.595946, 48.877172000000002], [13.243357, 48.416114999999998], [12.884103, 48.289146000000002], [13.025850999999999, 47.637583999999997], [12.932627, 47.467646000000002], [12.620760000000001, 47.672387999999998], [12.141356999999999, 47.703082999999999], [11.426413999999999, 47.523766000000002], [10.544504, 47.566398999999997], [10.402084, 47.302487999999997], [9.8960679999999996, 47.580196999999998], [9.5942260000000008, 47.525058000000001], [8.5226120000000005, 47.830827999999997], [8.3173010000000005, 47.613579999999999], [7.4667589999999997, 47.620581999999999], [7.5936760000000003, 48.333019], [8.0992789999999992, 49.017783999999999], [6.6582299999999996, 49.201957999999998], [6.1863200000000003, 49.463802999999999], [6.2427510000000002, 49.902225999999999], [6.0430729999999997, 50.128051999999997], [6.1566580000000002, 50.803721000000003], [5.988658, 51.851616], [6.5893969999999999, 51.852029000000002], [6.8428699999999996, 52.228439999999999], [7.0920529999999999, 53.144043000000003], [6.9051400000000003, 53.482162000000002], [7.1004250000000004, 53.693931999999997], [7.9362389999999996, 53.748296000000003], [8.1217059999999996, 53.527791999999998], [8.8007340000000003, 54.020786000000001], [8.5721179999999997, 54.395645999999999], [8.5262290000000007, 54.962744000000001], [9.2820490000000007, 54.830865000000003], [9.9219059999999999, 54.983103999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f", "fr": "Allemagne", "en": "Germany", "nl": "Duitsland", "pt": "Alemanha", "no": "Tyskland", "de": "Deutschland", "it": "Germania", "sv": "Tyskland", "pl": "Niemcy", "fi": "Saksa", "zh": "\u5fb7\u56fd", "ja": "\u30c9\u30a4\u30c4", "es": "Alemania"}, "label_fr": "Allemagne", "name": "Germany", "dbpedia_uri": "http://dbpedia.org/resource/Germany"}, "id": "DEU"}, {"geometry": {"type": "Polygon", "coordinates": [[[43.081226000000001, 12.699638999999999], [43.317852000000002, 12.390148], [43.286380999999999, 11.974928], [42.715873999999999, 11.735640999999999], [43.145305, 11.46204], [42.776851999999998, 10.926879], [42.554929999999999, 11.10511], [42.314140000000002, 11.0342], [41.755569999999999, 11.05091], [41.73959, 11.35511], [41.661760000000001, 11.6312], [42, 12.1], [42.351559999999999, 12.54223], [42.779642000000003, 12.455416], [43.081226000000001, 12.699638999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0436\u0438\u0431\u0443\u0442\u0438", "fr": "Djibouti", "en": "Djibouti", "nl": "Djibouti (land)", "pt": "Djibouti", "no": "Djibouti", "de": "Dschibuti", "it": "Gibuti", "sv": "Djibouti", "pl": "D\u017cibuti", "fi": "Djibouti", "zh": "\u5409\u5e03\u63d0", "ja": "\u30b8\u30d6\u30c1", "es": "Yibuti"}, "label_fr": "Djibouti", "name": "Djibouti", "dbpedia_uri": "http://dbpedia.org/resource/Djibouti"}, "id": "DJI"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[12.690006, 55.609991000000001], [12.089990999999999, 54.800015000000002], [11.043543, 55.364863999999997], [10.903914, 55.779955000000001], [12.370903999999999, 56.111407], [12.690006, 55.609991000000001]]], [[[10.912182, 56.458621000000001], [10.667804, 56.081383000000002], [10.369992999999999, 56.190007000000001], [9.6499849999999991, 55.469999000000001], [9.9219059999999999, 54.983103999999997], [9.2820490000000007, 54.830865000000003], [8.5262290000000007, 54.962744000000001], [8.1203109999999992, 55.517722999999997], [8.0899769999999993, 56.540011999999997], [8.2565819999999999, 56.809969000000002], [8.5434380000000001, 57.110002999999999], [9.4244690000000002, 57.172066000000001], [9.7755589999999994, 57.447941], [10.580005999999999, 57.730016999999997], [10.546106, 57.215733], [10.25, 56.890016000000003], [10.369992999999999, 56.609982000000002], [10.912182, 56.458621000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0430\u043d\u0438\u044f", "fr": "Danemark", "en": "Denmark", "nl": "Denemarken", "pt": "Dinamarca", "no": "Danmark", "de": "D\u00e4nemark", "it": "Danimarca", "sv": "Danmark", "pl": "Dania", "fi": "Tanska", "zh": "\u4e39\u9ea6", "ja": "\u30c7\u30f3\u30de\u30fc\u30af", "es": "Dinamarca"}, "label_fr": "Danemark", "name": "Denmark", "dbpedia_uri": "http://dbpedia.org/resource/Denmark"}, "id": "DNK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-71.712361000000001, 19.714455999999998], [-71.587304000000003, 19.884910999999999], [-70.806706000000005, 19.880286000000002], [-70.214365000000001, 19.622885], [-69.950815000000006, 19.648], [-69.76925, 19.293267], [-69.222126000000003, 19.313213999999999], [-69.254345999999998, 19.015196], [-68.809411999999995, 18.979074000000001], [-68.317943, 18.612197999999999], [-68.689316000000005, 18.205141999999999], [-69.164946, 18.422647999999999], [-69.623987999999997, 18.380713], [-69.952933999999999, 18.428307], [-70.133233000000004, 18.245915], [-70.517137000000005, 18.184291000000002], [-70.669297999999998, 18.426886], [-70.999949999999998, 18.283328999999998], [-71.400210000000001, 17.598564], [-71.657662000000002, 17.757573000000001], [-71.708304999999996, 18.044996999999999], [-71.687737999999996, 18.316659999999999], [-71.945111999999995, 18.616900000000001], [-71.701302999999996, 18.785416999999999], [-71.624872999999994, 19.169837999999999], [-71.712361000000001, 19.714455999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "R\u00e9publique dominicaine", "en": "Dominican Republic", "nl": "Dominicaanse Republiek", "pt": "Rep\u00fablica Dominicana", "no": "Den dominikanske republikk", "de": "Dominikanische Republik", "it": "Repubblica Dominicana", "sv": "Dominikanska republiken", "pl": "Dominikana", "fi": "Dominikaaninen tasavalta", "zh": "\u591a\u660e\u5c3c\u52a0\u5171\u548c\u570b", "ja": "\u30c9\u30df\u30cb\u30ab\u5171\u548c\u56fd", "es": "Rep\u00fablica Dominicana"}, "label_fr": "R\u00e9publique dominicaine", "name": "Dominican Republic", "dbpedia_uri": "http://dbpedia.org/resource/Dominican_Republic"}, "id": "DOM"}, {"geometry": {"type": "Polygon", "coordinates": [[[11.999506, 23.471668000000001], [8.5728930000000005, 21.565660999999999], [5.6775659999999997, 19.601206999999999], [4.2674190000000003, 19.155265], [3.1581329999999999, 19.057364], [3.1466609999999999, 19.693579], [2.6835879999999999, 19.85623], [2.060991, 20.142233000000001], [1.8232280000000001, 20.610809], [-1.550055, 22.792666000000001], [-4.9233370000000001, 24.974574], [-8.6844000000000001, 27.395744000000001], [-8.6651240000000005, 27.589479000000001], [-8.6655899999999999, 27.656426], [-8.6741159999999997, 28.841289], [-7.0592280000000001, 29.579228000000001], [-6.060632, 29.7317], [-5.2421290000000003, 30.000443000000001], [-4.8596459999999997, 30.501187999999999], [-3.6904409999999999, 30.896951999999999], [-3.6474980000000001, 31.637294000000001], [-3.0689799999999998, 31.724498000000001], [-2.6166049999999998, 32.094346000000002], [-1.3078989999999999, 32.262889000000001], [-1.1245510000000001, 32.651522], [-1.3880490000000001, 32.864015000000002], [-1.733455, 33.919713000000002], [-1.792986, 34.527918999999997], [-2.1699139999999999, 35.168396000000001], [-1.2086030000000001, 35.714849000000001], [-0.12745400000000001, 35.888661999999997], [0.50387700000000002, 36.301273000000002], [1.4669190000000001, 36.605646999999998], [3.161699, 36.783904999999997], [4.8157579999999998, 36.865037000000001], [5.3201200000000002, 36.716518999999998], [6.2618200000000002, 37.110655000000001], [7.3303849999999997, 37.118380999999999], [7.7370780000000003, 36.885708000000001], [8.4209639999999997, 36.946427], [8.2178240000000002, 36.433177000000001], [8.3763679999999994, 35.479875999999997], [8.140981, 34.655146000000002], [7.5244819999999999, 34.097375999999997], [7.6126420000000001, 33.344115000000002], [8.4304729999999992, 32.748336999999999], [8.4391029999999994, 32.506284999999998], [9.0556029999999996, 32.102691999999998], [9.4821399999999993, 30.307556000000002], [9.8056339999999995, 29.424638000000002], [9.8599979999999992, 28.959990000000001], [9.6838850000000001, 28.144174], [9.7561280000000004, 27.688258999999999], [9.6290560000000003, 27.140953], [9.7162860000000002, 26.512205999999999], [9.3194110000000006, 26.094325000000001], [9.9106930000000002, 25.365455000000001], [9.9482610000000005, 24.936954], [10.303846999999999, 24.379313], [10.771364, 24.562532000000001], [11.560669000000001, 24.097909000000001], [11.999506, 23.471668000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043b\u0436\u0438\u0440", "fr": "Alg\u00e9rie", "en": "Algeria", "nl": "Algerije", "pt": "Arg\u00e9lia", "no": "Algerie", "de": "Algerien", "it": "Algeria", "sv": "Algeriet", "pl": "Algieria", "fi": "Algeria", "zh": "\u963f\u5c14\u53ca\u5229\u4e9a", "ja": "\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2", "es": "Argelia"}, "label_fr": "Alg\u00e9rie", "name": "Algeria", "dbpedia_uri": "http://dbpedia.org/resource/Algeria"}, "id": "DZA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-80.302560999999997, -3.4048560000000001], [-79.770292999999995, -2.6575120000000001], [-79.986559, -2.2207940000000002], [-80.368784000000005, -2.6851590000000001], [-80.967765, -2.2469429999999999], [-80.764805999999993, -1.9650479999999999], [-80.933659000000006, -1.057455], [-80.583370000000002, -0.906663], [-80.399325000000005, -0.28370299999999998], [-80.020898000000003, 0.36033999999999999], [-80.090609999999998, 0.76842900000000003], [-79.542761999999996, 0.98293799999999998], [-78.855259000000004, 1.380924], [-77.855061000000006, 0.80992500000000001], [-77.668612999999993, 0.82589299999999999], [-77.424983999999995, 0.39568700000000001], [-76.57638, 0.256936], [-76.292314000000005, 0.416047], [-75.801466000000005, 0.084801000000000001], [-75.373222999999996, -0.152032], [-75.233722999999998, -0.91141700000000003], [-75.544995999999998, -1.5616099999999999], [-76.635394000000005, -2.6086779999999998], [-77.837905000000006, -3.0030209999999999], [-78.450683999999995, -3.873097], [-78.639897000000005, -4.547784], [-79.205288999999993, -4.9591289999999999], [-79.624978999999996, -4.4541979999999999], [-80.028908000000001, -4.3460910000000004], [-80.442241999999993, -4.4257239999999998], [-80.469295000000002, -4.0592870000000003], [-80.184015000000002, -3.8211620000000002], [-80.302560999999997, -3.4048560000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u043a\u0432\u0430\u0434\u043e\u0440", "fr": "\u00c9quateur (pays)", "en": "Ecuador", "nl": "Ecuador", "pt": "Equador", "no": "Ecuador", "de": "Ecuador", "it": "Ecuador", "sv": "Ecuador", "pl": "Ekwador", "fi": "Ecuador", "zh": "\u5384\u74dc\u591a\u5c14", "ja": "\u30a8\u30af\u30a2\u30c9\u30eb", "es": "Ecuador"}, "label_fr": "\u00c9quateur (pays)", "name": "Ecuador", "dbpedia_uri": "http://dbpedia.org/resource/Ecuador"}, "id": "ECU"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.922600000000003, 29.501329999999999], [34.641739999999999, 29.099419999999999], [34.426549999999999, 28.343990000000002], [34.154510000000002, 27.8233], [33.92136, 27.648700000000002], [33.58811, 27.971360000000001], [33.136760000000002, 28.417649999999998], [32.423229999999997, 29.85108], [32.320459999999997, 29.760429999999999], [32.734819999999999, 28.70523], [33.348759999999999, 27.69989], [34.104550000000003, 26.14227], [34.473869999999998, 25.598559999999999], [34.795070000000003, 25.033750000000001], [35.692410000000002, 23.92671], [35.493720000000003, 23.752369999999999], [35.525979999999997, 23.102440000000001], [36.690689999999996, 22.20485], [36.866230000000002, 22], [32.899999999999999, 22], [29.02, 22], [25, 22], [25, 25.682500000000001], [25, 29.238655000000001], [24.70007, 30.04419], [24.957619999999999, 30.6616], [24.802869999999999, 31.089289999999998], [25.164819999999999, 31.56915], [26.495329999999999, 31.58568], [27.457619999999999, 31.321259999999999], [28.450479999999999, 31.025770000000001], [28.913530000000002, 30.870049999999999], [29.683420000000002, 31.186859999999999], [30.095030000000001, 31.473400000000002], [30.976929999999999, 31.555859999999999], [31.68796, 31.429600000000001], [31.96041, 30.933599999999998], [32.19247, 31.260339999999999], [32.993920000000003, 31.024069999999998], [33.773400000000002, 30.967459999999999], [34.265439999999998, 31.219360000000002], [34.922600000000003, 29.501329999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0415\u0433\u0438\u043f\u0435\u0442", "fr": "\u00c9gypte", "en": "Egypt", "nl": "Egypte (land)", "pt": "Egito", "no": "Egypt", "de": "\u00c4gypten", "it": "Egitto", "sv": "Egypten", "pl": "Egipt", "fi": "Egypti", "zh": "\u57c3\u53ca", "ja": "\u30a8\u30b8\u30d7\u30c8", "es": "Egipto"}, "label_fr": "\u00c9gypte", "name": "Egypt", "dbpedia_uri": "http://dbpedia.org/resource/Egypt"}, "id": "EGY"}, {"geometry": {"type": "Polygon", "coordinates": [[[42.351559999999999, 12.54223], [42.009749999999997, 12.865819999999999], [41.598559999999999, 13.45209], [41.155194000000002, 13.77332], [40.896599999999999, 14.118639999999999], [40.026218999999998, 14.519579], [39.340609999999998, 14.531549999999999], [39.099400000000003, 14.740640000000001], [38.512949999999996, 14.505470000000001], [37.90607, 14.959429999999999], [37.593769999999999, 14.213100000000001], [36.429510000000001, 14.42211], [36.323188999999999, 14.822481], [36.753860000000003, 16.291874], [36.852530000000002, 16.95655], [37.167470000000002, 17.26314], [37.904000000000003, 17.42754], [38.410089999999997, 17.998307], [38.990622999999999, 16.840626], [39.266109999999998, 15.922723], [39.814293999999997, 15.435646999999999], [41.179274999999997, 14.49108], [41.734952, 13.921037], [42.276831000000001, 13.343992], [42.589576000000001, 13.000420999999999], [43.081226000000001, 12.699638999999999], [42.779642000000003, 12.455416], [42.351559999999999, 12.54223]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0440\u0438\u0442\u0440\u0435\u044f", "fr": "\u00c9rythr\u00e9e", "en": "Eritrea", "nl": "Eritrea", "pt": "Eritreia", "no": "Eritrea", "de": "Eritrea", "it": "Eritrea", "sv": "Eritrea", "pl": "Erytrea", "fi": "Eritrea", "zh": "\u5384\u7acb\u7279\u91cc\u4e9a", "ja": "\u30a8\u30ea\u30c8\u30ea\u30a2", "es": "Eritrea"}, "label_fr": "\u00c9rythr\u00e9e", "name": "Eritrea", "dbpedia_uri": "http://dbpedia.org/resource/Eritrea"}, "id": "ERI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-9.0348179999999996, 41.880571000000003], [-8.9844329999999992, 42.592775000000003], [-9.3928840000000005, 43.026625000000003], [-7.9781899999999997, 43.748337999999997], [-6.7544919999999999, 43.567909], [-5.411886, 43.574240000000003], [-4.3478430000000001, 43.403449000000002], [-3.5175320000000001, 43.455900999999997], [-1.901351, 43.422801999999997], [-1.5027710000000001, 43.034013999999999], [0.33804699999999999, 42.579546000000001], [0.70159099999999996, 42.795734000000003], [1.8267929999999999, 42.343384999999998], [2.9859990000000001, 42.473014999999997], [3.0394839999999999, 41.892119999999998], [2.0918420000000002, 41.226089000000002], [0.81052500000000005, 41.014732000000002], [0.72133100000000006, 40.678317999999997], [0.106692, 40.123933999999998], [-0.27871099999999999, 39.309978000000001], [0.111291, 38.738514000000002], [-0.46712399999999998, 38.292366000000001], [-0.68338900000000002, 37.642353999999997], [-1.438382, 37.443064], [-2.1464530000000002, 36.674143999999998], [-3.415781, 36.658900000000003], [-4.3689010000000001, 36.677838999999999], [-4.9952189999999996, 36.324708000000001], [-5.3771599999999999, 35.946849999999998], [-5.8664319999999996, 36.029817000000001], [-6.236694, 36.367677], [-6.5201909999999996, 36.942912999999997], [-7.4537259999999996, 37.097788000000001], [-7.5371050000000004, 37.428904000000003], [-7.1665080000000003, 37.803894], [-7.0292810000000001, 38.075763999999999], [-7.3740920000000001, 38.373058999999998], [-7.0980369999999997, 39.030073000000002], [-7.4986319999999997, 39.629570999999999], [-7.066592, 39.711891999999999], [-7.0264129999999998, 40.184524000000003], [-6.86402, 40.330871999999999], [-6.851127, 41.111083000000001], [-6.3890880000000001, 41.381815000000003], [-6.6686059999999996, 41.883386999999999], [-7.251309, 41.918346], [-7.4225130000000004, 41.792074999999997], [-8.0131750000000004, 41.790886], [-8.2638569999999998, 42.280468999999997], [-8.6719460000000002, 42.134689000000002], [-9.0348179999999996, 41.880571000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0441\u043f\u0430\u043d\u0438\u044f", "fr": "Espagne", "en": "Spain", "nl": "Spanje", "pt": "Espanha", "no": "Spania", "de": "Spanien", "it": "Spagna", "sv": "Spanien", "pl": "Hiszpania", "fi": "Espanja", "zh": "\u897f\u73ed\u7259", "ja": "\u30b9\u30da\u30a4\u30f3", "es": "Espa\u00f1a"}, "label_fr": "Espagne", "name": "Spain", "dbpedia_uri": "http://dbpedia.org/resource/Spain"}, "id": "ESP"}, {"geometry": {"type": "Polygon", "coordinates": [[[24.312863, 57.793424000000002], [24.428927999999999, 58.383412999999997], [24.061198000000001, 58.257375000000003], [23.426559999999998, 58.612752999999998], [23.339794999999999, 59.187240000000003], [24.604213999999999, 59.465854], [25.864189, 59.611089999999997], [26.949135999999999, 59.445802999999998], [27.981114000000002, 59.475388000000002], [28.131699000000001, 59.300825000000003], [27.420165999999998, 58.724581000000001], [27.716685999999999, 57.791899000000001], [27.288184999999999, 57.474527999999999], [26.463532000000001, 57.476388999999998], [25.602810000000002, 57.847529000000002], [25.164594000000001, 57.970157], [24.312863, 57.793424000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0441\u0442\u043e\u043d\u0438\u044f", "fr": "Estonie", "en": "Estonia", "nl": "Estland", "pt": "Est\u00f3nia", "no": "Estland", "de": "Estland", "it": "Estonia", "sv": "Estland", "pl": "Estonia", "fi": "Viro", "zh": "\u7231\u6c99\u5c3c\u4e9a", "ja": "\u30a8\u30b9\u30c8\u30cb\u30a2", "es": "Estonia"}, "label_fr": "Estonie", "name": "Estonia", "dbpedia_uri": "http://dbpedia.org/resource/Estonia"}, "id": "EST"}, {"geometry": {"type": "Polygon", "coordinates": [[[37.90607, 14.959429999999999], [38.512949999999996, 14.505470000000001], [39.099400000000003, 14.740640000000001], [39.340609999999998, 14.531549999999999], [40.026249999999997, 14.519590000000001], [40.896599999999999, 14.118639999999999], [41.155200000000001, 13.77333], [41.598559999999999, 13.45209], [42.009749999999997, 12.865819999999999], [42.351559999999999, 12.54223], [42, 12.1], [41.661760000000001, 11.6312], [41.73959, 11.35511], [41.755569999999999, 11.05091], [42.314140000000002, 11.0342], [42.554929999999999, 11.10511], [42.776851999999998, 10.926879], [42.558759999999999, 10.57258], [42.92812, 10.021940000000001], [43.296990000000001, 9.5404800000000005], [43.678750000000001, 9.1835799999999992], [46.948340000000002, 7.99688], [47.78942, 8.0030000000000001], [44.9636, 5.00162], [43.660870000000003, 4.9575500000000003], [42.769669999999998, 4.2525899999999996], [42.128610000000002, 4.2341300000000004], [41.855083, 3.9189120000000002], [41.171799999999998, 3.9190900000000002], [40.768479999999997, 4.2570199999999998], [39.854939999999999, 3.8387899999999999], [39.559384000000001, 3.4220600000000001], [38.892510000000001, 3.50074], [38.671140000000001, 3.6160700000000001], [38.436970000000002, 3.5885099999999999], [38.120914999999997, 3.5986050000000001], [36.855092999999997, 4.447864], [36.159078999999998, 4.447864], [35.817447999999999, 4.7769659999999998], [35.817447999999999, 5.3382319999999996], [35.298006999999998, 5.5060000000000002], [34.70702, 6.59422], [34.250320000000002, 6.8260699999999996], [34.075099999999999, 7.2259500000000001], [33.568289999999998, 7.7133399999999996], [32.954180000000001, 7.7849700000000004], [33.294800000000002, 8.3545800000000003], [33.825499999999998, 8.3791600000000006], [33.974980000000002, 8.6845599999999994], [33.961620000000003, 9.5835799999999995], [34.257449999999999, 10.630089999999999], [34.73115, 10.910170000000001], [34.831629999999997, 11.318960000000001], [35.260489999999997, 12.08286], [35.863630000000001, 12.578279999999999], [36.270220000000002, 13.563330000000001], [36.429510000000001, 14.42211], [37.593769999999999, 14.213100000000001], [37.90607, 14.959429999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0444\u0438\u043e\u043f\u0438\u044f", "fr": "\u00c9thiopie", "en": "Ethiopia", "nl": "Ethiopi\u00eb", "pt": "Eti\u00f3pia", "no": "Etiopia", "de": "\u00c4thiopien", "it": "Etiopia", "sv": "Etiopien", "pl": "Etiopia", "fi": "Etiopia", "zh": "\u57c3\u585e\u4fc4\u6bd4\u4e9a", "ja": "\u30a8\u30c1\u30aa\u30d4\u30a2", "es": "Etiop\u00eda"}, "label_fr": "\u00c9thiopie", "name": "Ethiopia", "dbpedia_uri": "http://dbpedia.org/resource/Ethiopia"}, "id": "ETH"}, {"geometry": {"type": "Polygon", "coordinates": [[[28.591930000000001, 69.064777000000007], [28.445944000000001, 68.364613000000006], [29.977426000000001, 67.698296999999997], [29.054589, 66.944286000000005], [30.217649999999999, 65.805980000000005], [29.544429999999998, 64.948672000000002], [30.444685, 64.204453000000001], [30.035872000000001, 63.552813999999998], [31.516092, 62.867686999999997], [31.139990999999998, 62.357692999999998], [30.211106999999998, 61.780028000000001], [28.069997999999998, 60.503517000000002], [26.255172999999999, 60.423960999999998], [24.496624000000001, 60.057316], [22.869695, 59.846373], [22.290763999999999, 60.391921000000004], [21.322244000000001, 60.720170000000003], [21.544865999999999, 61.705328999999999], [21.059211000000001, 62.607393000000002], [21.536028999999999, 63.189734999999999], [22.442744000000001, 63.817810000000001], [24.730512000000001, 64.902343999999999], [25.398067999999999, 65.111427000000006], [25.294042999999999, 65.534345999999999], [23.903379000000001, 66.006927000000005], [23.56588, 66.396051], [23.539473000000001, 67.936008999999999], [21.978535000000001, 68.616845999999995], [20.645593000000002, 69.106246999999996], [21.244935999999999, 69.370442999999995], [22.356238000000001, 68.841740999999999], [23.662050000000001, 68.891247000000007], [24.735679000000001, 68.649557000000001], [25.689212999999999, 69.092113999999995], [26.179621999999998, 69.825299000000001], [27.732292000000001, 70.164192999999997], [29.015573, 69.766491000000002], [28.591930000000001, 69.064777000000007]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u043d\u043b\u044f\u043d\u0434\u0438\u044f", "fr": "Finlande", "en": "Finland", "nl": "Finland", "pt": "Finl\u00e2ndia", "no": "Finland", "de": "Finnland", "it": "Finlandia", "sv": "Finland", "pl": "Finlandia", "fi": "Suomi", "zh": "\u82ac\u5170", "ja": "\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9", "es": "Finlandia"}, "label_fr": "Finlande", "name": "Finland", "dbpedia_uri": "http://dbpedia.org/resource/Finland"}, "id": "FIN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[178.37360000000001, -17.339919999999999], [178.71806000000001, -17.62846], [178.55270999999999, -18.150590000000001], [177.93266, -18.287990000000001], [177.38146, -18.16432], [177.28504000000001, -17.72465], [177.67087000000001, -17.381139999999998], [178.12557000000001, -17.504809999999999], [178.37360000000001, -17.339919999999999]]], [[[179.36414300000001, -16.801354], [178.72505899999999, -17.012042000000001], [178.59683899999999, -16.639150000000001], [179.096609, -16.433983999999999], [179.413509, -16.379054], [180, -16.067132999999998], [180, -16.555216999999999], [179.36414300000001, -16.801354]]], [[[-179.91736900000001, -16.501783], [-180, -16.555216999999999], [-180, -16.067132999999998], [-179.79331999999999, -16.020882], [-179.91736900000001, -16.501783]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u0434\u0436\u0438", "fr": "Fidji", "en": "Fiji", "nl": "Fiji", "pt": "Fiji", "no": "Fiji", "de": "Fidschi", "it": "Figi", "sv": "Fiji", "pl": "Fid\u017ci", "fi": "Fid\u017ei", "zh": "\u6590\u6fdf", "ja": "\u30d5\u30a3\u30b8\u30fc", "es": "Fiyi"}, "label_fr": "Fidji", "name": "Fiji", "dbpedia_uri": "http://dbpedia.org/resource/Fiji"}, "id": "FJI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-61.200000000000003, -51.850000000000001], [-60, -51.25], [-59.149999999999999, -51.5], [-58.549999999999997, -51.100000000000001], [-57.75, -51.549999999999997], [-58.049999999999997, -51.899999999999999], [-59.399999999999999, -52.200000000000003], [-59.850000000000001, -51.850000000000001], [-60.700000000000003, -52.299999999999997], [-61.200000000000003, -51.850000000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "\u00celes Malouines", "en": "Falkland Islands", "nl": "Falklandeilanden", "pt": "Ilhas Malvinas", "no": "Falklands\u00f8yene", "de": "Falklandinseln", "it": "Isole Falkland", "sv": "Falklands\u00f6arna", "pl": "Falklandy", "fi": "Falklandinsaaret", "zh": "\u798f\u514b\u5170\u7fa4\u5c9b", "ja": "\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6", "es": "Islas Malvinas (Territorio Brit\u00e1nico de Ultramar)"}, "label_fr": "\u00celes Malouines", "name": "Falkland Islands", "dbpedia_uri": "http://dbpedia.org/resource/Falkland_Islands"}, "id": "FLK"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-52.556424999999997, 2.504705], [-52.939656999999997, 2.1248580000000001], [-53.418464999999998, 2.0533890000000001], [-53.554839000000001, 2.3348969999999998], [-53.778520999999998, 2.376703], [-54.088062999999998, 2.1055570000000001], [-54.524754000000001, 2.311849], [-54.271230000000003, 2.7387480000000002], [-54.184283999999998, 3.194172], [-54.011504000000002, 3.6225700000000001], [-54.399541999999997, 4.2126109999999999], [-54.478633000000002, 4.8967559999999999], [-53.958044999999998, 5.7565480000000004], [-53.618453000000002, 5.6465290000000001], [-52.882140999999997, 5.4098509999999997], [-51.823343000000001, 4.5657680000000003], [-51.657797000000002, 4.1562320000000001], [-52.249338000000002, 3.2410939999999999], [-52.556424999999997, 2.504705]]], [[[9.5600159999999992, 42.152492000000002], [9.2297519999999995, 41.380006999999999], [8.7757229999999993, 41.583612000000002], [8.5442129999999992, 42.256517000000002], [8.7460090000000008, 42.628121999999998], [9.3900009999999998, 43.009985], [9.5600159999999992, 42.152492000000002]]], [[[3.588184, 50.378991999999997], [4.2860230000000001, 49.907496999999999], [4.7992220000000003, 49.985373000000003], [5.6740519999999997, 49.529483999999997], [5.8977589999999998, 49.442667], [6.1863200000000003, 49.463802999999999], [6.6582299999999996, 49.201957999999998], [8.0992789999999992, 49.017783999999999], [7.5936760000000003, 48.333019], [7.4667589999999997, 47.620581999999999], [7.192202, 47.449765999999997], [6.7365709999999996, 47.541801], [6.7687140000000001, 47.287708000000002], [6.0373890000000001, 46.725779000000003], [6.0226090000000001, 46.27299], [6.5000999999999998, 46.429673000000001], [6.8435930000000003, 45.991146999999998], [6.8023550000000004, 45.708579999999998], [7.0966519999999997, 45.333098999999997], [6.7499549999999999, 45.028517999999998], [7.0075620000000001, 44.254767000000001], [7.5495960000000002, 44.127901000000001], [7.4351849999999997, 43.693845000000003], [6.5292450000000004, 43.128892], [4.5569629999999997, 43.399650999999999], [3.1004109999999998, 43.075201], [2.9859990000000001, 42.473014999999997], [1.8267929999999999, 42.343384999999998], [0.70159099999999996, 42.795734000000003], [0.33804699999999999, 42.579546000000001], [-1.5027710000000001, 43.034013999999999], [-1.901351, 43.422801999999997], [-1.384225, 44.02261], [-1.1937979999999999, 46.014918000000002], [-2.225724, 47.064363], [-2.963276, 47.570326999999999], [-4.491555, 47.954954000000001], [-4.5923499999999997, 48.684159999999999], [-3.295814, 48.901691999999997], [-1.616511, 48.644421000000001], [-1.933494, 49.776342], [-0.98946900000000004, 49.347375999999997], [1.3387610000000001, 50.127172999999999], [1.6390009999999999, 50.946606000000003], [2.5135730000000001, 51.148505999999998], [2.6584219999999998, 50.796847999999997], [3.1232519999999999, 50.780363000000001], [3.588184, 50.378991999999997]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0440\u0430\u043d\u0446\u0438\u044f", "fr": "France", "en": "France", "nl": "Frankrijk", "pt": "Fran\u00e7a", "no": "Frankrike", "de": "Frankreich", "it": "Francia", "sv": "Frankrike", "pl": "Francja", "fi": "Ranska", "zh": "\u6cd5\u56fd", "ja": "\u30d5\u30e9\u30f3\u30b9", "es": "Francia"}, "label_fr": "France", "name": "France", "dbpedia_uri": "http://dbpedia.org/resource/France"}, "id": "FRA"}, {"geometry": {"type": "Polygon", "coordinates": [[[11.093773000000001, -3.9788269999999999], [10.066134999999999, -2.9694829999999999], [9.4052450000000007, -2.1443129999999999], [8.7979959999999995, -1.1113010000000001], [8.8300870000000007, -0.77907400000000004], [9.0484200000000001, -0.45935100000000001], [9.2913510000000006, 0.26866600000000002], [9.4928889999999999, 1.0101199999999999], [9.8302840000000007, 1.0678939999999999], [11.285079, 1.0576620000000001], [11.276449, 2.2610510000000001], [11.751664999999999, 2.3267579999999999], [12.35938, 2.192812], [12.951333999999999, 2.3216160000000001], [13.075822000000001, 2.2670970000000001], [13.003114, 1.8308960000000001], [13.282631, 1.314184], [14.026669, 1.3956770000000001], [14.276266, 1.19693], [13.843321, 0.038758000000000001], [14.316418000000001, -0.55262699999999998], [14.425456000000001, -1.333407], [14.29921, -1.9982759999999999], [13.992407, -2.4708049999999999], [13.109619, -2.4287399999999999], [12.575284, -1.9485110000000001], [12.495703000000001, -2.3916879999999998], [11.820964, -2.5141610000000001], [11.478039000000001, -2.765619], [11.855122, -3.4268709999999998], [11.093773000000001, -3.9788269999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u0431\u043e\u043d", "fr": "Gabon", "en": "Gabon", "nl": "Gabon", "pt": "Gab\u00e3o", "no": "Gabon", "de": "Gabun", "it": "Gabon", "sv": "Gabon", "pl": "Gabon", "fi": "Gabon", "zh": "\u52a0\u84ec", "ja": "\u30ac\u30dc\u30f3", "es": "Gab\u00f3n"}, "label_fr": "Gabon", "name": "Gabon", "dbpedia_uri": "http://dbpedia.org/resource/Gabon"}, "id": "GAB"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-5.6619489999999999, 54.554603], [-6.1978850000000003, 53.867564999999999], [-6.9537300000000002, 54.073701999999997], [-7.5721679999999996, 54.059956], [-7.3660310000000004, 54.595841], [-7.5721679999999996, 55.131622], [-6.7338469999999999, 55.17286], [-5.6619489999999999, 54.554603]]], [[[-3.0050050000000001, 58.634999999999998], [-4.0738279999999998, 57.553024999999998], [-3.055002, 57.690018999999999], [-1.9592810000000001, 57.684800000000003], [-2.2199879999999999, 56.870016999999997], [-3.1190030000000002, 55.973793000000001], [-2.0850089999999999, 55.909998000000002], [-2.0056759999999998, 55.804903000000003], [-1.1149910000000001, 54.624986], [-0.43048500000000001, 54.464376000000001], [0.18498100000000001, 53.325014000000003], [0.46997699999999998, 52.929999000000002], [1.6815310000000001, 52.739519999999999], [1.5599879999999999, 52.099997999999999], [1.050562, 51.806761000000002], [1.449865, 51.289428000000001], [0.55033399999999999, 50.765739000000004], [-0.78751700000000002, 50.774988999999998], [-2.4899979999999999, 50.500019000000002], [-2.9562740000000001, 50.69688], [-3.617448, 50.228355999999998], [-4.5425079999999998, 50.341836999999998], [-5.2450229999999998, 49.960000000000001], [-5.776567, 50.159678], [-4.30999, 51.210000999999998], [-3.4148510000000001, 51.426009000000001], [-3.4227189999999998, 51.426848], [-4.9843669999999998, 51.593465999999999], [-5.267296, 51.991399999999999], [-4.2223470000000001, 52.301355999999998], [-4.7700129999999996, 52.840004999999998], [-4.5799989999999999, 53.495004000000002], [-3.0938310000000002, 53.404547000000001], [-3.0920800000000002, 53.404440999999998], [-2.9450090000000002, 53.984999999999999], [-3.6147010000000002, 54.600937000000002], [-3.6300050000000001, 54.615012999999998], [-4.8441689999999999, 54.790970999999999], [-5.0825269999999998, 55.061601000000003], [-4.719112, 55.508473000000002], [-5.0479810000000001, 55.783985999999999], [-5.586398, 55.311146000000001], [-5.6449990000000003, 56.275015000000003], [-6.1499810000000004, 56.78501], [-5.7868250000000003, 57.818848000000003], [-5.0099989999999996, 58.630012999999998], [-4.2114950000000002, 58.550845000000002], [-3.0050050000000001, 58.634999999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "fr": "Royaume-Uni", "en": "United Kingdom", "nl": "Verenigd Koninkrijk", "pt": "Reino Unido", "no": "Storbritannia", "de": "Vereinigtes K\u00f6nigreich", "it": "Regno Unito", "sv": "Storbritannien", "pl": "Wielka Brytania", "fi": "Yhdistynyt kuningaskunta", "zh": "\u82f1\u56fd", "ja": "\u30a4\u30ae\u30ea\u30b9", "es": "Reino Unido"}, "label_fr": "Royaume-Uni", "name": "United Kingdom", "dbpedia_uri": "http://dbpedia.org/resource/United_Kingdom"}, "id": "GBR"}, {"geometry": {"type": "Polygon", "coordinates": [[[41.554084000000003, 41.535656000000003], [41.703170999999998, 41.962943000000003], [41.453470000000003, 42.645122999999998], [40.875469000000002, 43.013627999999997], [40.321393999999998, 43.128633999999998], [39.955008999999997, 43.434998], [40.076965000000001, 43.553103999999998], [40.922184999999999, 43.382159000000001], [42.394395000000003, 43.220308000000003], [43.756017, 42.740828], [43.931199999999997, 42.554974000000001], [44.537623000000004, 42.711993], [45.470278999999998, 42.502780999999999], [45.776409999999998, 42.092444], [46.404950999999997, 41.860675000000001], [46.145432, 41.722802000000001], [46.637908000000003, 41.181673000000004], [46.501637000000002, 41.064444999999999], [45.962600999999999, 41.123873000000003], [45.217426000000003, 41.411451999999997], [44.972479999999997, 41.248128999999999], [43.582746, 41.092143], [42.619548999999999, 41.583173000000002], [41.554084000000003, 41.535656000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0436\u043e\u0440\u0434\u0436\u0438\u044f (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f)", "fr": "G\u00e9orgie", "en": "Georgia", "nl": "Georgia", "pt": "Ge\u00f3rgia (desambigua\u00e7\u00e3o)", "no": "Georgia (andre betydninger)", "de": "Georgia (Begriffskl\u00e4rung)", "it": "Georgia (disambigua)", "sv": "Georgia (olika betydelser)", "pl": "Georgia (ujednoznacznienie)", "fi": "Georgia (t\u00e4smennyssivu)", "zh": "\u55ac\u6cbb\u4e9e (\u6d88\u6b67\u7fa9)", "ja": "\u30b8\u30e7\u30fc\u30b8\u30a2", "es": "Georgia (desambiguaci\u00f3n)"}, "label_fr": "G\u00e9orgie", "name": "Georgia", "dbpedia_uri": "http://dbpedia.org/resource/Georgia"}, "id": "GEO"}, {"geometry": {"type": "Polygon", "coordinates": [[[1.060122, 5.9288369999999997], [-0.50763800000000003, 5.3434730000000004], [-1.063625, 5.0005480000000002], [-1.964707, 4.7104619999999997], [-2.856125, 4.9944759999999997], [-2.8107009999999999, 5.3890510000000003], [-3.24437, 6.2504720000000002], [-2.9835850000000002, 7.3797050000000004], [-2.5621900000000002, 8.2196280000000002], [-2.827496, 9.6424610000000008], [-2.9638960000000001, 10.395334999999999], [-2.9404089999999998, 10.96269], [-1.2033579999999999, 11.009819], [-0.76157600000000003, 10.93693], [-0.43870199999999998, 11.098341], [0.023803000000000001, 11.018682], [-0.049785000000000003, 10.706918], [0.36758000000000002, 10.191212999999999], [0.36590099999999998, 9.4650040000000004], [0.46119199999999999, 8.6772229999999997], [0.71202900000000002, 8.3124649999999995], [0.49095699999999998, 7.4117439999999997], [0.570384, 6.9143590000000001], [0.83693099999999998, 6.279979], [1.060122, 5.9288369999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430 (\u043d\u0430\u0440\u043e\u0434)", "fr": "Ghana", "en": "Ghana", "nl": "Ghana", "pt": "Gana", "no": "Ghana", "de": "Ghana", "it": "Ghana", "sv": "Ghana", "pl": "Ghana", "fi": "Ghana", "ja": "\u30ac\u30fc\u30ca", "es": "Ghana"}, "label_fr": "Ghana", "name": "Ghana", "dbpedia_uri": "http://dbpedia.org/resource/Ghana"}, "id": "GHA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-8.4392980000000009, 7.6860429999999997], [-8.7221240000000009, 7.7116740000000004], [-8.9260649999999995, 7.309037], [-9.2087859999999999, 7.3139209999999997], [-9.4033479999999994, 7.5269050000000002], [-9.3372799999999998, 7.928534], [-9.7553420000000006, 8.5410550000000001], [-10.016567, 8.4285040000000002], [-10.230093999999999, 8.4062059999999992], [-10.505477000000001, 8.3488959999999999], [-10.494315, 8.715541], [-10.654769999999999, 8.9771780000000003], [-10.622394999999999, 9.2679100000000005], [-10.839152, 9.6882459999999995], [-11.117481, 10.045873], [-11.917277, 10.046984], [-12.150338, 9.8585720000000006], [-12.425929, 9.8358340000000002], [-12.596719, 9.6201880000000006], [-12.711957999999999, 9.3427120000000006], [-13.246549999999999, 8.9030489999999993], [-13.685154000000001, 9.4947440000000007], [-14.074045, 9.8861670000000004], [-14.330076, 10.01572], [-14.579699, 10.214467000000001], [-14.693232, 10.656300999999999], [-14.839554, 10.876571999999999], [-15.130311000000001, 11.040412], [-14.685687, 11.527824000000001], [-14.382192, 11.509271999999999], [-14.121406, 11.677117000000001], [-13.9008, 11.678718999999999], [-13.743161000000001, 11.811268999999999], [-13.828272, 12.142644000000001], [-13.718743999999999, 12.247185999999999], [-13.700476, 12.586183], [-13.217817999999999, 12.575874000000001], [-12.499051, 12.332090000000001], [-12.278599, 12.35444], [-12.203564999999999, 12.465648], [-11.658301, 12.386583], [-11.513942999999999, 12.442988], [-11.456168999999999, 12.076834], [-11.297573999999999, 12.077971], [-11.036555999999999, 12.211245], [-10.87083, 12.177887], [-10.593223999999999, 11.923975], [-10.165214000000001, 11.844084000000001], [-9.8909929999999999, 12.060479000000001], [-9.5679119999999998, 12.194243], [-9.3276160000000008, 12.334286000000001], [-9.1274739999999994, 12.308059999999999], [-8.905265, 12.088357999999999], [-8.7860990000000001, 11.812561000000001], [-8.3763050000000003, 11.393646], [-8.5813050000000004, 11.136246], [-8.6203210000000006, 10.810891], [-8.407311, 10.909257], [-8.2823569999999993, 10.792597000000001], [-8.3353769999999994, 10.494812], [-8.0299440000000004, 10.206535000000001], [-8.2293369999999992, 10.129020000000001], [-8.3096160000000001, 9.7895319999999995], [-8.0791140000000006, 9.3762240000000006], [-7.8320999999999996, 8.575704], [-8.2034990000000008, 8.4554530000000003], [-8.2990490000000001, 8.3164440000000006], [-8.2217920000000007, 8.123329], [-8.2807030000000008, 7.6871799999999997], [-8.4392980000000009, 7.6860429999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Guin\u00e9e", "en": "Guinea", "nl": "Guinee", "pt": "Guin\u00e9", "no": "Guinea", "de": "Guinea", "it": "Guinea", "sv": "Guinea", "pl": "Gwinea", "fi": "Guinea", "zh": "\u51e0\u5185\u4e9a", "ja": "\u30ae\u30cb\u30a2", "es": "Guinea"}, "label_fr": "Guin\u00e9e", "name": "Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Guinea"}, "id": "GIN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-16.841525000000001, 13.151394], [-16.713729000000001, 13.594958999999999], [-15.624596, 13.623587000000001], [-15.398770000000001, 13.860369], [-15.081735, 13.876492000000001], [-14.687030999999999, 13.630357], [-14.376714, 13.625679999999999], [-14.046991999999999, 13.794067999999999], [-13.844963, 13.505042], [-14.277702, 13.280585], [-14.712197, 13.298207], [-15.141163000000001, 13.509512000000001], [-15.511813, 13.27857], [-15.691001, 13.270353], [-15.931296, 13.130284], [-16.841525000000001, 13.151394]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u043c\u0431\u0438\u044f", "fr": "Gambie", "en": "The Gambia", "nl": "Gambia (land)", "pt": "G\u00e2mbia", "no": "Gambia", "de": "Gambia", "it": "Gambia", "sv": "Gambia", "pl": "Gambia", "fi": "Gambia", "zh": "\u5188\u6bd4\u4e9a", "ja": "\u30ac\u30f3\u30d3\u30a2", "es": "Gambia"}, "label_fr": "Gambie", "name": "Gambia", "dbpedia_uri": "http://dbpedia.org/resource/The_Gambia"}, "id": "GMB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-15.130311000000001, 11.040412], [-15.66418, 11.458474000000001], [-16.085214000000001, 11.524594], [-16.314786999999999, 11.806514999999999], [-16.308947, 11.958702000000001], [-16.613838000000001, 12.170911], [-16.677451999999999, 12.384852], [-16.147717, 12.547762000000001], [-15.816573999999999, 12.515567000000001], [-15.548477, 12.628170000000001], [-13.700476, 12.586183], [-13.718743999999999, 12.247185999999999], [-13.828272, 12.142644000000001], [-13.743161000000001, 11.811268999999999], [-13.9008, 11.678718999999999], [-14.121406, 11.677117000000001], [-14.382192, 11.509271999999999], [-14.685687, 11.527824000000001], [-15.130311000000001, 11.040412]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0438\u043d\u0435\u044f-\u0411\u0438\u0441\u0430\u0443", "fr": "Guin\u00e9e-Bissau", "en": "Guinea-Bissau", "nl": "Guinee-Bissau", "pt": "Guin\u00e9-Bissau", "no": "Guinea-Bissau", "de": "Guinea-Bissau", "it": "Guinea-Bissau", "sv": "Guinea-Bissau", "pl": "Gwinea Bissau", "fi": "Guinea-Bissau", "zh": "\u5e7e\u5167\u4e9e\u6bd4\u7d22", "ja": "\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6", "es": "Guinea-Bissau"}, "label_fr": "Guin\u00e9e-Bissau", "name": "Guinea Bissau", "dbpedia_uri": "http://dbpedia.org/resource/Guinea-Bissau"}, "id": "GNB"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.4928889999999999, 1.0101199999999999], [9.3056129999999992, 1.160911], [9.6491579999999999, 2.2838660000000002], [11.276449, 2.2610510000000001], [11.285079, 1.0576620000000001], [9.8302840000000007, 1.0678939999999999], [9.4928889999999999, 1.0101199999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u043a\u0432\u0430\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Guin\u00e9e \u00e9quatoriale", "en": "Equatorial Guinea", "nl": "Equatoriaal-Guinea", "pt": "Guin\u00e9 Equatorial", "no": "Ekvatorial-Guinea", "de": "\u00c4quatorialguinea", "it": "Guinea Equatoriale", "sv": "Ekvatorialguinea", "pl": "Gwinea R\u00f3wnikowa", "fi": "P\u00e4iv\u00e4ntasaajan Guinea", "zh": "\u8d64\u9053\u51e0\u5185\u4e9a", "ja": "\u8d64\u9053\u30ae\u30cb\u30a2", "es": "Guinea Ecuatorial"}, "label_fr": "Guin\u00e9e \u00e9quatoriale", "name": "Equatorial Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Equatorial_Guinea"}, "id": "GNQ"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[23.69998, 35.705004000000002], [24.246665, 35.368022000000003], [25.025015, 35.424996], [25.769207999999999, 35.354018000000003], [25.745023, 35.179997999999998], [26.290002999999999, 35.299990000000001], [26.164998000000001, 35.004995000000001], [24.724982000000001, 34.919987999999996], [24.735007, 35.084991000000002], [23.514977999999999, 35.279992], [23.69998, 35.705004000000002]]], [[[26.604196000000002, 41.562114999999999], [26.294602000000001, 40.936261000000002], [26.056941999999999, 40.824123], [25.447676999999999, 40.852544999999999], [24.925847999999998, 40.947062000000003], [23.714811000000001, 40.687128999999999], [24.407999, 40.124993000000003], [23.899968000000001, 39.962006000000002], [23.342998999999999, 39.960997999999996], [22.813987999999998, 40.476005000000001], [22.626298999999999, 40.256560999999998], [22.849748000000002, 39.659311000000002], [23.350027000000001, 39.190010999999998], [22.973099000000001, 38.970903], [23.530016, 38.510001000000003], [24.025024999999999, 38.219993000000002], [24.040011, 37.655014999999999], [23.115003000000002, 37.920011000000002], [23.409972, 37.409990999999998], [22.774972000000002, 37.305010000000003], [23.154225, 36.422505999999998], [22.490027999999999, 36.409999999999997], [21.670026, 36.844985999999999], [21.295010999999999, 37.644989000000002], [21.120034, 38.310322999999997], [20.730032000000001, 38.769984999999998], [20.217711999999999, 39.340235], [20.150016000000001, 39.624997999999998], [20.614999999999998, 40.110007000000003], [20.674997000000001, 40.435000000000002], [20.99999, 40.580004000000002], [21.020040000000002, 40.842726999999996], [21.674161000000002, 40.931274999999999], [22.055378000000001, 41.149866000000003], [22.597308000000002, 41.130487000000002], [22.761769999999999, 41.3048], [22.952376999999998, 41.337994000000002], [23.692074000000002, 41.309080999999999], [24.492645, 41.583896000000003], [25.197201, 41.234485999999997], [26.106138000000001, 41.328899], [26.117042000000001, 41.826904999999996], [26.604196000000002, 41.562114999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0440\u0435\u0446\u0438\u044f", "fr": "Gr\u00e8ce", "en": "Greece", "nl": "Griekenland", "pt": "Gr\u00e9cia", "no": "Hellas", "de": "Griechenland", "it": "Grecia", "sv": "Grekland", "pl": "Grecja", "fi": "Kreikka", "zh": "\u5e0c\u814a", "ja": "\u30ae\u30ea\u30b7\u30e3", "es": "Grecia"}, "label_fr": "Gr\u00e8ce", "name": "Greece", "dbpedia_uri": "http://dbpedia.org/resource/Greece"}, "id": "GRC"}, {"geometry": {"type": "Polygon", "coordinates": [[[-46.76379, 82.627960000000002], [-43.406440000000003, 83.225160000000002], [-39.897530000000003, 83.180179999999993], [-38.622140000000002, 83.549049999999994], [-35.087870000000002, 83.645129999999995], [-27.100460000000002, 83.519660000000002], [-20.845389999999998, 82.726690000000005], [-22.69182, 82.341650000000001], [-26.517530000000001, 82.297650000000004], [-31.899999999999999, 82.200000000000003], [-31.396460000000001, 82.021540000000002], [-27.856660000000002, 82.131780000000006], [-24.844480000000001, 81.786969999999997], [-22.903279999999999, 82.093170000000001], [-22.071750000000002, 81.734489999999994], [-23.169609999999999, 81.152709999999999], [-20.623629999999999, 81.524619999999999], [-15.768179999999999, 81.912450000000007], [-12.77018, 81.718850000000003], [-12.208550000000001, 81.291539999999998], [-16.285329999999998, 80.580039999999997], [-16.850000000000001, 80.349999999999994], [-20.046240000000001, 80.177080000000004], [-17.730350000000001, 80.12912], [-18.899999999999999, 79.400000000000006], [-19.704989999999999, 78.751279999999994], [-19.67353, 77.638589999999994], [-18.472850000000001, 76.985650000000007], [-20.035029999999999, 76.944339999999997], [-21.67944, 76.627949999999998], [-19.834070000000001, 76.098079999999996], [-19.598960000000002, 75.248379999999997], [-20.66818, 75.155850000000001], [-19.372810000000001, 74.295609999999996], [-21.59422, 74.223820000000003], [-20.434539999999998, 73.817130000000006], [-20.762339999999998, 73.464359999999999], [-22.17221, 73.309550000000002], [-23.565930000000002, 73.306629999999998], [-22.313110000000002, 72.629279999999994], [-22.29954, 72.184089999999998], [-24.27834, 72.597880000000004], [-24.792960000000001, 72.330200000000005], [-23.442959999999999, 72.080160000000006], [-22.132809999999999, 71.468980000000002], [-21.75356, 70.663690000000003], [-23.53603, 70.471000000000004], [-24.307020000000001, 70.856489999999994], [-25.543410000000002, 71.430940000000007], [-25.201350000000001, 70.752260000000007], [-26.362760000000002, 70.226460000000003], [-23.727419999999999, 70.184010000000001], [-22.349019999999999, 70.129459999999995], [-25.02927, 69.258799999999994], [-27.74737, 68.470460000000003], [-30.67371, 68.125029999999995], [-31.77665, 68.120779999999996], [-32.811050000000002, 67.735470000000007], [-34.20196, 66.679739999999995], [-36.35284, 65.978899999999996], [-37.043779999999998, 65.93768], [-38.375050000000002, 65.692130000000006], [-39.812220000000003, 65.458479999999994], [-40.668990000000001, 64.839969999999994], [-40.682810000000003, 64.139020000000002], [-41.188699999999997, 63.482460000000003], [-42.819380000000002, 62.68233], [-42.41666, 61.900930000000002], [-42.866190000000003, 61.074039999999997], [-43.378399999999999, 60.097720000000002], [-44.787500000000001, 60.036760000000001], [-46.263640000000002, 60.853279999999998], [-48.26294, 60.858429999999998], [-49.233080000000001, 61.40681], [-49.900390000000002, 62.383360000000003], [-51.633249999999997, 63.626910000000002], [-52.140140000000002, 64.278419999999997], [-52.276589999999999, 65.176699999999997], [-53.661659999999998, 66.09957], [-53.301609999999997, 66.836500000000001], [-53.969110000000001, 67.188990000000004], [-52.980400000000003, 68.357590000000002], [-51.475360000000002, 68.729579999999999], [-51.080410000000001, 69.147810000000007], [-50.871220000000001, 69.929100000000005], [-52.013584999999999, 69.574924999999993], [-52.557920000000003, 69.426159999999996], [-53.456290000000003, 69.283625000000001], [-54.68336, 69.610029999999995], [-54.750010000000003, 70.289320000000004], [-54.358840000000001, 70.821314999999998], [-53.431314999999998, 70.835755000000006], [-51.390140000000002, 70.569779999999994], [-53.109369999999998, 71.204849999999993], [-54.004219999999997, 71.547190000000001], [-55, 71.406537], [-55.834679999999999, 71.654439999999994], [-54.71819, 72.586250000000007], [-55.326340000000002, 72.958609999999993], [-56.12003, 73.649770000000004], [-57.323630000000001, 74.710260000000005], [-58.596789999999999, 75.098609999999994], [-58.585160000000002, 75.517269999999996], [-61.268610000000002, 76.102379999999997], [-63.391649999999998, 76.175200000000004], [-66.064269999999993, 76.134860000000003], [-68.504379999999998, 76.061409999999995], [-69.664850000000001, 76.379750000000001], [-71.402569999999997, 77.008570000000006], [-68.776709999999994, 77.323120000000003], [-66.76397, 77.375950000000003], [-71.042929999999998, 77.635949999999994], [-73.296999999999997, 78.04419], [-73.159379999999999, 78.43271], [-69.373450000000005, 78.913880000000006], [-65.710700000000003, 79.394360000000006], [-65.323899999999995, 79.758139999999997], [-68.022980000000004, 80.11721], [-67.151290000000003, 80.515820000000005], [-63.689250000000001, 81.21396], [-62.234439999999999, 81.321100000000001], [-62.651159999999997, 81.770420000000001], [-60.282490000000003, 82.033630000000002], [-57.207439999999998, 82.190740000000005], [-54.134419999999999, 82.199619999999996], [-53.043280000000003, 81.888329999999996], [-50.390610000000002, 82.438829999999996], [-48.003860000000003, 82.064809999999994], [-46.59984, 81.985945000000001], [-44.523000000000003, 81.660700000000006], [-46.900700000000001, 82.199789999999993], [-46.76379, 82.627960000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Groenland", "en": "Greenland", "nl": "Groenland", "pt": "Gronel\u00e2ndia", "no": "Gr\u00f8nland", "de": "Gr\u00f6nland", "it": "Groenlandia", "sv": "Gr\u00f6nland", "pl": "Grenlandia", "fi": "Gr\u00f6nlanti", "zh": "\u683c\u9675\u5170", "ja": "\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9", "es": "Groenlandia"}, "label_fr": "Groenland", "name": "Greenland", "dbpedia_uri": "http://dbpedia.org/resource/Greenland"}, "id": "GRL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-90.095555000000004, 13.735338], [-90.608624000000006, 13.909770999999999], [-91.232410000000002, 13.927832], [-91.689746999999997, 14.126218], [-92.22775, 14.538829], [-92.203230000000005, 14.830102999999999], [-92.087215999999998, 15.064584999999999], [-92.229248999999996, 15.251447000000001], [-91.747960000000006, 16.066565000000001], [-90.464472999999998, 16.069562000000001], [-90.438867000000002, 16.41011], [-90.600847000000002, 16.470777999999999], [-90.711821999999998, 16.687483], [-91.081670000000003, 16.918476999999999], [-91.453920999999994, 17.252177], [-91.002268999999998, 17.254657999999999], [-91.001519999999999, 17.817595000000001], [-90.067933999999994, 17.819326], [-89.143079999999998, 17.808319000000001], [-89.150806000000003, 17.015577], [-89.229122000000004, 15.886938000000001], [-88.930612999999994, 15.887273], [-88.604585999999998, 15.706379999999999], [-88.518364000000005, 15.855389000000001], [-88.225022999999993, 15.727722], [-88.680679999999995, 15.346247], [-89.154810999999995, 15.066419], [-89.225219999999993, 14.874286], [-89.145534999999995, 14.678019000000001], [-89.353325999999996, 14.424132999999999], [-89.587343000000004, 14.362586], [-89.534218999999993, 14.244816], [-89.721934000000005, 14.134228], [-90.064678000000001, 13.881970000000001], [-90.095555000000004, 13.735338]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430", "fr": "Guatemala", "en": "Guatemala", "nl": "Guatemala", "pt": "Guatemala", "no": "Guatemala", "de": "Guatemala", "it": "Guatemala", "sv": "Guatemala", "pl": "Gwatemala", "fi": "Guatemala", "zh": "\u5371\u5730\u9a6c\u62c9", "ja": "\u30b0\u30a2\u30c6\u30de\u30e9", "es": "Guatemala"}, "label_fr": "Guatemala", "name": "Guatemala", "dbpedia_uri": "http://dbpedia.org/resource/Guatemala"}, "id": "GTM"}, {"geometry": {"type": "Polygon", "coordinates": [[[-59.758285000000001, 8.3670349999999996], [-59.101683999999999, 7.9992020000000004], [-58.482962000000001, 7.3476910000000002], [-58.454875999999999, 6.8327869999999997], [-58.078102999999999, 6.809094], [-57.542219000000003, 6.3212679999999999], [-57.147435999999999, 5.9731500000000004], [-57.307245999999999, 5.0735669999999997], [-57.914288999999997, 4.8126259999999998], [-57.860210000000002, 4.5768009999999997], [-58.044694, 4.0608639999999996], [-57.601568999999998, 3.3346550000000001], [-57.281433, 3.3334920000000001], [-57.150098, 2.7689270000000001], [-56.539386, 1.8995230000000001], [-56.782704000000003, 1.8637109999999999], [-57.335822999999998, 1.9485380000000001], [-57.660971000000004, 1.682585], [-58.11345, 1.5071950000000001], [-58.429476999999999, 1.4639420000000001], [-58.540013000000002, 1.2680880000000001], [-59.030861999999999, 1.317698], [-59.646044000000003, 1.786894], [-59.718546000000003, 2.2496299999999998], [-59.974525, 2.755233], [-59.815412999999999, 3.6064989999999999], [-59.538040000000002, 3.9588030000000001], [-59.767406000000001, 4.4235030000000002], [-60.111001999999999, 4.574967], [-59.980958999999999, 5.0140609999999999], [-60.213683000000003, 5.2444860000000002], [-60.733573999999997, 5.2002769999999998], [-61.410302999999999, 5.9590680000000003], [-61.139415, 6.2342969999999998], [-61.159336000000003, 6.6960769999999998], [-60.543998999999999, 6.8565839999999998], [-60.295667999999999, 7.0439109999999996], [-60.637973000000002, 7.415], [-60.550587999999998, 7.7796029999999998], [-59.758285000000001, 8.3670349999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u0439\u0430\u043d\u0430", "fr": "Guyana", "en": "Guyana", "nl": "Guyana", "pt": "Guiana", "no": "Guyana", "de": "Guyana", "it": "Guyana", "sv": "Guyana", "pl": "Gujana", "fi": "Guyana", "zh": "\u572d\u4e9a\u90a3", "ja": "\u30ac\u30a4\u30a2\u30ca", "es": "Guyana"}, "label_fr": "Guyana", "name": "Guyana", "dbpedia_uri": "http://dbpedia.org/resource/Guyana"}, "id": "GUY"}, {"geometry": {"type": "Polygon", "coordinates": [[[-87.316654, 12.984686], [-87.489408999999995, 13.297535], [-87.793110999999996, 13.38448], [-87.723502999999994, 13.78505], [-87.859515000000002, 13.893312], [-88.065342999999999, 13.964626000000001], [-88.503997999999996, 13.845485999999999], [-88.541230999999996, 13.980155], [-88.843073000000004, 14.140506999999999], [-89.058511999999993, 14.340028999999999], [-89.353325999999996, 14.424132999999999], [-89.145534999999995, 14.678019000000001], [-89.225219999999993, 14.874286], [-89.154810999999995, 15.066419], [-88.680679999999995, 15.346247], [-88.225022999999993, 15.727722], [-88.121153000000007, 15.688655000000001], [-87.901813000000004, 15.864458000000001], [-87.615679999999998, 15.878799000000001], [-87.522920999999997, 15.797279], [-87.367761999999999, 15.84694], [-86.903191000000007, 15.756713], [-86.440945999999997, 15.782835], [-86.119234000000006, 15.893449], [-86.001953999999998, 16.005406000000001], [-85.683317000000002, 15.953652], [-85.444004000000007, 15.885749000000001], [-85.182444000000004, 15.909158], [-84.983722, 15.995922999999999], [-84.526979999999995, 15.857224], [-84.368256000000002, 15.835158], [-84.063055000000006, 15.648244], [-83.773977000000002, 15.424072000000001], [-83.410381000000001, 15.270903000000001], [-83.147219000000007, 14.995829000000001], [-83.489988999999994, 15.016266999999999], [-83.628585000000001, 14.880074], [-83.975720999999993, 14.749435999999999], [-84.228341999999998, 14.748764], [-84.449336000000002, 14.621613999999999], [-84.649581999999995, 14.666805], [-84.820036999999999, 14.819587], [-84.924501000000006, 14.790493], [-85.052786999999995, 14.551541], [-85.148751000000004, 14.560197000000001], [-85.165364999999994, 14.354369999999999], [-85.514413000000005, 14.079012000000001], [-85.698665000000005, 13.960077999999999], [-85.801294999999996, 13.836055], [-86.096264000000005, 14.038187000000001], [-86.312141999999994, 13.771356000000001], [-86.520707999999999, 13.778487], [-86.755087000000003, 13.754845], [-86.733822000000004, 13.263093], [-86.880556999999996, 13.254204], [-87.005769000000001, 13.025793999999999], [-87.316654, 12.984686]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441", "fr": "Honduras", "en": "Honduras", "nl": "Honduras", "pt": "Honduras", "no": "Honduras", "de": "Honduras", "it": "Honduras", "sv": "Honduras", "pl": "Honduras", "fi": "Honduras", "zh": "\u6d2a\u90fd\u62c9\u65af", "ja": "\u30db\u30f3\u30b8\u30e5\u30e9\u30b9", "es": "Honduras"}, "label_fr": "Honduras", "name": "Honduras", "dbpedia_uri": "http://dbpedia.org/resource/Honduras"}, "id": "HND"}, {"geometry": {"type": "Polygon", "coordinates": [[[18.829837999999999, 45.908878000000001], [19.072769000000001, 45.521510999999997], [19.390476, 45.236516000000002], [19.005486000000001, 44.860233999999998], [18.553214000000001, 45.081589999999998], [17.861782999999999, 45.067740000000001], [17.002146, 45.233777000000003], [16.534939000000001, 45.211607999999998], [16.318156999999999, 45.004126999999997], [15.959367, 45.233777000000003], [15.750026, 44.818711999999998], [16.239660000000001, 44.351143], [16.456443, 44.041240000000002], [16.916156000000001, 43.667721999999998], [17.297373, 43.446340999999997], [17.674921999999999, 43.028562999999998], [18.559999999999999, 42.649999999999999], [18.450016000000002, 42.479990999999998], [17.509969999999999, 42.849995], [16.930005999999999, 43.209997999999999], [16.015384999999998, 43.507215000000002], [15.174454000000001, 44.243191000000003], [15.376250000000001, 44.317914999999999], [14.920309, 44.738484], [14.901602, 45.076059999999998], [14.258748000000001, 45.233777000000003], [13.952254999999999, 44.802123999999999], [13.656976, 45.136935000000001], [13.679403000000001, 45.484149000000002], [13.715059999999999, 45.500323999999999], [14.411968, 45.466166000000001], [14.595109000000001, 45.634940999999998], [14.935244000000001, 45.471694999999997], [15.327674999999999, 45.452316000000003], [15.323954000000001, 45.731783], [15.671530000000001, 45.834153999999998], [15.768732999999999, 46.238107999999997], [16.564807999999999, 46.503751000000001], [16.882515000000001, 46.380631999999999], [17.630065999999999, 45.951768999999999], [18.456061999999999, 45.759481000000001], [18.829837999999999, 45.908878000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0425\u043e\u0440\u0432\u0430\u0442\u0438\u044f", "fr": "Croatie", "en": "Croatia", "nl": "Kroati\u00eb", "pt": "Cro\u00e1cia", "no": "Kroatia", "de": "Kroatien", "it": "Croazia", "sv": "Kroatien", "pl": "Chorwacja", "fi": "Kroatia", "zh": "\u514b\u7f57\u5730\u4e9a", "ja": "\u30af\u30ed\u30a2\u30c1\u30a2", "es": "Croacia"}, "label_fr": "Croatie", "name": "Croatia", "dbpedia_uri": "http://dbpedia.org/resource/Croatia"}, "id": "HRV"}, {"geometry": {"type": "Polygon", "coordinates": [[[-73.189791, 19.915683999999999], [-72.579673, 19.871500999999999], [-71.712361000000001, 19.714455999999998], [-71.624872999999994, 19.169837999999999], [-71.701302999999996, 18.785416999999999], [-71.945111999999995, 18.616900000000001], [-71.687737999999996, 18.316659999999999], [-71.708304999999996, 18.044996999999999], [-72.372476000000006, 18.214960999999999], [-72.844410999999994, 18.145610999999999], [-73.454554999999999, 18.217905999999999], [-73.922432999999998, 18.030992999999999], [-74.458033999999998, 18.342549999999999], [-74.369924999999995, 18.664908], [-73.449541999999994, 18.526053000000001], [-72.694936999999996, 18.445799000000001], [-72.334881999999993, 18.668422], [-72.791650000000004, 19.101624999999999], [-72.784104999999997, 19.483591000000001], [-73.415021999999993, 19.639551000000001], [-73.189791, 19.915683999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0413\u0430\u0438\u0442\u0438", "fr": "Ha\u00efti", "en": "Haiti", "nl": "Ha\u00efti", "pt": "Haiti", "no": "Haiti", "de": "Haiti", "it": "Haiti", "sv": "Haiti", "pl": "Haiti", "fi": "Haiti", "zh": "\u6d77\u5730", "ja": "\u30cf\u30a4\u30c1", "es": "Hait\u00ed"}, "label_fr": "Ha\u00efti", "name": "Haiti", "dbpedia_uri": "http://dbpedia.org/resource/Haiti"}, "id": "HTI"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.202297999999999, 46.852386000000003], [16.534268000000001, 47.496170999999997], [16.340584, 47.712902], [16.903753999999999, 47.714866000000001], [16.979666999999999, 48.123497], [17.488472999999999, 47.867466], [17.857133000000001, 47.758429], [18.696512999999999, 47.880954000000003], [18.777024999999998, 48.081767999999997], [19.174365000000002, 48.111378999999999], [19.661363999999999, 48.266615000000002], [19.769470999999999, 48.202691000000002], [20.239053999999999, 48.327567000000002], [20.473562000000001, 48.562849999999997], [20.801293999999999, 48.623854000000001], [21.872236000000001, 48.319971000000002], [22.085608000000001, 48.422263999999998], [22.640820000000001, 48.150239999999997], [22.710531, 47.882193999999998], [22.099768000000001, 47.672438999999997], [21.626515000000001, 46.994238000000003], [21.021951999999999, 46.316088000000001], [20.220192000000001, 46.127468999999998], [19.596045, 46.171729999999997], [18.829837999999999, 45.908878000000001], [18.456061999999999, 45.759481000000001], [17.630065999999999, 45.951768999999999], [16.882515000000001, 46.380631999999999], [16.564807999999999, 46.503751000000001], [16.370505000000001, 46.841327], [16.202297999999999, 46.852386000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043d\u0433\u0440\u0438\u044f", "fr": "Hongrie", "en": "Hungary", "nl": "Hongarije", "pt": "Hungria", "no": "Ungarn", "de": "Ungarn", "it": "Ungheria", "sv": "Ungern", "pl": "W\u0119gry", "fi": "Unkari", "zh": "\u5308\u7259\u5229", "ja": "\u30cf\u30f3\u30ac\u30ea\u30fc", "es": "Hungr\u00eda"}, "label_fr": "Hongrie", "name": "Hungary", "dbpedia_uri": "http://dbpedia.org/resource/Hungary"}, "id": "HUN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[120.715609, -10.239580999999999], [120.29501399999999, -10.258649999999999], [118.96780800000001, -9.5579689999999999], [119.90031, -9.3613400000000002], [120.42575600000001, -9.6659210000000009], [120.775502, -9.9696750000000005], [120.715609, -10.239580999999999]]], [[[124.43595000000001, -10.140001], [123.579982, -10.359987], [123.45998899999999, -10.239995], [123.550009, -9.9000160000000008], [123.980009, -9.2900270000000003], [124.968682, -8.8927899999999998], [125.07002, -9.0899870000000007], [125.08852, -9.3931730000000009], [124.43595000000001, -10.140001]]], [[[117.900018, -8.0956810000000008], [118.260616, -8.3623829999999995], [118.87846, -8.2806829999999998], [119.126507, -8.7058250000000008], [117.97040200000001, -8.9066390000000002], [117.277731, -9.0408950000000008], [116.74014099999999, -9.0329370000000004], [117.083737, -8.4571579999999997], [117.632024, -8.4493030000000005], [117.900018, -8.0956810000000008]]], [[[122.903537, -8.0942340000000002], [122.75698300000001, -8.6498080000000002], [121.254491, -8.9336660000000006], [119.924391, -8.8104180000000003], [119.920929, -8.4448589999999992], [120.715092, -8.2369649999999996], [121.341669, -8.53674], [122.00736499999999, -8.4606200000000005], [122.903537, -8.0942340000000002]]], [[[108.623479, -6.7776740000000002], [110.539227, -6.8773580000000001], [110.759576, -6.4651860000000001], [112.614811, -6.9460360000000003], [112.978768, -7.5942129999999999], [114.47893500000001, -7.7765279999999999], [115.705527, -8.3708069999999992], [114.564511, -8.7518170000000008], [113.46473400000001, -8.3489470000000008], [112.55967200000001, -8.3761810000000008], [111.52206099999999, -8.3021290000000008], [110.58615, -8.1226050000000001], [109.427667, -7.7406639999999998], [108.69365500000001, -7.6416000000000004], [108.27776299999999, -7.7666570000000004], [106.45410200000001, -7.3548999999999998], [106.280624, -6.9249000000000001], [105.365486, -6.8514160000000004], [106.05164600000001, -5.8959190000000001], [107.26500900000001, -5.9549849999999998], [108.072091, -6.3457619999999997], [108.486846, -6.4219850000000003], [108.623479, -6.7776740000000002]]], [[[134.72462400000001, -6.2144009999999996], [134.21013400000001, -6.895238], [134.112776, -6.1424669999999999], [134.290336, -5.7830579999999996], [134.49962500000001, -5.4450419999999999], [134.727002, -5.7375819999999997], [134.72462400000001, -6.2144009999999996]]], [[[127.24921500000001, -3.4590649999999998], [126.874923, -3.7909830000000002], [126.183802, -3.6073759999999999], [125.989034, -3.177273], [127.000651, -3.129318], [127.24921500000001, -3.4590649999999998]]], [[[130.47134399999999, -3.0937640000000002], [130.834836, -3.8584719999999999], [129.99054699999999, -3.4463010000000001], [129.155249, -3.3626369999999999], [128.59068400000001, -3.4286789999999998], [127.89889100000001, -3.3934359999999999], [128.13587899999999, -2.8436499999999998], [129.37099799999999, -2.8021539999999998], [130.47134399999999, -3.0937640000000002]]], [[[134.14336800000001, -1.151867], [134.42262700000001, -2.7691849999999998], [135.45760300000001, -3.367753], [136.29331400000001, -2.307042], [137.44073800000001, -1.7035130000000001], [138.32972699999999, -1.7026859999999999], [139.184921, -2.0512959999999998], [139.92668399999999, -2.409052], [141.00021000000001, -2.6001509999999999], [141.01705699999999, -5.8590220000000004], [141.033852, -9.1178930000000005], [140.143415, -8.2971679999999992], [139.12776700000001, -8.0960429999999999], [138.88147699999999, -8.3809349999999991], [137.614474, -8.411683], [138.03909899999999, -7.5978820000000002], [138.668621, -7.3202249999999998], [138.40791400000001, -6.2328489999999999], [137.92784, -5.3933660000000003], [135.98925, -4.5465439999999999], [135.16459800000001, -4.4629310000000002], [133.66288, -3.538853], [133.367705, -4.0248189999999999], [132.98395600000001, -4.1129790000000002], [132.75694100000001, -3.746283], [132.75378900000001, -3.3117869999999998], [131.98980399999999, -2.820551], [133.066845, -2.4604180000000002], [133.78003100000001, -2.4798480000000001], [133.696212, -2.2145419999999998], [132.232373, -2.212526], [131.83622199999999, -1.617162], [130.94283999999999, -1.4325220000000001], [130.51955799999999, -0.93772], [131.867538, -0.695461], [132.38011599999999, -0.36953799999999998], [133.98554799999999, -0.78020999999999996], [134.14336800000001, -1.151867]]], [[[125.24050099999999, 1.4198360000000001], [124.43703499999999, 0.42788100000000001], [123.68550500000001, 0.235593], [122.723083, 0.43113699999999999], [121.056725, 0.38121699999999997], [120.183083, 0.23724700000000001], [120.04087, -0.51965799999999995], [120.93590500000001, -1.408906], [121.475821, -0.95596199999999998], [123.340565, -0.61567300000000003], [123.258399, -1.0762130000000001], [122.822715, -0.93095099999999997], [122.38853, -1.516858], [121.508274, -1.9044829999999999], [122.454572, -3.1860580000000001], [122.271896, -3.5295000000000001], [123.170963, -4.6836929999999999], [123.162333, -5.3406039999999999], [122.62851499999999, -5.6345910000000003], [122.236394, -5.2829329999999999], [122.71956900000001, -4.4641719999999996], [121.73823400000001, -4.8513310000000001], [121.489463, -4.5745529999999999], [121.61917099999999, -4.1884779999999999], [120.89818200000001, -3.6021049999999999], [120.97238900000001, -2.627643], [120.305453, -2.9316040000000001], [120.390047, -4.0975789999999996], [120.430717, -5.5282410000000004], [119.796543, -5.6734], [119.366906, -5.3798779999999997], [119.653606, -4.4594170000000002], [119.498835, -3.4944120000000001], [119.078344, -3.4870220000000001], [118.767769, -2.8019989999999999], [119.18097400000001, -2.1471040000000001], [119.32339399999999, -1.3531470000000001], [119.825999, 0.154254], [120.035702, 0.56647700000000001], [120.885779, 1.309223], [121.66681699999999, 1.013944], [122.927567, 0.87519199999999997], [124.077522, 0.91710199999999997], [125.065989, 1.643259], [125.24050099999999, 1.4198360000000001]]], [[[128.68824900000001, 1.1323859999999999], [128.635952, 0.25848599999999999], [128.12017, 0.35641299999999998], [127.968034, -0.252077], [128.379999, -0.78000400000000003], [128.10001600000001, -0.89999600000000002], [127.69647500000001, -0.266598], [127.39949, 1.011722], [127.60051199999999, 1.8106910000000001], [127.932378, 2.1745960000000002], [128.00415599999999, 1.628531], [128.594559, 1.5408109999999999], [128.68824900000001, 1.1323859999999999]]], [[[117.87562699999999, 1.8276410000000001], [118.996747, 0.90221899999999999], [117.811858, 0.78424199999999999], [117.47833900000001, 0.102475], [117.52164399999999, -0.80372299999999997], [116.56004799999999, -1.4876609999999999], [116.53379700000001, -2.483517], [116.148084, -4.0127259999999998], [116.00085799999999, -3.6570369999999999], [114.86480299999999, -4.1069839999999997], [114.46865200000001, -3.4957039999999999], [113.755672, -3.4391699999999998], [113.25699400000001, -3.118776], [112.06812600000001, -3.4783919999999999], [111.70329099999999, -2.9944419999999998], [111.04824000000001, -3.049426], [110.22384599999999, -2.9340320000000002], [110.070936, -1.5928739999999999], [109.57194800000001, -1.314907], [109.091874, -0.459507], [108.952658, 0.41537499999999999], [109.069136, 1.341934], [109.66325999999999, 2.0064669999999998], [109.83022699999999, 1.338136], [110.514061, 0.77313100000000001], [111.159138, 0.97647799999999996], [111.79754800000001, 0.90444100000000005], [112.380252, 1.410121], [112.859809, 1.49779], [113.80585000000001, 1.217549], [114.62135499999999, 1.430688], [115.13403700000001, 2.821482], [115.51907799999999, 3.169238], [115.865517, 4.306559], [117.015214, 4.3060939999999999], [117.882035, 4.1375510000000002], [117.313232, 3.2344279999999999], [118.04833000000001, 2.28769], [117.87562699999999, 1.8276410000000001]]], [[[105.817655, -5.8523560000000003], [104.710384, -5.8732850000000001], [103.868213, -5.0373150000000004], [102.584261, -4.2202590000000004], [102.156173, -3.6141459999999999], [101.399113, -2.7997770000000002], [100.902503, -2.050262], [100.141981, -0.65034800000000004], [99.263739999999999, 0.183142], [98.970011, 1.0428820000000001], [98.601350999999994, 1.823507], [97.699597999999995, 2.4531839999999998], [97.176941999999997, 3.3087909999999998], [96.424017000000006, 3.8688600000000002], [95.380876000000001, 4.9707819999999998], [95.293025999999998, 5.4798210000000003], [95.936863000000002, 5.4395129999999998], [97.484881999999999, 5.246321], [98.369168999999999, 4.26837], [99.142559000000006, 3.5903499999999999], [99.693997999999993, 3.1743290000000002], [100.641434, 2.0993810000000002], [101.658012, 2.0836969999999999], [102.498271, 1.3987000000000001], [103.07684, 0.561361], [103.838396, 0.104542], [103.437645, -0.71194599999999997], [104.010789, -1.059212], [104.369991, -1.084843], [104.53949, -1.7823720000000001], [104.88789300000001, -2.3404250000000002], [105.622111, -2.4288439999999998], [106.108593, -3.0617770000000002], [105.857446, -4.3055250000000003], [105.817655, -5.8523560000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u044f", "fr": "Indon\u00e9sie", "en": "Indonesia", "nl": "Indonesi\u00eb", "pt": "Indon\u00e9sia", "no": "Indonesia", "de": "Indonesien", "it": "Indonesia", "sv": "Indonesien", "pl": "Indonezja", "fi": "Indonesia", "zh": "\u5370\u5ea6\u5c3c\u897f\u4e9a", "ja": "\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2", "es": "Indonesia"}, "label_fr": "Indon\u00e9sie", "name": "Indonesia", "dbpedia_uri": "http://dbpedia.org/resource/Indonesia"}, "id": "IDN"}, {"geometry": {"type": "Polygon", "coordinates": [[[77.837451000000001, 35.494010000000003], [78.912268999999995, 34.321936000000001], [78.811086000000003, 33.506197999999998], [79.208892000000006, 32.994394999999997], [79.176129000000003, 32.483780000000003], [78.458445999999995, 32.618164], [78.738894000000002, 31.515906000000001], [79.721367000000001, 30.882715000000001], [81.111255999999997, 30.183481], [80.476720999999998, 29.729865], [80.088425000000001, 28.79447], [81.057203000000001, 28.416094999999999], [81.999987000000004, 27.925478999999999], [83.304248999999999, 27.364505999999999], [84.675017999999994, 27.234901000000001], [85.251778999999999, 26.726198], [86.024393000000003, 26.630984999999999], [87.227472000000006, 26.397898000000001], [88.060237999999998, 26.414615000000001], [88.174803999999995, 26.810404999999999], [88.043132999999997, 27.445819], [88.120441, 27.876542000000001], [88.730326000000005, 28.086865], [88.814248000000006, 27.299316000000001], [88.835643000000005, 27.098966000000001], [89.744528000000003, 26.719403], [90.373275000000007, 26.875724000000002], [91.217512999999997, 26.808648000000002], [92.033484000000001, 26.83831], [92.103712000000002, 27.452614000000001], [91.696657000000002, 27.771742], [92.503118999999998, 27.896875999999999], [93.413347999999999, 28.640629000000001], [94.565989999999999, 29.277438], [95.404802000000004, 29.031717], [96.117678999999995, 29.452801999999998], [96.586590999999999, 28.83098], [96.248833000000005, 28.411031000000001], [97.327113999999995, 28.261583000000002], [97.402561000000006, 27.882536000000002], [97.051989000000006, 27.699058999999998], [97.133999000000003, 27.083773999999998], [96.419365999999997, 27.264589000000001], [95.124768000000003, 26.573571999999999], [95.155152999999999, 26.001307000000001], [94.603249000000005, 25.162495], [94.552657999999994, 24.675238], [94.106741999999997, 23.850740999999999], [93.325187999999997, 24.078555999999999], [93.286327, 23.043658000000001], [93.060293999999999, 22.703111], [93.166128, 22.278459999999999], [92.672720999999996, 22.041239000000001], [92.146034999999998, 23.627499], [91.869928000000002, 23.624345999999999], [91.706474999999998, 22.985264000000001], [91.158963, 23.503526999999998], [91.467730000000003, 24.072638999999999], [91.915092999999999, 24.130413999999998], [92.376202000000006, 24.976693000000001], [91.799595999999994, 25.147431999999998], [90.872210999999993, 25.132601000000001], [89.920693, 25.269749999999998], [89.832481000000001, 25.965081999999999], [89.355093999999994, 26.014406999999999], [88.563049000000007, 26.446525999999999], [88.209789000000001, 25.768066000000001], [88.931554000000006, 25.238692], [88.306372999999994, 24.866078999999999], [88.084422000000004, 24.501657000000002], [88.699939999999998, 24.233715], [88.529769999999999, 23.631142000000001], [88.876311999999999, 22.879145999999999], [89.031960999999995, 22.055707999999999], [88.888766000000004, 21.690588000000002], [88.208496999999994, 21.703171999999999], [86.975703999999993, 21.495562], [87.033169000000001, 20.743307999999999], [86.499351000000004, 20.151637999999998], [85.060265999999999, 19.478579], [83.941006000000002, 18.302009999999999], [83.189216999999999, 17.671220999999999], [82.192791999999997, 17.016635999999998], [82.191242000000003, 16.556664000000001], [81.692718999999997, 16.310219], [80.791999000000004, 15.951972], [80.324895999999995, 15.899184999999999], [80.025069000000002, 15.136415], [80.233273999999994, 13.835770999999999], [80.286293999999998, 13.006261], [79.862547000000006, 12.056215], [79.857999000000007, 10.357275], [79.340512000000004, 10.308854], [78.885345000000001, 9.5461360000000006], [79.189719999999994, 9.2165440000000007], [78.277940999999998, 8.9330470000000002], [77.941164999999998, 8.2529590000000006], [77.539897999999994, 7.965535], [76.592979, 8.8992760000000004], [76.130060999999998, 10.299630000000001], [75.746466999999996, 11.308251], [75.396101000000002, 11.781245], [74.864816000000005, 12.741936000000001], [74.616716999999994, 13.992583], [74.443859000000003, 14.617222], [73.534199000000001, 15.990652000000001], [73.119909000000007, 17.928570000000001], [72.820909, 19.208234000000001], [72.824475000000007, 20.419502999999999], [72.630533, 21.356009], [71.175273000000004, 20.757441], [70.470459000000005, 20.877331000000002], [69.16413, 22.089297999999999], [69.644927999999993, 22.450775], [69.349597000000003, 22.84318], [68.176644999999994, 23.691965], [68.842599000000007, 24.359134000000001], [71.043239999999997, 24.356524], [70.844699000000006, 25.215102000000002], [70.282872999999995, 25.722228999999999], [70.168926999999996, 26.491872000000001], [69.514392999999998, 26.940966], [70.616495999999998, 27.989196], [71.777665999999996, 27.913180000000001], [72.823751999999999, 28.961592], [73.450637999999998, 29.976413000000001], [74.421379999999999, 30.979814999999999], [74.405929, 31.692639], [75.258641999999995, 32.271104999999999], [74.451559000000003, 32.764899999999997], [74.104293999999996, 33.441473000000002], [73.749948000000003, 34.317698999999998], [74.240202999999994, 34.748887000000003], [75.757060999999993, 34.504922999999998], [76.871722000000005, 34.653543999999997], [77.837451000000001, 35.494010000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043d\u0434\u0438\u044f", "fr": "Inde", "en": "India", "nl": "India", "pt": "\u00cdndia", "no": "India", "de": "Indien", "it": "India", "sv": "Indien", "pl": "Indie", "fi": "Intia", "zh": "\u5370\u5ea6", "ja": "\u30a4\u30f3\u30c9", "es": "India"}, "label_fr": "Inde", "name": "India", "dbpedia_uri": "http://dbpedia.org/resource/India"}, "id": "IND"}, {"geometry": {"type": "Polygon", "coordinates": [[[-6.1978850000000003, 53.867564999999999], [-6.032985, 53.153163999999997], [-6.7888570000000001, 52.260117999999999], [-8.561617, 51.669300999999997], [-9.9770859999999999, 51.820455000000003], [-9.166283, 52.864629000000001], [-9.6885250000000003, 53.881363], [-8.3279870000000003, 54.664518999999999], [-7.5721679999999996, 55.131622], [-7.3660310000000004, 54.595841], [-7.5721679999999996, 54.059956], [-6.9537300000000002, 54.073701999999997], [-6.1978850000000003, 53.867564999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u043b\u0430\u043d\u0434\u0438\u044f (\u043e\u0441\u0442\u0440\u043e\u0432)", "fr": "Irlande (\u00eele)", "en": "Ireland", "nl": "Ierland (eiland)", "pt": "Irlanda (ilha)", "no": "Irland (\u00f8y)", "de": "Irland (Insel)", "it": "Irlanda (isola)", "pl": "Irlandia (wyspa)", "fi": "Irlanti (saari)", "zh": "\u7231\u5c14\u5170\u5c9b", "ja": "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u5cf6", "es": "Irlanda (isla)"}, "label_fr": "Irlande (\u00eele)", "name": "Ireland", "dbpedia_uri": "http://dbpedia.org/resource/Ireland"}, "id": "IRL"}, {"geometry": {"type": "Polygon", "coordinates": [[[53.921598000000003, 37.198917999999999], [54.800303999999997, 37.392420999999999], [55.511578, 37.964117000000002], [56.180374999999998, 37.935127000000001], [56.619365999999999, 38.121394000000002], [57.330433999999997, 38.029229000000001], [58.436154000000002, 37.522309], [59.234762000000003, 37.412987999999999], [60.377637999999997, 36.527383], [61.123071000000003, 36.491596999999999], [61.210816999999999, 35.650072000000002], [60.803193, 34.404102000000002], [60.52843, 33.676445999999999], [60.963700000000003, 33.528832000000001], [60.536078000000003, 32.981268999999998], [60.863655000000001, 32.182920000000003], [60.941944999999997, 31.548075000000001], [61.699314000000001, 31.379505999999999], [61.781222, 30.735849999999999], [60.874248000000001, 29.829239000000001], [61.369309000000001, 29.303276], [61.771867999999998, 28.699334], [62.727829999999997, 28.259644999999999], [62.755426, 27.378923], [63.233898000000003, 27.217047000000001], [63.316631999999998, 26.756532], [61.874186999999999, 26.239975000000001], [61.497363, 25.078237000000001], [59.616134000000002, 25.380157000000001], [58.525761000000003, 25.609961999999999], [57.397250999999997, 25.739902000000001], [56.970765999999998, 26.966106], [56.492139000000002, 27.143305000000002], [55.723709999999997, 26.964632999999999], [54.715089999999996, 26.480657999999998], [53.493096999999999, 26.812369], [52.483598000000001, 27.580849000000001], [51.520763000000002, 27.865690000000001], [50.852947999999998, 28.814520999999999], [50.115009000000001, 30.147773000000001], [49.57685, 29.985714999999999], [48.941333, 30.31709], [48.567971, 29.926777999999999], [48.014567999999997, 30.452456999999999], [48.004697999999998, 30.985137000000002], [47.685285999999998, 30.984853000000001], [47.849204, 31.709175999999999], [47.334660999999997, 32.469155000000001], [46.109361999999997, 33.017287000000003], [45.416691, 33.967798000000002], [45.64846, 34.748137999999997], [46.151788000000003, 35.093259000000003], [46.076340000000002, 35.677382999999999], [45.420617999999997, 35.977545999999997], [44.772669999999998, 37.170450000000002], [44.225755999999997, 37.971584], [44.421402999999998, 38.281281], [44.109225000000002, 39.428136000000002], [44.793990000000001, 39.713003], [44.952688000000002, 39.335765000000002], [45.457721999999997, 38.874139], [46.143622999999998, 38.741200999999997], [46.505719999999997, 38.770605000000003], [47.685079000000002, 39.508364], [48.060094999999997, 39.582234999999997], [48.355528999999997, 39.288764999999998], [48.010744000000003, 38.794015000000002], [48.634374999999999, 38.270378000000001], [48.883248999999999, 38.320245], [49.199612000000002, 37.582873999999997], [50.147770999999999, 37.374566999999999], [50.842354, 36.872813999999998], [52.264024999999997, 36.700422000000003], [53.825789999999998, 36.965031000000003], [53.921598000000003, 37.198917999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u0430\u043d", "fr": "Iran", "en": "Iran", "nl": "Iran", "pt": "Ir\u00e3o", "no": "Iran", "de": "Iran", "it": "Iran", "sv": "Iran", "pl": "Iran", "fi": "Iran", "zh": "\u4f0a\u6717", "ja": "\u30a4\u30e9\u30f3", "es": "Ir\u00e1n"}, "label_fr": "Iran", "name": "Iran", "dbpedia_uri": "http://dbpedia.org/resource/Iran"}, "id": "IRN"}, {"geometry": {"type": "Polygon", "coordinates": [[[45.420617999999997, 35.977545999999997], [46.076340000000002, 35.677382999999999], [46.151788000000003, 35.093259000000003], [45.64846, 34.748137999999997], [45.416691, 33.967798000000002], [46.109361999999997, 33.017287000000003], [47.334660999999997, 32.469155000000001], [47.849204, 31.709175999999999], [47.685285999999998, 30.984853000000001], [48.004697999999998, 30.985137000000002], [48.014567999999997, 30.452456999999999], [48.567971, 29.926777999999999], [47.974519000000001, 29.975819000000001], [47.302622, 30.059069999999998], [46.568713000000002, 29.099025000000001], [44.709499000000001, 29.178891], [41.889980999999999, 31.190009], [40.399994, 31.889991999999999], [39.195467999999998, 32.161009], [38.792341, 33.378686000000002], [41.006158999999997, 34.419372000000003], [41.383965000000003, 35.628317000000003], [41.289707, 36.358815], [41.837063999999998, 36.605854000000001], [42.349590999999997, 37.229872999999998], [42.779125999999998, 37.385263999999999], [43.942259, 37.256228], [44.293452000000002, 37.001514], [44.772699000000003, 37.170445000000001], [45.420617999999997, 35.977545999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u0430\u043a", "fr": "Irak", "en": "Iraq", "nl": "Irak", "pt": "Iraque", "no": "Irak", "de": "Irak", "it": "Iraq", "sv": "Irak", "pl": "Irak", "fi": "Irak", "zh": "\u4f0a\u62c9\u514b", "ja": "\u30a4\u30e9\u30af", "es": "Irak"}, "label_fr": "Irak", "name": "Iraq", "dbpedia_uri": "http://dbpedia.org/resource/Iraq"}, "id": "IRQ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-14.508694999999999, 66.455892000000006], [-14.739637, 65.808747999999994], [-13.609731999999999, 65.126671000000002], [-14.909834, 64.364081999999996], [-17.794438, 63.678749000000003], [-18.656245999999999, 63.496383000000002], [-19.972754999999999, 63.643635000000003], [-22.762972000000001, 63.960178999999997], [-21.778483999999999, 64.402116000000007], [-23.955044000000001, 64.891130000000004], [-22.184403, 65.084968000000003], [-22.227423000000002, 65.378594000000007], [-24.326184000000001, 65.611188999999996], [-23.650514999999999, 66.262518999999998], [-22.134922, 66.410469000000006], [-20.576284000000001, 65.732112000000001], [-19.056842, 66.276600999999999], [-17.798624, 65.993853000000001], [-16.167819000000001, 66.526792], [-14.508694999999999, 66.455892000000006]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0441\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Islande", "en": "Iceland", "nl": "IJsland", "pt": "Isl\u00e2ndia", "no": "Island", "de": "Island", "it": "Islanda", "sv": "Island", "pl": "Islandia", "fi": "Islanti", "zh": "\u51b0\u5c9b", "ja": "\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9", "es": "Islandia"}, "label_fr": "Islande", "name": "Iceland", "dbpedia_uri": "http://dbpedia.org/resource/Iceland"}, "id": "ISL"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.719918, 32.709192000000002], [35.545665, 32.393991999999997], [35.183929999999997, 32.532511], [34.974640999999998, 31.866582000000001], [35.225892000000002, 31.754341], [34.970506999999998, 31.616778], [34.927408, 31.353435000000001], [35.397561000000003, 31.489086], [35.420918, 31.100066000000002], [34.922603000000002, 29.501325999999999], [34.265433000000002, 31.219360999999999], [34.556372000000003, 31.548824], [34.488106999999999, 31.605539], [34.752586999999998, 32.072926000000002], [34.955416999999997, 32.827376000000001], [35.098457000000003, 33.080539000000002], [35.126052999999999, 33.090899999999998], [35.460709000000001, 33.089039999999997], [35.552796999999998, 33.264274999999998], [35.821100999999999, 33.277425999999998], [35.836396999999998, 32.868122999999997], [35.700797999999999, 32.716014000000001], [35.719918, 32.709192000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0437\u0440\u0430\u0438\u043b\u044c", "fr": "Isra\u00ebl", "en": "Israel", "nl": "Isra\u00ebl", "pt": "Israel", "no": "Israel", "de": "Israel", "it": "Israele", "sv": "Israel", "pl": "Izrael", "fi": "Israel", "zh": "\u4ee5\u8272\u5217", "ja": "\u30a4\u30b9\u30e9\u30a8\u30eb", "es": "Israel"}, "label_fr": "Isra\u00ebl", "name": "Israel", "dbpedia_uri": "http://dbpedia.org/resource/Israel"}, "id": "ISR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[15.520376000000001, 38.231155000000001], [15.160242999999999, 37.444046], [15.309898, 37.134219000000002], [15.099988, 36.619987000000002], [14.335229, 36.996631000000001], [13.826733000000001, 37.104531000000001], [12.431004, 37.612949999999998], [12.570944000000001, 38.126381000000002], [13.741156, 38.034965999999997], [14.761248999999999, 38.143873999999997], [15.520376000000001, 38.231155000000001]]], [[[9.2100120000000008, 41.209991000000002], [9.8099749999999997, 40.500008999999999], [9.6695189999999993, 39.177376000000002], [9.2148179999999993, 39.240473000000001], [8.8069360000000003, 38.906618000000002], [8.4283020000000004, 39.171847], [8.3882530000000006, 40.378310999999997], [8.1599979999999999, 40.950006999999999], [8.7099910000000005, 40.899984000000003], [9.2100120000000008, 41.209991000000002]]], [[[12.376485000000001, 46.767558999999999], [13.806475000000001, 46.509306000000002], [13.69811, 46.016778000000002], [13.93763, 45.591016000000003], [13.141605999999999, 45.736691999999998], [12.328581, 45.381777999999997], [12.383875, 44.885373999999999], [12.261452999999999, 44.600482], [12.589237000000001, 44.091366000000001], [13.526906, 43.587727000000001], [14.029821, 42.761007999999997], [15.142569999999999, 41.95514], [15.926190999999999, 41.961314999999999], [16.169896999999999, 41.740295000000003], [15.889346, 41.541082000000003], [16.785001999999999, 41.179606], [17.519169000000002, 40.877142999999997], [18.376687, 40.355625000000003], [18.480246999999999, 40.168866000000001], [18.293385000000001, 39.810774000000002], [17.738379999999999, 40.277670999999998], [16.869596000000001, 40.442234999999997], [16.448743, 39.795400999999998], [17.171489999999999, 39.424700000000001], [17.052841000000001, 38.902870999999998], [16.635088, 38.843572000000002], [16.100961000000002, 37.985899000000003], [15.684087, 37.908848999999996], [15.687963, 38.214593000000001], [15.891980999999999, 38.750942000000002], [16.109331999999998, 38.964547000000003], [15.718814, 39.544072], [15.413613, 40.048357000000003], [14.998495999999999, 40.172949000000003], [14.703268, 40.604550000000003], [14.060672, 40.786347999999997], [13.627985000000001, 41.188287000000003], [12.888082000000001, 41.25309], [12.106683, 41.704535], [11.191905999999999, 42.355424999999997], [10.511948, 42.931463000000001], [10.200029000000001, 43.920006999999998], [9.7024880000000007, 44.036279], [8.8889460000000007, 44.366335999999997], [8.4285610000000002, 44.231228000000002], [7.8507670000000003, 43.767147999999999], [7.4351849999999997, 43.693845000000003], [7.5495960000000002, 44.127901000000001], [7.0075620000000001, 44.254767000000001], [6.7499549999999999, 45.028517999999998], [7.0966519999999997, 45.333098999999997], [6.8023550000000004, 45.708579999999998], [6.8435930000000003, 45.991146999999998], [7.2738509999999996, 45.776947999999997], [7.755992, 45.824489999999997], [8.31663, 46.163642000000003], [8.4899520000000006, 46.005150999999998], [8.9663059999999994, 46.036932], [9.1828819999999993, 46.440215000000002], [9.9228369999999995, 46.314898999999997], [10.363378000000001, 46.483570999999998], [10.442701, 46.893546000000001], [11.048556, 46.751359000000001], [11.164828, 46.941578999999997], [12.153088, 47.115392999999997], [12.376485000000001, 46.767558999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0442\u0430\u043b\u0438\u044f", "fr": "Italie", "en": "Italy", "nl": "Itali\u00eb", "pt": "It\u00e1lia", "no": "Italia", "de": "Italien", "it": "Italia", "sv": "Italien", "pl": "W\u0142ochy", "fi": "Italia", "zh": "\u610f\u5927\u5229", "ja": "\u30a4\u30bf\u30ea\u30a2", "es": "Italia"}, "label_fr": "Italie", "name": "Italy", "dbpedia_uri": "http://dbpedia.org/resource/Italy"}, "id": "ITA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-77.569601000000006, 18.490525000000002], [-76.896619000000001, 18.400867000000002], [-76.365358999999998, 18.160701], [-76.199658999999997, 17.886866999999999], [-76.902561000000006, 17.868238000000002], [-77.206340999999995, 17.701115999999999], [-77.766023000000004, 17.861597], [-78.337719000000007, 18.225968000000002], [-78.217726999999996, 18.454533000000001], [-77.797364999999999, 18.524218000000001], [-77.569601000000006, 18.490525000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042f\u043c\u0430\u0439\u043a\u0430", "fr": "Jama\u00efque", "en": "Jamaica", "nl": "Jamaica", "pt": "Jamaica", "no": "Jamaica", "de": "Jamaika", "it": "Giamaica", "sv": "Jamaica", "pl": "Jamajka", "fi": "Jamaika", "zh": "\u7259\u4e70\u52a0", "ja": "\u30b8\u30e3\u30de\u30a4\u30ab", "es": "Jamaica"}, "label_fr": "Jama\u00efque", "name": "Jamaica", "dbpedia_uri": "http://dbpedia.org/resource/Jamaica"}, "id": "JAM"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.545665, 32.393991999999997], [35.719918, 32.709192000000002], [36.834062000000003, 32.312938000000003], [38.792341, 33.378686000000002], [39.195467999999998, 32.161009], [39.004885999999999, 32.010216999999997], [37.002166000000003, 31.508413000000001], [37.998849, 30.508500000000002], [37.668120000000002, 30.338664999999999], [37.503582000000002, 30.003775999999998], [36.740527999999998, 29.865283000000002], [36.501213999999997, 29.505254000000001], [36.068941000000002, 29.197495], [34.956037000000002, 29.356555], [34.922603000000002, 29.501325999999999], [35.420918, 31.100066000000002], [35.397561000000003, 31.489086], [35.545251999999998, 31.782505], [35.545665, 32.393991999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043e\u0440\u0434\u0430\u043d\u0438\u044f", "fr": "Jordanie", "en": "Jordan", "nl": "Jordani\u00eb", "pt": "Jord\u00e2nia", "no": "Jordan", "de": "Jordanien", "it": "Giordania", "sv": "Jordanien", "pl": "Jordania", "fi": "Jordania", "zh": "\u7ea6\u65e6", "ja": "\u30e8\u30eb\u30c0\u30f3", "es": "Jordania"}, "label_fr": "Jordanie", "name": "Jordan", "dbpedia_uri": "http://dbpedia.org/resource/Jordan"}, "id": "JOR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[134.638428, 34.149234], [134.766379, 33.806334999999997], [134.203416, 33.201177999999999], [133.79294999999999, 33.521985000000001], [133.28026800000001, 33.289569999999998], [133.014858, 32.704566999999997], [132.36311499999999, 32.989381999999999], [132.37117599999999, 33.463642], [132.924373, 34.060299000000001], [133.49296799999999, 33.944620999999998], [133.90410600000001, 34.364930999999999], [134.638428, 34.149234]]], [[[140.97638799999999, 37.142074000000001], [140.59977000000001, 36.343983000000001], [140.77407400000001, 35.842877000000001], [140.25327899999999, 35.138114000000002], [138.975528, 34.6676], [137.21759900000001, 34.606285999999997], [135.79298299999999, 33.464804999999998], [135.120983, 33.849071000000002], [135.07943499999999, 34.596544999999999], [133.340316, 34.375937999999998], [132.15677099999999, 33.904933], [130.98614499999999, 33.885761000000002], [132.00003599999999, 33.149991999999997], [131.33278999999999, 31.450354999999998], [130.686318, 31.029578999999998], [130.20241999999999, 31.418237999999999], [130.447676, 32.319474999999997], [129.81469200000001, 32.610309999999998], [129.40846300000001, 33.296056], [130.35393500000001, 33.604151000000002], [130.87845100000001, 34.232742999999999], [131.884229, 34.749713999999997], [132.617673, 35.433393000000002], [134.60830100000001, 35.731617999999997], [135.677538, 35.527133999999997], [136.72383099999999, 37.304983999999997], [137.390612, 36.827390999999999], [138.85760200000001, 37.827485000000003], [139.42640499999999, 38.215961999999998], [140.05479, 39.438806999999997], [139.88337899999999, 40.563312000000003], [140.30578299999999, 41.195005000000002], [141.36897300000001, 41.37856], [141.91426300000001, 39.991616], [141.884601, 39.180864999999997], [140.95948899999999, 38.174000999999997], [140.97638799999999, 37.142074000000001]]], [[[143.91016200000001, 44.174100000000003], [144.613427, 43.960883000000003], [145.32082500000001, 44.384732999999997], [145.543137, 43.262087999999999], [144.059662, 42.988357999999998], [143.18385000000001, 41.995215000000002], [141.611491, 42.678790999999997], [141.067286, 41.584594000000003], [139.955106, 41.569555999999999], [139.817544, 42.563758999999997], [140.31208699999999, 43.333272999999998], [141.380549, 43.388824999999997], [141.671952, 44.772125000000003], [141.967645, 45.551482999999998], [143.14286999999999, 44.510357999999997], [143.91016200000001, 44.174100000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042f\u043f\u043e\u043d\u0438\u044f", "fr": "Japon", "en": "Japan", "nl": "Japan", "pt": "Jap\u00e3o", "no": "Japan", "de": "Japan", "it": "Giappone", "sv": "Japan", "pl": "Japonia", "fi": "Japani", "zh": "\u65e5\u672c", "ja": "\u65e5\u672c", "es": "Jap\u00f3n"}, "label_fr": "Japon", "name": "Japan", "dbpedia_uri": "http://dbpedia.org/resource/Japan"}, "id": "JPN"}, {"geometry": {"type": "Polygon", "coordinates": [[[70.962315000000004, 42.266154], [70.388964999999999, 42.081308], [69.070026999999996, 41.384244000000002], [68.632482999999993, 40.668680999999999], [68.259895999999998, 40.662325000000003], [67.985855999999998, 41.135990999999997], [66.714046999999994, 41.168444000000001], [66.510649000000001, 41.987644000000003], [66.023392000000001, 41.994646000000003], [66.098011999999997, 42.997660000000003], [64.900824, 43.728081000000003], [63.185786999999998, 43.650075000000001], [62.013300000000001, 43.504477000000001], [61.058320000000002, 44.405816999999999], [60.239972000000002, 44.784036999999998], [58.689988999999997, 45.500014], [58.503126999999999, 45.586804000000001], [55.928916999999998, 44.995857999999998], [55.968190999999997, 41.308641999999999], [55.455250999999997, 41.259858999999999], [54.755344999999998, 42.043970999999999], [54.079417999999997, 42.324109], [52.944293000000002, 42.116033999999999], [52.502459999999999, 41.783315999999999], [52.446339000000002, 42.027151000000003], [52.692112000000002, 42.443894999999998], [52.501426000000002, 42.792298000000002], [51.342427000000001, 43.132975000000002], [50.891292, 44.031033999999998], [50.339129, 44.284016000000001], [50.305643000000003, 44.609836000000001], [51.278503000000001, 44.514854], [51.316898999999999, 45.245998], [52.167389999999997, 45.408391000000002], [53.040875999999997, 45.259047000000002], [53.220866000000001, 46.234645999999998], [53.042737000000002, 46.853006000000001], [52.042023, 46.804637], [51.191944999999997, 47.048704999999998], [50.034083000000003, 46.608989999999999], [49.10116, 46.399329999999999], [48.593240999999999, 46.561033999999999], [48.694733999999997, 47.075628000000002], [48.057253000000003, 47.743752999999998], [47.315230999999997, 47.715846999999997], [46.466445999999998, 48.394151999999998], [47.043672000000001, 49.152039000000002], [46.751595999999999, 49.356006000000001], [47.549480000000003, 50.454698], [48.577840999999999, 49.874760000000002], [48.702382, 50.605128000000001], [50.766648000000004, 51.692762000000002], [52.328724000000001, 51.718651999999999], [54.532877999999997, 51.026240000000001], [55.716940999999998, 50.621716999999997], [56.777960999999998, 51.043551000000001], [58.363290999999997, 51.063653000000002], [59.642282000000002, 50.545442000000001], [59.932806999999997, 50.842193999999999], [61.337423999999999, 50.79907], [61.588003, 51.272658999999997], [59.967534000000001, 51.960419999999999], [60.927269000000003, 52.447547999999998], [60.739992999999998, 52.719985999999999], [61.699986000000003, 52.979996], [60.978065999999998, 53.664993000000003], [61.436591, 54.006264999999999], [65.178533999999999, 54.354227999999999], [65.666876000000002, 54.601267], [68.1691, 54.970391999999997], [69.068167000000003, 55.385249999999999], [70.865267000000003, 55.169733999999998], [71.180131000000003, 54.133285000000001], [72.224149999999995, 54.376655], [73.508516, 54.035617000000002], [73.425679000000002, 53.489809999999999], [74.384844999999999, 53.546861], [76.891099999999994, 54.490524000000001], [76.525178999999994, 54.177002999999999], [77.800916000000001, 53.404415], [80.035560000000004, 50.864750999999998], [80.568447000000006, 51.388336000000002], [81.945986000000005, 50.812196], [83.383004, 51.069183000000002], [83.935114999999996, 50.889246], [84.416376999999997, 50.311399999999999], [85.115560000000002, 50.117303], [85.541269999999997, 49.692858999999999], [86.829357000000002, 49.826675000000002], [87.359970000000004, 49.214981000000002], [86.598776000000001, 48.549182000000002], [85.768232999999995, 48.455750999999999], [85.720483999999999, 47.452969000000003], [85.164289999999994, 47.000956000000002], [83.180484000000007, 47.330030999999998], [82.458926000000005, 45.539650000000002], [81.947070999999994, 45.317027000000003], [79.966105999999996, 44.917516999999997], [80.866206000000005, 43.180362000000002], [80.180149999999998, 42.920068000000001], [80.259990000000002, 42.349998999999997], [79.643645000000006, 42.496682999999997], [79.142177000000004, 42.856091999999997], [77.658392000000006, 42.960686000000003], [76.000354000000002, 42.988022000000001], [75.636965000000004, 42.877899999999997], [74.212866000000005, 43.298338999999999], [73.645303999999996, 43.091271999999996], [73.489757999999995, 42.500894000000002], [71.844638000000003, 42.845395000000003], [71.186280999999994, 42.704293], [70.962315000000004, 42.266154]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "fr": "Kazakhstan", "en": "Kazakhstan", "nl": "Kazachstan", "pt": "Cazaquist\u00e3o", "no": "Kasakhstan", "de": "Kasachstan", "it": "Kazakistan", "sv": "Kazakstan", "pl": "Kazachstan", "fi": "Kazakstan", "zh": "\u54c8\u8428\u514b\u65af\u5766", "ja": "\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3", "es": "Kazajist\u00e1n"}, "label_fr": "Kazakhstan", "name": "Kazakhstan", "dbpedia_uri": "http://dbpedia.org/resource/Kazakhstan"}, "id": "KAZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[40.993000000000002, -0.85829], [41.585129999999999, -1.6832499999999999], [40.884770000000003, -2.0825499999999999], [40.63785, -2.49979], [40.263039999999997, -2.5730900000000001], [40.121189999999999, -3.2776800000000001], [39.800060000000002, -3.6811600000000002], [39.604889999999997, -4.3465299999999996], [39.202219999999997, -4.6767700000000003], [37.7669, -3.6771199999999999], [37.698689999999999, -3.0969899999999999], [34.072620000000001, -1.05982], [33.903711000000001, -0.94999999999999996], [33.893568999999999, 0.10981399999999999], [34.18, 0.51500000000000001], [34.6721, 1.1769400000000001], [35.035989999999998, 1.90584], [34.596069999999997, 3.0537399999999999], [34.479129999999998, 3.5556000000000001], [34.005000000000003, 4.2498849999999999], [34.620196, 4.8471229999999998], [35.298006999999998, 5.5060000000000002], [35.817447999999999, 5.3382319999999996], [35.817447999999999, 4.7769659999999998], [36.159078999999998, 4.447864], [36.855092999999997, 4.447864], [38.120914999999997, 3.5986050000000001], [38.436970000000002, 3.5885099999999999], [38.671140000000001, 3.6160700000000001], [38.892510000000001, 3.50074], [39.559384000000001, 3.4220600000000001], [39.854939999999999, 3.8387899999999999], [40.768479999999997, 4.2570199999999998], [41.171799999999998, 3.9190900000000002], [41.855083, 3.9189120000000002], [40.981050000000003, 2.7845200000000001], [40.993000000000002, -0.85829]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0435\u043d\u0438\u044f", "fr": "Kenya", "en": "Kenya", "nl": "Kenia", "pt": "Qu\u00e9nia", "no": "Kenya", "de": "Kenia", "it": "Kenya", "sv": "Kenya", "pl": "Kenia", "fi": "Kenia", "zh": "\u80af\u5c3c\u4e9a", "ja": "\u30b1\u30cb\u30a2", "es": "Kenia"}, "label_fr": "Kenya", "name": "Kenya", "dbpedia_uri": "http://dbpedia.org/resource/Kenya"}, "id": "KEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[70.962315000000004, 42.266154], [71.186280999999994, 42.704293], [71.844638000000003, 42.845395000000003], [73.489757999999995, 42.500894000000002], [73.645303999999996, 43.091271999999996], [74.212866000000005, 43.298338999999999], [75.636965000000004, 42.877899999999997], [76.000354000000002, 42.988022000000001], [77.658392000000006, 42.960686000000003], [79.142177000000004, 42.856091999999997], [79.643645000000006, 42.496682999999997], [80.259990000000002, 42.349998999999997], [80.119429999999994, 42.123941000000002], [78.543661, 41.582242999999998], [78.187196999999998, 41.185316], [76.904483999999997, 41.066485999999998], [76.526368000000005, 40.427945999999999], [75.467827999999997, 40.562072000000001], [74.776861999999994, 40.366425], [73.822243999999998, 39.893973000000003], [73.960013000000004, 39.660007999999998], [73.675379000000007, 39.431237000000003], [71.784694000000002, 39.279463], [70.549161999999995, 39.604197999999997], [69.464887000000004, 39.526682999999998], [69.559610000000006, 40.103211000000002], [70.648019000000005, 39.935754000000003], [71.014197999999993, 40.244365999999999], [71.774874999999994, 40.145843999999997], [73.055417000000006, 40.866033000000002], [71.870114999999998, 41.392899999999997], [71.157859000000002, 41.143586999999997], [70.420022000000003, 41.519998000000001], [71.259247999999999, 42.167710999999997], [70.962315000000004, 42.266154]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0438\u0440\u0433\u0438\u0437\u0438\u044f", "fr": "Kirghizistan", "en": "Kyrgyzstan", "nl": "Kirgizi\u00eb", "pt": "Quirguist\u00e3o", "no": "Kirgisistan", "de": "Kirgisistan", "it": "Kirghizistan", "sv": "Kirgizistan", "pl": "Kirgistan", "fi": "Kirgisia", "zh": "\u5409\u5c14\u5409\u65af\u65af\u5766", "ja": "\u30ad\u30eb\u30ae\u30b9", "es": "Kirguist\u00e1n"}, "label_fr": "Kirghizistan", "name": "Kyrgyzstan", "dbpedia_uri": "http://dbpedia.org/resource/Kyrgyzstan"}, "id": "KGZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[103.49728, 10.632555], [103.09069, 11.153661], [102.58493199999999, 12.186595000000001], [102.348099, 13.394247], [102.988422, 14.225721], [104.281418, 14.416743], [105.218777, 14.273211999999999], [106.04394600000001, 13.881091], [106.49637300000001, 14.570584], [107.382727, 14.202441], [107.614548, 13.535531000000001], [107.49140300000001, 12.337206], [105.810524, 11.567615], [106.24966999999999, 10.961812], [105.199915, 10.88931], [104.334335, 10.486544], [103.49728, 10.632555]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430", "fr": "Cambodge", "en": "Cambodia", "nl": "Cambodja", "pt": "Camboja", "no": "Kambodsja", "de": "Kambodscha", "it": "Cambogia", "sv": "Kambodja", "pl": "Kambod\u017ca", "fi": "Kambod\u017ea", "zh": "\u67ec\u57d4\u5be8", "ja": "\u30ab\u30f3\u30dc\u30b8\u30a2", "es": "Camboya"}, "label_fr": "Cambodge", "name": "Cambodia", "dbpedia_uri": "http://dbpedia.org/resource/Cambodia"}, "id": "KHM"}, {"geometry": {"type": "Polygon", "coordinates": [[[128.349716, 38.612242999999999], [129.21292, 37.432392], [129.46045000000001, 36.784188999999998], [129.46830399999999, 35.632140999999997], [129.09137699999999, 35.082484000000001], [128.18584999999999, 34.890377000000001], [127.38651900000001, 34.475673999999998], [126.485748, 34.390045999999998], [126.37392, 34.934559999999998], [126.559231, 35.684541000000003], [126.11739799999999, 36.725484999999999], [126.86014299999999, 36.893923999999998], [126.17475899999999, 37.749685999999997], [126.23733900000001, 37.840378000000001], [126.68371999999999, 37.804772999999997], [127.07330899999999, 38.256115000000001], [127.780035, 38.304535999999999], [128.205746, 38.370396999999997], [128.349716, 38.612242999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u0440\u0435\u044f", "fr": "Cor\u00e9e du Sud", "en": "South Korea", "nl": "Zuid-Korea", "pt": "Coreia do Sul", "no": "S\u00f8r-Korea", "de": "S\u00fcdkorea", "it": "Corea del Sud", "sv": "Sydkorea", "pl": "Korea Po\u0142udniowa", "fi": "Korean tasavalta", "zh": "\u5927\u97e9\u6c11\u56fd", "ja": "\u5927\u97d3\u6c11\u56fd", "es": "Corea del Sur"}, "label_fr": "Cor\u00e9e du Sud", "name": "South Korea", "dbpedia_uri": "http://dbpedia.org/resource/South_Korea"}, "id": "KOR"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.762160000000002, 42.051859999999998], [20.717310000000001, 41.847110000000001], [20.590229999999998, 41.855409999999999], [20.522950000000002, 42.217869999999998], [20.283740000000002, 42.320250000000001], [20.070699999999999, 42.588630000000002], [20.257580000000001, 42.812750000000001], [20.496790000000001, 42.884689999999999], [20.635079999999999, 43.216709999999999], [20.81448, 43.27205], [20.956510000000002, 43.130940000000002], [21.143395000000002, 43.068685000000002], [21.27421, 42.909590000000001], [21.438659999999999, 42.862549999999999], [21.633019999999998, 42.677169999999997], [21.77505, 42.682699999999997], [21.66292, 42.439219999999999], [21.543320000000001, 42.320250000000001], [21.576636000000001, 42.245224], [21.352699999999999, 42.206800000000001], [20.762160000000002, 42.051859999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0441\u043e\u0432\u043e (\u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0433\u0438\u043e\u043d)", "fr": "Kosovo", "en": "Kosovo", "nl": "Kosovo", "pt": "Kosovo", "no": "Kosovo", "de": "Kosovo", "it": "Kosovo", "sv": "Kosovo", "pl": "Kosowo", "fi": "Kosovo", "zh": "\u79d1\u7d22\u6c83", "ja": "\u30b3\u30bd\u30dc", "es": "Kosovo"}, "label_fr": "Kosovo", "name": "Kosovo", "dbpedia_uri": "http://dbpedia.org/resource/Kosovo"}, "id": "CS-KM"}, {"geometry": {"type": "Polygon", "coordinates": [[[47.974519000000001, 29.975819000000001], [48.183188999999999, 29.534476999999999], [48.093943000000003, 29.306298999999999], [48.416094000000001, 28.552004], [47.708851000000003, 28.526063000000001], [47.459822000000003, 29.002518999999999], [46.568713000000002, 29.099025000000001], [47.302622, 30.059069999999998], [47.974519000000001, 29.975819000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0443\u0432\u0435\u0439\u0442", "fr": "Kowe\u00eft", "en": "Kuwait", "nl": "Koeweit", "pt": "Kuwait", "no": "Kuwait", "de": "Kuwait", "it": "Kuwait", "sv": "Kuwait", "pl": "Kuwejt", "fi": "Kuwait", "zh": "\u79d1\u5a01\u7279", "ja": "\u30af\u30a6\u30a7\u30fc\u30c8", "es": "Kuwait"}, "label_fr": "Kowe\u00eft", "name": "Kuwait", "dbpedia_uri": "http://dbpedia.org/resource/Kuwait"}, "id": "KWT"}, {"geometry": {"type": "Polygon", "coordinates": [[[105.218777, 14.273211999999999], [105.544338, 14.723934], [105.589039, 15.570316], [104.779321, 16.441865], [104.716947, 17.428858999999999], [103.95647700000001, 18.240953999999999], [103.200192, 18.309632000000001], [102.998706, 17.961694999999999], [102.413005, 17.932782], [102.113592, 18.109102], [101.05954800000001, 17.512497], [101.03593100000001, 18.408928], [101.282015, 19.462585000000001], [100.60629400000001, 19.508344000000001], [100.54888099999999, 20.109238000000001], [100.115988, 20.417850000000001], [100.32910099999999, 20.786121999999999], [101.18000499999999, 21.436572999999999], [101.270026, 21.201651999999999], [101.80312000000001, 21.174367], [101.652018, 22.318199], [102.170436, 22.464753000000002], [102.754896, 21.675136999999999], [103.203861, 20.766562], [104.435, 20.758732999999999], [104.822574, 19.886641999999998], [104.18338799999999, 19.624668], [103.89653199999999, 19.265180999999998], [105.094598, 18.666975000000001], [105.92576200000001, 17.485315], [106.55600800000001, 16.604284], [107.31270600000001, 15.908538], [107.564525, 15.202173], [107.382727, 14.202441], [106.49637300000001, 14.570584], [106.04394600000001, 13.881091], [105.218777, 14.273211999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0430\u043e\u0441", "fr": "Laos", "en": "Laos", "nl": "Laos", "pt": "Laos", "no": "Laos", "de": "Laos", "it": "Laos", "sv": "Laos", "pl": "Laos", "fi": "Laos", "zh": "\u8001\u631d", "ja": "\u30e9\u30aa\u30b9", "es": "Laos"}, "label_fr": "Laos", "name": "Laos", "dbpedia_uri": "http://dbpedia.org/resource/Laos"}, "id": "LAO"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.821100999999999, 33.277425999999998], [35.552796999999998, 33.264274999999998], [35.460709000000001, 33.089039999999997], [35.126052999999999, 33.090899999999998], [35.482207000000002, 33.905450000000002], [35.979591999999997, 34.610058000000002], [35.998403000000003, 34.644914], [36.448194000000001, 34.593935000000002], [36.611750000000001, 34.201788999999998], [36.066459999999999, 33.824911999999998], [35.821100999999999, 33.277425999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0432\u0430\u043d", "fr": "Liban", "en": "Lebanon", "nl": "Libanon", "pt": "L\u00edbano", "no": "Libanon", "de": "Libanon", "it": "Libano", "sv": "Libanon", "pl": "Liban", "fi": "Libanon", "zh": "\u9ece\u5df4\u5ae9", "ja": "\u30ec\u30d0\u30ce\u30f3", "es": "L\u00edbano"}, "label_fr": "Liban", "name": "Lebanon", "dbpedia_uri": "http://dbpedia.org/resource/Lebanon"}, "id": "LBN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-7.7121589999999998, 4.3645659999999999], [-7.9741070000000001, 4.3557550000000003], [-9.0047940000000004, 4.8324189999999998], [-9.9134200000000003, 5.5935610000000002], [-10.765383999999999, 6.1407109999999996], [-11.438779, 6.7859170000000004], [-11.199802, 7.1058459999999997], [-11.146704, 7.396706], [-10.695595000000001, 7.9394640000000001], [-10.230093999999999, 8.4062059999999992], [-10.016567, 8.4285040000000002], [-9.7553420000000006, 8.5410550000000001], [-9.3372799999999998, 7.928534], [-9.4033479999999994, 7.5269050000000002], [-9.2087859999999999, 7.3139209999999997], [-8.9260649999999995, 7.309037], [-8.7221240000000009, 7.7116740000000004], [-8.4392980000000009, 7.6860429999999997], [-8.4854459999999996, 7.3952080000000002], [-8.3854520000000008, 6.9118009999999996], [-8.6028800000000007, 6.4675640000000003], [-8.3113480000000006, 6.1930329999999998], [-7.9936930000000004, 6.1261900000000002], [-7.5701530000000004, 5.7073520000000002], [-7.5397150000000002, 5.313345], [-7.6353679999999997, 5.1881589999999997], [-7.7121589999999998, 4.3645659999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0431\u0435\u0440\u0438\u044f", "fr": "Liberia", "en": "Liberia", "nl": "Liberia", "pt": "Lib\u00e9ria", "no": "Liberia", "it": "Liberia", "sv": "Liberia", "pl": "Liberia", "fi": "Liberia", "zh": "\u5229\u6bd4\u91cc\u4e9a", "ja": "\u30ea\u30d9\u30ea\u30a2", "es": "Liberia"}, "label_fr": "Liberia", "name": "Liberia", "dbpedia_uri": "http://dbpedia.org/resource/Liberia"}, "id": "LBR"}, {"geometry": {"type": "Polygon", "coordinates": [[[14.8513, 22.862950000000001], [14.143871000000001, 22.491288999999998], [13.581424999999999, 23.040506000000001], [11.999506, 23.471668000000001], [11.560669000000001, 24.097909000000001], [10.771364, 24.562532000000001], [10.303846999999999, 24.379313], [9.9482610000000005, 24.936954], [9.9106930000000002, 25.365455000000001], [9.3194110000000006, 26.094325000000001], [9.7162860000000002, 26.512205999999999], [9.6290560000000003, 27.140953], [9.7561280000000004, 27.688258999999999], [9.6838850000000001, 28.144174], [9.8599979999999992, 28.959990000000001], [9.8056339999999995, 29.424638000000002], [9.4821399999999993, 30.307556000000002], [9.9700170000000004, 30.539325000000002], [10.056575, 30.961831], [9.9502249999999997, 31.376069999999999], [10.636901, 31.761420999999999], [10.944789999999999, 32.081814999999999], [11.432252999999999, 32.368903000000003], [11.488787, 33.136996000000003], [12.663309999999999, 32.79278], [13.083259999999999, 32.878819999999997], [13.91868, 32.711959999999998], [15.24563, 32.265079999999998], [15.713939999999999, 31.376259999999998], [16.611619999999998, 31.182179999999999], [18.021090000000001, 30.763570000000001], [19.086410000000001, 30.266390000000001], [19.57404, 30.52582], [20.053349999999998, 30.985759999999999], [19.820329999999998, 31.75179], [20.133970000000001, 32.238199999999999], [20.854520000000001, 32.706800000000001], [21.54298, 32.843200000000003], [22.895759999999999, 32.638579999999997], [23.236799999999999, 32.191490000000002], [23.60913, 32.187260000000002], [23.927499999999998, 32.016669999999998], [24.921140000000001, 31.899360000000001], [25.164819999999999, 31.56915], [24.802869999999999, 31.089289999999998], [24.957619999999999, 30.6616], [24.70007, 30.04419], [25, 29.238655000000001], [25, 25.682500000000001], [25, 22], [25, 20.003039999999999], [23.850000000000001, 20], [23.83766, 19.580469999999998], [19.849260000000001, 21.495090000000001], [15.860849999999999, 23.40972], [14.8513, 22.862950000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0432\u0438\u044f", "fr": "Libye", "en": "Libya", "nl": "Libi\u00eb", "pt": "L\u00edbia", "no": "Libya", "de": "Libyen", "it": "Libia", "sv": "Libyen", "pl": "Libia", "fi": "Libya", "zh": "\u5229\u6bd4\u4e9a", "ja": "\u30ea\u30d3\u30a2", "es": "Libia"}, "label_fr": "Libye", "name": "Libya", "dbpedia_uri": "http://dbpedia.org/resource/Libya"}, "id": "LBY"}, {"geometry": {"type": "Polygon", "coordinates": [[[81.787959000000001, 7.5230550000000003], [81.637321999999998, 6.4817749999999998], [81.218019999999996, 6.1971410000000002], [80.348356999999993, 5.9683700000000002], [79.872468999999995, 6.7634629999999998], [79.695166999999998, 8.2008430000000008], [80.147801000000001, 9.8240780000000001], [80.838818000000003, 9.2684270000000009], [81.304319000000007, 8.5642060000000004], [81.787959000000001, 7.5230550000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0440\u0438-\u041b\u0430\u043d\u043a\u0430", "fr": "Sri Lanka", "en": "Sri Lanka", "nl": "Sri Lanka", "pt": "Sri Lanka", "no": "Sri Lanka", "de": "Sri Lanka", "it": "Sri Lanka", "sv": "Sri Lanka", "pl": "Sri Lanka", "fi": "Sri Lanka", "zh": "\u65af\u91cc\u862d\u5361", "ja": "\u30b9\u30ea\u30e9\u30f3\u30ab", "es": "Sri Lanka"}, "label_fr": "Sri Lanka", "name": "Sri Lanka", "dbpedia_uri": "http://dbpedia.org/resource/Sri_Lanka"}, "id": "LKA"}, {"geometry": {"type": "Polygon", "coordinates": [[[28.978262999999998, -28.955597000000001], [29.325165999999999, -29.257387000000001], [29.018415000000001, -29.743766000000001], [28.848400000000002, -30.070050999999999], [28.291069, -30.226216999999998], [28.107205, -30.545732000000001], [27.749396999999998, -30.645105999999998], [26.999262000000002, -29.875954], [27.532511, -29.242711], [28.074338000000001, -28.851469000000002], [28.541699999999999, -28.647501999999999], [28.978262999999998, -28.955597000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0435\u0441\u043e\u0442\u043e", "fr": "Lesotho", "en": "Lesotho", "nl": "Lesotho", "pt": "Lesoto", "no": "Lesotho", "de": "Lesotho", "it": "Lesotho", "sv": "Lesotho", "pl": "Lesotho", "fi": "Lesotho", "zh": "\u83b1\u7d22\u6258", "ja": "\u30ec\u30bd\u30c8", "es": "Lesoto"}, "label_fr": "Lesotho", "name": "Lesotho", "dbpedia_uri": "http://dbpedia.org/resource/Lesotho"}, "id": "LSO"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.731099, 54.327537], [22.651052, 54.582740999999999], [22.757764000000002, 54.856574000000002], [22.315723999999999, 55.015298999999999], [21.268449, 55.190482000000003], [21.055800000000001, 56.031075999999999], [22.201156999999998, 56.337802000000003], [23.878264000000001, 56.273671], [24.860683999999999, 56.372528000000003], [25.000934000000001, 56.164530999999997], [25.533047, 56.100296999999998], [26.494330999999999, 55.615107000000002], [26.588279, 55.167175999999998], [25.768433000000002, 54.846963000000002], [25.536353999999999, 54.282423000000001], [24.450683999999999, 53.905701999999998], [23.484127999999998, 53.912497999999999], [23.243987000000001, 54.220567000000003], [22.731099, 54.327537]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0442\u0432\u0430", "fr": "Lituanie", "en": "Lithuania", "nl": "Litouwen", "pt": "Litu\u00e2nia", "no": "Litauen", "de": "Litauen", "it": "Lituania", "sv": "Litauen", "pl": "Litwa", "fi": "Liettua", "zh": "\u7acb\u9676\u5b9b", "ja": "\u30ea\u30c8\u30a2\u30cb\u30a2", "es": "Lituania"}, "label_fr": "Lituanie", "name": "Lithuania", "dbpedia_uri": "http://dbpedia.org/resource/Lithuania"}, "id": "LTU"}, {"geometry": {"type": "Polygon", "coordinates": [[[6.0430729999999997, 50.128051999999997], [6.2427510000000002, 49.902225999999999], [6.1863200000000003, 49.463802999999999], [5.8977589999999998, 49.442667], [5.6740519999999997, 49.529483999999997], [5.7824169999999997, 50.090328], [6.0430729999999997, 50.128051999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433", "fr": "Luxembourg (pays)", "en": "Luxembourg", "nl": "Luxemburg (land)", "pt": "Luxemburgo", "no": "Luxembourg", "de": "Luxemburg", "it": "Lussemburgo", "sv": "Luxemburg", "pl": "Luksemburg", "fi": "Luxemburg", "zh": "\u5362\u68ee\u5821", "ja": "\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30af", "es": "Luxemburgo"}, "label_fr": "Luxembourg (pays)", "name": "Luxembourg", "dbpedia_uri": "http://dbpedia.org/resource/Luxembourg"}, "id": "LUX"}, {"geometry": {"type": "Polygon", "coordinates": [[[21.055800000000001, 56.031075999999999], [21.090423999999999, 56.783873], [21.581866000000002, 57.411870999999998], [22.524341, 57.753374000000001], [23.318453000000002, 57.006236000000001], [24.120729999999998, 57.025692999999997], [24.312863, 57.793424000000002], [25.164594000000001, 57.970157], [25.602810000000002, 57.847529000000002], [26.463532000000001, 57.476388999999998], [27.288184999999999, 57.474527999999999], [27.770015999999998, 57.244258000000002], [27.855281999999999, 56.759326000000001], [28.176708999999999, 56.169130000000003], [27.102460000000001, 55.783313999999997], [26.494330999999999, 55.615107000000002], [25.533047, 56.100296999999998], [25.000934000000001, 56.164530999999997], [24.860683999999999, 56.372528000000003], [23.878264000000001, 56.273671], [22.201156999999998, 56.337802000000003], [21.055800000000001, 56.031075999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0430\u0442\u0432\u0438\u044f", "fr": "Lettonie", "en": "Latvia", "nl": "Letland", "pt": "Let\u00f3nia", "no": "Latvia", "de": "Lettland", "it": "Lettonia", "sv": "Lettland", "pl": "\u0141otwa", "fi": "Latvia", "zh": "\u62c9\u812b\u7dad\u4e9e", "ja": "\u30e9\u30c8\u30d3\u30a2", "es": "Letonia"}, "label_fr": "Lettonie", "name": "Latvia", "dbpedia_uri": "http://dbpedia.org/resource/Latvia"}, "id": "LVA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-5.1938630000000003, 35.755181999999998], [-4.5910060000000001, 35.330711999999998], [-3.6400570000000001, 35.399855000000002], [-2.6043059999999998, 35.179093000000002], [-2.1699139999999999, 35.168396000000001], [-1.792986, 34.527918999999997], [-1.733455, 33.919713000000002], [-1.3880490000000001, 32.864015000000002], [-1.1245510000000001, 32.651522], [-1.3078989999999999, 32.262889000000001], [-2.6166049999999998, 32.094346000000002], [-3.0689799999999998, 31.724498000000001], [-3.6474980000000001, 31.637294000000001], [-3.6904409999999999, 30.896951999999999], [-4.8596459999999997, 30.501187999999999], [-5.2421290000000003, 30.000443000000001], [-6.060632, 29.7317], [-7.0592280000000001, 29.579228000000001], [-8.6741159999999997, 28.841289], [-8.6655899999999999, 27.656426], [-8.8178090000000005, 27.656426], [-8.8178280000000004, 27.656426], [-8.7948839999999997, 27.120695999999999], [-9.4130369999999992, 27.088476], [-9.7353430000000003, 26.860945000000001], [-10.189424000000001, 26.860945000000001], [-10.551263000000001, 26.990808000000001], [-11.392555, 26.883424000000002], [-11.718220000000001, 26.104092000000001], [-12.030759, 26.030866], [-12.500963, 24.770116000000002], [-13.891109999999999, 23.691009000000001], [-14.221168, 22.310162999999999], [-14.630833000000001, 21.860939999999999], [-14.750954999999999, 21.500599999999999], [-17.002962, 21.420733999999999], [-17.020427999999999, 21.42231], [-16.973248000000002, 21.885745], [-16.589137000000001, 22.158234], [-16.261921999999998, 22.67934], [-16.326414, 23.017768], [-15.982611, 23.723358000000001], [-15.426004000000001, 24.359134000000001], [-15.089332000000001, 24.520261000000001], [-14.824645, 25.103532999999999], [-14.800926, 25.636265000000002], [-14.43994, 26.254418000000001], [-13.773804999999999, 26.618891999999999], [-13.139942, 27.640148], [-13.121613, 27.654147999999999], [-12.618836999999999, 28.038186], [-11.688919, 28.148644000000001], [-10.900957, 28.832142000000001], [-10.399592, 29.098586000000001], [-9.5648110000000006, 29.933574], [-9.8147179999999992, 31.177735999999999], [-9.4347930000000009, 32.038096000000003], [-9.3006930000000008, 32.564678999999998], [-8.6574760000000008, 33.240245000000002], [-7.6541779999999999, 33.697065000000002], [-6.9125439999999996, 34.110475999999998], [-6.2443419999999996, 35.145865000000001], [-5.9299939999999998, 35.759988], [-5.1938630000000003, 35.755181999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0440\u043e\u043a\u043a\u043e", "fr": "Maroc", "en": "Morocco", "nl": "Marokko", "pt": "Marrocos", "no": "Marokko", "de": "Marokko", "it": "Marocco", "sv": "Marocko", "pl": "Maroko", "fi": "Marokko", "zh": "\u6469\u6d1b\u54e5", "ja": "\u30e2\u30ed\u30c3\u30b3", "es": "Marruecos"}, "label_fr": "Maroc", "name": "Morocco", "dbpedia_uri": "http://dbpedia.org/resource/Morocco"}, "id": "MAR"}, {"geometry": {"type": "Polygon", "coordinates": [[[26.619337000000002, 48.220725999999999], [26.857824000000001, 48.368211000000002], [27.522537, 48.467118999999997], [28.259547000000001, 48.155562000000003], [28.670891000000001, 48.118149000000003], [29.122698, 47.849094999999998], [29.050868000000001, 47.510227], [29.415134999999999, 47.346645000000002], [29.559674000000001, 46.928583000000003], [29.908852, 46.674360999999998], [29.83821, 46.525326], [30.024659, 46.423937000000002], [29.759972000000001, 46.349988000000003], [29.170653999999999, 46.379261999999997], [29.072106999999999, 46.517677999999997], [28.862971999999999, 46.437888999999998], [28.933717000000001, 46.258830000000003], [28.659987000000001, 45.939987000000002], [28.485268999999999, 45.596907000000002], [28.233554000000002, 45.488283000000003], [28.054442999999999, 45.944586000000001], [28.160018000000001, 46.371563000000002], [28.128029999999999, 46.810476000000001], [27.551165999999998, 47.405116999999997], [27.233872999999999, 47.826771000000001], [26.924175999999999, 48.123263999999999], [26.619337000000002, 48.220725999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u043b\u0434\u0430\u0432\u0438\u044f", "fr": "Moldavie", "en": "Moldova", "nl": "Moldavi\u00eb (land)", "pt": "Mold\u00e1via", "no": "Moldova", "de": "Moldawien", "it": "Moldavia", "sv": "Moldavien", "pl": "Mo\u0142dawia", "fi": "Moldova", "zh": "\u6469\u5c14\u591a\u74e6", "ja": "\u30e2\u30eb\u30c9\u30d0", "es": "Moldavia"}, "label_fr": "Moldavie", "name": "Moldova", "dbpedia_uri": "http://dbpedia.org/resource/Moldova"}, "id": "MDA"}, {"geometry": {"type": "Polygon", "coordinates": [[[49.543519000000003, -12.469833], [49.808981000000003, -12.895284999999999], [50.056511, -13.555761], [50.217430999999998, -14.758789], [50.476537, -15.226512], [50.377110999999999, -15.706068999999999], [50.200274999999998, -16.000263], [49.860605999999997, -15.414253], [49.672606999999999, -15.710203999999999], [49.863343999999998, -16.451036999999999], [49.774563999999998, -16.875042000000001], [49.498612000000001, -17.106036], [49.435619000000003, -17.953064000000001], [49.041792000000001, -19.118780999999998], [48.548541, -20.496887999999998], [47.930748999999999, -22.391501000000002], [47.547722999999998, -23.781959000000001], [47.095761000000003, -24.94163], [46.282477999999998, -25.178463000000001], [45.409508000000002, -25.601434000000001], [44.833573999999999, -25.346101000000001], [44.039720000000003, -24.988344999999999], [43.763767999999999, -24.460677], [43.697778, -23.574116], [43.345654000000003, -22.776903999999998], [43.254187000000002, -22.057413], [43.433298000000001, -21.336475], [43.893683000000003, -21.163307], [43.896369999999997, -20.830459000000001], [44.374324999999999, -20.072365999999999], [44.464396999999998, -19.435454], [44.232422, -18.961995000000002], [44.042976000000003, -18.331386999999999], [43.963084000000002, -17.409945], [44.312469, -16.850496], [44.446517, -16.216218999999999], [44.944937000000003, -16.179373999999999], [45.502732000000002, -15.974373], [45.872993999999998, -15.793454000000001], [46.312243000000002, -15.780018], [46.882182999999998, -15.210182], [47.705129999999997, -14.594303], [48.005215, -14.091233000000001], [47.869047000000002, -13.663869], [48.293827999999998, -13.784068], [48.845059999999997, -13.089174999999999], [48.863509000000001, -12.487868000000001], [49.194651, -12.040557], [49.543519000000003, -12.469833]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440", "fr": "Madagascar", "en": "Madagascar", "nl": "Madagaskar", "pt": "Madag\u00e1scar", "no": "Madagaskar", "de": "Madagaskar", "it": "Madagascar", "sv": "Madagaskar", "pl": "Madagaskar", "fi": "Madagaskar", "zh": "\u9a6c\u8fbe\u52a0\u65af\u52a0", "ja": "\u30de\u30c0\u30ac\u30b9\u30ab\u30eb", "es": "Madagascar"}, "label_fr": "Madagascar", "name": "Madagascar", "dbpedia_uri": "http://dbpedia.org/resource/Madagascar"}, "id": "MDG"}, {"geometry": {"type": "Polygon", "coordinates": [[[-97.140007999999995, 25.869997000000001], [-97.528071999999995, 24.992144], [-97.702945999999997, 24.272342999999999], [-97.776042000000004, 22.932580000000002], [-97.872366999999997, 22.444212], [-97.699044000000001, 21.898689000000001], [-97.388959999999997, 21.411019], [-97.189333000000005, 20.635432999999999], [-96.525576000000001, 19.890930999999998], [-96.292126999999994, 19.320371000000002], [-95.900885000000002, 18.828023999999999], [-94.839062999999996, 18.562716999999999], [-94.425730000000001, 18.144371], [-93.548651000000007, 18.423836999999999], [-92.786113999999998, 18.524839], [-92.037347999999994, 18.704568999999999], [-91.407903000000005, 18.876083000000001], [-90.771870000000007, 19.284120000000001], [-90.533590000000004, 19.867418000000001], [-90.451476, 20.707522000000001], [-90.278617999999994, 20.999855], [-89.601320999999999, 21.261725999999999], [-88.543865999999994, 21.493675], [-87.658417, 21.458846000000001], [-87.05189, 21.543543], [-86.811982, 21.331515], [-86.845907999999994, 20.849865000000001], [-87.383291, 20.255405], [-87.621054000000001, 19.646553000000001], [-87.436750000000004, 19.472403], [-87.586560000000006, 19.040130000000001], [-87.837191000000004, 18.259816000000001], [-88.090664000000004, 18.516648], [-88.300031000000004, 18.499981999999999], [-88.490122999999997, 18.486830999999999], [-88.848343999999997, 17.883198], [-89.029857000000007, 18.001511000000001], [-89.150908999999999, 17.955468], [-89.143079999999998, 17.808319000000001], [-90.067933999999994, 17.819326], [-91.001519999999999, 17.817595000000001], [-91.002268999999998, 17.254657999999999], [-91.453920999999994, 17.252177], [-91.081670000000003, 16.918476999999999], [-90.711821999999998, 16.687483], [-90.600847000000002, 16.470777999999999], [-90.438867000000002, 16.41011], [-90.464472999999998, 16.069562000000001], [-91.747960000000006, 16.066565000000001], [-92.229248999999996, 15.251447000000001], [-92.087215999999998, 15.064584999999999], [-92.203230000000005, 14.830102999999999], [-92.22775, 14.538829], [-93.359464000000003, 15.61543], [-93.875169, 15.940163999999999], [-94.691655999999995, 16.200975], [-95.250226999999995, 16.128318], [-96.053381999999999, 15.752088000000001], [-96.557434000000001, 15.653515000000001], [-97.263592000000003, 15.917064999999999], [-98.013030000000001, 16.107312], [-98.947676000000001, 16.566043000000001], [-99.697396999999995, 16.706164000000001], [-100.829499, 17.171071000000001], [-101.666089, 17.649025999999999], [-101.91852799999999, 17.916090000000001], [-102.478132, 17.975750999999999], [-103.50099, 18.292294999999999], [-103.91752700000001, 18.748571999999999], [-104.99200999999999, 19.316134000000002], [-105.493038, 19.946767000000001], [-105.731396, 20.434101999999999], [-105.397773, 20.531718999999999], [-105.50066099999999, 20.816894999999999], [-105.270752, 21.076284999999999], [-105.265817, 21.422104000000001], [-105.603161, 21.871146], [-105.693414, 22.269079999999999], [-106.028716, 22.773752000000002], [-106.90998, 23.767773999999999], [-107.915449, 24.548915000000001], [-108.401905, 25.172314], [-109.260199, 25.580608999999999], [-109.44408900000001, 25.824884000000001], [-109.29164400000001, 26.442934000000001], [-109.801458, 26.676176000000002], [-110.391732, 27.162115], [-110.641019, 27.859876], [-111.17891899999999, 27.941241000000002], [-111.759607, 28.467953000000001], [-112.228235, 28.954408999999998], [-112.271824, 29.266843999999999], [-112.809594, 30.021114000000001], [-113.163811, 30.786881000000001], [-113.148669, 31.170966], [-113.871881, 31.567608], [-114.205737, 31.524045000000001], [-114.77645099999999, 31.799531999999999], [-114.9367, 31.393484999999998], [-114.771232, 30.913616999999999], [-114.67389900000001, 30.162680999999999], [-114.330974, 29.750432], [-113.588875, 29.061610999999999], [-113.424053, 28.826174000000002], [-113.271969, 28.754783], [-113.140039, 28.411289], [-112.962298, 28.425190000000001], [-112.76158700000001, 27.780217], [-112.457911, 27.525814], [-112.244952, 27.171727000000001], [-111.616489, 26.662817], [-111.28467499999999, 25.732589999999998], [-110.987819, 25.294606000000002], [-110.710007, 24.826004000000001], [-110.65504900000001, 24.298594999999999], [-110.172856, 24.265547999999999], [-109.77184699999999, 23.811183], [-109.409104, 23.364671999999999], [-109.433392, 23.185587999999999], [-109.854219, 22.818272], [-110.031392, 22.823077999999999], [-110.29507099999999, 23.430973000000002], [-110.949501, 24.000964], [-111.670568, 24.484423], [-112.182036, 24.738413000000001], [-112.148989, 25.470124999999999], [-112.30071100000001, 26.012004000000001], [-112.777297, 26.321960000000001], [-113.464671, 26.768186], [-113.59672999999999, 26.63946], [-113.84893700000001, 26.900064], [-114.46574699999999, 27.14209], [-115.055142, 27.722726999999999], [-114.982253, 27.798200000000001], [-114.57036600000001, 27.741485000000001], [-114.19932900000001, 28.115003000000002], [-114.162018, 28.566112], [-114.931842, 29.279478999999998], [-115.518654, 29.556362], [-115.887365, 30.180793999999999], [-116.25834999999999, 30.836463999999999], [-116.721526, 31.635743999999999], [-117.12775999999999, 32.535339999999998], [-115.99135, 32.612389999999998], [-114.72139, 32.720829999999999], [-114.815, 32.525280000000002], [-113.30498, 32.039140000000003], [-111.02361000000001, 31.334720000000001], [-109.035, 31.341940000000001], [-108.24194, 31.342220000000001], [-108.23999999999999, 31.754854000000002], [-106.50758999999999, 31.754519999999999], [-106.1429, 31.39995], [-105.63159, 31.083829999999999], [-105.03737, 30.644020000000001], [-104.70574999999999, 30.121729999999999], [-104.45697, 29.571960000000001], [-103.94, 29.27], [-103.11, 28.969999999999999], [-102.48, 29.760000000000002], [-101.66240000000001, 29.779299999999999], [-100.9576, 29.380710000000001], [-100.45583999999999, 28.696120000000001], [-100.11, 28.109999999999999], [-99.519999999999996, 27.539999999999999], [-99.299999999999997, 26.84], [-99.019999999999996, 26.370000000000001], [-98.239999999999995, 26.059999999999999], [-97.530000000000001, 25.84], [-97.140007999999995, 25.869997000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0435\u043a\u0441\u0438\u043a\u0430", "fr": "Mexique", "en": "Mexico", "nl": "Mexico (land)", "pt": "M\u00e9xico", "no": "Mexico", "de": "Mexiko", "it": "Messico", "sv": "Mexiko", "pl": "Meksyk", "fi": "Meksiko", "zh": "\u58a8\u897f\u54e5", "ja": "\u30e1\u30ad\u30b7\u30b3", "es": "M\u00e9xico"}, "label_fr": "Mexique", "name": "Mexico", "dbpedia_uri": "http://dbpedia.org/resource/Mexico"}, "id": "MEX"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.590229999999998, 41.855409999999999], [20.717310000000001, 41.847110000000001], [20.762160000000002, 42.051859999999998], [21.352699999999999, 42.206800000000001], [21.576636000000001, 42.245224], [21.917079999999999, 42.303640000000001], [22.380526, 42.320259999999998], [22.881374000000001, 41.999296999999999], [22.952376999999998, 41.337994000000002], [22.761769999999999, 41.3048], [22.597308000000002, 41.130487000000002], [22.055378000000001, 41.149866000000003], [21.674161000000002, 40.931274999999999], [21.020040000000002, 40.842726999999996], [20.605180000000001, 41.086219999999997], [20.463149999999999, 41.515090000000001], [20.590229999999998, 41.855409999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f", "fr": "Mac\u00e9doine", "en": "Macedonia", "nl": "Macedoni\u00eb", "pt": "Maced\u00f3nia", "no": "Makedonia", "de": "Mazedonien (Begriffskl\u00e4rung)", "it": "Macedonia", "sv": "Makedonien (olika betydelser)", "pl": "Macedonia (ujednoznacznienie)", "fi": "Makedonia (t\u00e4smennyssivu)", "zh": "\u99ac\u5176\u9813 (\u6d88\u6b67\u7fa9)", "ja": "\u30de\u30b1\u30c9\u30cb\u30a2 (\u66d6\u6627\u3055\u56de\u907f)", "es": "Macedonia"}, "label_fr": "Mac\u00e9doine", "name": "Macedonia", "dbpedia_uri": "http://dbpedia.org/resource/Macedonia"}, "id": "MKD"}, {"geometry": {"type": "Polygon", "coordinates": [[[-12.17075, 14.616834000000001], [-11.834208, 14.799097], [-11.666078000000001, 15.388208000000001], [-11.349095, 15.411256], [-10.650791, 15.132745999999999], [-10.086846, 15.330486000000001], [-9.7002550000000003, 15.264106999999999], [-9.5502380000000002, 15.486497], [-5.537744, 15.50169], [-5.315277, 16.201854000000001], [-5.4885229999999998, 16.325102000000001], [-5.9711290000000004, 20.640833000000001], [-6.4537870000000002, 24.956591], [-4.9233370000000001, 24.974574], [-1.550055, 22.792666000000001], [1.8232280000000001, 20.610809], [2.060991, 20.142233000000001], [2.6835879999999999, 19.85623], [3.1466609999999999, 19.693579], [3.1581329999999999, 19.057364], [4.2674190000000003, 19.155265], [4.2702099999999996, 16.852226999999999], [3.7234219999999998, 16.184284000000002], [3.6382590000000001, 15.56812], [2.7499929999999999, 15.409525], [1.3855280000000001, 15.323561], [1.0157830000000001, 14.968182000000001], [0.374892, 14.928908], [-0.26625700000000002, 14.924308999999999], [-0.51585400000000003, 15.116158], [-1.0663629999999999, 14.973815], [-2.0010349999999999, 14.559008], [-2.1918250000000001, 14.246418], [-2.9676939999999998, 13.79815], [-3.103707, 13.541266999999999], [-3.5228030000000001, 13.337662], [-4.0063909999999998, 13.472485000000001], [-4.280405, 13.228444], [-4.4271659999999997, 12.542646], [-5.220942, 11.713858999999999], [-5.1978429999999998, 11.375146000000001], [-5.4705649999999997, 10.951269999999999], [-5.4043419999999998, 10.370737], [-5.8169259999999996, 10.222555], [-6.0504519999999999, 10.096361], [-6.2052230000000002, 10.524061], [-6.4939650000000002, 10.411303], [-6.666461, 10.430811], [-6.8505070000000003, 10.138994], [-7.6227590000000003, 10.147235999999999], [-7.8995899999999999, 10.297382000000001], [-8.0299440000000004, 10.206535000000001], [-8.3353769999999994, 10.494812], [-8.2823569999999993, 10.792597000000001], [-8.407311, 10.909257], [-8.6203210000000006, 10.810891], [-8.5813050000000004, 11.136246], [-8.3763050000000003, 11.393646], [-8.7860990000000001, 11.812561000000001], [-8.905265, 12.088357999999999], [-9.1274739999999994, 12.308059999999999], [-9.3276160000000008, 12.334286000000001], [-9.5679119999999998, 12.194243], [-9.8909929999999999, 12.060479000000001], [-10.165214000000001, 11.844084000000001], [-10.593223999999999, 11.923975], [-10.87083, 12.177887], [-11.036555999999999, 12.211245], [-11.297573999999999, 12.077971], [-11.456168999999999, 12.076834], [-11.513942999999999, 12.442988], [-11.467898999999999, 12.754519], [-11.553398, 13.141214], [-11.927716, 13.422075], [-12.124886999999999, 13.994726999999999], [-12.17075, 14.616834000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0438", "fr": "Mali", "en": "Mali", "nl": "Mali", "pt": "Mali", "no": "Mali", "de": "Mali", "it": "Mali", "sv": "Mali", "pl": "Mali", "fi": "Mali", "zh": "\u9a6c\u91cc\u5171\u548c\u56fd", "ja": "\u30de\u30ea\u5171\u548c\u56fd", "es": "Mal\u00ed"}, "label_fr": "Mali", "name": "Mali", "dbpedia_uri": "http://dbpedia.org/resource/Mali"}, "id": "MLI"}, {"geometry": {"type": "Polygon", "coordinates": [[[99.543308999999994, 20.186598], [98.959676000000002, 19.752980999999998], [98.253724000000005, 19.708203000000001], [97.797782999999995, 18.627079999999999], [97.375895999999997, 18.445437999999999], [97.859122999999997, 17.567945999999999], [98.493761000000006, 16.837835999999999], [98.903347999999994, 16.177824000000001], [98.537375999999995, 15.308496999999999], [98.192074000000005, 15.123703000000001], [98.430819, 14.622028], [99.097755000000006, 13.827503], [99.212012000000001, 13.269294], [99.196353999999999, 12.804748], [99.587286000000006, 11.892763], [99.038121000000004, 10.960546000000001], [98.553550999999999, 9.9329599999999996], [98.457173999999995, 10.675266000000001], [98.764545999999996, 11.441292000000001], [98.428338999999994, 12.032987], [98.509574000000001, 13.122377999999999], [98.103604000000004, 13.640459999999999], [97.777732, 14.837286000000001], [97.597071999999997, 16.100567999999999], [97.164540000000002, 16.928733999999999], [96.505769000000001, 16.427240999999999], [95.369352000000006, 15.71439], [94.808404999999993, 15.803454], [94.188804000000005, 16.037935999999998], [94.533485999999996, 17.277239999999999], [94.324816999999996, 18.213514], [93.540987999999999, 19.366492999999998], [93.663255000000007, 19.726962], [93.078277999999997, 19.855145], [92.368554000000003, 20.670883], [92.303234000000003, 21.475484999999999], [92.652257000000006, 21.324048000000001], [92.672720999999996, 22.041239000000001], [93.166128, 22.278459999999999], [93.060293999999999, 22.703111], [93.286327, 23.043658000000001], [93.325187999999997, 24.078555999999999], [94.106741999999997, 23.850740999999999], [94.552657999999994, 24.675238], [94.603249000000005, 25.162495], [95.155152999999999, 26.001307000000001], [95.124768000000003, 26.573571999999999], [96.419365999999997, 27.264589000000001], [97.133999000000003, 27.083773999999998], [97.051989000000006, 27.699058999999998], [97.402561000000006, 27.882536000000002], [97.327113999999995, 28.261583000000002], [97.911987999999994, 28.335944999999999], [98.246230999999995, 27.747221], [98.682689999999994, 27.508811999999999], [98.712093999999993, 26.743535999999999], [98.671837999999994, 25.918703000000001], [97.724609000000001, 25.083637], [97.60472, 23.897404999999999], [98.660262000000003, 24.063286000000002], [98.898748999999995, 23.142721999999999], [99.531992000000002, 22.949038999999999], [99.240898999999999, 22.118314000000002], [99.983489000000006, 21.742937000000001], [100.416538, 21.558838999999999], [101.15003299999999, 21.849983999999999], [101.18000499999999, 21.436572999999999], [100.32910099999999, 20.786121999999999], [100.115988, 20.417850000000001], [99.543308999999994, 20.186598]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u044c\u044f\u043d\u043c\u0430", "fr": "Birmanie", "en": "Burma", "nl": "Myanmar", "pt": "Myanmar", "no": "Burma", "de": "Myanmar", "it": "Birmania", "sv": "Burma", "pl": "Birma", "fi": "Myanmar", "zh": "\u7f05\u7538", "ja": "\u30df\u30e3\u30f3\u30de\u30fc", "es": "Birmania"}, "label_fr": "Birmanie", "name": "Myanmar", "dbpedia_uri": "http://dbpedia.org/resource/Burma"}, "id": "MMR"}, {"geometry": {"type": "Polygon", "coordinates": [[[19.801613, 42.500093], [19.738050999999999, 42.688246999999997], [19.304490000000001, 42.195740000000001], [19.371770000000001, 41.877549999999999], [19.162459999999999, 41.955019999999998], [18.88214, 42.281509999999997], [18.449999999999999, 42.479999999999997], [18.559999999999999, 42.649999999999999], [18.706479999999999, 43.200110000000002], [19.031649999999999, 43.43253], [19.218520000000002, 43.52384], [19.483889999999999, 43.352290000000004], [19.629999999999999, 43.21378], [19.958570000000002, 43.10604], [20.3398, 42.898519999999998], [20.257580000000001, 42.812750000000001], [20.070699999999999, 42.588630000000002], [19.801613, 42.500093]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0435\u0440\u043d\u043e\u0433\u043e\u0440\u0438\u044f", "fr": "Mont\u00e9n\u00e9gro", "en": "Montenegro", "nl": "Montenegro", "pt": "Montenegro", "no": "Montenegro", "de": "Montenegro", "it": "Montenegro", "sv": "Montenegro", "pl": "Czarnog\u00f3ra", "fi": "Montenegro", "zh": "\u8499\u7279\u5167\u54e5\u7f85", "ja": "\u30e2\u30f3\u30c6\u30cd\u30b0\u30ed", "es": "Montenegro"}, "label_fr": "Mont\u00e9n\u00e9gro", "name": "Montenegro", "dbpedia_uri": "http://dbpedia.org/resource/Montenegro"}, "id": "MNE"}, {"geometry": {"type": "Polygon", "coordinates": [[[87.751264000000006, 49.297198000000002], [88.805566999999996, 49.470520999999998], [90.713667000000001, 50.331811999999999], [92.234712000000002, 50.802171000000001], [93.104219000000001, 50.495289999999997], [94.147565999999998, 50.480536999999998], [94.815949000000003, 50.013432999999999], [95.814027999999993, 49.977466999999997], [97.259727999999996, 49.726061000000001], [98.231762000000003, 50.422401000000001], [97.825739999999996, 51.010995000000001], [98.861491000000001, 52.047365999999997], [99.981731999999994, 51.634005999999999], [100.88948000000001, 51.516855999999997], [102.065223, 51.259920999999999], [102.255909, 50.510561000000003], [103.676545, 50.089965999999997], [104.62155199999999, 50.275328999999999], [105.886591, 50.406019000000001], [106.88880399999999, 50.274296], [107.86817600000001, 49.793705000000003], [108.475167, 49.282547999999998], [109.402449, 49.292960999999998], [110.66201100000001, 49.130127999999999], [111.581231, 49.377968000000003], [112.89774, 49.543565000000001], [114.36245599999999, 50.248303], [114.96211, 50.140247000000002], [115.48569500000001, 49.805177], [116.67880100000001, 49.888531], [116.191802, 49.134597999999997], [115.485282, 48.135382999999997], [115.74283699999999, 47.726545000000002], [116.308953, 47.853409999999997], [117.295507, 47.697709000000003], [118.064143, 48.06673], [118.866574, 47.747059999999998], [119.772824, 47.048059000000002], [119.66327, 46.692680000000003], [118.874326, 46.805411999999997], [117.421701, 46.672733000000001], [116.717868, 46.388202], [115.985096, 45.727235], [114.46033199999999, 45.339816999999996], [113.46390700000001, 44.808892999999998], [112.43606200000001, 45.011645999999999], [111.873306, 45.102079000000003], [111.348377, 44.457442], [111.667737, 44.073175999999997], [111.829588, 43.743118000000003], [111.129682, 43.406834000000003], [110.412103, 42.871234000000001], [109.243596, 42.519446000000002], [107.744773, 42.481515999999999], [106.129316, 42.134327999999996], [104.964994, 41.597410000000004], [104.522282, 41.908346999999999], [103.31227800000001, 41.907468000000001], [101.83304, 42.514873000000001], [100.845866, 42.663803999999999], [99.515816999999998, 42.524690999999997], [97.451757000000001, 42.748890000000003], [96.349395999999999, 42.725634999999997], [95.762455000000003, 43.319448999999999], [95.306875000000005, 44.241331000000002], [94.688929000000002, 44.352331999999997], [93.480733999999998, 44.975472000000003], [92.133891000000006, 45.115076000000002], [90.945539999999994, 45.286073000000002], [90.585768000000002, 45.719715999999998], [90.970809000000003, 46.888145999999999], [90.280826000000005, 47.693548999999997], [88.854298, 48.069082000000002], [88.013831999999994, 48.599463], [87.751264000000006, 49.297198000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f", "fr": "Mongolie", "en": "Mongolia", "nl": "Mongoli\u00eb", "pt": "Mong\u00f3lia", "no": "Mongolia", "de": "Mongolei", "it": "Mongolia", "sv": "Mongoliet", "pl": "Mongolia", "fi": "Mongolia", "zh": "\u8499\u53e4\u56fd", "ja": "\u30e2\u30f3\u30b4\u30eb\u56fd", "es": "Mongolia"}, "label_fr": "Mongolie", "name": "Mongolia", "dbpedia_uri": "http://dbpedia.org/resource/Mongolia"}, "id": "MNG"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.559989000000002, -11.520020000000001], [35.312398000000002, -11.439145999999999], [36.514082000000002, -11.720938], [36.775151000000001, -11.594537000000001], [37.471283999999997, -11.568751000000001], [37.827644999999997, -11.268769000000001], [38.427557, -11.285202], [39.521030000000003, -10.896853999999999], [40.316589, -10.317095999999999], [40.478386999999998, -10.765440999999999], [40.437252999999998, -11.761711], [40.560811000000001, -12.639177], [40.599620000000002, -14.201974999999999], [40.775475, -14.691763999999999], [40.477251000000003, -15.406294000000001], [40.089264, -16.100774000000001], [39.452559000000001, -16.720891000000002], [38.538350999999999, -17.101023000000001], [37.411133, -17.586368], [36.281278999999998, -18.659687999999999], [35.896496999999997, -18.84226], [35.198399999999999, -19.552810999999998], [34.786383000000001, -19.784012000000001], [34.701892999999998, -20.497043000000001], [35.176127000000001, -21.254360999999999], [35.373427999999997, -21.840837000000001], [35.385848000000003, -22.140000000000001], [35.562545999999998, -22.09], [35.533935, -23.070788], [35.371774000000002, -23.535359], [35.607469999999999, -23.706562999999999], [35.458745999999998, -24.122610000000002], [35.040734999999998, -24.478351], [34.215823999999998, -24.816313999999998], [33.013210000000001, -25.357572999999999], [32.574632000000001, -25.727318], [32.660362999999997, -26.148584], [32.915954999999997, -26.215866999999999], [32.830120000000001, -26.742191999999999], [32.071665000000003, -26.733820000000001], [31.985779000000001, -26.291779999999999], [31.837778, -25.843332], [31.752407999999999, -25.484283999999999], [31.930589000000001, -24.369416999999999], [31.670397999999999, -23.658968999999999], [31.191409, -22.25151], [32.244987999999999, -21.116489000000001], [32.508693000000001, -20.395292000000001], [32.659742999999999, -20.304290000000002], [32.772708000000002, -19.715592000000001], [32.611994000000003, -19.419383], [32.654885999999998, -18.672090000000001], [32.849860999999997, -17.979057000000001], [32.847639000000001, -16.713398000000002], [32.328239000000004, -16.392074000000001], [31.852041, -16.319417000000001], [31.636498, -16.07199], [31.173064, -15.860944], [30.338954999999999, -15.880839], [30.274256000000001, -15.507787], [30.179480999999999, -14.796099], [33.214024999999999, -13.97186], [33.789700000000003, -14.451831], [34.064824999999999, -14.35995], [34.459632999999997, -14.613009999999999], [34.517665999999998, -15.013709], [34.307290999999999, -15.478641], [34.381292000000002, -16.18356], [35.033810000000003, -16.801300000000001], [35.339063000000003, -16.10744], [35.771904999999997, -15.896858999999999], [35.686844999999998, -14.611046], [35.267955999999998, -13.887834], [34.907150999999999, -13.565424999999999], [34.559989000000002, -13.579998], [34.280006, -12.280025], [34.559989000000002, -11.520020000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a", "fr": "Mozambique", "en": "Mozambique", "nl": "Mozambique", "pt": "Mo\u00e7ambique", "no": "Mosambik", "de": "Mosambik", "it": "Mozambico", "sv": "Mo\u00e7ambique", "pl": "Mozambik", "fi": "Mosambik", "zh": "\u83ab\u6851\u6bd4\u514b", "ja": "\u30e2\u30b6\u30f3\u30d3\u30fc\u30af", "es": "Mozambique"}, "label_fr": "Mozambique", "name": "Mozambique", "dbpedia_uri": "http://dbpedia.org/resource/Mozambique"}, "id": "MOZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-12.17075, 14.616834000000001], [-12.830658, 15.303692], [-13.435738000000001, 16.039383000000001], [-14.099520999999999, 16.304302], [-14.577348000000001, 16.598264], [-15.135737000000001, 16.587281999999998], [-15.623666, 16.369337000000002], [-16.12069, 16.455663000000001], [-16.463097999999999, 16.135035999999999], [-16.549707999999999, 16.673891999999999], [-16.270551999999999, 17.166962999999999], [-16.146346999999999, 18.108481999999999], [-16.256882999999998, 19.096716000000001], [-16.377651, 19.593817000000001], [-16.277837999999999, 20.092521000000001], [-16.536324, 20.567865999999999], [-17.063423, 20.999752000000001], [-16.845193999999999, 21.333323], [-12.929102, 21.327071], [-13.118753999999999, 22.77122], [-12.874222, 23.284832000000002], [-11.937224000000001, 23.374593999999998], [-11.969419, 25.933353], [-8.6872939999999996, 25.881056000000001], [-8.6844000000000001, 27.395744000000001], [-4.9233370000000001, 24.974574], [-6.4537870000000002, 24.956591], [-5.9711290000000004, 20.640833000000001], [-5.4885229999999998, 16.325102000000001], [-5.315277, 16.201854000000001], [-5.537744, 15.50169], [-9.5502380000000002, 15.486497], [-9.7002550000000003, 15.264106999999999], [-10.086846, 15.330486000000001], [-10.650791, 15.132745999999999], [-11.349095, 15.411256], [-11.666078000000001, 15.388208000000001], [-11.834208, 14.799097], [-12.17075, 14.616834000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "fr": "Mauritanie", "en": "Mauritania", "nl": "Mauritani\u00eb", "pt": "Maurit\u00e2nia", "no": "Mauritania", "de": "Mauretanien", "it": "Mauritania", "sv": "Mauretanien", "pl": "Mauretania", "fi": "Mauritania", "zh": "\u6bdb\u91cc\u5854\u5c3c\u4e9a", "ja": "\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2", "es": "Mauritania"}, "label_fr": "Mauritanie", "name": "Mauritania", "dbpedia_uri": "http://dbpedia.org/resource/Mauritania"}, "id": "MRT"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.559989000000002, -11.520020000000001], [34.280006, -12.280025], [34.559989000000002, -13.579998], [34.907150999999999, -13.565424999999999], [35.267955999999998, -13.887834], [35.686844999999998, -14.611046], [35.771904999999997, -15.896858999999999], [35.339063000000003, -16.10744], [35.033810000000003, -16.801300000000001], [34.381292000000002, -16.18356], [34.307290999999999, -15.478641], [34.517665999999998, -15.013709], [34.459632999999997, -14.613009999999999], [34.064824999999999, -14.35995], [33.789700000000003, -14.451831], [33.214024999999999, -13.97186], [32.688164999999998, -13.712858000000001], [32.991764000000003, -12.783871], [33.306421999999998, -12.435778000000001], [33.114288999999999, -11.607198], [33.315309999999997, -10.79655], [33.485688000000003, -10.525558999999999], [33.231388000000003, -9.6767219999999998], [32.759374999999999, -9.2305989999999998], [33.739728999999997, -9.4171510000000005], [33.940837999999999, -9.6936739999999997], [34.280006, -10.16], [34.559989000000002, -11.520020000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0430\u0432\u0438", "fr": "Malawi", "en": "Malawi", "nl": "Malawi", "pt": "Malawi", "no": "Malawi", "de": "Malawi", "it": "Malawi", "sv": "Malawi", "pl": "Malawi", "fi": "Malawi", "zh": "\u9a6c\u62c9\u7ef4", "ja": "\u30de\u30e9\u30a6\u30a4", "es": "Malaui"}, "label_fr": "Malawi", "name": "Malawi", "dbpedia_uri": "http://dbpedia.org/resource/Malawi"}, "id": "MWI"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[101.07551599999999, 6.2048670000000001], [101.154219, 5.6913840000000002], [101.81428200000001, 5.8108079999999998], [102.141187, 6.2216360000000002], [102.37114699999999, 6.1282050000000003], [102.96170499999999, 5.5244949999999999], [103.381215, 4.8550009999999997], [103.438575, 4.1816060000000004], [103.332122, 3.7266979999999998], [103.429429, 3.3828689999999999], [103.502448, 2.7910189999999999], [103.854674, 2.5154540000000001], [104.24793200000001, 1.631141], [104.22881099999999, 1.293048], [103.519707, 1.226334], [102.573615, 1.9671149999999999], [101.390638, 2.7608139999999999], [101.27354, 3.270292], [100.695435, 3.9391400000000001], [100.557408, 4.7672800000000004], [100.19670600000001, 5.3124929999999999], [100.30625999999999, 6.0405620000000004], [100.085757, 6.4644890000000004], [100.259596, 6.6428250000000002], [101.07551599999999, 6.2048670000000001]]], [[[118.61832099999999, 4.4782019999999996], [117.882035, 4.1375510000000002], [117.015214, 4.3060939999999999], [115.865517, 4.306559], [115.51907799999999, 3.169238], [115.13403700000001, 2.821482], [114.62135499999999, 1.430688], [113.80585000000001, 1.217549], [112.859809, 1.49779], [112.380252, 1.410121], [111.79754800000001, 0.90444100000000005], [111.159138, 0.97647799999999996], [110.514061, 0.77313100000000001], [109.83022699999999, 1.338136], [109.66325999999999, 2.0064669999999998], [110.396135, 1.663775], [111.168853, 1.8506370000000001], [111.370081, 2.6973029999999998], [111.79692799999999, 2.8858969999999999], [112.995615, 3.102395], [113.712935, 3.8935089999999999], [114.20401699999999, 4.525874], [114.65959599999999, 4.0076369999999999], [114.869557, 4.3483140000000002], [115.347461, 4.3166359999999999], [115.4057, 4.955228], [115.45071, 5.44773], [116.220741, 6.1431909999999998], [116.725103, 6.9247709999999998], [117.129626, 6.9280530000000002], [117.643393, 6.4221659999999998], [117.689075, 5.9874900000000002], [118.347691, 5.7086959999999998], [119.181904, 5.4078359999999996], [119.110694, 5.0161280000000001], [118.439727, 4.9665189999999999], [118.61832099999999, 4.4782019999999996]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f", "fr": "Malaisie", "en": "Malaysia", "nl": "Maleisi\u00eb", "pt": "Mal\u00e1sia", "no": "Malaysia", "de": "Malaysia", "it": "Malesia", "sv": "Malaysia", "pl": "Malezja", "fi": "Malesia", "zh": "\u9a6c\u6765\u897f\u4e9a", "ja": "\u30de\u30ec\u30fc\u30b7\u30a2", "es": "Malasia"}, "label_fr": "Malaisie", "name": "Malaysia", "dbpedia_uri": "http://dbpedia.org/resource/Malaysia"}, "id": "MYS"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.344977, -28.576705], [15.601818, -27.821247], [15.210471999999999, -27.090955999999998], [14.989711, -26.117372], [14.743214, -25.39292], [14.408144, -23.853014000000002], [14.385717, -22.656652999999999], [14.257714, -22.111208000000001], [13.868641999999999, -21.699037000000001], [13.352498000000001, -20.872834000000001], [12.826845, -19.673165999999998], [12.608563999999999, -19.045349000000002], [11.794919, -18.069129], [11.734199, -17.301888999999999], [12.215460999999999, -17.111668000000002], [12.814081, -16.941343], [13.462362000000001, -16.971212000000001], [14.058501, -17.423380999999999], [14.209707, -17.353100999999999], [18.263309, -17.309951000000002], [18.956187, -17.789095], [21.377175999999999, -17.930636], [23.215047999999999, -17.523116000000002], [24.033861999999999, -17.295843000000001], [24.682348999999999, -17.353411000000001], [25.07695, -17.578823], [25.084443, -17.661816000000002], [24.520705, -17.887125000000001], [24.217365000000001, -17.889347000000001], [23.579006, -18.281261000000001], [23.196857999999999, -17.869038], [21.65504, -18.219145999999999], [20.910640999999998, -18.252219], [20.881133999999999, -21.814326999999999], [19.895458000000001, -21.849157000000002], [19.895768, -24.767790000000002], [19.894734, -28.461105], [19.002127000000002, -28.972442999999998], [18.464898999999999, -29.045462000000001], [17.836151999999998, -28.856377999999999], [17.387497, -28.783514], [17.218928999999999, -28.355943], [16.824017000000001, -28.082162], [16.344977, -28.576705]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0430\u043c\u0438\u0431\u0438\u044f", "fr": "Namibie", "en": "Namibia", "nl": "Namibi\u00eb", "pt": "Nam\u00edbia", "no": "Namibia", "de": "Namibia", "it": "Namibia", "sv": "Namibia", "pl": "Namibia", "fi": "Namibia", "zh": "\u7eb3\u7c73\u6bd4\u4e9a", "ja": "\u30ca\u30df\u30d3\u30a2", "es": "Namibia"}, "label_fr": "Namibie", "name": "Namibia", "dbpedia_uri": "http://dbpedia.org/resource/Namibia"}, "id": "NAM"}, {"geometry": {"type": "Polygon", "coordinates": [[[165.77999, -21.080005], [166.59999099999999, -21.700019000000001], [167.12001100000001, -22.159991000000002], [166.74003500000001, -22.399975999999999], [166.18973199999999, -22.129708000000001], [165.47437500000001, -21.679607000000001], [164.829815, -21.149819999999998], [164.16799499999999, -20.444747], [164.029606, -20.105646], [164.45996700000001, -20.120011999999999], [165.020036, -20.459990999999999], [165.46000900000001, -20.800021999999998], [165.77999, -21.080005]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0432\u0430\u044f \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u044f", "fr": "Nouvelle-Cal\u00e9donie", "en": "New Caledonia", "nl": "Nieuw-Caledoni\u00eb (eiland)", "pt": "Nova Caled\u00f3nia", "no": "Ny-Caledonia", "de": "Neukaledonien", "it": "Nuova Caledonia", "sv": "Nya Kaledonien", "pl": "Nowa Kaledonia", "fi": "Uusi-Kaledonia", "zh": "\u65b0\u5580\u91cc\u591a\u5c3c\u4e9e", "ja": "\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2", "es": "Nueva Caledonia"}, "label_fr": "Nouvelle-Cal\u00e9donie", "name": "New Caledonia", "dbpedia_uri": "http://dbpedia.org/resource/New_Caledonia"}, "id": "NCL"}, {"geometry": {"type": "Polygon", "coordinates": [[[2.154474, 11.940149999999999], [2.177108, 12.625018000000001], [1.024103, 12.851826000000001], [0.99304599999999998, 13.335750000000001], [0.42992799999999998, 13.988733], [0.29564600000000002, 14.444235000000001], [0.374892, 14.928908], [1.0157830000000001, 14.968182000000001], [1.3855280000000001, 15.323561], [2.7499929999999999, 15.409525], [3.6382590000000001, 15.56812], [3.7234219999999998, 16.184284000000002], [4.2702099999999996, 16.852226999999999], [4.2674190000000003, 19.155265], [5.6775659999999997, 19.601206999999999], [8.5728930000000005, 21.565660999999999], [11.999506, 23.471668000000001], [13.581424999999999, 23.040506000000001], [14.143871000000001, 22.491288999999998], [14.8513, 22.862950000000001], [15.096888, 21.308519], [15.471076999999999, 21.048456999999999], [15.487147999999999, 20.730415000000001], [15.903247, 20.387619000000001], [15.685741, 19.957180000000001], [15.300440999999999, 17.927949999999999], [15.247731, 16.627306000000001], [13.972201999999999, 15.684366000000001], [13.540393999999999, 14.367134], [13.956699, 13.996691], [13.954477000000001, 13.353448999999999], [14.595781000000001, 13.330427], [14.495787, 12.859396], [14.213531, 12.802035], [14.181336, 12.483656999999999], [13.995353, 12.461565], [13.318702, 13.556355999999999], [13.083987, 13.596147], [12.302071, 13.037189], [11.527803, 13.32898], [10.989592999999999, 13.387323], [10.701032, 13.246918000000001], [10.114814000000001, 13.277252000000001], [9.5249279999999992, 12.851101999999999], [9.0149329999999992, 12.826658999999999], [7.8046709999999999, 13.343527], [7.3307469999999997, 13.098038000000001], [6.8204419999999999, 13.115091], [6.4454260000000003, 13.492768], [5.4430579999999997, 13.865924], [4.3683439999999996, 13.747482], [4.1079460000000001, 13.531216000000001], [3.9672830000000001, 12.956109], [3.680634, 12.552903000000001], [3.6111800000000001, 11.660167], [2.848643, 12.235636], [2.490164, 12.233052000000001], [2.154474, 11.940149999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0433\u0435\u0440", "fr": "Niger", "en": "Niger", "nl": "Niger (land)", "pt": "N\u00edger", "no": "Niger", "de": "Niger", "it": "Niger", "sv": "Niger", "pl": "Niger", "fi": "Niger", "zh": "\u5c3c\u65e5\u5c14", "ja": "\u30cb\u30b8\u30a7\u30fc\u30eb", "es": "N\u00edger"}, "label_fr": "Niger", "name": "Niger", "dbpedia_uri": "http://dbpedia.org/resource/Niger"}, "id": "NER"}, {"geometry": {"type": "Polygon", "coordinates": [[[8.5002879999999994, 4.7719829999999996], [7.4621079999999997, 4.4121079999999999], [7.0825959999999997, 4.4646889999999999], [6.6980719999999998, 4.2405939999999998], [5.8981729999999999, 4.2624529999999998], [5.3628049999999998, 4.8879710000000003], [5.0335739999999998, 5.611802], [4.3256069999999998, 6.270651], [3.5741800000000001, 6.2583000000000002], [2.6917019999999998, 6.2588169999999996], [2.749063, 7.8707339999999997], [2.7237930000000001, 8.5068450000000002], [2.9123079999999999, 9.1376080000000002], [3.2203520000000001, 9.444153], [3.705438, 10.06321], [3.6000700000000001, 10.332186], [3.7971119999999998, 10.734745999999999], [3.5722160000000001, 11.327939000000001], [3.6111800000000001, 11.660167], [3.680634, 12.552903000000001], [3.9672830000000001, 12.956109], [4.1079460000000001, 13.531216000000001], [4.3683439999999996, 13.747482], [5.4430579999999997, 13.865924], [6.4454260000000003, 13.492768], [6.8204419999999999, 13.115091], [7.3307469999999997, 13.098038000000001], [7.8046709999999999, 13.343527], [9.0149329999999992, 12.826658999999999], [9.5249279999999992, 12.851101999999999], [10.114814000000001, 13.277252000000001], [10.701032, 13.246918000000001], [10.989592999999999, 13.387323], [11.527803, 13.32898], [12.302071, 13.037189], [13.083987, 13.596147], [13.318702, 13.556355999999999], [13.995353, 12.461565], [14.181336, 12.483656999999999], [14.577178, 12.085361000000001], [14.468192, 11.904752], [14.415379, 11.572369], [13.572950000000001, 10.798565999999999], [13.308676, 10.160361999999999], [13.1676, 9.6406259999999993], [12.955468, 9.4177719999999994], [12.753672, 8.7177629999999997], [12.218871999999999, 8.3058239999999994], [12.063946, 7.7998079999999996], [11.839309, 7.3970419999999999], [11.745774000000001, 6.9813830000000001], [11.058788, 6.6444270000000003], [10.497375, 7.055358], [10.118277000000001, 7.0387700000000004], [9.5227059999999994, 6.4534820000000002], [9.2331629999999993, 6.4444910000000002], [8.7575330000000005, 5.4796659999999999], [8.5002879999999994, 4.7719829999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0433\u0435\u0440\u0438\u044f", "fr": "Nigeria", "en": "Nigeria", "nl": "Nigeria", "pt": "Nig\u00e9ria", "no": "Nigeria", "de": "Nigeria", "it": "Nigeria", "sv": "Nigeria", "pl": "Nigeria", "fi": "Nigeria", "zh": "\u5948\u53ca\u5229\u4e9e", "ja": "\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2", "es": "Nigeria"}, "label_fr": "Nigeria", "name": "Nigeria", "dbpedia_uri": "http://dbpedia.org/resource/Nigeria"}, "id": "NGA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-85.712540000000004, 11.088445], [-86.058487999999997, 11.403439000000001], [-86.525850000000005, 11.806877], [-86.745992000000001, 12.143962], [-87.167516000000006, 12.458258000000001], [-87.668492999999998, 12.90991], [-87.557467000000003, 13.064552000000001], [-87.392386000000002, 12.914018], [-87.316654, 12.984686], [-87.005769000000001, 13.025793999999999], [-86.880556999999996, 13.254204], [-86.733822000000004, 13.263093], [-86.755087000000003, 13.754845], [-86.520707999999999, 13.778487], [-86.312141999999994, 13.771356000000001], [-86.096264000000005, 14.038187000000001], [-85.801294999999996, 13.836055], [-85.698665000000005, 13.960077999999999], [-85.514413000000005, 14.079012000000001], [-85.165364999999994, 14.354369999999999], [-85.148751000000004, 14.560197000000001], [-85.052786999999995, 14.551541], [-84.924501000000006, 14.790493], [-84.820036999999999, 14.819587], [-84.649581999999995, 14.666805], [-84.449336000000002, 14.621613999999999], [-84.228341999999998, 14.748764], [-83.975720999999993, 14.749435999999999], [-83.628585000000001, 14.880074], [-83.489988999999994, 15.016266999999999], [-83.147219000000007, 14.995829000000001], [-83.233233999999996, 14.899865999999999], [-83.284161999999995, 14.676624], [-83.182125999999997, 14.310703], [-83.412499999999994, 13.970078000000001], [-83.519831999999994, 13.567698999999999], [-83.552206999999996, 13.127053999999999], [-83.498514999999998, 12.869292], [-83.473322999999993, 12.419086999999999], [-83.626103999999998, 12.32085], [-83.719612999999995, 11.893124], [-83.650857999999999, 11.629032], [-83.855469999999997, 11.373310999999999], [-83.808936000000003, 11.103044000000001], [-83.655612000000005, 10.938764000000001], [-83.895054000000002, 10.726839], [-84.190179000000001, 10.79345], [-84.355930999999998, 10.999226], [-84.673068999999998, 11.082656999999999], [-84.903002999999998, 10.952303000000001], [-85.561852000000002, 11.217119], [-85.712540000000004, 11.088445]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430", "fr": "Nicaragua", "en": "Nicaragua", "nl": "Nicaragua", "pt": "Nicar\u00e1gua", "no": "Nicaragua", "de": "Nicaragua", "it": "Nicaragua", "sv": "Nicaragua", "pl": "Nikaragua", "fi": "Nicaragua", "zh": "\u5c3c\u52a0\u62c9\u74dc", "ja": "\u30cb\u30ab\u30e9\u30b0\u30a2", "es": "Nicaragua"}, "label_fr": "Nicaragua", "name": "Nicaragua", "dbpedia_uri": "http://dbpedia.org/resource/Nicaragua"}, "id": "NIC"}, {"geometry": {"type": "Polygon", "coordinates": [[[6.0741829999999997, 53.510402999999997], [6.9051400000000003, 53.482162000000002], [7.0920529999999999, 53.144043000000003], [6.8428699999999996, 52.228439999999999], [6.5893969999999999, 51.852029000000002], [5.988658, 51.851616], [6.1566580000000002, 50.803721000000003], [5.6069760000000004, 51.037298], [4.9739909999999998, 51.475023999999998], [4.0470709999999999, 51.267259000000003], [3.3149709999999999, 51.345754999999997], [3.8302890000000001, 51.620545], [4.705997, 53.091797999999997], [6.0741829999999997, 53.510402999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u044b", "fr": "Pays-Bas", "en": "Netherlands", "nl": "Nederland", "pt": "Pa\u00edses Baixos", "no": "Nederland", "de": "Niederlande", "it": "Paesi Bassi", "sv": "Nederl\u00e4nderna", "pl": "Holandia", "fi": "Alankomaat", "zh": "\u8377\u5170", "ja": "\u30aa\u30e9\u30f3\u30c0", "es": "Pa\u00edses Bajos"}, "label_fr": "Pays-Bas", "name": "Netherlands", "dbpedia_uri": "http://dbpedia.org/resource/Netherlands"}, "id": "NLD"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[28.165547, 71.185473999999999], [31.293417999999999, 70.453788000000003], [30.005434999999999, 70.186259000000007], [31.101078999999999, 69.558080000000004], [29.399581000000001, 69.156915999999995], [28.591930000000001, 69.064777000000007], [29.015573, 69.766491000000002], [27.732292000000001, 70.164192999999997], [26.179621999999998, 69.825299000000001], [25.689212999999999, 69.092113999999995], [24.735679000000001, 68.649557000000001], [23.662050000000001, 68.891247000000007], [22.356238000000001, 68.841740999999999], [21.244935999999999, 69.370442999999995], [20.645593000000002, 69.106246999999996], [20.025269000000002, 69.065139000000002], [19.87856, 68.407194000000004], [17.993867999999999, 68.567391000000001], [17.729182000000002, 68.010552000000004], [16.768878999999998, 68.013936999999999], [16.108712000000001, 67.302456000000006], [15.108411, 66.193866999999997], [13.55569, 64.787028000000007], [13.919905, 64.445420999999996], [13.571916, 64.049114000000003], [12.579935000000001, 64.066219000000004], [11.930569, 63.128318], [11.992063999999999, 61.800362], [12.631147, 61.293571999999998], [12.300366, 60.117933000000001], [11.468272000000001, 59.432392999999998], [11.027369, 58.856149000000002], [10.356557, 59.469807000000003], [8.3819999999999997, 58.313288], [7.0487479999999998, 58.078884000000002], [5.6658350000000004, 58.588155], [5.3082339999999997, 59.663232000000001], [4.9920780000000002, 61.970998000000002], [5.9128999999999996, 62.614472999999997], [8.5534110000000005, 63.454008000000002], [10.527709, 64.486037999999994], [12.358347, 65.879726000000005], [14.761146, 67.810642000000001], [16.435927, 68.563204999999996], [19.184028000000001, 69.817443999999995], [21.378416000000001, 70.255168999999995], [23.023741999999999, 70.202072000000001], [24.546543, 71.030496999999997], [26.370049999999999, 70.986261999999996], [28.165547, 71.185473999999999]]], [[[24.724119999999999, 77.853849999999994], [22.490320000000001, 77.444929999999999], [20.726009999999999, 77.677040000000005], [21.41611, 77.935040000000001], [20.811900000000001, 78.254630000000006], [22.884260000000001, 78.454939999999993], [23.28134, 78.079539999999994], [24.724119999999999, 77.853849999999994]]], [[[18.251830000000002, 79.701750000000004], [21.54383, 78.956109999999995], [19.027370000000001, 78.562600000000003], [18.471720000000001, 77.826689999999999], [17.59441, 77.637960000000007], [17.118200000000002, 76.80941], [15.91315, 76.770449999999997], [13.762589999999999, 77.380350000000007], [14.669560000000001, 77.735650000000007], [13.1706, 78.024929999999998], [11.22231, 78.869299999999996], [10.44453, 79.652389999999997], [13.170769999999999, 80.010459999999995], [13.71852, 79.660390000000007], [15.14282, 79.674310000000006], [15.522550000000001, 80.016080000000002], [16.990849999999998, 80.05086], [18.251830000000002, 79.701750000000004]]], [[[25.447624999999999, 80.407340000000005], [27.407506000000001, 80.056405999999996], [25.924651000000001, 79.517833999999993], [23.024466, 79.400012000000004], [20.075188000000001, 79.566822999999999], [19.897265999999998, 79.842361999999994], [18.462264000000001, 79.859880000000004], [17.368015, 80.318895999999995], [20.455991999999998, 80.598156000000003], [21.907945000000002, 80.357679000000005], [22.919253000000001, 80.657144000000002], [25.447624999999999, 80.407340000000005]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0440\u0432\u0435\u0433\u0438\u044f", "fr": "Norv\u00e8ge", "en": "Norway", "nl": "Noorwegen", "pt": "Noruega", "no": "Norge", "de": "Norwegen", "it": "Norvegia", "sv": "Norge", "pl": "Norwegia", "fi": "Norja", "zh": "\u632a\u5a01", "ja": "\u30ce\u30eb\u30a6\u30a7\u30fc", "es": "Noruega"}, "label_fr": "Norv\u00e8ge", "name": "Norway", "dbpedia_uri": "http://dbpedia.org/resource/Norway"}, "id": "NOR"}, {"geometry": {"type": "Polygon", "coordinates": [[[88.120441, 27.876542000000001], [88.043132999999997, 27.445819], [88.174803999999995, 26.810404999999999], [88.060237999999998, 26.414615000000001], [87.227472000000006, 26.397898000000001], [86.024393000000003, 26.630984999999999], [85.251778999999999, 26.726198], [84.675017999999994, 27.234901000000001], [83.304248999999999, 27.364505999999999], [81.999987000000004, 27.925478999999999], [81.057203000000001, 28.416094999999999], [80.088425000000001, 28.79447], [80.476720999999998, 29.729865], [81.111255999999997, 30.183481], [81.525803999999994, 30.422716999999999], [82.327512999999996, 30.115268], [83.337114999999997, 29.463732], [83.898993000000004, 29.320226000000002], [84.234579999999994, 28.839894000000001], [85.011638000000005, 28.642773999999999], [85.823319999999995, 28.203576000000002], [86.954516999999996, 27.974262], [88.120441, 27.876542000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0435\u043f\u0430\u043b", "fr": "N\u00e9pal", "en": "Nepal", "nl": "Nepal", "pt": "Nepal", "no": "Nepal", "de": "Nepal", "it": "Nepal", "sv": "Nepal", "pl": "Nepal", "fi": "Nepal", "zh": "\u5c3c\u6cca\u5c14", "ja": "\u30cd\u30d1\u30fc\u30eb", "es": "Nepal"}, "label_fr": "N\u00e9pal", "name": "Nepal", "dbpedia_uri": "http://dbpedia.org/resource/Nepal"}, "id": "NPL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[173.020375, -40.919052000000001], [173.24723399999999, -41.331999000000003], [173.958405, -40.926701000000001], [174.24758700000001, -41.349155000000003], [174.24851699999999, -41.770007999999997], [173.87644700000001, -42.233184000000001], [173.22273999999999, -42.970038000000002], [172.71124599999999, -43.372287999999998], [173.08011300000001, -43.853344], [172.308584, -43.865693999999998], [171.45292499999999, -44.242519000000001], [171.18513799999999, -44.897103999999999], [170.61669699999999, -45.908929000000001], [169.831422, -46.355775000000001], [169.33233100000001, -46.641235000000002], [168.41135399999999, -46.619945000000001], [167.763745, -46.290196999999999], [166.676886, -46.219917000000002], [166.50914399999999, -45.852705], [167.046424, -45.110940999999997], [168.303763, -44.123972999999999], [168.949409, -43.935819000000002], [169.66781499999999, -43.555326000000001], [170.52492000000001, -43.031688000000003], [171.12509, -42.512754000000001], [171.569714, -41.767423999999998], [171.94870900000001, -41.514417000000002], [172.097227, -40.956104000000003], [172.79857999999999, -40.493962000000003], [173.020375, -40.919052000000001]]], [[[174.612009, -36.156396999999998], [175.33661599999999, -37.209097999999997], [175.357596, -36.526193999999997], [175.808887, -36.798941999999997], [175.95849000000001, -37.555382000000002], [176.763195, -37.881253000000001], [177.43881300000001, -37.961247999999998], [178.01035400000001, -37.579825], [178.51709399999999, -37.695372999999996], [178.274731, -38.582813000000002], [177.97046, -39.166342999999998], [177.20699300000001, -39.145775999999998], [176.93998099999999, -39.449736000000001], [177.03294600000001, -39.879942999999997], [176.88582400000001, -40.065978000000001], [176.508017, -40.604807999999998], [176.01244, -41.289624000000003], [175.23956699999999, -41.688307999999999], [175.06789800000001, -41.425894999999997], [174.65097299999999, -41.281821000000001], [175.22763, -40.459235999999997], [174.90015700000001, -39.908932999999998], [173.82404700000001, -39.508853999999999], [173.852262, -39.146602000000001], [174.57480200000001, -38.797682999999999], [174.74347399999999, -38.027808], [174.69701699999999, -37.381129000000001], [174.29202799999999, -36.711092000000001], [174.31900400000001, -36.534824], [173.84099699999999, -36.121980999999998], [173.054171, -35.237124999999999], [172.63600500000001, -34.529107000000003], [173.00704200000001, -34.450662000000001], [173.551298, -35.006183], [174.32938999999999, -35.265495999999999], [174.612009, -36.156396999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0432\u0430\u044f \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Nouvelle-Z\u00e9lande", "en": "New Zealand", "nl": "Nieuw-Zeeland", "pt": "Nova Zel\u00e2ndia", "no": "New Zealand", "de": "Neuseeland", "it": "Nuova Zelanda", "sv": "Nya Zeeland", "pl": "Nowa Zelandia", "fi": "Uusi-Seelanti", "zh": "\u65b0\u897f\u5170", "ja": "\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9", "es": "Nueva Zelanda"}, "label_fr": "Nouvelle-Z\u00e9lande", "name": "New Zealand", "dbpedia_uri": "http://dbpedia.org/resource/New_Zealand"}, "id": "NZL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[58.861141000000003, 21.114035000000001], [58.487985999999999, 20.428985999999998], [58.034317999999999, 20.481437], [57.826372999999997, 20.243002000000001], [57.665762000000001, 19.736004999999999], [57.788699999999999, 19.06757], [57.694391000000003, 18.944710000000001], [57.234264000000003, 18.947990999999998], [56.609650999999999, 18.574266999999999], [56.512188999999999, 18.087112999999999], [56.283521, 17.876066999999999], [55.661492000000003, 17.884128], [55.269939000000001, 17.632308999999999], [55.274900000000002, 17.228354], [54.791001999999999, 16.950697000000002], [54.239252999999998, 17.044981], [53.570507999999997, 16.707663], [53.108573, 16.651050999999999], [52.782184000000001, 17.349741999999999], [52.000010000000003, 19.000003], [54.999982000000003, 19.999994000000001], [55.666659000000003, 22.000001000000001], [55.208340999999997, 22.70833], [55.234489000000004, 23.110993000000001], [55.525841, 23.524868999999999], [55.528632000000002, 23.933603999999999], [55.981214000000001, 24.130542999999999], [55.804119, 24.269604000000001], [55.886232999999997, 24.920831], [56.396847000000001, 24.924731999999999], [56.845140000000001, 24.241672999999999], [57.403452999999999, 23.878594], [58.136947999999997, 23.747931000000001], [58.729210999999999, 23.565667999999999], [59.180501999999997, 22.992394999999998], [59.450097999999997, 22.660271000000002], [59.808059999999998, 22.533612000000002], [59.806148, 22.310524999999998], [59.442191000000001, 21.714541000000001], [59.282407999999997, 21.433886000000001], [58.861141000000003, 21.114035000000001]]], [[[56.391421000000001, 25.895990999999999], [56.261042000000003, 25.714606], [56.070821000000002, 26.055464000000001], [56.362017000000002, 26.395934], [56.485678999999998, 26.309118000000002], [56.391421000000001, 25.895990999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041e\u043c\u0430\u043d", "fr": "Oman", "en": "Oman", "nl": "Oman", "pt": "Om\u00e3", "no": "Oman", "de": "Oman", "it": "Oman", "sv": "Oman", "pl": "Oman", "fi": "Oman", "zh": "\u963f\u66fc", "ja": "\u30aa\u30de\u30fc\u30f3", "es": "Om\u00e1n"}, "label_fr": "Oman", "name": "Oman", "dbpedia_uri": "http://dbpedia.org/resource/Oman"}, "id": "OMN"}, {"geometry": {"type": "Polygon", "coordinates": [[[75.158028000000002, 37.133031000000003], [75.896896999999996, 36.666806000000001], [76.192847999999998, 35.898403000000002], [77.837451000000001, 35.494010000000003], [76.871722000000005, 34.653543999999997], [75.757060999999993, 34.504922999999998], [74.240202999999994, 34.748887000000003], [73.749948000000003, 34.317698999999998], [74.104293999999996, 33.441473000000002], [74.451559000000003, 32.764899999999997], [75.258641999999995, 32.271104999999999], [74.405929, 31.692639], [74.421379999999999, 30.979814999999999], [73.450637999999998, 29.976413000000001], [72.823751999999999, 28.961592], [71.777665999999996, 27.913180000000001], [70.616495999999998, 27.989196], [69.514392999999998, 26.940966], [70.168926999999996, 26.491872000000001], [70.282872999999995, 25.722228999999999], [70.844699000000006, 25.215102000000002], [71.043239999999997, 24.356524], [68.842599000000007, 24.359134000000001], [68.176644999999994, 23.691965], [67.443667000000005, 23.944844], [67.145442000000003, 24.663611], [66.372827999999998, 25.425141], [64.530407999999994, 25.237038999999999], [62.905701000000001, 25.218409000000001], [61.497363, 25.078237000000001], [61.874186999999999, 26.239975000000001], [63.316631999999998, 26.756532], [63.233898000000003, 27.217047000000001], [62.755426, 27.378923], [62.727829999999997, 28.259644999999999], [61.771867999999998, 28.699334], [61.369309000000001, 29.303276], [60.874248000000001, 29.829239000000001], [62.549857000000003, 29.318572], [63.550260999999999, 29.468330999999999], [64.148002000000005, 29.340819], [64.350419000000002, 29.560030999999999], [65.046862000000004, 29.472180999999999], [66.346473000000003, 29.887943], [66.381457999999995, 30.738899], [66.938890999999998, 31.304911000000001], [67.683394000000007, 31.303153999999999], [67.792688999999996, 31.582930000000001], [68.556932000000003, 31.71331], [68.926676999999998, 31.620189], [69.317763999999997, 31.901412000000001], [69.262522000000004, 32.501944000000002], [69.687146999999996, 33.105499000000002], [70.323594, 33.358533000000001], [69.930543, 34.020119999999999], [70.881803000000005, 33.988855999999998], [71.156773000000001, 34.348911000000001], [71.115019000000004, 34.733125999999999], [71.613076000000007, 35.153202999999998], [71.498767999999998, 35.650562999999998], [71.262348000000003, 36.074387999999999], [71.846292000000005, 36.509942000000002], [72.920024999999995, 36.720007000000003], [74.067552000000006, 36.836176000000002], [74.575892999999994, 37.020840999999997], [75.158028000000002, 37.133031000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Pakistan", "en": "Pakistan", "nl": "Pakistan", "pt": "Paquist\u00e3o", "no": "Pakistan", "de": "Pakistan", "it": "Pakistan", "sv": "Pakistan", "pl": "Pakistan", "fi": "Pakistan", "zh": "\u5df4\u57fa\u65af\u5766", "ja": "\u30d1\u30ad\u30b9\u30bf\u30f3", "es": "Pakist\u00e1n"}, "label_fr": "Pakistan", "name": "Pakistan", "dbpedia_uri": "http://dbpedia.org/resource/Pakistan"}, "id": "PAK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-77.881570999999994, 7.2237710000000002], [-78.214935999999994, 7.5122549999999997], [-78.429160999999993, 8.0520409999999991], [-78.182096000000001, 8.3191819999999996], [-78.435464999999994, 8.3877050000000004], [-78.622121000000007, 8.7181239999999995], [-79.120306999999997, 8.9960920000000009], [-79.557877000000005, 8.9323750000000004], [-79.760577999999995, 8.5845149999999997], [-80.164480999999995, 8.3333159999999999], [-80.382659000000004, 8.2984089999999995], [-80.480688999999998, 8.0903080000000003], [-80.003690000000006, 7.5475240000000001], [-80.276670999999993, 7.4197540000000002], [-80.421158000000005, 7.2715719999999999], [-80.886401000000006, 7.2205409999999999], [-81.059543000000005, 7.8179210000000001], [-81.189716000000004, 7.6479059999999999], [-81.519514999999998, 7.7066100000000004], [-81.721311, 8.1089629999999993], [-82.131440999999995, 8.1753929999999997], [-82.390934000000001, 8.2923620000000007], [-82.820081000000002, 8.2908639999999991], [-82.850958000000006, 8.0738230000000009], [-82.965783000000002, 8.225028], [-82.913176000000007, 8.4235170000000004], [-82.829770999999994, 8.6262950000000007], [-82.868656999999999, 8.8072660000000003], [-82.719183000000001, 8.9257089999999994], [-82.927154999999999, 9.0743299999999998], [-82.932890999999998, 9.4768120000000007], [-82.546195999999995, 9.5661349999999992], [-82.187123, 9.2074490000000004], [-82.207586000000006, 8.9955750000000005], [-81.808566999999996, 8.9506169999999994], [-81.714153999999994, 9.031955], [-81.439286999999993, 8.7862340000000003], [-80.947301999999993, 8.8585039999999999], [-80.521901, 9.1110720000000001], [-79.914599999999993, 9.3127650000000006], [-79.573302999999996, 9.6116100000000007], [-79.021191999999999, 9.5529309999999992], [-79.058449999999993, 9.4545650000000006], [-78.500888000000003, 9.4204589999999993], [-78.055927999999994, 9.2477300000000007], [-77.729513999999995, 8.9468440000000005], [-77.353361000000007, 8.6705050000000004], [-77.474722999999997, 8.524286], [-77.242565999999997, 7.9352780000000003], [-77.431107999999995, 7.6380610000000004], [-77.753414000000006, 7.7098399999999998], [-77.881570999999994, 7.2237710000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043d\u0430\u043c\u0430", "fr": "Panam\u00e1", "en": "Panama", "nl": "Panama (land)", "pt": "Panam\u00e1", "no": "Panama", "de": "Panama", "it": "Panam\u00e1", "sv": "Panama", "pl": "Panama", "fi": "Panama", "zh": "\u5df4\u62ff\u9a6c", "ja": "\u30d1\u30ca\u30de", "es": "Panam\u00e1"}, "label_fr": "Panam\u00e1", "name": "Panama", "dbpedia_uri": "http://dbpedia.org/resource/Panama"}, "id": "PAN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-69.590423999999999, -17.580012], [-69.858444000000006, -18.092694000000002], [-70.372572000000005, -18.347975000000002], [-71.375249999999994, -17.773799], [-71.462040999999999, -17.363488], [-73.44453, -16.359362999999998], [-75.237882999999997, -15.265682999999999], [-76.009204999999994, -14.649286], [-76.423468999999997, -13.823187000000001], [-76.259242, -13.535038999999999], [-77.106191999999993, -12.222716], [-78.092152999999996, -10.377712000000001], [-79.036952999999997, -8.3865680000000005], [-79.445920000000001, -7.9308329999999998], [-79.760577999999995, -7.1943409999999997], [-80.537481999999997, -6.5416679999999996], [-81.249995999999996, -6.1368340000000003], [-80.926347000000007, -5.6905570000000001], [-81.410943000000003, -4.7367650000000001], [-81.099670000000003, -4.0363939999999996], [-80.302560999999997, -3.4048560000000001], [-80.184015000000002, -3.8211620000000002], [-80.469295000000002, -4.0592870000000003], [-80.442241999999993, -4.4257239999999998], [-80.028908000000001, -4.3460910000000004], [-79.624978999999996, -4.4541979999999999], [-79.205288999999993, -4.9591289999999999], [-78.639897000000005, -4.547784], [-78.450683999999995, -3.873097], [-77.837905000000006, -3.0030209999999999], [-76.635394000000005, -2.6086779999999998], [-75.544995999999998, -1.5616099999999999], [-75.233722999999998, -0.91141700000000003], [-75.373222999999996, -0.152032], [-75.106624999999994, -0.057204999999999999], [-74.441601000000006, -0.53081999999999996], [-74.122394999999997, -1.0028330000000001], [-73.659503999999998, -1.260491], [-73.070391999999998, -2.308954], [-72.325787000000005, -2.434218], [-71.774760999999998, -2.1697899999999999], [-71.413646, -2.3428019999999998], [-70.813475999999994, -2.2568649999999999], [-70.047708999999998, -2.7251560000000001], [-70.692682000000005, -3.7428720000000002], [-70.394043999999994, -3.766591], [-69.893635000000003, -4.2981870000000004], [-70.794769000000002, -4.2512650000000001], [-70.928843000000001, -4.4015909999999998], [-71.748406000000003, -4.5939829999999997], [-72.891927999999993, -5.2745610000000003], [-72.964506999999998, -5.7412510000000001], [-73.219711000000004, -6.0891890000000002], [-73.120026999999993, -6.629931], [-73.724486999999996, -6.9185949999999998], [-73.723400999999996, -7.3409990000000001], [-73.987234999999998, -7.5238300000000002], [-73.571059000000005, -8.4244470000000007], [-73.015383, -9.0328330000000001], [-73.226713000000004, -9.4622130000000002], [-72.563033000000004, -9.520194], [-72.184890999999993, -10.053597999999999], [-71.302412000000004, -10.079435999999999], [-70.481893999999997, -9.4901180000000007], [-70.548686000000004, -11.009147], [-70.093751999999995, -11.123972], [-69.529678000000004, -10.951734], [-68.665080000000003, -12.561299999999999], [-68.880080000000007, -12.899729000000001], [-68.929224000000005, -13.602684], [-68.948886999999999, -14.453639000000001], [-69.339534999999998, -14.953194999999999], [-69.160347000000002, -15.323974], [-69.389764, -15.660129], [-68.959635000000006, -16.500698], [-69.590423999999999, -17.580012]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0435\u0440\u0443", "fr": "P\u00e9rou", "en": "Peru", "nl": "Peru", "pt": "Peru", "no": "Peru", "de": "Peru", "it": "Per\u00f9", "sv": "Peru", "pl": "Peru", "fi": "Peru", "zh": "\u79d8\u9c81", "ja": "\u30da\u30eb\u30fc", "es": "Per\u00fa"}, "label_fr": "P\u00e9rou", "name": "Peru", "dbpedia_uri": "http://dbpedia.org/resource/Peru"}, "id": "PER"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[126.376814, 8.4147060000000007], [126.47851300000001, 7.7503539999999997], [126.537424, 7.189381], [126.19677299999999, 6.2742940000000003], [125.83142100000001, 7.2937149999999997], [125.36385199999999, 6.7864849999999999], [125.683161, 6.0496569999999998], [125.396512, 5.5810029999999999], [124.21978799999999, 6.1613550000000004], [123.93872, 6.8851360000000001], [124.243662, 7.3606100000000003], [123.610212, 7.8335270000000001], [123.296071, 7.418876], [122.825506, 7.4573749999999999], [122.085499, 6.8994239999999998], [121.919928, 7.1921189999999999], [122.312359, 8.0349620000000002], [122.942398, 8.3162369999999992], [123.48768800000001, 8.6930099999999992], [123.841154, 8.2403239999999993], [124.60147000000001, 8.5141580000000001], [124.764612, 8.9604090000000003], [125.471391, 8.9869970000000006], [125.41211800000001, 9.7603349999999995], [126.222714, 9.2860739999999993], [126.30663699999999, 8.7824869999999997], [126.376814, 8.4147060000000007]]], [[[123.982438, 10.278779], [123.623183, 9.9500910000000005], [123.309921, 9.3182690000000008], [122.99588300000001, 9.0221889999999991], [122.380055, 9.7133610000000008], [122.586089, 9.9810449999999999], [122.837081, 10.261157000000001], [122.947411, 10.881868000000001], [123.49885, 10.940624], [123.337774, 10.267384], [124.07793599999999, 11.232726], [123.982438, 10.278779]]], [[[118.504581, 9.3163830000000001], [117.17427499999999, 8.3674999999999997], [117.66447700000001, 9.0668889999999998], [118.386914, 9.6844999999999999], [118.987342, 10.376291999999999], [119.51149599999999, 11.369668000000001], [119.689677, 10.554290999999999], [119.02945800000001, 10.003653], [118.504581, 9.3163830000000001]]], [[[121.883548, 11.891755], [122.48382100000001, 11.582186999999999], [123.120217, 11.58366], [123.100838, 11.165934], [122.637714, 10.741308], [122.00261, 10.441017], [121.967367, 10.905690999999999], [122.03837, 11.415841], [121.883548, 11.891755]]], [[[125.50255199999999, 12.162694999999999], [125.78346500000001, 11.046122], [125.01188399999999, 11.311455], [125.03276099999999, 10.975816], [125.277449, 10.358722], [124.80181899999999, 10.134679], [124.76016799999999, 10.837994999999999], [124.459101, 10.88993], [124.302522, 11.495371], [124.891013, 11.415583], [124.87799, 11.79419], [124.266762, 12.557760999999999], [125.227116, 12.535721000000001], [125.50255199999999, 12.162694999999999]]], [[[121.527394, 13.06959], [121.26219, 12.20556], [120.833896, 12.704496000000001], [120.323436, 13.466412999999999], [121.180128, 13.429697000000001], [121.527394, 13.06959]]], [[[121.321308, 18.504065000000001], [121.937601, 18.218551999999999], [122.24600599999999, 18.478950000000001], [122.336957, 18.224882999999998], [122.174279, 17.810282999999998], [122.515654, 17.093505], [122.25231100000001, 16.262443999999999], [121.662786, 15.931018], [121.50507, 15.124814000000001], [121.728829, 14.328376], [122.258925, 14.218202], [122.70127599999999, 14.336541], [123.950295, 13.782131], [123.855107, 13.237771], [124.18128900000001, 12.997527], [124.07741900000001, 12.536676999999999], [123.298035, 13.027526], [122.928652, 13.55292], [122.67135500000001, 13.185836], [122.03465, 13.784482000000001], [121.126385, 13.636687], [120.628637, 13.857656], [120.679384, 14.271015999999999], [120.99181900000001, 14.525392999999999], [120.693336, 14.756671000000001], [120.564145, 14.396279], [120.070429, 14.970869], [119.920929, 15.406347], [119.88377300000001, 16.363703999999998], [120.28648800000001, 16.034628999999999], [120.390047, 17.599081000000002], [120.715867, 18.505227000000001], [121.321308, 18.504065000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u043b\u0438\u043f\u043f\u0438\u043d\u044b", "fr": "Philippines", "en": "Philippines", "nl": "Filipijnen", "pt": "Filipinas", "no": "Filippinene", "de": "Philippinen", "it": "Filippine", "sv": "Filippinerna", "pl": "Filipiny", "fi": "Filippiinit", "ja": "\u30d5\u30a3\u30ea\u30d4\u30f3", "es": "Filipinas"}, "label_fr": "Philippines", "name": "Philippines", "dbpedia_uri": "http://dbpedia.org/resource/Philippines"}, "id": "PHL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[155.88002599999999, -6.8199969999999999], [155.59999099999999, -6.9199909999999996], [155.16699399999999, -6.5359309999999997], [154.72919200000001, -5.9008279999999997], [154.51411400000001, -5.1391179999999999], [154.65250399999999, -5.0424309999999997], [154.75999100000001, -5.3399840000000003], [155.062918, -5.5667920000000004], [155.54774599999999, -6.2006550000000002], [156.01996500000001, -6.5400140000000002], [155.88002599999999, -6.8199969999999999]]], [[[151.98279600000001, -5.4780629999999997], [151.45910699999999, -5.5602799999999997], [151.30139, -5.8407280000000004], [150.754447, -6.0837630000000003], [150.241197, -6.3177539999999999], [149.70996299999999, -6.3165129999999996], [148.89006499999999, -6.0260400000000001], [148.31893700000001, -5.7471420000000002], [148.401826, -5.4377560000000003], [149.29841200000001, -5.583742], [149.845562, -5.505503], [149.99625, -5.0261009999999997], [150.13975600000001, -5.0013480000000001], [150.236908, -5.5322199999999997], [150.807467, -5.4558419999999996], [151.08967200000001, -5.1136929999999996], [151.64788100000001, -4.7570740000000002], [151.53786199999999, -4.1678069999999998], [152.13679200000001, -4.14879], [152.33874299999999, -4.3129660000000003], [152.318693, -4.867661], [151.98279600000001, -5.4780629999999997]]], [[[147.19187400000001, -7.3880239999999997], [148.08463599999999, -8.0441079999999996], [148.734105, -9.1046639999999996], [149.30683500000001, -9.0714360000000003], [149.26663099999999, -9.5144059999999993], [150.03872799999999, -9.6843179999999993], [149.738798, -9.8729370000000003], [150.80162799999999, -10.293687], [150.690575, -10.582713], [150.02839299999999, -10.652476], [149.78231, -10.393267], [148.92313799999999, -10.280923], [147.91301799999999, -10.130440999999999], [147.13544300000001, -9.4924440000000008], [146.567881, -8.9425550000000005], [146.04848100000001, -8.0674139999999994], [144.744168, -7.630128], [143.897088, -7.91533], [143.28637599999999, -8.2454909999999995], [143.41391300000001, -8.9830690000000004], [142.62843100000001, -9.3268210000000007], [142.06825900000001, -9.1595960000000005], [141.033852, -9.1178930000000005], [141.01705699999999, -5.8590220000000004], [141.00021000000001, -2.6001509999999999], [142.73524699999999, -3.2891530000000002], [144.58397099999999, -3.861418], [145.27318, -4.3737380000000003], [145.82978600000001, -4.8764979999999998], [145.981922, -5.4656089999999997], [147.64807300000001, -6.0836589999999999], [147.891108, -6.6140150000000002], [146.97090499999999, -6.7216570000000004], [147.19187400000001, -7.3880239999999997]]], [[[153.140038, -4.4999830000000003], [152.827292, -4.7664270000000002], [152.63867300000001, -4.1761270000000001], [152.406026, -3.7897430000000001], [151.953237, -3.462062], [151.38427899999999, -3.0354220000000001], [150.66204999999999, -2.7414860000000001], [150.939965, -2.5000019999999998], [151.479984, -2.7799849999999999], [151.82001500000001, -2.9999720000000001], [152.23998900000001, -3.2400090000000001], [152.640017, -3.659983], [153.019994, -3.9800149999999999], [153.140038, -4.4999830000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043f\u0443\u0430 \u2014 \u041d\u043e\u0432\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Papouasie-Nouvelle-Guin\u00e9e", "en": "Papua New Guinea", "nl": "Papoea-Nieuw-Guinea", "pt": "Papua-Nova Guin\u00e9", "no": "Papua Ny-Guinea", "de": "Papua-Neuguinea", "it": "Papua Nuova Guinea", "sv": "Papua Nya Guinea", "pl": "Papua-Nowa Gwinea", "fi": "Papua-Uusi-Guinea", "zh": "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a", "ja": "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2", "es": "Pap\u00faa Nueva Guinea"}, "label_fr": "Papouasie-Nouvelle-Guin\u00e9e", "name": "Papua New Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Papua_New_Guinea"}, "id": "PNG"}, {"geometry": {"type": "Polygon", "coordinates": [[[15.016996000000001, 51.106673999999998], [14.607098000000001, 51.745187999999999], [14.685026000000001, 52.089947000000002], [14.4376, 52.624850000000002], [14.074521000000001, 52.981262999999998], [14.353315, 53.248170999999999], [14.119686, 53.757029000000003], [14.802899999999999, 54.050705999999998], [16.363477, 54.513159000000002], [17.622831999999999, 54.851536000000003], [18.620858999999999, 54.682606], [18.696255000000001, 54.438718999999999], [19.660640000000001, 54.426084000000003], [20.892244999999999, 54.312525000000001], [22.731099, 54.327537], [23.243987000000001, 54.220567000000003], [23.484127999999998, 53.912497999999999], [23.527536000000001, 53.470122000000003], [23.804935, 53.089731], [23.799199000000002, 52.691099000000001], [23.199494000000001, 52.486977000000003], [23.508002000000001, 52.023646999999997], [23.527070999999999, 51.578454000000001], [24.029986000000001, 50.705407000000001], [23.922757000000001, 50.424880999999999], [23.426507999999998, 50.308506000000001], [22.518450000000001, 49.476773999999999], [22.776419000000001, 49.027394999999999], [22.558138, 49.085737999999999], [21.607807999999999, 49.470106999999999], [20.887955000000002, 49.328772000000001], [20.415838999999998, 49.431452999999998], [19.825023000000002, 49.217125000000003], [19.320713000000001, 49.571573999999998], [18.909575, 49.435845999999998], [18.853144, 49.496229999999997], [18.392914000000001, 49.988629000000003], [17.649445, 50.049038000000003], [17.554566999999999, 50.362146000000003], [16.868769, 50.473973999999998], [16.719476, 50.215747], [16.176252999999999, 50.422606999999999], [16.238627000000001, 50.697732999999999], [15.490971999999999, 50.784730000000003], [15.016996000000001, 51.106673999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u043e\u043b\u044c\u0448\u0430", "fr": "Pologne", "en": "Poland", "nl": "Polen", "pt": "Pol\u00f3nia", "no": "Polen", "de": "Polen", "it": "Polonia", "sv": "Polen", "pl": "Polska", "fi": "Puola", "zh": "\u6ce2\u5170", "ja": "\u30dd\u30fc\u30e9\u30f3\u30c9", "es": "Polonia"}, "label_fr": "Pologne", "name": "Poland", "dbpedia_uri": "http://dbpedia.org/resource/Poland"}, "id": "POL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-66.282433999999995, 18.514762000000001], [-65.771303000000003, 18.426679], [-65.591003999999998, 18.228034999999998], [-65.847164000000006, 17.975905999999998], [-66.599934000000005, 17.981822999999999], [-67.184162000000001, 17.946553000000002], [-67.242428000000004, 18.374459999999999], [-67.100679, 18.520600999999999], [-66.282433999999995, 18.514762000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0443\u044d\u0440\u0442\u043e-\u0420\u0438\u043a\u043e", "fr": "Porto Rico", "en": "Puerto Rico", "nl": "Puerto Rico", "pt": "Porto Rico", "no": "Puerto Rico", "de": "Puerto Rico", "it": "Porto Rico", "sv": "Puerto Rico", "pl": "Portoryko", "fi": "Puerto Rico", "zh": "\u6ce2\u591a\u9ece\u5404", "ja": "\u30d7\u30a8\u30eb\u30c8\u30ea\u30b3", "es": "Puerto Rico"}, "label_fr": "Porto Rico", "name": "Puerto Rico", "dbpedia_uri": "http://dbpedia.org/resource/Puerto_Rico"}, "id": "PRI"}, {"geometry": {"type": "Polygon", "coordinates": [[[130.640016, 42.395009000000002], [130.78000700000001, 42.220007000000003], [130.40003100000001, 42.280003999999998], [129.96594899999999, 41.941367999999997], [129.667362, 41.601103999999999], [129.70518899999999, 40.882828000000003], [129.18811500000001, 40.661808000000001], [129.0104, 40.485436], [128.63336799999999, 40.189847], [127.96741400000001, 40.025413], [127.53343599999999, 39.75685], [127.50212000000001, 39.323931000000002], [127.385434, 39.213472000000003], [127.783343, 39.050897999999997], [128.349716, 38.612242999999999], [128.205746, 38.370396999999997], [127.780035, 38.304535999999999], [127.07330899999999, 38.256115000000001], [126.68371999999999, 37.804772999999997], [126.23733900000001, 37.840378000000001], [126.17475899999999, 37.749685999999997], [125.689104, 37.940010000000001], [125.568439, 37.752088999999998], [125.27533, 37.669071000000002], [125.240087, 37.857224000000002], [124.981033, 37.948821000000002], [124.71216099999999, 38.108345999999997], [124.98599400000001, 38.548473999999999], [125.221949, 38.665857000000003], [125.132859, 38.848559000000002], [125.38659, 39.387957999999998], [125.321116, 39.551385000000003], [124.737482, 39.660344000000002], [124.265625, 39.928493000000003], [125.079942, 40.569823999999997], [126.182045, 41.107335999999997], [126.869083, 41.816569000000001], [127.343783, 41.503152], [128.20843300000001, 41.466771999999999], [128.05221499999999, 41.994284999999998], [129.59666899999999, 42.424982], [129.99426700000001, 42.985387000000003], [130.640016, 42.395009000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0430\u044f \u041d\u0430\u0440\u043e\u0434\u043d\u043e-\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "Cor\u00e9e du Nord", "en": "North Korea", "nl": "Noord-Korea", "pt": "Coreia do Norte", "no": "Nord-Korea", "de": "Nordkorea", "it": "Corea del Nord", "sv": "Nordkorea", "pl": "Korea P\u00f3\u0142nocna", "fi": "Korean demokraattinen kansantasavalta", "zh": "\u671d\u9c9c\u6c11\u4e3b\u4e3b\u4e49\u4eba\u6c11\u5171\u548c\u56fd", "ja": "\u671d\u9bae\u6c11\u4e3b\u4e3b\u7fa9\u4eba\u6c11\u5171\u548c\u56fd", "es": "Corea del Norte"}, "label_fr": "Cor\u00e9e du Nord", "name": "North Korea", "dbpedia_uri": "http://dbpedia.org/resource/North_Korea"}, "id": "PRK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-9.0348179999999996, 41.880571000000003], [-8.6719460000000002, 42.134689000000002], [-8.2638569999999998, 42.280468999999997], [-8.0131750000000004, 41.790886], [-7.4225130000000004, 41.792074999999997], [-7.251309, 41.918346], [-6.6686059999999996, 41.883386999999999], [-6.3890880000000001, 41.381815000000003], [-6.851127, 41.111083000000001], [-6.86402, 40.330871999999999], [-7.0264129999999998, 40.184524000000003], [-7.066592, 39.711891999999999], [-7.4986319999999997, 39.629570999999999], [-7.0980369999999997, 39.030073000000002], [-7.3740920000000001, 38.373058999999998], [-7.0292810000000001, 38.075763999999999], [-7.1665080000000003, 37.803894], [-7.5371050000000004, 37.428904000000003], [-7.4537259999999996, 37.097788000000001], [-7.855613, 36.838268999999997], [-8.382816, 36.978879999999997], [-8.8988569999999996, 36.868808999999999], [-8.7461009999999995, 37.651345999999997], [-8.8399979999999996, 38.266243000000003], [-9.2874639999999999, 38.358485999999999], [-9.5265710000000006, 38.737428999999999], [-9.4469890000000003, 39.392066], [-9.0483049999999992, 39.755093000000002], [-8.9773530000000008, 40.159306000000001], [-8.7686840000000004, 40.760638999999998], [-8.7908530000000003, 41.184334], [-8.9907889999999995, 41.543458999999999], [-9.0348179999999996, 41.880571000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f", "fr": "Portugal", "en": "Portugal", "nl": "Portugal", "pt": "Portugal", "no": "Portugal", "de": "Portugal", "it": "Portogallo", "sv": "Portugal", "pl": "Portugalia", "fi": "Portugali", "zh": "\u8461\u8404\u7259", "ja": "\u30dd\u30eb\u30c8\u30ac\u30eb", "es": "Portugal"}, "label_fr": "Portugal", "name": "Portugal", "dbpedia_uri": "http://dbpedia.org/resource/Portugal"}, "id": "PRT"}, {"geometry": {"type": "Polygon", "coordinates": [[[-62.685057, -22.249029], [-62.291179, -21.051635000000001], [-62.265960999999997, -20.513735], [-61.786326000000003, -19.633737], [-60.043565000000001, -19.342746999999999], [-59.115042000000003, -19.356905999999999], [-58.183470999999997, -19.868399], [-58.166392000000002, -20.176701000000001], [-57.870674000000001, -20.732688], [-57.937156000000002, -22.090176], [-56.881509999999999, -22.282153999999998], [-56.473317000000002, -22.086300000000001], [-55.797958000000001, -22.356929999999998], [-55.610683000000002, -22.655619000000002], [-55.517639000000003, -23.571998000000001], [-55.400747000000003, -23.956935000000001], [-55.027901999999997, -24.001273999999999], [-54.652833999999999, -23.839577999999999], [-54.292960000000001, -24.021014000000001], [-54.293475999999998, -24.570799999999998], [-54.428946000000003, -25.162185000000001], [-54.625290999999997, -25.739255], [-54.788795, -26.621786], [-55.695846000000003, -27.387837000000001], [-56.486702000000001, -27.548499], [-57.609760000000001, -27.395899], [-58.618174000000003, -27.123719000000001], [-57.633659999999999, -25.603656999999998], [-57.777217, -25.16234], [-58.807127999999999, -24.771459], [-60.028965999999997, -24.032796000000001], [-60.846564999999998, -23.880713], [-62.685057, -22.249029]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439", "fr": "Paraguay", "en": "Paraguay", "nl": "Paraguay", "pt": "Paraguai", "no": "Paraguay", "de": "Paraguay", "it": "Paraguay", "sv": "Paraguay", "pl": "Paragwaj", "fi": "Paraguay", "zh": "\u5df4\u62c9\u572d", "ja": "\u30d1\u30e9\u30b0\u30a2\u30a4", "es": "Paraguay"}, "label_fr": "Paraguay", "name": "Paraguay", "dbpedia_uri": "http://dbpedia.org/resource/Paraguay"}, "id": "PRY"}, {"geometry": {"type": "Polygon", "coordinates": [[[50.810108, 24.754743000000001], [50.743910999999997, 25.482424000000002], [51.013351999999998, 26.006992], [51.286462, 26.114581999999999], [51.589078999999998, 25.801113000000001], [51.606699999999996, 25.215669999999999], [51.389608000000003, 24.627386000000001], [51.112414999999999, 24.556331], [50.810108, 24.754743000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u0442\u0430\u0440", "fr": "Qatar", "en": "Qatar", "nl": "Qatar", "pt": "Qatar", "no": "Qatar", "de": "Katar", "it": "Qatar", "sv": "Qatar", "pl": "Katar", "fi": "Qatar", "zh": "\u5361\u5854\u5c14", "ja": "\u30ab\u30bf\u30fc\u30eb", "es": "Catar"}, "label_fr": "Qatar", "name": "Qatar", "dbpedia_uri": "http://dbpedia.org/resource/Qatar"}, "id": "QAT"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.710531, 47.882193999999998], [23.142236, 48.096341000000002], [23.760957999999999, 47.985598000000003], [24.402056000000002, 47.981878000000002], [24.866316999999999, 47.737526000000003], [25.207743000000001, 47.891055999999999], [25.945941000000001, 47.987149000000002], [26.19745, 48.220880999999999], [26.619337000000002, 48.220725999999999], [26.924175999999999, 48.123263999999999], [27.233872999999999, 47.826771000000001], [27.551165999999998, 47.405116999999997], [28.128029999999999, 46.810476000000001], [28.160018000000001, 46.371563000000002], [28.054442999999999, 45.944586000000001], [28.233554000000002, 45.488283000000003], [28.679779, 45.304031000000002], [29.149725, 45.464925000000001], [29.603289, 45.293308000000003], [29.626543000000002, 45.035390999999997], [29.141611999999999, 44.820210000000003], [28.837858000000001, 44.913874], [28.558081000000001, 43.707462], [27.970106999999999, 43.812468000000003], [27.2424, 44.175986000000002], [26.065159000000001, 43.943494000000001], [25.569272000000002, 43.688445000000002], [24.100679, 43.741050999999999], [23.332301999999999, 43.897010999999999], [22.944832000000002, 43.823785000000001], [22.657150000000001, 44.234923000000002], [22.474008000000001, 44.409227999999999], [22.705725999999999, 44.578003000000002], [22.459022000000001, 44.702517], [22.145088000000001, 44.478422000000002], [21.562023, 44.768946999999997], [21.483526000000001, 45.181170000000002], [20.874313000000001, 45.416375000000002], [20.762174999999999, 45.734572999999997], [20.220192000000001, 46.127468999999998], [21.021951999999999, 46.316088000000001], [21.626515000000001, 46.994238000000003], [22.099768000000001, 47.672438999999997], [22.710531, 47.882193999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0443\u043c\u044b\u043d\u0438\u044f", "fr": "Roumanie", "en": "Romania", "nl": "Roemeni\u00eb", "pt": "Rom\u00e9nia", "no": "Romania", "de": "Rum\u00e4nien", "it": "Romania", "sv": "Rum\u00e4nien", "pl": "Rumunia", "fi": "Romania", "zh": "\u7f85\u99ac\u5c3c\u4e9e", "ja": "\u30eb\u30fc\u30de\u30cb\u30a2", "es": "Rumania"}, "label_fr": "Roumanie", "name": "Romania", "dbpedia_uri": "http://dbpedia.org/resource/Romania"}, "id": "ROU"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[143.64800700000001, 50.747599999999998], [144.65414799999999, 48.976391], [143.17392799999999, 49.306550999999999], [142.55866800000001, 47.861575000000002], [143.533492, 46.836728000000001], [143.50527700000001, 46.137908000000003], [142.74770100000001, 46.740765000000003], [142.09202999999999, 45.966754999999999], [141.906925, 46.805928999999999], [142.01844299999999, 47.780132999999999], [141.90444500000001, 48.859189000000001], [142.13579999999999, 49.615163000000003], [142.17998299999999, 50.952342000000002], [141.594076, 51.935434999999998], [141.682546, 53.301966], [142.606934, 53.762144999999997], [142.20974899999999, 54.225476], [142.654786, 54.365881000000002], [142.914616, 53.704577999999998], [143.26084800000001, 52.740760000000002], [143.23526799999999, 51.756659999999997], [143.64800700000001, 50.747599999999998]]], [[[22.731099, 54.327537], [20.892244999999999, 54.312525000000001], [19.660640000000001, 54.426084000000003], [19.888480999999999, 54.866160000000001], [21.268449, 55.190482000000003], [22.315723999999999, 55.015298999999999], [22.757764000000002, 54.856574000000002], [22.651052, 54.582740999999999], [22.731099, 54.327537]]], [[[-175.01425, 66.584350000000001], [-174.33983000000001, 66.335560000000001], [-174.57182, 67.062190000000001], [-171.85731000000001, 66.913079999999994], [-169.89957999999999, 65.977239999999995], [-170.89107000000001, 65.541390000000007], [-172.53025, 65.437910000000002], [-172.55500000000001, 64.460790000000003], [-172.95533, 64.252690000000001], [-173.89184, 64.282600000000002], [-174.65392, 64.631249999999994], [-175.98353, 64.922880000000006], [-176.20715999999999, 65.356669999999994], [-177.22265999999999, 65.520240000000001], [-178.35992999999999, 65.390519999999995], [-178.90332000000001, 65.740440000000007], [-178.68611000000001, 66.112110000000001], [-179.88377, 65.874560000000002], [-179.43268, 65.404110000000003], [-180, 64.979709], [-180, 68.963635999999994], [-177.55000000000001, 68.200000000000003], [-174.92824999999999, 67.205889999999997], [-175.01425, 66.584350000000001]]], [[[180, 70.832199000000003], [178.903425, 70.781139999999994], [178.7253, 71.098799999999997], [180, 71.515714000000003], [180, 70.832199000000003]]], [[[-178.69378, 70.893020000000007], [-180, 70.832199000000003], [-180, 71.515714000000003], [-179.87187499999999, 71.55762], [-179.02432999999999, 71.555530000000005], [-177.577945, 71.269480000000001], [-177.66357500000001, 71.132769999999994], [-178.69378, 70.893020000000007]]], [[[143.60384999999999, 73.212440000000001], [142.08762999999999, 73.205439999999996], [140.03815499999999, 73.316919999999996], [139.86312000000001, 73.369829999999993], [140.81171000000001, 73.765060000000005], [142.06207000000001, 73.857579999999999], [143.48283000000001, 73.475250000000003], [143.60384999999999, 73.212440000000001]]], [[[150.73167000000001, 75.084059999999994], [149.57592500000001, 74.688919999999996], [147.977465, 74.778355000000005], [146.11919, 75.172979999999995], [146.358485, 75.49682], [148.22223, 75.345844999999997], [150.73167000000001, 75.084059999999994]]], [[[145.086285, 75.562624999999997], [144.30000000000001, 74.819999999999993], [140.61381, 74.847679999999997], [138.95544000000001, 74.61148], [136.97439, 75.261669999999995], [137.51176000000001, 75.949169999999995], [138.831075, 76.136759999999995], [141.47161500000001, 76.092889999999997], [145.086285, 75.562624999999997]]], [[[57.535693000000002, 70.720464000000007], [56.944978999999996, 70.632743000000005], [53.677374999999998, 70.762658000000002], [53.412016999999999, 71.206661999999994], [51.601894999999999, 71.474759000000006], [51.455753999999999, 72.014881000000003], [52.478274999999996, 72.229442000000006], [52.444169000000002, 72.774731000000003], [54.427613999999998, 73.627548000000004], [53.508290000000002, 73.749814000000001], [55.902459, 74.627486000000005], [55.631932999999997, 75.081412], [57.868644000000003, 75.609390000000005], [61.170043999999997, 76.251883000000007], [64.498367999999999, 76.439054999999996], [66.210977, 76.809781999999998], [68.157060000000001, 76.939696999999995], [68.852210999999997, 76.544810999999996], [68.180572999999995, 76.233642000000003], [64.637326000000002, 75.737755000000007], [61.583508000000002, 75.260885000000002], [58.477082000000003, 74.309055999999998], [56.986786000000002, 73.333044000000001], [55.419336000000001, 72.371268000000001], [55.622838000000002, 71.540594999999996], [57.535693000000002, 70.720464000000007]]], [[[106.97013, 76.974189999999993], [107.23999999999999, 76.480000000000004], [108.1538, 76.723349999999996], [111.07726, 76.709999999999994], [113.33150999999999, 76.222239999999999], [114.13417, 75.847639999999998], [113.88539, 75.327789999999993], [112.77918, 75.031859999999995], [110.15125, 74.476730000000003], [109.40000000000001, 74.180000000000007], [110.64, 74.040000000000006], [112.11919, 73.787739999999999], [113.01954000000001, 73.976929999999996], [113.52958, 73.335049999999995], [113.96881, 73.594880000000003], [115.56782, 73.752849999999995], [118.77633, 73.587720000000004], [119.02, 73.120000000000005], [123.20066, 72.971220000000002], [123.25776999999999, 73.735029999999995], [125.38, 73.560000000000002], [126.97644, 73.565489999999997], [128.59126000000001, 73.038709999999995], [129.05157, 72.398719999999997], [128.46000000000001, 71.980000000000004], [129.71599000000001, 71.193039999999996], [131.28858, 70.786990000000003], [132.2535, 71.836299999999994], [133.85766000000001, 71.386420000000001], [135.56192999999999, 71.655249999999995], [137.49754999999999, 71.347629999999995], [138.23409000000001, 71.628029999999995], [139.86983000000001, 71.487830000000002], [139.14791, 72.41619], [140.46816999999999, 72.849410000000006], [149.5, 72.200000000000003], [150.35118, 71.606430000000003], [152.96889999999999, 70.842219999999998], [157.00688, 71.031409999999994], [158.99779000000001, 70.866720000000001], [159.83031, 70.453239999999994], [159.70866000000001, 69.721980000000002], [160.94053, 69.437280000000001], [162.27906999999999, 69.642039999999994], [164.05248, 69.668229999999994], [165.94037, 69.471990000000005], [167.83566999999999, 69.582689999999999], [169.57763, 68.693799999999996], [170.81688, 69.013630000000006], [170.00819999999999, 69.652760000000001], [170.45345, 70.097030000000004], [173.64391000000001, 69.817430000000002], [175.72403, 69.877250000000004], [178.59999999999999, 69.400000000000006], [180, 68.963635999999994], [180, 64.979709], [179.99280999999999, 64.974329999999995], [178.7072, 64.534930000000003], [177.41128, 64.60821], [178.31299999999999, 64.07593], [178.90825000000001, 63.25197], [179.37034, 62.982619999999997], [179.48635999999999, 62.568939999999998], [179.22825, 62.304099999999998], [177.36429999999999, 62.521900000000002], [174.56929, 61.769150000000003], [173.68012999999999, 61.652610000000003], [172.15000000000001, 60.950000000000003], [170.6985, 60.336179999999999], [170.33085, 59.881770000000003], [168.90046000000001, 60.573549999999997], [166.29498000000001, 59.788550000000001], [165.84, 60.159999999999997], [164.87674000000001, 59.7316], [163.53928999999999, 59.86871], [163.21710999999999, 59.211010000000002], [162.01732999999999, 58.243279999999999], [162.05296999999999, 57.839120000000001], [163.19191000000001, 57.615029999999997], [163.05794, 56.159239999999997], [162.12958, 56.122190000000003], [161.70146, 55.285679999999999], [162.11749, 54.855139999999999], [160.36877000000001, 54.344329999999999], [160.02172999999999, 53.202570000000001], [158.53093999999999, 52.958680000000001], [158.23117999999999, 51.942689999999999], [156.78979000000001, 51.011049999999997], [156.41999999999999, 51.700000000000003], [155.99181999999999, 53.158949999999997], [155.43366, 55.381030000000003], [155.91442000000001, 56.767919999999997], [156.75815, 57.364699999999999], [156.81035, 57.832039999999999], [158.36433, 58.055750000000003], [160.15064000000001, 59.314770000000003], [161.87204, 60.343000000000004], [163.66969, 61.140900000000002], [164.47354999999999, 62.550609999999999], [163.25842, 62.466270000000002], [162.65790999999999, 61.642499999999998], [160.12147999999999, 60.544229999999999], [159.30232000000001, 61.773960000000002], [156.72067999999999, 61.434420000000003], [154.21806000000001, 59.758180000000003], [155.04374999999999, 59.144950000000001], [152.81184999999999, 58.883850000000002], [151.26572999999999, 58.780889999999999], [151.33815000000001, 59.503959999999999], [149.78371000000001, 59.655729999999998], [148.54481000000001, 59.164479999999998], [145.48722000000001, 59.336370000000002], [142.19782000000001, 59.03998], [138.95848000000001, 57.088050000000003], [135.12619000000001, 54.729590000000002], [136.70170999999999, 54.603549999999998], [137.19342, 53.977319999999999], [138.16470000000001, 53.755009999999999], [138.80463, 54.254550000000002], [139.90151, 54.189680000000003], [141.34531000000001, 53.089570000000002], [141.37923000000001, 52.238770000000002], [140.59742, 51.239669999999997], [140.51308, 50.045529999999999], [140.06192999999999, 48.446710000000003], [138.55472, 46.999650000000003], [138.21970999999999, 46.307949999999998], [136.86232000000001, 45.143500000000003], [135.51535000000001, 43.988999999999997], [134.86939000000001, 43.398209999999999], [133.53686999999999, 42.81147], [132.90627000000001, 42.798490000000001], [132.27807000000001, 43.284559999999999], [130.93586999999999, 42.55274], [130.78, 42.219999999999999], [130.63999999999999, 42.395000000000003], [130.63386600000001, 42.903015000000003], [131.144688, 42.929989999999997], [131.288555, 44.111519999999999], [131.02519000000001, 44.967959999999998], [131.883454, 45.321162000000001], [133.09711999999999, 45.144089999999998], [133.769644, 46.116926999999997], [134.11234999999999, 47.212479999999999], [134.50081, 47.578449999999997], [135.02631099999999, 48.478230000000003], [133.37359599999999, 48.183441999999999], [132.50668999999999, 47.788960000000003], [130.98725999999999, 47.790129999999998], [130.58229299999999, 48.729686999999998], [129.397818, 49.440600000000003], [127.6574, 49.760269999999998], [127.28745600000001, 50.739797000000003], [126.93915699999999, 51.353893999999997], [126.56439899999999, 51.784255000000002], [125.946349, 52.792799000000002], [125.06821100000001, 53.161045000000001], [123.57147000000001, 53.458799999999997], [122.24574800000001, 53.431725999999998], [121.003085, 53.251401000000001], [120.177089, 52.753886000000001], [120.72578900000001, 52.516226000000003], [120.73820000000001, 51.964109999999998], [120.18208, 51.643549999999998], [119.27939000000001, 50.582920000000001], [119.288461, 50.142882999999998], [117.879244, 49.510983000000003], [116.67880100000001, 49.888531], [115.48569500000001, 49.805177], [114.96211, 50.140247000000002], [114.36245599999999, 50.248303], [112.89774, 49.543565000000001], [111.581231, 49.377968000000003], [110.66201100000001, 49.130127999999999], [109.402449, 49.292960999999998], [108.475167, 49.282547999999998], [107.86817600000001, 49.793705000000003], [106.88880399999999, 50.274296], [105.886591, 50.406019000000001], [104.62157999999999, 50.275320000000001], [103.676545, 50.089965999999997], [102.25588999999999, 50.510559999999998], [102.06520999999999, 51.259909999999998], [100.88948000000001, 51.516855999999997], [99.981731999999994, 51.634005999999999], [98.861491000000001, 52.047365999999997], [97.825739999999996, 51.010995000000001], [98.231762000000003, 50.422401000000001], [97.25976, 49.726050000000001], [95.814019999999999, 49.977460000000001], [94.815949000000003, 50.013432999999999], [94.147565999999998, 50.480536999999998], [93.104209999999995, 50.495289999999997], [92.234712000000002, 50.802171000000001], [90.713667000000001, 50.331811999999999], [88.805566999999996, 49.470520999999998], [87.751264000000006, 49.297198000000002], [87.359970000000004, 49.214981000000002], [86.829357000000002, 49.826675000000002], [85.541269999999997, 49.692858999999999], [85.115560000000002, 50.117303], [84.416376999999997, 50.311399999999999], [83.935114999999996, 50.889246], [83.383004, 51.069183000000002], [81.945986000000005, 50.812196], [80.568447000000006, 51.388336000000002], [80.035560000000004, 50.864750999999998], [77.800916000000001, 53.404415], [76.525178999999994, 54.177002999999999], [76.891099999999994, 54.490524000000001], [74.384820000000005, 53.546849999999999], [73.425679000000002, 53.489809999999999], [73.508516, 54.035617000000002], [72.224149999999995, 54.376655], [71.180131000000003, 54.133285000000001], [70.865267000000003, 55.169733999999998], [69.068167000000003, 55.385249999999999], [68.1691, 54.970391999999997], [65.666870000000003, 54.60125], [65.178533999999999, 54.354227999999999], [61.436599999999999, 54.006250000000001], [60.978065999999998, 53.664993000000003], [61.699986000000003, 52.979996], [60.739992999999998, 52.719985999999999], [60.927269000000003, 52.447547999999998], [59.967534000000001, 51.960419999999999], [61.588003, 51.272658999999997], [61.337423999999999, 50.79907], [59.932806999999997, 50.842193999999999], [59.642282000000002, 50.545442000000001], [58.363320000000002, 51.063639999999999], [56.777979999999999, 51.043550000000003], [55.716940000000001, 50.62171], [54.532877999999997, 51.026240000000001], [52.328724000000001, 51.718651999999999], [50.766648000000004, 51.692762000000002], [48.702382, 50.605128000000001], [48.577840999999999, 49.874760000000002], [47.549480000000003, 50.454698], [46.751595999999999, 49.356006000000001], [47.043672000000001, 49.152039000000002], [46.466445999999998, 48.394151999999998], [47.315240000000003, 47.715850000000003], [48.057250000000003, 47.743769999999998], [48.694733999999997, 47.075628000000002], [48.593249999999998, 46.561039999999998], [49.10116, 46.399329999999999], [48.645409999999998, 45.806289999999997], [47.675910000000002, 45.641489999999997], [46.682009999999998, 44.609200000000001], [47.590940000000003, 43.660159999999998], [47.492519999999999, 42.986579999999996], [48.58437, 41.808880000000002], [47.987282999999998, 41.405819000000001], [47.815666, 41.151415999999998], [47.373314999999998, 41.219732], [46.686070999999998, 41.827137], [46.404950999999997, 41.860675000000001], [45.776400000000002, 42.092440000000003], [45.470278999999998, 42.502780999999999], [44.537623000000004, 42.711993], [43.93121, 42.554960000000001], [43.755989999999997, 42.740830000000003], [42.394399999999997, 43.220300000000002], [40.922190000000001, 43.382150000000003], [40.076965000000001, 43.553103999999998], [39.955008999999997, 43.434998], [38.68, 44.280000000000001], [37.539119999999997, 44.657209999999999], [36.675460000000001, 45.244689999999999], [37.403170000000003, 45.404510000000002], [38.232950000000002, 46.240870000000001], [37.673720000000003, 46.636569999999999], [39.147669999999998, 47.044750000000001], [39.121200000000002, 47.263359999999999], [38.223537999999998, 47.10219], [38.255111999999997, 47.546399999999998], [38.770569999999999, 47.825620000000001], [39.738278000000001, 47.898936999999997], [39.895620000000001, 48.232410000000002], [39.67465, 48.783819999999999], [40.080789000000003, 49.307429999999997], [40.069040000000001, 49.601050000000001], [38.594988000000001, 49.926462000000001], [38.010630999999997, 49.915661999999998], [37.393459999999997, 50.383952999999998], [36.626168, 50.225591000000001], [35.356116, 50.577196999999998], [35.37791, 50.773940000000003], [35.022182999999998, 51.207571999999999], [34.224815999999997, 51.255992999999997], [34.141978000000002, 51.566412999999997], [34.391731, 51.768881999999998], [33.752699999999997, 52.335075000000003], [32.715761000000001, 52.238464999999998], [32.412058000000002, 52.288694999999997], [32.159439999999996, 52.061250000000001], [31.785969999999999, 52.101680000000002], [31.540018, 52.742052000000001], [31.305201, 53.073996000000001], [31.497640000000001, 53.167430000000003], [32.304518999999999, 53.132725999999998], [32.693643000000002, 53.351421000000002], [32.405599000000002, 53.618045000000002], [31.731273000000002, 53.794029000000002], [31.791423999999999, 53.974639000000003], [31.384471999999999, 54.157055999999997], [30.757534, 54.811771], [30.971836, 55.081547999999998], [30.873909000000001, 55.550975999999999], [29.896294000000001, 55.789462999999998], [29.371572, 55.670090999999999], [29.229513000000001, 55.918343999999998], [28.176708999999999, 56.169130000000003], [27.855281999999999, 56.759326000000001], [27.770015999999998, 57.244258000000002], [27.288184999999999, 57.474527999999999], [27.716685999999999, 57.791899000000001], [27.42015, 58.72457], [28.131699000000001, 59.300825000000003], [27.981120000000001, 59.475369999999998], [29.117699999999999, 60.02805], [28.07, 60.503520000000002], [30.211106999999998, 61.780028000000001], [31.139990999999998, 62.357692999999998], [31.516092, 62.867686999999997], [30.035872000000001, 63.552813999999998], [30.444685, 64.204453000000001], [29.544429999999998, 64.948672000000002], [30.217649999999999, 65.805980000000005], [29.054589, 66.944286000000005], [29.977426000000001, 67.698296999999997], [28.445944000000001, 68.364613000000006], [28.591930000000001, 69.064777000000007], [29.399550000000001, 69.15692], [31.10108, 69.558109999999999], [32.132719999999999, 69.905950000000004], [33.775469999999999, 69.301419999999993], [36.513959999999997, 69.063419999999994], [40.292340000000003, 67.932400000000001], [41.059869999999997, 67.457130000000006], [41.125950000000003, 66.791579999999996], [40.015830000000001, 66.266180000000006], [38.382950000000001, 65.999529999999993], [33.918709999999997, 66.759609999999995], [33.184440000000002, 66.632530000000003], [34.814770000000003, 65.900149999999996], [34.878574, 65.436212999999995], [34.943910000000002, 64.414370000000005], [36.231290000000001, 64.109449999999995], [37.012729999999998, 63.849829999999997], [37.141970000000001, 64.334710000000001], [36.539579000000003, 64.76446], [37.17604, 65.143219999999999], [39.593449999999997, 64.520790000000005], [40.435600000000001, 64.76446], [39.762599999999999, 65.49682], [42.093089999999997, 66.476230000000001], [43.016039999999997, 66.418580000000006], [43.949750000000002, 66.06908], [44.532260000000001, 66.756339999999994], [43.698390000000003, 67.352450000000005], [44.187950000000001, 67.950509999999994], [43.452820000000003, 68.570790000000002], [46.25, 68.25], [46.821339999999999, 67.689970000000002], [45.555169999999997, 67.566519999999997], [45.562019999999997, 67.010050000000007], [46.349150000000002, 66.667670000000001], [47.894159999999999, 66.884550000000004], [48.138759999999998, 67.522379999999998], [50.22766, 67.998670000000004], [53.71743, 68.857380000000006], [54.471710000000002, 68.808149999999998], [53.485819999999997, 68.201310000000007], [54.726280000000003, 68.097020000000001], [55.442680000000003, 68.438659999999999], [57.317019999999999, 68.466279999999998], [58.802, 68.88082], [59.941420000000001, 68.278440000000003], [61.077840000000002, 68.940690000000004], [60.030000000000001, 69.519999999999996], [60.549999999999997, 69.849999999999994], [63.503999999999998, 69.547389999999993], [64.888114999999999, 69.234835000000004], [68.512159999999994, 68.092330000000004], [69.180679999999995, 68.615629999999996], [68.164439999999999, 69.144360000000006], [68.135220000000004, 69.356489999999994], [66.930080000000004, 69.454610000000002], [67.25976, 69.928730000000002], [66.724919999999997, 70.708889999999997], [66.694659999999999, 71.028970000000001], [68.540059999999997, 71.9345], [69.196359999999999, 72.843360000000004], [69.939999999999998, 73.040000000000006], [72.587540000000004, 72.776290000000003], [72.796030000000002, 72.220060000000004], [71.848110000000005, 71.40898], [72.470110000000005, 71.090190000000007], [72.791880000000006, 70.391139999999993], [72.564700000000002, 69.020849999999996], [73.667869999999994, 68.407899999999998], [73.238699999999994, 67.740399999999994], [71.280000000000001, 66.319999999999993], [72.423010000000005, 66.172669999999997], [72.820769999999996, 66.532669999999996], [73.920990000000003, 66.789460000000005], [74.186509999999998, 67.284289999999999], [75.052000000000007, 67.760469999999998], [74.469260000000006, 68.328990000000005], [74.935839999999999, 68.989180000000005], [73.842359999999999, 69.071460000000002], [73.601870000000005, 69.627629999999996], [74.399799999999999, 70.631749999999997], [73.101100000000002, 71.44717], [74.890820000000005, 72.121189999999999], [74.659260000000003, 72.832269999999994], [75.158010000000004, 72.854969999999994], [75.683509999999998, 72.300560000000004], [75.288979999999995, 71.335560000000001], [76.359110000000001, 71.152869999999993], [75.903130000000004, 71.874009999999998], [77.576650000000001, 72.267169999999993], [79.652019999999993, 72.32011], [81.5, 71.75], [80.610709999999997, 72.582849999999993], [80.511089999999996, 73.648200000000003], [82.25, 73.849999999999994], [84.655259999999998, 73.805909999999997], [86.822299999999998, 73.936880000000002], [86.009559999999993, 74.459670000000003], [87.166820000000001, 75.116429999999994], [88.315709999999996, 75.143929999999997], [90.260000000000005, 75.640000000000001], [92.900580000000005, 75.773330000000001], [93.234210000000004, 76.047200000000004], [95.859999999999999, 76.140000000000001], [96.678210000000007, 75.915480000000002], [98.922539999999998, 76.446889999999996], [100.75967, 76.430279999999996], [101.03532, 76.861890000000002], [101.99084000000001, 77.287540000000007], [104.3516, 77.697919999999996], [106.06664000000001, 77.373890000000003], [104.705, 77.127399999999994], [106.97013, 76.974189999999993]]], [[[105.07547, 78.306889999999996], [99.438140000000004, 77.921000000000006], [101.2649, 79.233990000000006], [102.08635, 79.346410000000006], [102.83781500000001, 79.281289999999998], [105.37242999999999, 78.713340000000002], [105.07547, 78.306889999999996]]], [[[51.136187, 80.547280000000001], [49.793685000000004, 80.415428000000006], [48.894410999999998, 80.339567000000002], [48.754936999999998, 80.175467999999995], [47.586118999999997, 80.010181000000003], [46.502825999999999, 80.247247000000002], [47.072454999999998, 80.559424000000007], [44.846958000000001, 80.58981], [46.799138999999997, 80.771917999999999], [48.318477000000001, 80.784009999999995], [48.522806000000003, 80.514568999999995], [49.097189999999998, 80.753985999999998], [50.039768000000002, 80.918885000000003], [51.522933000000002, 80.699725999999998], [51.136187, 80.547280000000001]]], [[[99.939760000000007, 78.880939999999995], [97.757940000000005, 78.756200000000007], [94.972589999999997, 79.044745000000006], [93.312880000000007, 79.426500000000004], [92.545400000000001, 80.143789999999996], [91.181070000000005, 80.341459999999998], [93.777659999999997, 81.024600000000007], [95.940894999999998, 81.250399999999999], [97.883849999999995, 80.746975000000006], [100.186655, 79.780135000000001], [99.939760000000007, 78.880939999999995]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u043e\u0441\u0441\u0438\u044f", "fr": "Russie", "en": "Russia", "nl": "Rusland", "pt": "R\u00fassia", "no": "Russland", "de": "Russland", "it": "Russia", "sv": "Ryssland", "pl": "Rosja", "fi": "Ven\u00e4j\u00e4", "zh": "\u4fc4\u7f57\u65af", "ja": "\u30ed\u30b7\u30a2", "es": "Rusia"}, "label_fr": "Russie", "name": "Russia", "dbpedia_uri": "http://dbpedia.org/resource/Russia"}, "id": "RUS"}, {"geometry": {"type": "Polygon", "coordinates": [[[30.419104999999998, -1.1346590000000001], [30.816134999999999, -1.698914], [30.758309000000001, -2.2872499999999998], [30.469695999999999, -2.4138579999999998], [29.938358999999998, -2.348487], [29.632176000000001, -2.9178579999999998], [29.024926000000001, -2.8392580000000001], [29.117478999999999, -2.292211], [29.254835, -2.2151100000000001], [29.291886999999999, -1.6200559999999999], [29.579466, -1.341313], [29.821518999999999, -1.443322], [30.419104999999998, -1.1346590000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0443\u0430\u043d\u0434\u0430", "fr": "Rwanda", "en": "Rwanda", "nl": "Rwanda", "pt": "Ruanda", "no": "Rwanda", "de": "Ruanda", "it": "Ruanda", "sv": "Rwanda", "pl": "Rwanda", "fi": "Ruanda", "zh": "\u5362\u65fa\u8fbe", "ja": "\u30eb\u30ef\u30f3\u30c0", "es": "Ruanda"}, "label_fr": "Rwanda", "name": "Rwanda", "dbpedia_uri": "http://dbpedia.org/resource/Rwanda"}, "id": "RWA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-8.7948839999999997, 27.120695999999999], [-8.8178280000000004, 27.656426], [-8.6655899999999999, 27.656426], [-8.6651240000000005, 27.589479000000001], [-8.6844000000000001, 27.395744000000001], [-8.6872939999999996, 25.881056000000001], [-11.969419, 25.933353], [-11.937224000000001, 23.374593999999998], [-12.874222, 23.284832000000002], [-13.118753999999999, 22.77122], [-12.929102, 21.327071], [-16.845193999999999, 21.333323], [-17.063423, 20.999752000000001], [-17.020427999999999, 21.42231], [-17.002962, 21.420733999999999], [-14.750954999999999, 21.500599999999999], [-14.630833000000001, 21.860939999999999], [-14.221168, 22.310162999999999], [-13.891109999999999, 23.691009000000001], [-12.500963, 24.770116000000002], [-12.030759, 26.030866], [-11.718220000000001, 26.104092000000001], [-11.392555, 26.883424000000002], [-10.551263000000001, 26.990808000000001], [-10.189424000000001, 26.860945000000001], [-9.7353430000000003, 26.860945000000001], [-9.4130369999999992, 27.088476], [-8.7948839999999997, 27.120695999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0421\u0430\u0445\u0430\u0440\u0430", "fr": "Sahara occidental", "en": "Western Sahara", "nl": "Westelijke Sahara", "pt": "Saara Ocidental", "no": "Vest-Sahara", "de": "Westsahara", "it": "Sahara Occidentale", "sv": "V\u00e4stsahara", "pl": "Sahara Zachodnia", "fi": "L\u00e4nsi-Sahara", "zh": "\u897f\u6492\u54c8\u62c9", "ja": "\u897f\u30b5\u30cf\u30e9", "es": "Sahara Occidental"}, "label_fr": "Sahara occidental", "name": "Western Sahara", "dbpedia_uri": "http://dbpedia.org/resource/Western_Sahara"}, "id": "ESH"}, {"geometry": {"type": "Polygon", "coordinates": [[[42.779331999999997, 16.347891000000001], [42.649572999999997, 16.774635], [42.347988999999998, 17.075806], [42.270887999999999, 17.474722], [41.754382, 17.833046], [41.221390999999997, 18.671600000000002], [40.939340999999999, 19.486484999999998], [40.247652000000002, 20.174634999999999], [39.801684999999999, 20.338861999999999], [39.139398999999997, 21.291905], [39.023696000000001, 21.986875000000001], [39.066329000000003, 22.579656], [38.492772000000002, 23.688451000000001], [38.023859999999999, 24.078686000000001], [37.483635, 24.285495000000001], [37.154817999999999, 24.858483], [37.209491, 25.084541999999999], [36.931626999999999, 25.602958999999998], [36.639603999999999, 25.826228], [36.249136999999997, 26.570136000000002], [35.640182000000003, 27.376519999999999], [35.130186999999999, 28.063351999999998], [34.632336000000002, 28.058546], [34.787779, 28.607427000000001], [34.83222, 28.957483], [34.956037000000002, 29.356555], [36.068941000000002, 29.197495], [36.501213999999997, 29.505254000000001], [36.740527999999998, 29.865283000000002], [37.503582000000002, 30.003775999999998], [37.668120000000002, 30.338664999999999], [37.998849, 30.508500000000002], [37.002166000000003, 31.508413000000001], [39.004885999999999, 32.010216999999997], [39.195467999999998, 32.161009], [40.399994, 31.889991999999999], [41.889980999999999, 31.190009], [44.709499000000001, 29.178891], [46.568713000000002, 29.099025000000001], [47.459822000000003, 29.002518999999999], [47.708851000000003, 28.526063000000001], [48.416094000000001, 28.552004], [48.807594999999999, 27.689627999999999], [49.299554000000001, 27.461217999999999], [49.470914, 27.109998999999998], [50.152422000000001, 26.689662999999999], [50.212935000000002, 26.277027], [50.113303000000002, 25.943971999999999], [50.239859000000003, 25.608049999999999], [50.527386999999997, 25.327808000000001], [50.660556999999997, 24.999896], [50.810108, 24.754743000000001], [51.112414999999999, 24.556331], [51.389608000000003, 24.627386000000001], [51.579518999999998, 24.245497], [51.617708, 24.014219000000001], [52.000732999999997, 23.001154], [55.006802999999998, 22.496948], [55.208340999999997, 22.70833], [55.666659000000003, 22.000001000000001], [54.999982000000003, 19.999994000000001], [52.000010000000003, 19.000003], [49.116672000000001, 18.616668000000001], [48.183343999999998, 18.166668999999999], [47.466695000000001, 17.116682000000001], [47.000005000000002, 16.949998999999998], [46.749994000000001, 17.283338000000001], [46.366658999999999, 17.233315000000001], [45.399999000000001, 17.333335000000002], [45.216650999999999, 17.433329000000001], [44.062612999999999, 17.410359], [43.791519000000001, 17.319977000000002], [43.380794000000002, 17.579986999999999], [43.115797999999998, 17.088439999999999], [43.218375000000002, 16.666889999999999], [42.779331999999997, 16.347891000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0430\u0443\u0434\u043e\u0432\u0441\u043a\u0430\u044f \u0410\u0440\u0430\u0432\u0438\u044f", "fr": "Arabie saoudite", "en": "Saudi Arabia", "nl": "Saoedi-Arabi\u00eb", "pt": "Ar\u00e1bia Saudita", "no": "Saudi-Arabia", "de": "Saudi-Arabien", "it": "Arabia Saudita", "sv": "Saudiarabien", "pl": "Arabia Saudyjska", "fi": "Saudi-Arabia", "zh": "\u6c99\u7279\u963f\u62c9\u4f2f", "ja": "\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2", "es": "Arabia Saudita"}, "label_fr": "Arabie saoudite", "name": "Saudi Arabia", "dbpedia_uri": "http://dbpedia.org/resource/Saudi_Arabia"}, "id": "SAU"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.963393000000003, 9.4642850000000003], [33.824962999999997, 9.4840610000000005], [33.842131000000002, 9.9819150000000008], [33.721958999999998, 10.325262], [33.206938000000001, 10.720112], [33.086765999999997, 11.441141], [33.206938000000001, 12.179338], [32.743419000000003, 12.248008], [32.674750000000003, 12.024832], [32.073892000000001, 11.973330000000001], [32.314234999999996, 11.681483999999999], [32.400072000000002, 11.080626000000001], [31.850715999999998, 10.531271], [31.352861999999998, 9.8102409999999995], [30.837841000000001, 9.7072369999999992], [29.996638999999998, 10.290927], [29.618957000000002, 10.084918999999999], [29.515953, 9.7930740000000007], [29.000931999999999, 9.6042319999999997], [28.966597, 9.3982240000000008], [27.970890000000001, 9.3982240000000008], [27.833551, 9.6042319999999997], [27.112521000000001, 9.6385670000000001], [26.752006000000002, 9.4668930000000007], [26.477328, 9.5527300000000004], [25.962306999999999, 10.136421], [25.790633, 10.411099], [25.069604000000002, 10.273759999999999], [24.794926, 9.8102409999999995], [24.537414999999999, 8.9175380000000004], [24.194068000000001, 8.7286959999999993], [23.886980000000001, 8.6197300000000006], [23.805813000000001, 8.6663189999999997], [23.459012999999999, 8.9542859999999997], [23.394779, 9.2650679999999994], [23.55725, 9.6812179999999994], [23.554303999999998, 10.089255], [22.977544000000002, 10.714463], [22.864165, 11.142395], [22.87622, 11.38461], [22.508690000000001, 11.679360000000001], [22.497620000000001, 12.26024], [22.28801, 12.646050000000001], [21.936810000000001, 12.588179999999999], [22.037590000000002, 12.95546], [22.296579999999999, 13.37232], [22.18329, 13.786479999999999], [22.51202, 14.09318], [22.303509999999999, 14.32682], [22.56795, 14.944290000000001], [23.02459, 15.680720000000001], [23.886890000000001, 15.61084], [23.83766, 19.580469999999998], [23.850000000000001, 20], [25, 20.003039999999999], [25, 22], [29.02, 22], [32.899999999999999, 22], [36.866230000000002, 22], [37.188720000000004, 21.01885], [36.969410000000003, 20.837440000000001], [37.114699999999999, 19.807960000000001], [37.481789999999997, 18.614090000000001], [37.862760000000002, 18.36786], [38.410089999999997, 17.998307], [37.904000000000003, 17.42754], [37.167470000000002, 17.26314], [36.852530000000002, 16.95655], [36.753889999999998, 16.29186], [36.323219999999999, 14.82249], [36.429510000000001, 14.42211], [36.270220000000002, 13.563330000000001], [35.863630000000001, 12.578279999999999], [35.260489999999997, 12.08286], [34.831629999999997, 11.318960000000001], [34.73115, 10.910170000000001], [34.257449999999999, 10.630089999999999], [33.961620000000003, 9.5835799999999995], [33.963393000000003, 9.4642850000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0443\u0434\u0430\u043d", "fr": "Soudan", "en": "Sudan", "nl": "Soedan", "pt": "Sud\u00e3o", "no": "Sudan", "de": "Sudan", "it": "Sudan", "sv": "Sudan", "pl": "Sudan", "fi": "Sudan", "zh": "\u82cf\u4e39\u5171\u548c\u56fd", "ja": "\u30b9\u30fc\u30c0\u30f3", "es": "Sud\u00e1n"}, "label_fr": "Soudan", "name": "Sudan", "dbpedia_uri": "http://dbpedia.org/resource/Sudan"}, "id": "SDN"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.963393000000003, 9.4642850000000003], [33.974980000000002, 8.6845599999999994], [33.825499999999998, 8.3791600000000006], [33.294800000000002, 8.3545800000000003], [32.954180000000001, 7.7849700000000004], [33.568289999999998, 7.7133399999999996], [34.075099999999999, 7.2259500000000001], [34.250320000000002, 6.8260699999999996], [34.70702, 6.59422], [35.298006999999998, 5.5060000000000002], [34.620196, 4.8471229999999998], [34.005000000000003, 4.2498849999999999], [33.390000000000001, 3.79], [32.686419999999998, 3.7923200000000001], [31.881450000000001, 3.5582699999999998], [31.245560000000001, 3.7818999999999998], [30.833850000000002, 3.5091700000000001], [29.953489999999999, 4.1737000000000002], [29.715994999999999, 4.6008050000000003], [29.159078000000001, 4.3892670000000003], [28.696677999999999, 4.4550770000000002], [28.428993999999999, 4.2871550000000003], [27.979977000000002, 4.4084130000000004], [27.374226, 5.2339440000000002], [27.213408999999999, 5.5509529999999998], [26.465909, 5.9467169999999996], [26.213418000000001, 6.5466030000000002], [25.796648000000001, 6.9793159999999999], [25.124130999999998, 7.5000850000000003], [25.114932, 7.8251039999999996], [24.567368999999999, 8.2291880000000006], [23.886980000000001, 8.6197300000000006], [24.194068000000001, 8.7286959999999993], [24.537414999999999, 8.9175380000000004], [24.794926, 9.8102409999999995], [25.069604000000002, 10.273759999999999], [25.790633, 10.411099], [25.962306999999999, 10.136421], [26.477328, 9.5527300000000004], [26.752006000000002, 9.4668930000000007], [27.112521000000001, 9.6385670000000001], [27.833551, 9.6042319999999997], [27.970890000000001, 9.3982240000000008], [28.966597, 9.3982240000000008], [29.000931999999999, 9.6042319999999997], [29.515953, 9.7930740000000007], [29.618957000000002, 10.084918999999999], [29.996638999999998, 10.290927], [30.837841000000001, 9.7072369999999992], [31.352861999999998, 9.8102409999999995], [31.850715999999998, 10.531271], [32.400072000000002, 11.080626000000001], [32.314234999999996, 11.681483999999999], [32.073892000000001, 11.973330000000001], [32.674750000000003, 12.024832], [32.743419000000003, 12.248008], [33.206938000000001, 12.179338], [33.086765999999997, 11.441141], [33.206938000000001, 10.720112], [33.721958999999998, 10.325262], [33.842131000000002, 9.9819150000000008], [33.824962999999997, 9.4840610000000005], [33.963393000000003, 9.4642850000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042e\u0436\u043d\u044b\u0439 \u0421\u0443\u0434\u0430\u043d", "fr": "Soudan du Sud", "en": "South Sudan", "nl": "Zuid-Soedan", "pt": "Sud\u00e3o do Sul", "no": "S\u00f8r-Sudan", "de": "S\u00fcdsudan", "it": "Sudan del Sud", "sv": "Sydsudan", "pl": "Sudan Po\u0142udniowy", "fi": "Etel\u00e4-Sudan", "zh": "\u5357\u8607\u4e39", "ja": "\u5357\u30b9\u30fc\u30c0\u30f3", "es": "Sud\u00e1n del Sur"}, "label_fr": "Soudan du Sud", "name": "South Sudan", "dbpedia_uri": "http://dbpedia.org/resource/South_Sudan"}, "id": "SDS"}, {"geometry": {"type": "Polygon", "coordinates": [[[-16.713729000000001, 13.594958999999999], [-17.126107000000001, 14.373516], [-17.625043000000002, 14.729540999999999], [-17.185172999999999, 14.919477000000001], [-16.700706, 15.621527], [-16.463097999999999, 16.135035999999999], [-16.12069, 16.455663000000001], [-15.623666, 16.369337000000002], [-15.135737000000001, 16.587281999999998], [-14.577348000000001, 16.598264], [-14.099520999999999, 16.304302], [-13.435738000000001, 16.039383000000001], [-12.830658, 15.303692], [-12.17075, 14.616834000000001], [-12.124886999999999, 13.994726999999999], [-11.927716, 13.422075], [-11.553398, 13.141214], [-11.467898999999999, 12.754519], [-11.513942999999999, 12.442988], [-11.658301, 12.386583], [-12.203564999999999, 12.465648], [-12.278599, 12.35444], [-12.499051, 12.332090000000001], [-13.217817999999999, 12.575874000000001], [-13.700476, 12.586183], [-15.548477, 12.628170000000001], [-15.816573999999999, 12.515567000000001], [-16.147717, 12.547762000000001], [-16.677451999999999, 12.384852], [-16.841525000000001, 13.151394], [-15.931296, 13.130284], [-15.691001, 13.270353], [-15.511813, 13.27857], [-15.141163000000001, 13.509512000000001], [-14.712197, 13.298207], [-14.277702, 13.280585], [-13.844963, 13.505042], [-14.046991999999999, 13.794067999999999], [-14.376714, 13.625679999999999], [-14.687030999999999, 13.630357], [-15.081735, 13.876492000000001], [-15.398770000000001, 13.860369], [-15.624596, 13.623587000000001], [-16.713729000000001, 13.594958999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0435\u043d\u0435\u0433\u0430\u043b", "fr": "S\u00e9n\u00e9gal", "en": "Senegal", "nl": "Senegal", "pt": "Senegal", "no": "Senegal", "de": "Senegal", "it": "Senegal", "sv": "Senegal", "pl": "Senegal", "fi": "Senegal", "zh": "\u585e\u5185\u52a0\u5c14", "ja": "\u30bb\u30cd\u30ac\u30eb", "es": "Senegal"}, "label_fr": "S\u00e9n\u00e9gal", "name": "Senegal", "dbpedia_uri": "http://dbpedia.org/resource/Senegal"}, "id": "SEN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[162.11902499999999, -10.482718999999999], [162.39864600000001, -10.826366999999999], [161.70003199999999, -10.820010999999999], [161.31979699999999, -10.204751], [161.917383, -10.446700999999999], [162.11902499999999, -10.482718999999999]]], [[[160.85222899999999, -9.8729370000000003], [160.46258800000001, -9.8952100000000005], [159.849447, -9.7940269999999998], [159.64000300000001, -9.6399799999999995], [159.702945, -9.2429500000000004], [160.362956, -9.4003040000000002], [160.68851799999999, -9.6101620000000008], [160.85222899999999, -9.8729370000000003]]], [[[161.679982, -9.5999820000000007], [161.52939699999999, -9.7843119999999999], [160.788253, -8.9175430000000002], [160.57999699999999, -8.3200090000000007], [160.920028, -8.3200090000000007], [161.28000599999999, -9.1200109999999999], [161.679982, -9.5999820000000007]]], [[[159.87502699999999, -8.3373200000000001], [159.91740200000001, -8.5382899999999999], [159.13367700000001, -8.1141810000000003], [158.58611400000001, -7.7548240000000002], [158.21115, -7.4218719999999996], [158.35997800000001, -7.3200180000000001], [158.82000099999999, -7.560003], [159.64000300000001, -8.0200270000000007], [159.87502699999999, -8.3373200000000001]]], [[[157.53842599999999, -7.3478199999999996], [157.33941999999999, -7.4047669999999997], [156.90203, -7.1768739999999998], [156.49135799999999, -6.765943], [156.54282799999999, -6.5993380000000004], [157.13999999999999, -7.0216380000000003], [157.53842599999999, -7.3478199999999996]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u044b \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "Salomon (pays)", "en": "Solomon Islands", "nl": "Salomonseilanden", "pt": "Ilhas Salom\u00e3o", "no": "Salomon\u00f8yene", "de": "Salomonen", "it": "Isole Salomone", "sv": "Salomon\u00f6arna", "pl": "Wyspy Salomona", "fi": "Salomonsaaret", "zh": "\u6240\u7f57\u95e8\u7fa4\u5c9b", "ja": "\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6", "es": "Islas Salom\u00f3n"}, "label_fr": "Salomon (pays)", "name": "Solomon Islands", "dbpedia_uri": "http://dbpedia.org/resource/Solomon_Islands"}, "id": "SLB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-11.438779, 6.7859170000000004], [-11.708195, 6.8600979999999998], [-12.428099, 7.2629419999999998], [-12.949049, 7.7986459999999997], [-13.124025, 8.1639459999999993], [-13.246549999999999, 8.9030489999999993], [-12.711957999999999, 9.3427120000000006], [-12.596719, 9.6201880000000006], [-12.425929, 9.8358340000000002], [-12.150338, 9.8585720000000006], [-11.917277, 10.046984], [-11.117481, 10.045873], [-10.839152, 9.6882459999999995], [-10.622394999999999, 9.2679100000000005], [-10.654769999999999, 8.9771780000000003], [-10.494315, 8.715541], [-10.505477000000001, 8.3488959999999999], [-10.230093999999999, 8.4062059999999992], [-10.695595000000001, 7.9394640000000001], [-11.146704, 7.396706], [-11.199802, 7.1058459999999997], [-11.438779, 6.7859170000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u044c\u0435\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435", "fr": "Sierra Leone", "en": "Sierra Leone", "nl": "Sierra Leone", "pt": "Serra Leoa", "no": "Sierra Leone", "de": "Sierra Leone", "it": "Sierra Leone", "sv": "Sierra Leone", "pl": "Sierra Leone", "fi": "Sierra Leone", "zh": "\u585e\u62c9\u5229\u6602", "ja": "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd", "es": "Sierra Leona"}, "label_fr": "Sierra Leone", "name": "Sierra Leone", "dbpedia_uri": "http://dbpedia.org/resource/Sierra_Leone"}, "id": "SLE"}, {"geometry": {"type": "Polygon", "coordinates": [[[-87.793110999999996, 13.38448], [-87.904111999999998, 13.149017000000001], [-88.483301999999995, 13.163951000000001], [-88.843227999999996, 13.259734], [-89.256743, 13.458532999999999], [-89.812393999999998, 13.520621999999999], [-90.095555000000004, 13.735338], [-90.064678000000001, 13.881970000000001], [-89.721934000000005, 14.134228], [-89.534218999999993, 14.244816], [-89.587343000000004, 14.362586], [-89.353325999999996, 14.424132999999999], [-89.058511999999993, 14.340028999999999], [-88.843073000000004, 14.140506999999999], [-88.541230999999996, 13.980155], [-88.503997999999996, 13.845485999999999], [-88.065342999999999, 13.964626000000001], [-87.859515000000002, 13.893312], [-87.723502999999994, 13.78505], [-87.793110999999996, 13.38448]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440", "fr": "Salvador", "en": "El Salvador", "nl": "El Salvador", "pt": "El Salvador", "no": "El Salvador", "de": "El Salvador", "it": "El Salvador", "sv": "El Salvador", "pl": "Salwador", "fi": "El Salvador", "zh": "\u8428\u5c14\u74e6\u591a", "ja": "\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb", "es": "El Salvador"}, "label_fr": "Salvador", "name": "El Salvador", "dbpedia_uri": "http://dbpedia.org/resource/El_Salvador"}, "id": "SLV"}, {"geometry": {"type": "Polygon", "coordinates": [[[48.938130000000001, 9.4517489999999995], [48.486736000000001, 8.8376260000000002], [47.78942, 8.0030000000000001], [46.948327999999997, 7.9968769999999996], [43.678750000000001, 9.1835799999999992], [43.296975000000003, 9.5404769999999992], [42.92812, 10.021940000000001], [42.558759999999999, 10.57258], [42.776851999999998, 10.926879], [43.145305, 11.46204], [43.470660000000002, 11.277710000000001], [43.666668000000001, 10.864169], [44.117804, 10.445538000000001], [44.614258999999997, 10.442205], [45.556941000000002, 10.698029], [46.645401, 10.816549], [47.525658, 11.127228000000001], [48.021596000000002, 11.193064], [48.378784000000003, 11.375482], [48.948205999999999, 11.410622], [48.942005000000002, 11.394266], [48.938490999999999, 10.982327], [48.938232999999997, 9.9734999999999996], [48.938130000000001, 9.4517489999999995]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043c\u0430\u043b\u0438\u043b\u0435\u043d\u0434", "fr": "Somaliland", "en": "Somaliland", "nl": "Somaliland", "pt": "Somalil\u00e2ndia", "no": "Somaliland", "de": "Somaliland", "it": "Somaliland", "sv": "Somaliland", "pl": "Somaliland", "fi": "Somalimaa", "zh": "\u7d22\u9a6c\u91cc\u5170", "ja": "\u30bd\u30de\u30ea\u30e9\u30f3\u30c9", "es": "Somalilandia"}, "label_fr": "Somaliland", "name": "Somaliland", "dbpedia_uri": "http://dbpedia.org/resource/Somaliland"}, "id": "-99"}, {"geometry": {"type": "Polygon", "coordinates": [[[49.728619999999999, 11.578900000000001], [50.258780000000002, 11.67957], [50.732019999999999, 12.0219], [51.111199999999997, 12.02464], [51.133870000000002, 11.748150000000001], [51.041530000000002, 11.166510000000001], [51.045310000000001, 10.6409], [50.834180000000003, 10.279719999999999], [50.552390000000003, 9.1987400000000008], [50.070920000000001, 8.0817300000000003], [49.4527, 6.8046600000000002], [48.594549999999998, 5.3391099999999998], [47.740789999999997, 4.2194000000000003], [46.56476, 2.8552900000000001], [45.563989999999997, 2.04576], [44.068150000000003, 1.0528299999999999], [43.13597, 0.29220000000000002], [42.04157, -0.91915999999999998], [41.810949999999998, -1.4464699999999999], [41.585129999999999, -1.6832499999999999], [40.993000000000002, -0.85829], [40.981050000000003, 2.7845200000000001], [41.855083, 3.9189120000000002], [42.128610000000002, 4.2341300000000004], [42.769669999999998, 4.2525899999999996], [43.660870000000003, 4.9575500000000003], [44.9636, 5.00162], [47.78942, 8.0030000000000001], [48.486736000000001, 8.8376260000000002], [48.938130000000001, 9.4517489999999995], [48.938232999999997, 9.9734999999999996], [48.938490999999999, 10.982327], [48.942005000000002, 11.394266], [48.948205000000002, 11.410617], [49.267760000000003, 11.43033], [49.728619999999999, 11.578900000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043c\u0430\u043b\u0438", "fr": "Somalie", "en": "Somalia", "nl": "Somali\u00eb", "pt": "Som\u00e1lia", "no": "Somalia", "de": "Somalia", "it": "Somalia", "sv": "Somalia", "pl": "Somalia", "fi": "Somalia", "zh": "\u7d22\u9a6c\u91cc", "ja": "\u30bd\u30de\u30ea\u30a2", "es": "Somalia"}, "label_fr": "Somalie", "name": "Somalia", "dbpedia_uri": "http://dbpedia.org/resource/Somalia"}, "id": "SOM"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.874313000000001, 45.416375000000002], [21.483526000000001, 45.181170000000002], [21.562023, 44.768946999999997], [22.145088000000001, 44.478422000000002], [22.459022000000001, 44.702517], [22.705725999999999, 44.578003000000002], [22.474008000000001, 44.409227999999999], [22.657150000000001, 44.234923000000002], [22.410446, 44.008063], [22.500157000000002, 43.642814000000001], [22.986018999999999, 43.211160999999997], [22.604800999999998, 42.898519], [22.436595000000001, 42.580320999999998], [22.545012, 42.461362000000001], [22.380526, 42.320259999999998], [21.917079999999999, 42.303640000000001], [21.576636000000001, 42.245224], [21.543320000000001, 42.320250000000001], [21.66292, 42.439219999999999], [21.77505, 42.682699999999997], [21.633019999999998, 42.677169999999997], [21.438659999999999, 42.862549999999999], [21.27421, 42.909590000000001], [21.143395000000002, 43.068685000000002], [20.956510000000002, 43.130940000000002], [20.81448, 43.27205], [20.635079999999999, 43.216709999999999], [20.496790000000001, 42.884689999999999], [20.257580000000001, 42.812750000000001], [20.3398, 42.898519999999998], [19.958570000000002, 43.10604], [19.629999999999999, 43.21378], [19.483889999999999, 43.352290000000004], [19.218520000000002, 43.52384], [19.454000000000001, 43.568100000000001], [19.59976, 44.038469999999997], [19.117609999999999, 44.423070000000003], [19.368030000000001, 44.863], [19.005479999999999, 44.860230000000001], [19.390476, 45.236516000000002], [19.072769000000001, 45.521510999999997], [18.829820000000002, 45.908880000000003], [19.596045, 46.171729999999997], [20.220192000000001, 46.127468999999998], [20.762174999999999, 45.734572999999997], [20.874313000000001, 45.416375000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0435\u0440\u0431\u0438\u044f", "fr": "Serbie", "en": "Serbia", "nl": "Servi\u00eb", "pt": "S\u00e9rvia", "no": "Serbia", "de": "Serbien", "it": "Serbia", "sv": "Serbien", "pl": "Serbia", "fi": "Serbia", "zh": "\u585e\u5c14\u7ef4\u4e9a", "ja": "\u30bb\u30eb\u30d3\u30a2", "es": "Serbia"}, "label_fr": "Serbie", "name": "Republic of Serbia", "dbpedia_uri": "http://dbpedia.org/resource/Serbia"}, "id": "SRB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.147435999999999, 5.9731500000000004], [-55.949317999999998, 5.7728780000000004], [-55.84178, 5.953125], [-55.033250000000002, 6.0252910000000002], [-53.958044999999998, 5.7565480000000004], [-54.478633000000002, 4.8967559999999999], [-54.399541999999997, 4.2126109999999999], [-54.006931000000002, 3.6200380000000001], [-54.181725999999998, 3.1897799999999998], [-54.269705000000002, 2.7323919999999999], [-54.524754000000001, 2.311849], [-55.097586999999997, 2.5237479999999999], [-55.569755000000001, 2.4215059999999999], [-55.973322000000003, 2.510364], [-56.073341999999997, 2.2207949999999999], [-55.9056, 2.0219960000000001], [-55.995697999999997, 1.8176669999999999], [-56.539386, 1.8995230000000001], [-57.150098, 2.7689270000000001], [-57.281433, 3.3334920000000001], [-57.601568999999998, 3.3346550000000001], [-58.044694, 4.0608639999999996], [-57.860210000000002, 4.5768009999999997], [-57.914288999999997, 4.8126259999999998], [-57.307245999999999, 5.0735669999999997], [-57.147435999999999, 5.9731500000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0443\u0440\u0438\u043d\u0430\u043c", "fr": "Suriname", "en": "Suriname", "nl": "Suriname", "pt": "Suriname", "no": "Surinam", "de": "Suriname", "it": "Suriname", "sv": "Surinam", "pl": "Surinam", "fi": "Suriname", "zh": "\u8607\u5229\u5357", "ja": "\u30b9\u30ea\u30ca\u30e0", "es": "Surinam"}, "label_fr": "Suriname", "name": "Suriname", "dbpedia_uri": "http://dbpedia.org/resource/Suriname"}, "id": "SUR"}, {"geometry": {"type": "Polygon", "coordinates": [[[18.853144, 49.496229999999997], [18.909575, 49.435845999999998], [19.320713000000001, 49.571573999999998], [19.825023000000002, 49.217125000000003], [20.415838999999998, 49.431452999999998], [20.887955000000002, 49.328772000000001], [21.607807999999999, 49.470106999999999], [22.558138, 49.085737999999999], [22.280842, 48.825392000000001], [22.085608000000001, 48.422263999999998], [21.872236000000001, 48.319971000000002], [20.801293999999999, 48.623854000000001], [20.473562000000001, 48.562849999999997], [20.239053999999999, 48.327567000000002], [19.769470999999999, 48.202691000000002], [19.661363999999999, 48.266615000000002], [19.174365000000002, 48.111378999999999], [18.777024999999998, 48.081767999999997], [18.696512999999999, 47.880954000000003], [17.857133000000001, 47.758429], [17.488472999999999, 47.867466], [16.979666999999999, 48.123497], [16.879982999999999, 48.470013000000002], [16.960287999999998, 48.596981999999997], [17.101984999999999, 48.816969], [17.545006999999998, 48.800018999999999], [17.886485, 48.903475], [17.913512000000001, 48.996493000000001], [18.104973000000001, 49.043982999999997], [18.170497999999998, 49.271515000000001], [18.399994, 49.315001000000002], [18.554970999999998, 49.495015000000002], [18.853144, 49.496229999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043b\u043e\u0432\u0430\u043a\u0438\u044f", "fr": "Slovaquie", "en": "Slovakia", "nl": "Slowakije", "pt": "Eslov\u00e1quia", "no": "Slovakia", "de": "Slowakei", "it": "Slovacchia", "sv": "Slovakien", "pl": "S\u0142owacja", "fi": "Slovakia", "zh": "\u65af\u6d1b\u4f10\u514b", "ja": "\u30b9\u30ed\u30d0\u30ad\u30a2", "es": "Eslovaquia"}, "label_fr": "Slovaquie", "name": "Slovakia", "dbpedia_uri": "http://dbpedia.org/resource/Slovakia"}, "id": "SVK"}, {"geometry": {"type": "Polygon", "coordinates": [[[13.806475000000001, 46.509306000000002], [14.632472, 46.431817000000002], [15.137092000000001, 46.658703000000003], [16.011664, 46.683610999999999], [16.202297999999999, 46.852386000000003], [16.370505000000001, 46.841327], [16.564807999999999, 46.503751000000001], [15.768732999999999, 46.238107999999997], [15.671530000000001, 45.834153999999998], [15.323954000000001, 45.731783], [15.327674999999999, 45.452316000000003], [14.935244000000001, 45.471694999999997], [14.595109000000001, 45.634940999999998], [14.411968, 45.466166000000001], [13.715059999999999, 45.500323999999999], [13.93763, 45.591016000000003], [13.69811, 46.016778000000002], [13.806475000000001, 46.509306000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043b\u043e\u0432\u0435\u043d\u0438\u044f", "fr": "Slov\u00e9nie", "en": "Slovenia", "nl": "Sloveni\u00eb", "pt": "Eslov\u00e9nia", "no": "Slovenia", "de": "Slowenien", "it": "Slovenia", "sv": "Slovenien", "pl": "S\u0142owenia", "fi": "Slovenia", "zh": "\u65af\u6d1b\u6587\u5c3c\u4e9a", "ja": "\u30b9\u30ed\u30d9\u30cb\u30a2", "es": "Eslovenia"}, "label_fr": "Slov\u00e9nie", "name": "Slovenia", "dbpedia_uri": "http://dbpedia.org/resource/Slovenia"}, "id": "SVN"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.183173, 65.723741000000004], [21.213517, 65.026004999999998], [21.369630999999998, 64.413588000000004], [19.778876, 63.609554000000003], [17.847778999999999, 62.749400000000001], [17.119554999999998, 61.341166000000001], [17.831346, 60.636583000000002], [18.787721999999999, 60.081913999999998], [17.869225, 58.953766000000002], [16.829184999999999, 58.719827000000002], [16.447710000000001, 57.041117999999997], [15.879785999999999, 56.104301999999997], [14.666681000000001, 56.200885], [14.100721, 55.407781], [12.942911, 55.361736999999998], [12.625101000000001, 56.307079999999999], [11.787941999999999, 57.441817], [11.027369, 58.856149000000002], [11.468272000000001, 59.432392999999998], [12.300366, 60.117933000000001], [12.631147, 61.293571999999998], [11.992063999999999, 61.800362], [11.930569, 63.128318], [12.579935000000001, 64.066219000000004], [13.571916, 64.049114000000003], [13.919905, 64.445420999999996], [13.55569, 64.787028000000007], [15.108411, 66.193866999999997], [16.108712000000001, 67.302456000000006], [16.768878999999998, 68.013936999999999], [17.729182000000002, 68.010552000000004], [17.993867999999999, 68.567391000000001], [19.87856, 68.407194000000004], [20.025269000000002, 69.065139000000002], [20.645593000000002, 69.106246999999996], [21.978535000000001, 68.616845999999995], [23.539473000000001, 67.936008999999999], [23.56588, 66.396051], [23.903379000000001, 66.006927000000005], [22.183173, 65.723741000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0432\u0435\u0446\u0438\u044f", "fr": "Su\u00e8de", "en": "Sweden", "nl": "Zweden", "pt": "Su\u00e9cia", "no": "Sverige", "de": "Schweden", "it": "Svezia", "sv": "Sverige", "pl": "Szwecja", "fi": "Ruotsi", "zh": "\u745e\u5178", "ja": "\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3", "es": "Suecia"}, "label_fr": "Su\u00e8de", "name": "Sweden", "dbpedia_uri": "http://dbpedia.org/resource/Sweden"}, "id": "SWE"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.071665000000003, -26.733820000000001], [31.86806, -27.177927], [31.282772999999999, -27.285879000000001], [30.685962, -26.743845], [30.676608999999999, -26.398078000000002], [30.949667000000002, -26.022649000000001], [31.044080000000001, -25.731452000000001], [31.333158000000001, -25.660191000000001], [31.837778, -25.843332], [31.985779000000001, -26.291779999999999], [32.071665000000003, -26.733820000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0432\u0430\u0437\u0438\u043b\u0435\u043d\u0434", "fr": "Swaziland", "en": "Swaziland", "nl": "Swaziland", "pt": "Suazil\u00e2ndia", "no": "Swaziland", "de": "Swasiland", "it": "Swaziland", "sv": "Swaziland", "pl": "Suazi", "fi": "Swazimaa", "zh": "\u65af\u5a01\u58eb\u5170", "ja": "\u30b9\u30ef\u30b8\u30e9\u30f3\u30c9", "es": "Suazilandia"}, "label_fr": "Swaziland", "name": "Swaziland", "dbpedia_uri": "http://dbpedia.org/resource/Swaziland"}, "id": "SWZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[38.792341, 33.378686000000002], [36.834062000000003, 32.312938000000003], [35.719918, 32.709192000000002], [35.700797999999999, 32.716014000000001], [35.836396999999998, 32.868122999999997], [35.821100999999999, 33.277425999999998], [36.066459999999999, 33.824911999999998], [36.611750000000001, 34.201788999999998], [36.448194000000001, 34.593935000000002], [35.998403000000003, 34.644914], [35.905023, 35.410009000000002], [36.149763, 35.821534999999997], [36.417549999999999, 36.040616999999997], [36.685389000000001, 36.259698999999998], [36.739494000000001, 36.817520000000002], [37.066761, 36.623035999999999], [38.167726999999999, 36.901209999999999], [38.699891000000001, 36.712927000000001], [39.522579999999998, 36.716054], [40.673259000000002, 37.091276000000001], [41.212088999999999, 37.074351999999998], [42.349590999999997, 37.229872999999998], [41.837063999999998, 36.605854000000001], [41.289707, 36.358815], [41.383965000000003, 35.628317000000003], [41.006158999999997, 34.419372000000003], [38.792341, 33.378686000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0438\u0440\u0438\u044f", "fr": "Syrie", "en": "Syria", "nl": "Syri\u00eb", "pt": "S\u00edria", "no": "Syria", "de": "Syrien", "it": "Siria", "sv": "Syrien", "pl": "Syria", "fi": "Syyria", "zh": "\u53d9\u5229\u4e9a", "ja": "\u30b7\u30ea\u30a2", "es": "Siria"}, "label_fr": "Syrie", "name": "Syria", "dbpedia_uri": "http://dbpedia.org/resource/Syria"}, "id": "SYR"}, {"geometry": {"type": "Polygon", "coordinates": [[[14.495787, 12.859396], [14.595781000000001, 13.330427], [13.954477000000001, 13.353448999999999], [13.956699, 13.996691], [13.540393999999999, 14.367134], [13.97217, 15.684369999999999], [15.247731, 16.627306000000001], [15.300440999999999, 17.927949999999999], [15.685741, 19.957180000000001], [15.903247, 20.387619000000001], [15.487147999999999, 20.730415000000001], [15.47106, 21.048449999999999], [15.096888, 21.308519], [14.8513, 22.862950000000001], [15.860849999999999, 23.40972], [19.849260000000001, 21.495090000000001], [23.83766, 19.580469999999998], [23.886890000000001, 15.61084], [23.02459, 15.680720000000001], [22.56795, 14.944290000000001], [22.303509999999999, 14.32682], [22.51202, 14.09318], [22.18329, 13.786479999999999], [22.296579999999999, 13.37232], [22.037590000000002, 12.95546], [21.936810000000001, 12.588179999999999], [22.28801, 12.646050000000001], [22.497620000000001, 12.26024], [22.508690000000001, 11.679360000000001], [22.87622, 11.38461], [22.864165, 11.142395], [22.231128999999999, 10.971888999999999], [21.723821999999998, 10.567055999999999], [21.000868000000001, 9.4759849999999997], [20.059685000000002, 9.0127059999999997], [19.094007999999999, 9.0748470000000001], [18.812010000000001, 8.9829150000000002], [18.911021999999999, 8.6308950000000006], [18.389555000000001, 8.2813040000000004], [17.964929999999999, 7.8909140000000004], [16.705988000000001, 7.5083279999999997], [16.456185000000001, 7.7347739999999998], [16.290562000000001, 7.7543069999999998], [16.106231999999999, 7.4970879999999998], [15.27946, 7.4219249999999999], [15.436092, 7.692812], [15.120865999999999, 8.3821499999999993], [14.979996, 8.7961039999999997], [14.544466999999999, 8.9658610000000003], [13.954217999999999, 9.5494950000000003], [14.171466000000001, 10.021378], [14.627200999999999, 9.9209189999999996], [14.909354, 9.9921290000000003], [15.467873000000001, 9.9823369999999993], [14.923565, 10.891325], [14.960152000000001, 11.555574], [14.893359999999999, 12.219049999999999], [14.495787, 12.859396]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0430\u0434", "fr": "Tchad", "en": "Chad", "nl": "Tsjaad", "pt": "Chade", "no": "Tsjad", "de": "Tschad", "it": "Ciad", "sv": "Tchad", "pl": "Czad", "fi": "T\u0161ad", "zh": "\u4e4d\u5f97", "ja": "\u30c1\u30e3\u30c9", "es": "Chad"}, "label_fr": "Tchad", "name": "Chad", "dbpedia_uri": "http://dbpedia.org/resource/Chad"}, "id": "TCD"}, {"geometry": {"type": "Polygon", "coordinates": [[[1.8652409999999999, 6.1421580000000002], [1.060122, 5.9288369999999997], [0.83693099999999998, 6.279979], [0.570384, 6.9143590000000001], [0.49095699999999998, 7.4117439999999997], [0.71202900000000002, 8.3124649999999995], [0.46119199999999999, 8.6772229999999997], [0.36590099999999998, 9.4650040000000004], [0.36758000000000002, 10.191212999999999], [-0.049785000000000003, 10.706918], [0.023803000000000001, 11.018682], [0.899563, 10.997339], [0.77233600000000002, 10.470808], [1.0777950000000001, 10.175606999999999], [1.4250609999999999, 9.8253950000000003], [1.4630430000000001, 9.3346239999999998], [1.6644779999999999, 9.1285900000000009], [1.618951, 6.8320379999999998], [1.8652409999999999, 6.1421580000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u043e\u0433\u043e", "fr": "Togo", "en": "Togo", "nl": "Togo", "pt": "Togo", "no": "Togo", "de": "Togo", "it": "Togo", "sv": "Togo", "pl": "Togo", "fi": "Togo", "zh": "\u591a\u54e5", "ja": "\u30c8\u30fc\u30b4", "es": "Togo"}, "label_fr": "Togo", "name": "Togo", "dbpedia_uri": "http://dbpedia.org/resource/Togo"}, "id": "TGO"}, {"geometry": {"type": "Polygon", "coordinates": [[[102.58493199999999, 12.186595000000001], [101.687158, 12.64574], [100.83181, 12.627084999999999], [100.97846699999999, 13.412722], [100.097797, 13.406855999999999], [100.018733, 12.307001], [99.478921, 10.846367000000001], [99.153772000000004, 9.9630609999999997], [99.222398999999996, 9.239255], [99.873831999999993, 9.2078620000000004], [100.279647, 8.2951530000000009], [100.45927399999999, 7.4295730000000004], [101.01732800000001, 6.8568689999999997], [101.623079, 6.7406220000000001], [102.141187, 6.2216360000000002], [101.81428200000001, 5.8108079999999998], [101.154219, 5.6913840000000002], [101.07551599999999, 6.2048670000000001], [100.259596, 6.6428250000000002], [100.085757, 6.4644890000000004], [99.690691000000001, 6.8482130000000003], [99.519642000000005, 7.3434540000000004], [98.988253, 7.9079930000000003], [98.503786000000005, 8.3823050000000006], [98.339662000000004, 7.7945120000000001], [98.150008999999997, 8.3500069999999997], [98.259150000000005, 8.9739229999999992], [98.553550999999999, 9.9329599999999996], [99.038121000000004, 10.960546000000001], [99.587286000000006, 11.892763], [99.196353999999999, 12.804748], [99.212012000000001, 13.269294], [99.097755000000006, 13.827503], [98.430819, 14.622028], [98.192074000000005, 15.123703000000001], [98.537375999999995, 15.308496999999999], [98.903347999999994, 16.177824000000001], [98.493761000000006, 16.837835999999999], [97.859122999999997, 17.567945999999999], [97.375895999999997, 18.445437999999999], [97.797782999999995, 18.627079999999999], [98.253724000000005, 19.708203000000001], [98.959676000000002, 19.752980999999998], [99.543308999999994, 20.186598], [100.115988, 20.417850000000001], [100.54888099999999, 20.109238000000001], [100.60629400000001, 19.508344000000001], [101.282015, 19.462585000000001], [101.03593100000001, 18.408928], [101.05954800000001, 17.512497], [102.113592, 18.109102], [102.413005, 17.932782], [102.998706, 17.961694999999999], [103.200192, 18.309632000000001], [103.95647700000001, 18.240953999999999], [104.716947, 17.428858999999999], [104.779321, 16.441865], [105.589039, 15.570316], [105.544338, 14.723934], [105.218777, 14.273211999999999], [104.281418, 14.416743], [102.988422, 14.225721], [102.348099, 13.394247], [102.58493199999999, 12.186595000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0438\u043b\u0430\u043d\u0434", "fr": "Tha\u00eflande", "en": "Thailand", "nl": "Thailand", "pt": "Tail\u00e2ndia", "no": "Thailand", "de": "Thailand", "it": "Thailandia", "sv": "Thailand", "pl": "Tajlandia", "fi": "Thaimaa", "zh": "\u6cf0\u56fd", "ja": "\u30bf\u30a4\u738b\u56fd", "es": "Tailandia"}, "label_fr": "Tha\u00eflande", "name": "Thailand", "dbpedia_uri": "http://dbpedia.org/resource/Thailand"}, "id": "THA"}, {"geometry": {"type": "Polygon", "coordinates": [[[71.014197999999993, 40.244365999999999], [70.648019000000005, 39.935754000000003], [69.559610000000006, 40.103211000000002], [69.464887000000004, 39.526682999999998], [70.549161999999995, 39.604197999999997], [71.784694000000002, 39.279463], [73.675379000000007, 39.431237000000003], [73.928852000000006, 38.505814999999998], [74.257514, 38.606507000000001], [74.864816000000005, 38.378846000000003], [74.829986000000005, 37.990006999999999], [74.980001999999999, 37.419989999999999], [73.948695999999998, 37.421565999999999], [73.260056000000006, 37.495257000000002], [72.636889999999994, 37.047558000000002], [72.193040999999994, 36.948287999999998], [71.844638000000003, 36.738171000000001], [71.448693000000006, 37.065645000000004], [71.541917999999995, 37.905774000000001], [71.239403999999993, 37.953265000000002], [71.348130999999995, 38.258904999999999], [70.806820999999999, 38.486282000000003], [70.376304000000005, 38.138396], [70.270573999999996, 37.735165000000002], [70.116578000000004, 37.588222999999999], [69.518784999999994, 37.608997000000002], [69.196273000000005, 37.151144000000002], [68.859446000000005, 37.344335999999998], [68.135561999999993, 37.023114999999997], [67.829999999999998, 37.144993999999997], [68.392032999999998, 38.157024999999997], [68.176024999999996, 38.901553], [67.442220000000006, 39.140143999999999], [67.701429000000005, 39.580477999999999], [68.536416000000003, 39.533453000000002], [69.011633000000003, 40.086157999999998], [69.329494999999994, 40.727823999999998], [70.666622000000004, 40.960213000000003], [70.458160000000007, 40.496495000000003], [70.601406999999995, 40.218527000000002], [71.014197999999993, 40.244365999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Tadjikistan", "en": "Tajikistan", "nl": "Tadzjikistan", "pt": "Tadjiquist\u00e3o", "no": "Tadsjikistan", "de": "Tadschikistan", "it": "Tagikistan", "sv": "Tadzjikistan", "pl": "Tad\u017cykistan", "fi": "Tad\u017eikistan", "zh": "\u5854\u5409\u514b\u65af\u5766", "ja": "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3", "es": "Tayikist\u00e1n"}, "label_fr": "Tadjikistan", "name": "Tajikistan", "dbpedia_uri": "http://dbpedia.org/resource/Tajikistan"}, "id": "TJK"}, {"geometry": {"type": "Polygon", "coordinates": [[[61.210816999999999, 35.650072000000002], [61.123071000000003, 36.491596999999999], [60.377637999999997, 36.527383], [59.234762000000003, 37.412987999999999], [58.436154000000002, 37.522309], [57.330433999999997, 38.029229000000001], [56.619365999999999, 38.121394000000002], [56.180374999999998, 37.935127000000001], [55.511578, 37.964117000000002], [54.800303999999997, 37.392420999999999], [53.921598000000003, 37.198917999999999], [53.735511000000002, 37.906135999999996], [53.880929000000002, 38.952092999999998], [53.101027999999999, 39.290573999999999], [53.357807999999999, 39.975285999999997], [52.693973, 40.033628999999998], [52.915250999999998, 40.876522999999999], [53.858139000000001, 40.631034], [54.736845000000002, 40.951014999999998], [54.008310999999999, 41.551211000000002], [53.721713000000001, 42.123190999999998], [52.91675, 41.868116999999998], [52.814689000000001, 41.135370999999999], [52.502459999999999, 41.783315999999999], [52.944293000000002, 42.116033999999999], [54.079417999999997, 42.324109], [54.755344999999998, 42.043970999999999], [55.455250999999997, 41.259858999999999], [55.968190999999997, 41.308641999999999], [57.096390999999997, 41.322310000000002], [56.932214999999999, 41.826025999999999], [57.786529999999999, 42.170552999999998], [58.629010999999998, 42.751550999999999], [59.976421999999999, 42.223081999999998], [60.083340999999997, 41.425145999999998], [60.465952999999999, 41.220326999999997], [61.547179, 41.266370000000002], [61.882714, 41.084857], [62.37426, 40.053885999999999], [63.518014999999998, 39.363256999999997], [64.170222999999993, 38.892406999999999], [65.215998999999996, 38.402695000000001], [66.546149999999997, 37.974685000000001], [66.518607000000003, 37.362783999999998], [66.217384999999993, 37.393790000000003], [65.745631000000003, 37.661163999999999], [65.588948000000002, 37.305216999999999], [64.746105, 37.111818], [64.546479000000005, 36.312072999999998], [63.982895999999997, 36.007956999999998], [63.193537999999997, 35.857165999999999], [62.984662, 35.404040999999999], [62.230651000000002, 35.270663999999996], [61.210816999999999, 35.650072000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u044f", "fr": "Turkm\u00e9nistan", "en": "Turkmenistan", "nl": "Turkmenistan", "pt": "Turquemenist\u00e3o", "no": "Turkmenistan", "de": "Turkmenistan", "it": "Turkmenistan", "sv": "Turkmenistan", "pl": "Turkmenistan", "fi": "Turkmenistan", "zh": "\u571f\u5e93\u66fc\u65af\u5766", "ja": "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3", "es": "Turkmenist\u00e1n"}, "label_fr": "Turkm\u00e9nistan", "name": "Turkmenistan", "dbpedia_uri": "http://dbpedia.org/resource/Turkmenistan"}, "id": "TKM"}, {"geometry": {"type": "Polygon", "coordinates": [[[124.968682, -8.8927899999999998], [125.086246, -8.6568869999999993], [125.94707200000001, -8.4320950000000003], [126.644704, -8.3982469999999996], [126.95724300000001, -8.2733450000000008], [127.335928, -8.3973169999999993], [126.967992, -8.6682559999999995], [125.92588499999999, -9.106007], [125.08852, -9.3931730000000009], [125.07002, -9.0899870000000007], [124.968682, -8.8927899999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0439 \u0422\u0438\u043c\u043e\u0440", "fr": "Timor oriental", "en": "East Timor", "nl": "Oost-Timor", "pt": "Timor-Leste", "no": "\u00d8st-Timor", "de": "Osttimor", "it": "Timor Est", "sv": "\u00d6sttimor", "pl": "Timor Wschodni", "fi": "It\u00e4-Timor", "zh": "\u4e1c\u5e1d\u6c76", "ja": "\u6771\u30c6\u30a3\u30e2\u30fc\u30eb", "es": "Timor Oriental"}, "label_fr": "Timor oriental", "name": "East Timor", "dbpedia_uri": "http://dbpedia.org/resource/East_Timor"}, "id": "TLS"}, {"geometry": {"type": "Polygon", "coordinates": [[[-61.68, 10.76], [-61.104999999999997, 10.890000000000001], [-60.895000000000003, 10.855], [-60.935000000000002, 10.109999999999999], [-61.770000000000003, 10], [-61.950000000000003, 10.09], [-61.659999999999997, 10.365], [-61.68, 10.76]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0434 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e", "fr": "Trinit\u00e9-et-Tobago", "en": "Trinidad and Tobago", "nl": "Trinidad en Tobago", "pt": "Trinidad e Tobago", "no": "Trinidad og Tobago", "de": "Trinidad und Tobago", "it": "Trinidad e Tobago", "sv": "Trinidad och Tobago", "pl": "Trynidad i Tobago", "fi": "Trinidad ja Tobago", "zh": "\u5343\u91cc\u9054\u53ca\u6258\u5df4\u54e5", "ja": "\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30fb\u30c8\u30d0\u30b4", "es": "Trinidad y Tobago"}, "label_fr": "Trinit\u00e9-et-Tobago", "name": "Trinidad and Tobago", "dbpedia_uri": "http://dbpedia.org/resource/Trinidad_and_Tobago"}, "id": "TTO"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.4821399999999993, 30.307556000000002], [9.0556029999999996, 32.102691999999998], [8.4391029999999994, 32.506284999999998], [8.4304729999999992, 32.748336999999999], [7.6126420000000001, 33.344115000000002], [7.5244819999999999, 34.097375999999997], [8.140981, 34.655146000000002], [8.3763679999999994, 35.479875999999997], [8.2178240000000002, 36.433177000000001], [8.4209639999999997, 36.946427], [9.5099940000000007, 37.349994000000002], [10.210001999999999, 37.230001999999999], [10.18065, 36.724038], [11.028867, 37.092103000000002], [11.100026, 36.899996000000002], [10.600004999999999, 36.409999999999997], [10.593287, 35.947443999999997], [10.939519000000001, 35.698984000000003], [10.807847000000001, 34.833506999999997], [10.149592999999999, 34.330773000000001], [10.339658999999999, 33.785741999999999], [10.856835999999999, 33.768740000000001], [11.108501, 33.293343], [11.488787, 33.136996000000003], [11.432252999999999, 32.368903000000003], [10.944789999999999, 32.081814999999999], [10.636901, 31.761420999999999], [9.9502249999999997, 31.376069999999999], [10.056575, 30.961831], [9.9700170000000004, 30.539325000000002], [9.4821399999999993, 30.307556000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u043d\u0438\u0441", "fr": "Tunisie", "en": "Tunisia", "nl": "Tunesi\u00eb", "pt": "Tun\u00edsia", "no": "Tunisia", "de": "Tunesien", "it": "Tunisia", "sv": "Tunisien", "pl": "Tunezja", "fi": "Tunisia", "zh": "\u7a81\u5c3c\u897f\u4e9e", "ja": "\u30c1\u30e5\u30cb\u30b8\u30a2", "es": "T\u00fanez"}, "label_fr": "Tunisie", "name": "Tunisia", "dbpedia_uri": "http://dbpedia.org/resource/Tunisia"}, "id": "TUN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[36.913127000000003, 41.335357999999999], [38.347664999999999, 40.948585999999999], [39.512607000000003, 41.102763000000003], [40.373432999999999, 41.013672999999997], [41.554084000000003, 41.535656000000003], [42.619548999999999, 41.583173000000002], [43.582746, 41.092143], [43.752657999999997, 40.740200999999999], [43.656435999999999, 40.253563999999997], [44.400008999999997, 40.005000000000003], [44.793990000000001, 39.713003], [44.109225000000002, 39.428136000000002], [44.421402999999998, 38.281281], [44.225755999999997, 37.971584], [44.772699000000003, 37.170445000000001], [44.293452000000002, 37.001514], [43.942259, 37.256228], [42.779125999999998, 37.385263999999999], [42.349590999999997, 37.229872999999998], [41.212088999999999, 37.074351999999998], [40.673259000000002, 37.091276000000001], [39.522579999999998, 36.716054], [38.699891000000001, 36.712927000000001], [38.167726999999999, 36.901209999999999], [37.066761, 36.623035999999999], [36.739494000000001, 36.817520000000002], [36.685389000000001, 36.259698999999998], [36.417549999999999, 36.040616999999997], [36.149763, 35.821534999999997], [35.782085000000002, 36.274994999999997], [36.160822000000003, 36.650606000000003], [35.550936, 36.565443000000002], [34.714553000000002, 36.795532000000001], [34.026895000000003, 36.21996], [32.509157999999999, 36.107564000000004], [31.699594999999999, 36.644275], [30.621625000000002, 36.677864999999997], [30.391096000000001, 36.262981000000003], [29.699975999999999, 36.144356999999999], [28.732903, 36.676831], [27.641186999999999, 36.658822000000001], [27.048767999999999, 37.653360999999997], [26.318218000000002, 38.208132999999997], [26.8047, 38.985759999999999], [26.170784999999999, 39.463611999999998], [27.28002, 40.420014000000002], [28.819977999999999, 40.460011000000002], [29.240003999999999, 41.219991], [31.145934, 41.087622000000003], [32.347979000000002, 41.736263999999998], [33.513283000000001, 42.01896], [35.167704000000001, 42.040225], [36.913127000000003, 41.335357999999999]]], [[[27.192377, 40.690565999999997], [26.358008999999999, 40.151994000000002], [26.043351000000001, 40.617753999999998], [26.056941999999999, 40.824123], [26.294602000000001, 40.936261000000002], [26.604196000000002, 41.562114999999999], [26.117042000000001, 41.826904999999996], [27.135739000000001, 42.141485000000003], [27.99672, 42.007359000000001], [28.115525000000002, 41.622886000000001], [28.988443, 41.299934], [28.806438, 41.054962000000003], [27.619016999999999, 40.999822999999999], [27.192377, 40.690565999999997]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u0446\u0438\u044f", "fr": "Turquie", "en": "Turkey", "nl": "Turkije", "pt": "Turquia", "no": "Tyrkia", "de": "T\u00fcrkei", "it": "Turchia", "sv": "Turkiet", "pl": "Turcja", "fi": "Turkki", "zh": "\u571f\u8033\u5176", "ja": "\u30c8\u30eb\u30b3", "es": "Turqu\u00eda"}, "label_fr": "Turquie", "name": "Turkey", "dbpedia_uri": "http://dbpedia.org/resource/Turkey"}, "id": "TUR"}, {"geometry": {"type": "Polygon", "coordinates": [[[121.777818, 24.394273999999999], [121.17563199999999, 22.790856999999999], [120.74708, 21.970571], [120.220083, 22.814861000000001], [120.106189, 23.556263000000001], [120.69468000000001, 24.538450999999998], [121.49504399999999, 25.295459000000001], [121.951244, 24.997596000000001], [121.777818, 24.394273999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0439\u0432\u0430\u043d\u044c", "fr": "Ta\u00efwan", "en": "Taiwan", "nl": "Taiwan", "pt": "Ilha Formosa", "no": "Taiwan", "de": "Taiwan", "it": "Isola di Taiwan", "sv": "Taiwan (\u00f6)", "pl": "Tajwan (wyspa)", "fi": "Taiwan", "zh": "\u53f0\u7063", "ja": "\u53f0\u6e7e", "es": "Isla de Taiw\u00e1n"}, "label_fr": "Ta\u00efwan", "name": "Taiwan", "dbpedia_uri": "http://dbpedia.org/resource/Taiwan"}, "id": "TWN"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.903711000000001, -0.94999999999999996], [34.072620000000001, -1.05982], [37.698689999999999, -3.0969899999999999], [37.7669, -3.6771199999999999], [39.202219999999997, -4.6767700000000003], [38.740540000000003, -5.9089499999999999], [38.799770000000002, -6.4756600000000004], [39.439999999999998, -6.8399999999999999], [39.469999999999999, -7.0999999999999996], [39.194690000000001, -7.7039], [39.252029999999998, -8.0078099999999992], [39.186520000000002, -8.4855099999999997], [39.535739999999997, -9.1123700000000003], [39.949599999999997, -10.0984], [40.316589999999998, -10.3171], [39.521000000000001, -10.896879999999999], [38.427557, -11.285202], [37.827640000000002, -11.268789999999999], [37.471290000000003, -11.568759999999999], [36.775151000000001, -11.594537000000001], [36.514082000000002, -11.720938], [35.312398000000002, -11.439145999999999], [34.559989000000002, -11.520020000000001], [34.280000000000001, -10.16], [33.940837999999999, -9.6936739999999997], [33.739719999999998, -9.4171499999999995], [32.759374999999999, -9.2305989999999998], [32.191865, -8.9303589999999993], [31.556348, -8.7620489999999993], [31.157751000000001, -8.5945789999999995], [30.739999999999998, -8.3399999999999999], [30.199999999999999, -7.0800000000000001], [29.620000000000001, -6.5199999999999996], [29.419993000000002, -5.9399990000000003], [29.519987, -5.4199789999999997], [29.339998000000001, -4.4999830000000003], [29.753512000000001, -4.4523890000000002], [30.116320000000002, -4.0901199999999998], [30.50554, -3.5685799999999999], [30.75224, -3.3593099999999998], [30.743010000000002, -3.0343100000000001], [30.527660000000001, -2.80762], [30.469670000000001, -2.4138299999999999], [30.758309000000001, -2.2872499999999998], [30.816134999999999, -1.698914], [30.419104999999998, -1.1346590000000001], [30.769860000000001, -1.0145500000000001], [31.86617, -1.0273600000000001], [33.903711000000001, -0.94999999999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f", "fr": "Tanzanie", "en": "Tanzania", "nl": "Tanzania", "pt": "Tanz\u00e2nia", "no": "Tanzania", "de": "Tansania", "it": "Tanzania", "sv": "Tanzania", "pl": "Tanzania", "fi": "Tansania", "zh": "\u5766\u6851\u5c3c\u4e9a", "ja": "\u30bf\u30f3\u30b6\u30cb\u30a2", "es": "Tanzania"}, "label_fr": "Tanzanie", "name": "United Republic of Tanzania", "dbpedia_uri": "http://dbpedia.org/resource/Tanzania"}, "id": "TZA"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.86617, -1.0273600000000001], [30.769860000000001, -1.0145500000000001], [30.419104999999998, -1.1346590000000001], [29.821518999999999, -1.443322], [29.579466, -1.341313], [29.587838000000001, -0.58740599999999998], [29.819500000000001, -0.20530000000000001], [29.875779000000001, 0.59738000000000002], [30.086154000000001, 1.0623130000000001], [30.468508, 1.5838049999999999], [30.85267, 1.849396], [31.174149, 2.2044649999999999], [30.773319999999998, 2.33989], [30.833850000000002, 3.5091700000000001], [31.245560000000001, 3.7818999999999998], [31.881450000000001, 3.5582699999999998], [32.686419999999998, 3.7923200000000001], [33.390000000000001, 3.79], [34.005000000000003, 4.2498849999999999], [34.479129999999998, 3.5556000000000001], [34.596069999999997, 3.0537399999999999], [35.035989999999998, 1.90584], [34.6721, 1.1769400000000001], [34.18, 0.51500000000000001], [33.893568999999999, 0.10981399999999999], [33.903711000000001, -0.94999999999999996], [31.86617, -1.0273600000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0433\u0430\u043d\u0434\u0430", "fr": "Ouganda", "en": "Uganda", "nl": "Oeganda", "pt": "Uganda", "no": "Uganda", "de": "Uganda", "it": "Uganda", "sv": "Uganda", "pl": "Uganda", "fi": "Uganda", "zh": "\u4e4c\u5e72\u8fbe", "ja": "\u30a6\u30ac\u30f3\u30c0", "es": "Uganda"}, "label_fr": "Ouganda", "name": "Uganda", "dbpedia_uri": "http://dbpedia.org/resource/Uganda"}, "id": "UGA"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.785997999999999, 52.101678], [32.159412000000003, 52.061267000000001], [32.412058000000002, 52.288694999999997], [32.715761000000001, 52.238464999999998], [33.752699999999997, 52.335075000000003], [34.391731, 51.768881999999998], [34.141978000000002, 51.566412999999997], [34.224815999999997, 51.255992999999997], [35.022182999999998, 51.207571999999999], [35.377924, 50.773955000000001], [35.356116, 50.577196999999998], [36.626168, 50.225591000000001], [37.393459999999997, 50.383952999999998], [38.010630999999997, 49.915661999999998], [38.594988000000001, 49.926462000000001], [40.069057999999998, 49.601055000000002], [40.080789000000003, 49.307429999999997], [39.674664, 48.783817999999997], [39.895631999999999, 48.232405], [39.738278000000001, 47.898936999999997], [38.770584999999997, 47.825608000000003], [38.255111999999997, 47.546399999999998], [38.223537999999998, 47.10219], [37.425136999999999, 47.022221000000002], [36.759855000000002, 46.698700000000002], [35.823684999999998, 46.645963999999999], [34.962342, 46.273197000000003], [35.020788000000003, 45.651218999999998], [35.510008999999997, 45.409993], [36.529997999999999, 45.469990000000003], [36.334713000000001, 45.113216000000001], [35.239998999999997, 44.939996000000001], [33.882511000000001, 44.361479000000003], [33.326421000000003, 44.564877000000003], [33.546923999999997, 45.034770999999999], [32.454174000000002, 45.327466000000001], [32.630803999999998, 45.519185999999998], [33.588161999999997, 45.851568999999998], [33.298566999999998, 46.080598000000002], [31.744140000000002, 46.333348000000001], [31.675307, 46.706245000000003], [30.748749, 46.583100000000002], [30.377609, 46.032409999999999], [29.603289, 45.293308000000003], [29.149725, 45.464925000000001], [28.679779, 45.304031000000002], [28.233554000000002, 45.488283000000003], [28.485268999999999, 45.596907000000002], [28.659987000000001, 45.939987000000002], [28.933717000000001, 46.258830000000003], [28.862971999999999, 46.437888999999998], [29.072106999999999, 46.517677999999997], [29.170653999999999, 46.379261999999997], [29.759972000000001, 46.349988000000003], [30.024659, 46.423937000000002], [29.83821, 46.525326], [29.908852, 46.674360999999998], [29.559674000000001, 46.928583000000003], [29.415134999999999, 47.346645000000002], [29.050868000000001, 47.510227], [29.122698, 47.849094999999998], [28.670891000000001, 48.118149000000003], [28.259547000000001, 48.155562000000003], [27.522537, 48.467118999999997], [26.857824000000001, 48.368211000000002], [26.619337000000002, 48.220725999999999], [26.19745, 48.220880999999999], [25.945941000000001, 47.987149000000002], [25.207743000000001, 47.891055999999999], [24.866316999999999, 47.737526000000003], [24.402056000000002, 47.981878000000002], [23.760957999999999, 47.985598000000003], [23.142236, 48.096341000000002], [22.710531, 47.882193999999998], [22.640820000000001, 48.150239999999997], [22.085608000000001, 48.422263999999998], [22.280842, 48.825392000000001], [22.558138, 49.085737999999999], [22.776419000000001, 49.027394999999999], [22.518450000000001, 49.476773999999999], [23.426507999999998, 50.308506000000001], [23.922757000000001, 50.424880999999999], [24.029986000000001, 50.705407000000001], [23.527070999999999, 51.578454000000001], [24.005078000000001, 51.617443999999999], [24.553106, 51.888461], [25.327788000000002, 51.910656000000003], [26.337959000000001, 51.832289000000003], [27.454066000000001, 51.592303000000001], [28.241614999999999, 51.572226999999998], [28.617612999999999, 51.427714000000002], [28.992834999999999, 51.602043999999999], [29.254937999999999, 51.368234000000001], [30.157364000000001, 51.416137999999997], [30.555116999999999, 51.319502999999997], [30.619454000000001, 51.822806], [30.927548999999999, 52.042352999999999], [31.785997999999999, 52.101678]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u043a\u0440\u0430\u0438\u043d\u0430", "fr": "Ukraine", "en": "Ukraine", "nl": "Oekra\u00efne", "pt": "Ucr\u00e2nia", "no": "Ukraina", "de": "Ukraine", "it": "Ucraina", "sv": "Ukraina", "pl": "Ukraina", "fi": "Ukraina", "zh": "\u4e4c\u514b\u5170", "ja": "\u30a6\u30af\u30e9\u30a4\u30ca", "es": "Ucrania"}, "label_fr": "Ukraine", "name": "Ukraine", "dbpedia_uri": "http://dbpedia.org/resource/Ukraine"}, "id": "UKR"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.625132999999998, -30.216294999999999], [-56.976025999999997, -30.109686], [-55.973244999999999, -30.883075999999999], [-55.601509999999998, -30.853878999999999], [-54.572451999999998, -31.494510999999999], [-53.787951999999997, -32.047243000000002], [-53.209589000000001, -32.727665999999999], [-53.650543999999996, -33.202004000000002], [-53.373662000000003, -33.768377999999998], [-53.806426000000002, -34.396814999999997], [-54.935865999999997, -34.952646999999999], [-55.67409, -34.752659000000001], [-56.215297, -34.859836000000001], [-57.139685, -34.430456], [-57.817861000000001, -34.462547000000001], [-58.427073999999998, -33.909453999999997], [-58.349611000000003, -33.263188999999997], [-58.132648000000003, -33.040567000000003], [-58.142440000000001, -32.044504000000003], [-57.874937000000003, -31.016556000000001], [-57.625132999999998, -30.216294999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0440\u0443\u0433\u0432\u0430\u0439", "fr": "Uruguay", "en": "Uruguay", "nl": "Uruguay", "pt": "Uruguai", "no": "Uruguay", "de": "Uruguay", "it": "Uruguay", "sv": "Uruguay", "pl": "Urugwaj", "fi": "Uruguay", "zh": "\u4e4c\u62c9\u572d", "ja": "\u30a6\u30eb\u30b0\u30a2\u30a4", "es": "Uruguay"}, "label_fr": "Uruguay", "name": "Uruguay", "dbpedia_uri": "http://dbpedia.org/resource/Uruguay"}, "id": "URY"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-155.54211000000001, 19.083480000000002], [-155.68817000000001, 18.91619], [-155.93664999999999, 19.05939], [-155.90806000000001, 19.33888], [-156.07346999999999, 19.702940000000002], [-156.02368000000001, 19.814219999999999], [-155.85007999999999, 19.97729], [-155.91907, 20.173950000000001], [-155.86107999999999, 20.267209999999999], [-155.78505000000001, 20.248699999999999], [-155.40214, 20.079750000000001], [-155.22452000000001, 19.993020000000001], [-155.06226000000001, 19.859100000000002], [-154.80741, 19.508710000000001], [-154.83147, 19.453279999999999], [-155.22217000000001, 19.239719999999998], [-155.54211000000001, 19.083480000000002]]], [[[-156.07926, 20.643969999999999], [-156.41444999999999, 20.572410000000001], [-156.58672999999999, 20.783000000000001], [-156.70167000000001, 20.8643], [-156.71055000000001, 20.926760000000002], [-156.61258000000001, 21.01249], [-156.25711000000001, 20.917449999999999], [-155.99565999999999, 20.764040000000001], [-156.07926, 20.643969999999999]]], [[[-156.75824, 21.176839999999999], [-156.78933000000001, 21.068729999999999], [-157.32521, 21.097770000000001], [-157.25027, 21.219580000000001], [-156.75824, 21.176839999999999]]], [[[-157.65282999999999, 21.32217], [-157.70703, 21.264420000000001], [-157.77860000000001, 21.277290000000001], [-158.12666999999999, 21.312439999999999], [-158.25380000000001, 21.539190000000001], [-158.29265000000001, 21.57912], [-158.02520000000001, 21.71696], [-157.94161, 21.652719999999999], [-157.65282999999999, 21.32217]]], [[[-159.34512000000001, 21.981999999999999], [-159.46372, 21.882989999999999], [-159.80051, 22.065329999999999], [-159.74877000000001, 22.138200000000001], [-159.59620000000001, 22.236180000000001], [-159.36569, 22.214939999999999], [-159.34512000000001, 21.981999999999999]]], [[[-94.817580000000007, 49.389049999999997], [-94.640000000000001, 48.840000000000003], [-94.329139999999995, 48.670740000000002], [-93.630870000000002, 48.609259999999999], [-92.609999999999999, 48.450000000000003], [-91.640000000000001, 48.140000000000001], [-90.829999999999998, 48.270000000000003], [-89.599999999999994, 48.009999999999998], [-89.272917000000007, 48.019807999999998], [-88.378113999999997, 48.302917999999998], [-87.439792999999995, 47.939999999999998], [-86.461990999999998, 47.553337999999997], [-85.652362999999994, 47.220219], [-84.876080000000002, 46.900083000000002], [-84.779238000000007, 46.637101999999999], [-84.543749000000005, 46.538684000000003], [-84.604900000000001, 46.439599999999999], [-84.336699999999993, 46.408769999999997], [-84.142120000000006, 46.512225999999998], [-84.091851000000005, 46.275418999999999], [-83.890765000000002, 46.116926999999997], [-83.616130999999996, 46.116926999999997], [-83.469550999999996, 45.994686000000002], [-83.592850999999996, 45.816893999999998], [-82.550925000000007, 45.347517000000003], [-82.337762999999995, 44.439999999999998], [-82.137642, 43.571088000000003], [-82.430000000000007, 42.979999999999997], [-82.900000000000006, 42.43], [-83.120000000000005, 42.079999999999998], [-83.141999999999996, 41.975681000000002], [-83.029809999999998, 41.832796000000002], [-82.690089, 41.675105000000002], [-82.439278000000002, 41.675105000000002], [-81.277747000000005, 42.209026000000001], [-80.247448000000006, 42.366199999999999], [-78.939362000000003, 42.863610999999999], [-78.920000000000002, 42.965000000000003], [-79.010000000000005, 43.270000000000003], [-79.171673999999996, 43.466338999999998], [-78.720280000000002, 43.625089000000003], [-77.737885000000006, 43.629055999999999], [-76.820034000000007, 43.628784000000003], [-76.5, 44.018459], [-76.375, 44.096310000000003], [-75.318209999999993, 44.816450000000003], [-74.867000000000004, 45.000480000000003], [-73.347830000000002, 45.007379999999998], [-71.50506, 45.008200000000002], [-71.405000000000001, 45.255000000000003], [-71.084819999999993, 45.305239999999998], [-70.659999999999997, 45.460000000000001], [-70.305000000000007, 45.914999999999999], [-69.999970000000005, 46.693069999999999], [-69.237216000000004, 47.447780999999999], [-68.905000000000001, 47.185000000000002], [-68.234440000000006, 47.354860000000002], [-67.790459999999996, 47.066360000000003], [-67.791340000000005, 45.702809999999999], [-67.137410000000003, 45.137529999999998], [-66.964659999999995, 44.809699999999999], [-68.032520000000005, 44.325200000000002], [-69.060000000000002, 43.979999999999997], [-70.116169999999997, 43.684049999999999], [-70.645476000000002, 43.090237999999999], [-70.814890000000005, 42.865299999999998], [-70.825000000000003, 42.335000000000001], [-70.495000000000005, 41.805], [-70.079999999999998, 41.780000000000001], [-70.185000000000002, 42.145000000000003], [-69.884969999999996, 41.922829999999998], [-69.965029999999999, 41.637169999999998], [-70.640000000000001, 41.475000000000001], [-71.12039, 41.494450000000001], [-71.859999999999999, 41.32], [-72.295000000000002, 41.270000000000003], [-72.876429999999999, 41.220649999999999], [-73.709999999999994, 40.931102000000003], [-72.241259999999997, 41.119480000000003], [-71.944999999999993, 40.93], [-73.344999999999999, 40.630000000000003], [-73.981999999999999, 40.628], [-73.952325000000002, 40.750749999999996], [-74.256709999999998, 40.473509999999997], [-73.962440000000001, 40.427630000000001], [-74.178380000000004, 39.70926], [-74.906040000000004, 38.939540000000001], [-74.980410000000006, 39.196399999999997], [-75.200019999999995, 39.248449999999998], [-75.528049999999993, 39.4985], [-75.319999999999993, 38.960000000000001], [-75.071834999999993, 38.782032000000001], [-75.056730000000002, 38.404119999999999], [-75.377470000000002, 38.015509999999999], [-75.94023, 37.216889999999999], [-76.031270000000006, 37.256599999999999], [-75.722049999999996, 37.937049999999999], [-76.232870000000005, 38.319215], [-76.349999999999994, 39.149999999999999], [-76.542725000000004, 38.717615000000002], [-76.329329999999999, 38.083260000000003], [-76.989998, 38.239992000000001], [-76.30162, 37.917945000000003], [-76.258740000000003, 36.9664], [-75.971800000000002, 36.897260000000003], [-75.868039999999993, 36.551250000000003], [-75.727490000000003, 35.550739999999998], [-76.36318, 34.808540000000001], [-77.397634999999994, 34.512009999999997], [-78.054959999999994, 33.925469999999997], [-78.554349999999999, 33.861330000000002], [-79.060670000000002, 33.493949999999998], [-79.203569999999999, 33.158389999999997], [-80.301325000000006, 32.509354999999999], [-80.864980000000003, 32.033299999999997], [-81.336290000000005, 31.44049], [-81.49042, 30.729990000000001], [-81.31371, 30.035520000000002], [-80.980000000000004, 29.18], [-80.535584999999998, 28.47213], [-80.530000000000001, 28.039999999999999], [-80.056539000000001, 26.879999999999999], [-80.088014999999999, 26.205765], [-80.131559999999993, 25.816775], [-80.381029999999996, 25.206160000000001], [-80.680000000000007, 25.079999999999998], [-81.172129999999996, 25.201260000000001], [-81.329999999999998, 25.640000000000001], [-81.709999999999994, 25.870000000000001], [-82.239999999999995, 26.73], [-82.705150000000003, 27.495039999999999], [-82.855260000000001, 27.886240000000001], [-82.650000000000006, 28.550000000000001], [-82.930000000000007, 29.100000000000001], [-83.709590000000006, 29.93656], [-84.099999999999994, 30.09], [-85.108819999999994, 29.636150000000001], [-85.287840000000003, 29.686119999999999], [-85.773099999999999, 30.152609999999999], [-86.400000000000006, 30.399999999999999], [-87.530360000000002, 30.274329999999999], [-88.417820000000006, 30.384899999999998], [-89.180490000000006, 30.31598], [-89.593830999999994, 30.159994000000001], [-89.413735000000003, 29.894189999999998], [-89.430000000000007, 29.48864], [-89.217669999999998, 29.291080000000001], [-89.408230000000003, 29.159610000000001], [-89.77928, 29.30714], [-90.154629999999997, 29.117429999999999], [-90.880224999999996, 29.148534999999999], [-91.626784999999998, 29.677], [-92.49906, 29.552299999999999], [-93.226370000000003, 29.783750000000001], [-93.848420000000004, 29.713629999999998], [-94.689999999999998, 29.48], [-95.600260000000006, 28.738630000000001], [-96.594040000000007, 28.307480000000002], [-97.140000000000001, 27.829999999999998], [-97.370000000000005, 27.379999999999999], [-97.379999999999995, 26.690000000000001], [-97.329999999999998, 26.210000000000001], [-97.140000000000001, 25.870000000000001], [-97.530000000000001, 25.84], [-98.239999999999995, 26.059999999999999], [-99.019999999999996, 26.370000000000001], [-99.299999999999997, 26.84], [-99.519999999999996, 27.539999999999999], [-100.11, 28.109999999999999], [-100.45583999999999, 28.696120000000001], [-100.9576, 29.380710000000001], [-101.66240000000001, 29.779299999999999], [-102.48, 29.760000000000002], [-103.11, 28.969999999999999], [-103.94, 29.27], [-104.45697, 29.571960000000001], [-104.70574999999999, 30.121729999999999], [-105.03737, 30.644020000000001], [-105.63159, 31.083829999999999], [-106.1429, 31.39995], [-106.50758999999999, 31.754519999999999], [-108.23999999999999, 31.754854000000002], [-108.24194, 31.342220000000001], [-109.035, 31.341940000000001], [-111.02361000000001, 31.334720000000001], [-113.30498, 32.039140000000003], [-114.815, 32.525280000000002], [-114.72139, 32.720829999999999], [-115.99135, 32.612389999999998], [-117.12775999999999, 32.535339999999998], [-117.29593800000001, 33.046225], [-117.944, 33.621236000000003], [-118.410602, 33.740909000000002], [-118.51989500000001, 34.027782000000002], [-119.081, 34.078000000000003], [-119.438841, 34.348477000000003], [-120.36778, 34.447110000000002], [-120.62286, 34.608550000000001], [-120.74433000000001, 35.156860000000002], [-121.71456999999999, 36.161529999999999], [-122.54747, 37.551760000000002], [-122.51201, 37.783389999999997], [-122.95319000000001, 38.113709999999998], [-123.7272, 38.951659999999997], [-123.86517000000001, 39.76699], [-124.39807, 40.313200000000002], [-124.17886, 41.142020000000002], [-124.2137, 41.999639999999999], [-124.53283999999999, 42.765990000000002], [-124.14214, 43.708379999999998], [-124.020535, 44.615895000000002], [-123.89892999999999, 45.523409999999998], [-124.079635, 46.864750000000001], [-124.39567, 47.720170000000003], [-124.68720999999999, 48.184432999999999], [-124.566101, 48.379714999999997], [-123.12, 48.039999999999999], [-122.58736, 47.095999999999997], [-122.34, 47.359999999999999], [-122.5, 48.18], [-122.84, 49], [-120, 49], [-117.03121, 49], [-116.04818, 49], [-113, 49], [-110.05, 49], [-107.05, 49], [-104.04826, 48.999859999999998], [-100.65000000000001, 49], [-97.228719999999996, 49.000700000000002], [-95.15907, 49], [-95.156090000000006, 49.384250000000002], [-94.817580000000007, 49.389049999999997]]], [[[-153.006314, 57.115842000000001], [-154.00509, 56.734676999999998], [-154.516403, 56.992749000000003], [-154.67099300000001, 57.461196000000001], [-153.76277999999999, 57.816575], [-153.22872899999999, 57.968967999999997], [-152.56479100000001, 57.901426999999998], [-152.14114699999999, 57.591059000000001], [-153.006314, 57.115842000000001]]], [[[-165.57916399999999, 59.909987000000001], [-166.19277, 59.754441], [-166.84833699999999, 59.941406000000001], [-167.455277, 60.213068999999997], [-166.467792, 60.384169999999997], [-165.67443, 60.293607000000002], [-165.57916399999999, 59.909987000000001]]], [[[-171.73165700000001, 63.782514999999997], [-171.11443399999999, 63.592191], [-170.49111199999999, 63.694974999999999], [-169.68250499999999, 63.431116000000003], [-168.68943899999999, 63.297505999999998], [-168.771941, 63.188597999999999], [-169.52943999999999, 62.976931], [-170.29055600000001, 63.194437999999998], [-170.67138600000001, 63.375821999999999], [-171.55306300000001, 63.317788999999998], [-171.791111, 63.405845999999997], [-171.73165700000001, 63.782514999999997]]], [[[-155.06779, 71.147775999999993], [-154.344165, 70.696409000000003], [-153.90000599999999, 70.889989], [-152.21000599999999, 70.829992000000004], [-152.27000200000001, 70.600005999999993], [-150.739992, 70.430017000000007], [-149.72000299999999, 70.530010000000004], [-147.613362, 70.214034999999996], [-145.68998999999999, 70.120009999999994], [-144.92001099999999, 69.989992000000001], [-143.58944600000001, 70.152513999999996], [-142.07250999999999, 69.851938000000004], [-140.98598799999999, 69.711997999999994], [-140.98598799999999, 69.711997999999994], [-140.99249900000001, 66.000028999999998], [-140.99777, 60.306396999999997], [-140.01299800000001, 60.276837999999998], [-139.03899999999999, 60.000006999999997], [-138.34089, 59.562109999999997], [-137.45249999999999, 58.905000000000001], [-136.47971999999999, 59.463889999999999], [-135.47583, 59.787779999999998], [-134.94499999999999, 59.270560000000003], [-134.27110999999999, 58.861109999999996], [-133.355549, 58.410285000000002], [-132.73042000000001, 57.692889999999998], [-131.70780999999999, 56.552120000000002], [-130.00778, 55.91583], [-129.979994, 55.284998000000002], [-130.53611000000001, 54.802753000000003], [-131.08581799999999, 55.178905999999998], [-131.96721099999999, 55.497776000000002], [-132.250011, 56.369996], [-133.53918100000001, 57.178887000000003], [-134.07806299999999, 58.123068000000004], [-135.03821099999999, 58.187714999999997], [-136.628062, 58.212209000000001], [-137.800006, 58.499994999999998], [-139.86778699999999, 59.537762000000001], [-140.82527400000001, 59.727516999999999], [-142.574444, 60.084446999999997], [-143.95888099999999, 59.999180000000003], [-145.925557, 60.45861], [-147.114374, 60.884656], [-148.22430600000001, 60.672989000000001], [-148.018066, 59.978329000000002], [-148.57082299999999, 59.914172999999998], [-149.727858, 59.705658], [-150.60824299999999, 59.368211000000002], [-151.71639300000001, 59.155821000000003], [-151.859433, 59.744984000000002], [-151.409719, 60.725802999999999], [-150.34694099999999, 61.033588000000002], [-150.62111100000001, 61.284424999999999], [-151.895839, 60.727198000000001], [-152.57832999999999, 60.061656999999997], [-154.019172, 59.350279], [-153.28751099999999, 58.864727999999999], [-154.23249200000001, 58.146374000000002], [-155.307491, 57.727795], [-156.308335, 57.422773999999997], [-156.55609699999999, 56.979984999999999], [-158.11721700000001, 56.463608000000001], [-158.43332100000001, 55.994154000000002], [-159.60332700000001, 55.566685999999997], [-160.28971999999999, 55.643580999999998], [-161.22304800000001, 55.364735000000003], [-162.23776599999999, 55.024186999999998], [-163.069447, 54.689737000000001], [-164.78556900000001, 54.404173], [-164.94222600000001, 54.572225000000003], [-163.84834000000001, 55.039431], [-162.870001, 55.348042999999997], [-161.80417499999999, 55.894986000000003], [-160.563605, 56.008054999999999], [-160.07056, 56.418055000000003], [-158.68444299999999, 57.016674999999999], [-158.461097, 57.216920999999999], [-157.72277, 57.570000999999998], [-157.550274, 58.328325999999997], [-157.041675, 58.918885000000003], [-158.19473099999999, 58.615802000000002], [-158.51721800000001, 58.787781000000003], [-159.058606, 58.424185999999999], [-159.71166700000001, 58.93139], [-159.981289, 58.572549000000002], [-160.35527099999999, 59.071123], [-161.35500300000001, 58.670838000000003], [-161.96889400000001, 58.671664999999997], [-162.05498700000001, 59.266925000000001], [-161.87417099999999, 59.633620999999998], [-162.51805899999999, 59.989724000000002], [-163.818341, 59.798056000000003], [-164.662218, 60.267484000000003], [-165.34638799999999, 60.507496000000003], [-165.350832, 61.073895], [-166.12137899999999, 61.500019000000002], [-165.734452, 62.074997000000003], [-164.91917900000001, 62.633076000000003], [-164.56250800000001, 63.146377999999999], [-163.753332, 63.219448999999997], [-163.06722400000001, 63.059458999999997], [-162.26055500000001, 63.541936], [-161.53444999999999, 63.455817000000003], [-160.77250699999999, 63.766108000000003], [-160.95833500000001, 64.222798999999995], [-161.518068, 64.402788000000001], [-160.77777800000001, 64.788604000000007], [-161.39192600000001, 64.777235000000005], [-162.45304999999999, 64.559444999999997], [-162.75778600000001, 64.338605000000001], [-163.54639399999999, 64.559160000000006], [-164.96082999999999, 64.446944999999999], [-166.42528799999999, 64.686672000000002], [-166.84500399999999, 65.088896000000005], [-168.11055999999999, 65.669996999999995], [-166.70527100000001, 66.088318000000001], [-164.47470999999999, 66.576660000000004], [-163.652512, 66.576660000000004], [-163.788602, 66.077207000000001], [-161.677774, 66.116119999999995], [-162.48971499999999, 66.735564999999994], [-163.719717, 67.116394999999997], [-164.43099100000001, 67.616337999999999], [-165.390287, 68.042771999999999], [-166.76444100000001, 68.358877000000007], [-166.20470700000001, 68.883031000000003], [-164.43081100000001, 68.915535000000006], [-163.16861399999999, 69.371115000000003], [-162.930566, 69.858062000000004], [-161.908897, 70.333330000000004], [-160.934797, 70.447689999999994], [-159.039176, 70.891642000000004], [-158.11972299999999, 70.824720999999997], [-156.580825, 71.357764000000003], [-155.06779, 71.147775999999993]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0428\u0442\u0430\u0442\u044b \u0410\u043c\u0435\u0440\u0438\u043a\u0438", "fr": "\u00c9tats-Unis", "en": "United States", "nl": "Verenigde Staten", "pt": "Estados Unidos", "no": "USA", "de": "Vereinigte Staaten", "it": "Stati Uniti d'America", "sv": "USA", "pl": "Stany Zjednoczone", "fi": "Yhdysvallat", "zh": "\u7f8e\u570b", "ja": "\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd", "es": "Estados Unidos"}, "label_fr": "\u00c9tats-Unis", "name": "United States of America", "dbpedia_uri": "http://dbpedia.org/resource/United_States"}, "id": "USA"}, {"geometry": {"type": "Polygon", "coordinates": [[[66.518607000000003, 37.362783999999998], [66.546149999999997, 37.974685000000001], [65.215998999999996, 38.402695000000001], [64.170222999999993, 38.892406999999999], [63.518014999999998, 39.363256999999997], [62.37426, 40.053885999999999], [61.882714, 41.084857], [61.547179, 41.266370000000002], [60.465952999999999, 41.220326999999997], [60.083340999999997, 41.425145999999998], [59.976421999999999, 42.223081999999998], [58.629010999999998, 42.751550999999999], [57.786529999999999, 42.170552999999998], [56.932214999999999, 41.826025999999999], [57.096390999999997, 41.322310000000002], [55.968190999999997, 41.308641999999999], [55.928916999999998, 44.995857999999998], [58.503126999999999, 45.586804000000001], [58.689988999999997, 45.500014], [60.239972000000002, 44.784036999999998], [61.058320000000002, 44.405816999999999], [62.013300000000001, 43.504477000000001], [63.185786999999998, 43.650075000000001], [64.900824, 43.728081000000003], [66.098011999999997, 42.997660000000003], [66.023392000000001, 41.994646000000003], [66.510649000000001, 41.987644000000003], [66.714046999999994, 41.168444000000001], [67.985855999999998, 41.135990999999997], [68.259895999999998, 40.662325000000003], [68.632482999999993, 40.668680999999999], [69.070026999999996, 41.384244000000002], [70.388964999999999, 42.081308], [70.962315000000004, 42.266154], [71.259247999999999, 42.167710999999997], [70.420022000000003, 41.519998000000001], [71.157859000000002, 41.143586999999997], [71.870114999999998, 41.392899999999997], [73.055417000000006, 40.866033000000002], [71.774874999999994, 40.145843999999997], [71.014197999999993, 40.244365999999999], [70.601406999999995, 40.218527000000002], [70.458160000000007, 40.496495000000003], [70.666622000000004, 40.960213000000003], [69.329494999999994, 40.727823999999998], [69.011633000000003, 40.086157999999998], [68.536416000000003, 39.533453000000002], [67.701429000000005, 39.580477999999999], [67.442220000000006, 39.140143999999999], [68.176024999999996, 38.901553], [68.392032999999998, 38.157024999999997], [67.829999999999998, 37.144993999999997], [67.075782000000004, 37.356144], [66.518607000000003, 37.362783999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Ouzb\u00e9kistan", "en": "Uzbekistan", "nl": "Oezbekistan", "pt": "Uzbequist\u00e3o", "no": "Usbekistan", "de": "Usbekistan", "it": "Uzbekistan", "sv": "Uzbekistan", "pl": "Uzbekistan", "fi": "Uzbekistan", "zh": "\u4e4c\u5179\u522b\u514b\u65af\u5766", "ja": "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3", "es": "Uzbekist\u00e1n"}, "label_fr": "Ouzb\u00e9kistan", "name": "Uzbekistan", "dbpedia_uri": "http://dbpedia.org/resource/Uzbekistan"}, "id": "UZB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-71.331584000000007, 11.776284], [-71.360005999999998, 11.539994], [-71.947050000000004, 11.423282], [-71.620868000000002, 10.96946], [-71.633064000000005, 10.446494], [-72.074173999999999, 9.8656509999999997], [-71.695644000000001, 9.0722629999999995], [-71.264559000000006, 9.1371950000000002], [-71.039998999999995, 9.8599929999999993], [-71.350083999999995, 10.211935], [-71.400622999999996, 10.968969], [-70.155298999999999, 11.375482], [-70.293842999999995, 11.846822], [-69.943245000000005, 12.162307], [-69.584299999999999, 11.459611000000001], [-68.882998999999998, 11.443384999999999], [-68.233271000000002, 10.885744000000001], [-68.194126999999995, 10.554653], [-67.296249000000003, 10.545868], [-66.227863999999997, 10.648626999999999], [-65.655237999999997, 10.200799], [-64.890451999999996, 10.077215000000001], [-64.329479000000006, 10.389599], [-64.318006999999994, 10.641418], [-63.079321999999998, 10.701724], [-61.880946000000002, 10.715624999999999], [-62.730119000000002, 10.420268999999999], [-62.388511999999999, 9.9482040000000005], [-61.588766999999997, 9.8730670000000007], [-60.830596999999997, 9.3813399999999998], [-60.671252000000003, 8.5801739999999995], [-60.150095999999998, 8.6027570000000004], [-59.758285000000001, 8.3670349999999996], [-60.550587999999998, 7.7796029999999998], [-60.637973000000002, 7.415], [-60.295667999999999, 7.0439109999999996], [-60.543998999999999, 6.8565839999999998], [-61.159336000000003, 6.6960769999999998], [-61.139415, 6.2342969999999998], [-61.410302999999999, 5.9590680000000003], [-60.733573999999997, 5.2002769999999998], [-60.601179000000002, 4.9180979999999996], [-60.966892999999999, 4.5364680000000002], [-62.085430000000002, 4.1621240000000004], [-62.804532999999999, 4.0069650000000001], [-63.093198000000001, 3.7705709999999999], [-63.888342999999999, 4.0205299999999999], [-64.628658999999999, 4.1484810000000003], [-64.816063999999997, 4.0564450000000001], [-64.368493999999998, 3.7972100000000002], [-64.408828, 3.1267860000000001], [-64.269998999999999, 2.4970059999999998], [-63.422866999999997, 2.4110680000000002], [-63.368788000000002, 2.2008999999999999], [-64.083084999999997, 1.916369], [-64.199306000000007, 1.492855], [-64.611012000000002, 1.3287310000000001], [-65.354713000000004, 1.0952820000000001], [-65.548266999999996, 0.78925400000000001], [-66.325765000000004, 0.72445199999999998], [-66.876326000000006, 1.2533609999999999], [-67.181293999999994, 2.2506379999999999], [-67.447091999999998, 2.6002809999999998], [-67.809938000000002, 2.8206549999999999], [-67.303173000000001, 3.318454], [-67.337564, 3.5423420000000001], [-67.621836000000002, 3.8394819999999998], [-67.823012000000006, 4.5039369999999996], [-67.744697000000002, 5.2211290000000004], [-67.521531999999993, 5.55687], [-67.341440000000006, 6.0954680000000003], [-67.695087000000001, 6.2673180000000004], [-68.265051999999997, 6.1532679999999997], [-68.985319000000004, 6.2068050000000001], [-69.389480000000006, 6.0998609999999998], [-70.093312999999995, 6.9603760000000001], [-70.674233999999998, 7.0877850000000002], [-71.960176000000004, 6.9916150000000004], [-72.198352, 7.3404309999999997], [-72.444486999999995, 7.4237849999999996], [-72.479679000000004, 7.6325060000000002], [-72.360900999999998, 8.0026379999999993], [-72.439862000000005, 8.4052749999999996], [-72.660494999999997, 8.6252879999999994], [-72.788730000000001, 9.0850270000000002], [-73.304952, 9.1519999999999992], [-73.027603999999997, 9.7367699999999999], [-72.905286000000004, 10.450343999999999], [-72.614658000000006, 10.821975], [-72.227575000000002, 11.108701999999999], [-71.973922000000002, 11.608672], [-71.331584000000007, 11.776284]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043d\u0435\u0441\u0443\u044d\u043b\u0430", "fr": "Venezuela", "en": "Venezuela", "nl": "Venezuela", "pt": "Venezuela", "no": "Venezuela", "de": "Venezuela", "it": "Venezuela", "sv": "Venezuela", "pl": "Wenezuela", "fi": "Venezuela", "zh": "\u59d4\u5167\u745e\u62c9", "ja": "\u30d9\u30cd\u30ba\u30a8\u30e9", "es": "Venezuela"}, "label_fr": "Venezuela", "name": "Venezuela", "dbpedia_uri": "http://dbpedia.org/resource/Venezuela"}, "id": "VEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[108.05018, 21.552379999999999], [106.715068, 20.696850999999999], [105.881682, 19.752050000000001], [105.66200600000001, 19.058164999999999], [106.426817, 18.004121000000001], [107.361954, 16.697457], [108.26949500000001, 16.079742], [108.877107, 15.276691], [109.33526999999999, 13.426028000000001], [109.200136, 11.666859000000001], [108.36613, 11.008321], [107.220929, 10.364483999999999], [106.405113, 9.5308399999999995], [105.158264, 8.5997599999999998], [104.795185, 9.2410379999999996], [105.07620199999999, 9.9184909999999995], [104.334335, 10.486544], [105.199915, 10.88931], [106.24966999999999, 10.961812], [105.810524, 11.567615], [107.49140300000001, 12.337206], [107.614548, 13.535531000000001], [107.382727, 14.202441], [107.564525, 15.202173], [107.31270600000001, 15.908538], [106.55600800000001, 16.604284], [105.92576200000001, 17.485315], [105.094598, 18.666975000000001], [103.89653199999999, 19.265180999999998], [104.18338799999999, 19.624668], [104.822574, 19.886641999999998], [104.435, 20.758732999999999], [103.203861, 20.766562], [102.754896, 21.675136999999999], [102.170436, 22.464753000000002], [102.706992, 22.708794999999999], [103.504515, 22.703757], [104.47685799999999, 22.81915], [105.32920900000001, 23.352063000000001], [105.81124699999999, 22.976891999999999], [106.725403, 22.794267999999999], [106.567273, 22.218205000000001], [107.04342, 21.811899], [108.05018, 21.552379999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u044c\u0435\u0442\u043d\u0430\u043c", "fr": "Vi\u00eat Nam", "en": "Vietnam", "nl": "Vietnam", "pt": "Vietname", "no": "Vietnam", "de": "Vietnam", "it": "Vietnam", "sv": "Vietnam", "pl": "Wietnam", "fi": "Vietnam", "zh": "\u8d8a\u5357", "ja": "\u30d9\u30c8\u30ca\u30e0", "es": "Vietnam"}, "label_fr": "Vi\u00eat Nam", "name": "Vietnam", "dbpedia_uri": "http://dbpedia.org/resource/Vietnam"}, "id": "VNM"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[167.844877, -16.466332999999999], [167.51518100000001, -16.597850000000001], [167.18000799999999, -16.159994999999999], [167.216801, -15.891845999999999], [167.844877, -16.466332999999999]]], [[[167.10771199999999, -14.933920000000001], [167.270028, -15.740021], [167.00120699999999, -15.614602], [166.79315800000001, -15.668811], [166.64985899999999, -15.392704], [166.62913699999999, -14.626497000000001], [167.10771199999999, -14.933920000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0430\u043d\u0443\u0430\u0442\u0443", "fr": "Vanuatu", "en": "Vanuatu", "nl": "Vanuatu", "pt": "Vanuatu", "no": "Vanuatu", "de": "Vanuatu", "it": "Vanuatu", "sv": "Vanuatu", "pl": "Vanuatu", "fi": "Vanuatu", "zh": "\u74e6\u52aa\u963f\u56fe", "ja": "\u30d0\u30cc\u30a2\u30c4", "es": "Vanuatu"}, "label_fr": "Vanuatu", "name": "Vanuatu", "dbpedia_uri": "http://dbpedia.org/resource/Vanuatu"}, "id": "VUT"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.545665, 32.393991999999997], [35.545251999999998, 31.782505], [35.397561000000003, 31.489086], [34.927408, 31.353435000000001], [34.970506999999998, 31.616778], [35.225892000000002, 31.754341], [34.974640999999998, 31.866582000000001], [35.183929999999997, 32.532511], [35.545665, 32.393991999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043f\u0430\u0434\u043d\u044b\u0439 \u0431\u0435\u0440\u0435\u0433 \u0440\u0435\u043a\u0438 \u0418\u043e\u0440\u0434\u0430\u043d", "fr": "Cisjordanie", "en": "West Bank", "nl": "Westelijke Jordaanoever", "pt": "Cisjord\u00e2nia", "no": "Vestbredden", "de": "Westjordanland", "it": "Cisgiordania", "sv": "V\u00e4stbanken", "pl": "Zachodni Brzeg", "fi": "L\u00e4nsiranta", "zh": "\u7d04\u65e6\u6cb3\u897f\u5cb8\u5730\u5340", "ja": "\u30e8\u30eb\u30c0\u30f3\u5ddd\u897f\u5cb8\u5730\u533a", "es": "Cisjordania"}, "label_fr": "Cisjordanie", "name": "West Bank", "dbpedia_uri": "http://dbpedia.org/resource/West_Bank"}, "id": "PSE"}, {"geometry": {"type": "Polygon", "coordinates": [[[53.108573, 16.651050999999999], [52.385205999999997, 16.382411000000001], [52.191729000000002, 15.938433], [52.168165000000002, 15.59742], [51.172514999999997, 15.17525], [49.574576, 14.708767], [48.679231000000001, 14.003202], [48.238947000000003, 13.948090000000001], [47.938913999999997, 14.007232999999999], [47.354453999999997, 13.592219999999999], [46.717075999999999, 13.399699], [45.877592999999997, 13.347764], [45.625050000000002, 13.290946], [45.406458999999998, 13.026904999999999], [45.144356000000002, 12.953938000000001], [44.989533000000002, 12.699586999999999], [44.494576000000002, 12.721653], [44.175113000000003, 12.58595], [43.482959000000001, 12.636799999999999], [43.222870999999998, 13.22095], [43.251448000000003, 13.767583999999999], [43.087944, 14.06263], [42.892245000000003, 14.802249], [42.604872999999998, 15.213335000000001], [42.805014999999997, 15.261963], [42.702438000000001, 15.718885999999999], [42.823670999999997, 15.911742], [42.779331999999997, 16.347891000000001], [43.218375000000002, 16.666889999999999], [43.115797999999998, 17.088439999999999], [43.380794000000002, 17.579986999999999], [43.791519000000001, 17.319977000000002], [44.062612999999999, 17.410359], [45.216650999999999, 17.433329000000001], [45.399999000000001, 17.333335000000002], [46.366658999999999, 17.233315000000001], [46.749994000000001, 17.283338000000001], [47.000005000000002, 16.949998999999998], [47.466695000000001, 17.116682000000001], [48.183343999999998, 18.166668999999999], [49.116672000000001, 18.616668000000001], [52.000010000000003, 19.000003], [52.782184000000001, 17.349741999999999], [53.108573, 16.651050999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0419\u0435\u043c\u0435\u043d", "fr": "Y\u00e9men", "en": "Yemen", "nl": "Jemen", "pt": "I\u00e9men", "no": "Jemen", "de": "Jemen", "it": "Yemen", "sv": "Jemen", "pl": "Jemen", "fi": "Jemen", "zh": "\u4e5f\u95e8", "ja": "\u30a4\u30a8\u30e1\u30f3", "es": "Yemen"}, "label_fr": "Y\u00e9men", "name": "Yemen", "dbpedia_uri": "http://dbpedia.org/resource/Yemen"}, "id": "YEM"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.521000999999998, -29.257387000000001], [31.325561, -29.401978], [30.901762999999999, -29.909956999999999], [30.622813000000001, -30.423776], [30.055716, -31.140269], [28.925553000000001, -32.172041], [28.219756, -32.771953000000003], [27.464607999999998, -33.226964000000002], [26.419452, -33.61495], [25.909663999999999, -33.66704], [25.780628, -33.944645999999999], [25.172861999999999, -33.796850999999997], [24.677852999999999, -33.987175999999998], [23.594042999999999, -33.794474000000001], [22.988188999999998, -33.916431000000003], [22.574157, -33.864083000000001], [21.542798999999999, -34.258839000000002], [20.689053000000001, -34.417175], [20.071261, -34.795136999999997], [19.616405, -34.819166000000003], [19.193277999999999, -34.462598999999997], [18.855315000000001, -34.444305999999997], [18.424643, -33.997872999999998], [18.377410999999999, -34.136521000000002], [18.244499000000001, -33.867752000000003], [18.250080000000001, -33.281430999999998], [17.925190000000001, -32.611291000000001], [18.247910000000001, -32.429130999999998], [18.221761999999998, -31.661632999999998], [17.566918000000001, -30.725721], [17.064416000000001, -29.878640999999998], [17.062918, -29.875954], [16.344977, -28.576705], [16.824017000000001, -28.082162], [17.218928999999999, -28.355943], [17.387497, -28.783514], [17.836151999999998, -28.856377999999999], [18.464898999999999, -29.045462000000001], [19.002127000000002, -28.972442999999998], [19.894734, -28.461105], [19.895768, -24.767790000000002], [20.165725999999999, -24.917961999999999], [20.758609, -25.868136], [20.66647, -26.477453000000001], [20.889609, -26.828543], [21.605896000000001, -26.726534000000001], [22.105969000000002, -26.280256000000001], [22.579532, -25.979448000000001], [22.824271, -25.500458999999999], [23.312097000000001, -25.268689999999999], [23.73357, -25.390129000000002], [24.211266999999999, -25.670216], [25.025171, -25.719670000000001], [25.664666, -25.486816000000001], [25.765848999999999, -25.174845000000001], [25.941652000000001, -24.696373000000001], [26.485752999999999, -24.616326999999998], [26.786407000000001, -24.240691000000002], [27.119409999999998, -23.574323], [28.017236, -22.827753999999999], [29.432188, -22.091313], [29.839037000000001, -22.102215999999999], [30.322883000000001, -22.271612000000001], [30.659865, -22.151567], [31.191409, -22.25151], [31.670397999999999, -23.658968999999999], [31.930589000000001, -24.369416999999999], [31.752407999999999, -25.484283999999999], [31.837778, -25.843332], [31.333158000000001, -25.660191000000001], [31.044080000000001, -25.731452000000001], [30.949667000000002, -26.022649000000001], [30.676608999999999, -26.398078000000002], [30.685962, -26.743845], [31.282772999999999, -27.285879000000001], [31.86806, -27.177927], [32.071665000000003, -26.733820000000001], [32.830120000000001, -26.742191999999999], [32.580264999999997, -27.470158000000001], [32.462133000000001, -28.301010999999999], [32.203389000000001, -28.752405], [31.521000999999998, -29.257387000000001]], [[28.978262999999998, -28.955597000000001], [28.541699999999999, -28.647501999999999], [28.074338000000001, -28.851469000000002], [27.532511, -29.242711], [26.999262000000002, -29.875954], [27.749396999999998, -30.645105999999998], [28.107205, -30.545732000000001], [28.291069, -30.226216999999998], [28.848400000000002, -30.070050999999999], [29.018415000000001, -29.743766000000001], [29.325165999999999, -29.257387000000001], [28.978262999999998, -28.955597000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042e\u0436\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "Afrique du Sud", "en": "South Africa", "nl": "Zuid-Afrika", "pt": "\u00c1frica do Sul", "no": "S\u00f8r-Afrika", "de": "S\u00fcdafrika", "it": "Sudafrica", "sv": "Sydafrika", "pl": "Republika Po\u0142udniowej Afryki", "fi": "Etel\u00e4-Afrikka", "zh": "\u5357\u975e", "ja": "\u5357\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "es": "Sud\u00e1frica"}, "label_fr": "Afrique du Sud", "name": "South Africa", "dbpedia_uri": "http://dbpedia.org/resource/South_Africa"}, "id": "ZAF"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.759374999999999, -9.2305989999999998], [33.231388000000003, -9.6767219999999998], [33.485688000000003, -10.525558999999999], [33.315309999999997, -10.79655], [33.114288999999999, -11.607198], [33.306421999999998, -12.435778000000001], [32.991764000000003, -12.783871], [32.688164999999998, -13.712858000000001], [33.214024999999999, -13.97186], [30.179480999999999, -14.796099], [30.274256000000001, -15.507787], [29.516833999999999, -15.644678000000001], [28.947462999999999, -16.043050999999998], [28.825869000000001, -16.389748999999998], [28.467905999999999, -16.468399999999999], [27.598243, -17.290831000000001], [27.044426999999999, -17.938026000000001], [26.706772999999998, -17.961228999999999], [26.381934999999999, -17.846042000000001], [25.264226000000001, -17.736540000000002], [25.084443, -17.661816000000002], [25.07695, -17.578823], [24.682348999999999, -17.353411000000001], [24.033861999999999, -17.295843000000001], [23.215047999999999, -17.523116000000002], [22.562477999999999, -16.898451000000001], [21.887843, -16.080310000000001], [21.933886000000001, -12.898436999999999], [24.016137000000001, -12.911046000000001], [23.930921999999999, -12.565848000000001], [24.079905, -12.191297], [23.904153999999998, -11.722282], [24.017893999999998, -11.237297999999999], [23.912215, -10.926826], [24.257155000000001, -10.951993], [24.314516000000001, -11.262826], [24.783169999999998, -11.238694000000001], [25.418118, -11.330935999999999], [25.752310000000001, -11.784965], [26.553087999999999, -11.924440000000001], [27.16442, -11.608748], [27.388798999999999, -12.132747], [28.155108999999999, -12.272481000000001], [28.523561999999998, -12.698604], [28.934286, -13.248958], [29.699614, -13.257227], [29.616001000000001, -12.178895000000001], [29.341548, -12.360744], [28.642416999999998, -11.971569000000001], [28.372253000000001, -11.793647], [28.49607, -10.789884000000001], [28.673681999999999, -9.6059249999999992], [28.449871000000002, -9.1649180000000001], [28.734867000000001, -8.5265590000000007], [29.002911999999998, -8.4070319999999992], [30.346086, -8.2382570000000008], [30.740015, -8.3400069999999999], [31.157751000000001, -8.5945789999999995], [31.556348, -8.7620489999999993], [32.191865, -8.9303589999999993], [32.759374999999999, -9.2305989999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043c\u0431\u0438\u044f", "fr": "Zambie", "en": "Zambia", "nl": "Zambia", "pt": "Z\u00e2mbia", "no": "Zambia", "de": "Sambia", "it": "Zambia", "sv": "Zambia", "pl": "Zambia", "fi": "Sambia", "zh": "\u8d5e\u6bd4\u4e9a", "ja": "\u30b6\u30f3\u30d3\u30a2", "es": "Zambia"}, "label_fr": "Zambie", "name": "Zambia", "dbpedia_uri": "http://dbpedia.org/resource/Zambia"}, "id": "ZMB"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.191409, -22.25151], [30.659865, -22.151567], [30.322883000000001, -22.271612000000001], [29.839037000000001, -22.102215999999999], [29.432188, -22.091313], [28.794656, -21.639454000000001], [28.021370000000001, -21.485975], [27.727228, -20.851801999999999], [27.724747000000001, -20.499058999999999], [27.296505, -20.39152], [26.164791000000001, -19.293085999999999], [25.850390999999998, -18.714413], [25.649163000000001, -18.536026], [25.264226000000001, -17.736540000000002], [26.381934999999999, -17.846042000000001], [26.706772999999998, -17.961228999999999], [27.044426999999999, -17.938026000000001], [27.598243, -17.290831000000001], [28.467905999999999, -16.468399999999999], [28.825869000000001, -16.389748999999998], [28.947462999999999, -16.043050999999998], [29.516833999999999, -15.644678000000001], [30.274256000000001, -15.507787], [30.338954999999999, -15.880839], [31.173064, -15.860944], [31.636498, -16.07199], [31.852041, -16.319417000000001], [32.328239000000004, -16.392074000000001], [32.847639000000001, -16.713398000000002], [32.849860999999997, -17.979057000000001], [32.654885999999998, -18.672090000000001], [32.611994000000003, -19.419383], [32.772708000000002, -19.715592000000001], [32.659742999999999, -20.304290000000002], [32.508693000000001, -20.395292000000001], [32.244987999999999, -21.116489000000001], [31.191409, -22.25151]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0435", "fr": "Zimbabwe", "en": "Zimbabwe", "nl": "Zimbabwe", "pt": "Zimbabwe", "no": "Zimbabwe", "de": "Simbabwe", "it": "Zimbabwe", "sv": "Zimbabwe", "pl": "Zimbabwe", "fi": "Zimbabwe", "zh": "\u8f9b\u5df4\u5a01", "ja": "\u30b8\u30f3\u30d0\u30d6\u30a8", "es": "Zimbabue"}, "label_fr": "Zimbabwe", "name": "Zimbabwe", "dbpedia_uri": "http://dbpedia.org/resource/Zimbabwe"}, "id": "ZWE"}]}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/jquery-1.7.1.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/jquery-ui-1.8.16.custom.min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,356 @@
+/*!
+ * jQuery UI 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
+this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
+"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
+"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
+outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
+"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
+a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
+c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
+function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
+d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
+b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
+c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*!
+ * jQuery UI Mouse 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
+this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
+this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
+!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+;/*
+ * jQuery UI Position 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
+left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
+k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
+m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
+d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
+a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
+g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Draggable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
+this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;
+this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
+_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
+false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
+10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||
+!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&
+a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
+this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
+10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
+(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!=
+"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),
+10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+
+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&
+!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;
+if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
+b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
+526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
+c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
+h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
+false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
+this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
+c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
+this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=
+a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
+"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<
+c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
+c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
+width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&
+o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=
+p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&
+(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
+10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
+;/*
+ * jQuery UI Droppable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ * jquery.ui.draggable.js
+ */
+(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
+a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
+this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.16"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
+switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
+i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
+"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
+a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parents(":not(body,html)").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);
+if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parents(":not(body,html)").unbind("scroll.droppable");
+a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
+;/*
+ * jQuery UI Resizable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
+String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
+false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
+this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
+{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
+if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},
+_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,
+{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight:
+Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=
+b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&&
+a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=
+null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||
+0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
+b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
+10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
+f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
+e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
+e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,
+step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
+e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;
+var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:
+a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-
+d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,
+f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
+display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=
+e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
+d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
+;/*
+ * jQuery UI Selectable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
+selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
+c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
+c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
+this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
+a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
+!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
+e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Sortable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
+"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
+!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
+document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
+return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
+b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
+b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
+a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
+e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
+c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
+dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
+toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
+var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
+_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
+if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
+this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
+this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
+this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
+d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
+0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
+a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
+f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
+this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
+""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
+this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
+{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
+document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
+10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
+this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
+this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
+this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
+this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
+this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
+"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
+f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
+this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
+a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Autocomplete 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.position.js
+ */
+(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g=
+false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
+a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
+this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
+a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
+b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
+this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
+this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
+b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
+d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
+(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
+this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
+;/*
+ * jQuery UI Slider 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
+g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length?
+(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i-
+m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false;
+this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
+this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
+this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
+c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
+a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
+this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):
+this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
+return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
+this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e-
+g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"},
+b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Progressbar 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery);
+;
\ No newline at end of file
Binary file src/hdalab/static/hdalab/lib/leaflet/images/layers.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/marker-shadow.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/marker.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/popup-close.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/zoom-in.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/zoom-out.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/leaflet/leaflet-src.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,5637 @@
+/*
+ Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
+ Leaflet is a modern open-source JavaScript library for interactive maps.
+ http://leaflet.cloudmade.com
+*/
+
+(function (root) {
+ root.L = {
+ VERSION: '0.3',
+
+ ROOT_URL: root.L_ROOT_URL || (function () {
+ var scripts = document.getElementsByTagName('script'),
+ leafletRe = /\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;
+
+ var i, len, src, matches;
+
+ for (i = 0, len = scripts.length; i < len; i++) {
+ src = scripts[i].src;
+ matches = src.match(leafletRe);
+
+ if (matches) {
+ if (matches[1] === 'include') {
+ return '../../dist/';
+ }
+ return src.replace(leafletRe, '') + '/';
+ }
+ }
+ return '';
+ }()),
+
+ noConflict: function () {
+ root.L = this._originalL;
+ return this;
+ },
+
+ _originalL: root.L
+ };
+}(this));
+
+
+/*
+ * L.Util is a namespace for various utility functions.
+ */
+
+L.Util = {
+ extend: function (/*Object*/ dest) /*-> Object*/ { // merge src properties into dest
+ var sources = Array.prototype.slice.call(arguments, 1);
+ for (var j = 0, len = sources.length, src; j < len; j++) {
+ src = sources[j] || {};
+ for (var i in src) {
+ if (src.hasOwnProperty(i)) {
+ dest[i] = src[i];
+ }
+ }
+ }
+ return dest;
+ },
+
+ bind: function (/*Function*/ fn, /*Object*/ obj) /*-> Object*/ {
+ return function () {
+ return fn.apply(obj, arguments);
+ };
+ },
+
+ stamp: (function () {
+ var lastId = 0, key = '_leaflet_id';
+ return function (/*Object*/ obj) {
+ obj[key] = obj[key] || ++lastId;
+ return obj[key];
+ };
+ }()),
+
+ requestAnimFrame: (function () {
+ function timeoutDefer(callback) {
+ window.setTimeout(callback, 1000 / 60);
+ }
+
+ var requestFn = window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ timeoutDefer;
+
+ return function (callback, context, immediate, contextEl) {
+ callback = context ? L.Util.bind(callback, context) : callback;
+ if (immediate && requestFn === timeoutDefer) {
+ callback();
+ } else {
+ requestFn(callback, contextEl);
+ }
+ };
+ }()),
+
+ limitExecByInterval: function (fn, time, context) {
+ var lock, execOnUnlock, args;
+ function exec() {
+ lock = false;
+ if (execOnUnlock) {
+ args.callee.apply(context, args);
+ execOnUnlock = false;
+ }
+ }
+ return function () {
+ args = arguments;
+ if (!lock) {
+ lock = true;
+ setTimeout(exec, time);
+ fn.apply(context, args);
+ } else {
+ execOnUnlock = true;
+ }
+ };
+ },
+
+ falseFn: function () {
+ return false;
+ },
+
+ formatNum: function (num, digits) {
+ var pow = Math.pow(10, digits || 5);
+ return Math.round(num * pow) / pow;
+ },
+
+ setOptions: function (obj, options) {
+ obj.options = L.Util.extend({}, obj.options, options);
+ },
+
+ getParamString: function (obj) {
+ var params = [];
+ for (var i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ params.push(i + '=' + obj[i]);
+ }
+ }
+ return '?' + params.join('&');
+ },
+
+ template: function (str, data) {
+ return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
+ var value = data[key];
+ if (!data.hasOwnProperty(key)) {
+ throw new Error('No value provided for variable ' + str);
+ }
+ return value;
+ });
+ }
+};
+
+
+/*
+ * Class powers the OOP facilities of the library. Thanks to John Resig and Dean Edwards for inspiration!
+ */
+
+L.Class = function () {};
+
+L.Class.extend = function (/*Object*/ props) /*-> Class*/ {
+
+ // extended class with the new prototype
+ var NewClass = function () {
+ if (this.initialize) {
+ this.initialize.apply(this, arguments);
+ }
+ };
+
+ // instantiate class without calling constructor
+ var F = function () {};
+ F.prototype = this.prototype;
+ var proto = new F();
+
+ proto.constructor = NewClass;
+ NewClass.prototype = proto;
+
+ // add superclass access
+ NewClass.superclass = this.prototype;
+
+ // add class name
+ //proto.className = props;
+
+ //inherit parent's statics
+ for (var i in this) {
+ if (this.hasOwnProperty(i) && i !== 'prototype' && i !== 'superclass') {
+ NewClass[i] = this[i];
+ }
+ }
+
+ // mix static properties into the class
+ if (props.statics) {
+ L.Util.extend(NewClass, props.statics);
+ delete props.statics;
+ }
+
+ // mix includes into the prototype
+ if (props.includes) {
+ L.Util.extend.apply(null, [proto].concat(props.includes));
+ delete props.includes;
+ }
+
+ // merge options
+ if (props.options && proto.options) {
+ props.options = L.Util.extend({}, proto.options, props.options);
+ }
+
+ // mix given properties into the prototype
+ L.Util.extend(proto, props);
+
+ // allow inheriting further
+ NewClass.extend = L.Class.extend;
+
+ // method for adding properties to prototype
+ NewClass.include = function (props) {
+ L.Util.extend(this.prototype, props);
+ };
+
+ return NewClass;
+};
+
+
+/*
+ * L.Mixin.Events adds custom events functionality to Leaflet classes
+ */
+
+L.Mixin = {};
+
+L.Mixin.Events = {
+ addEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
+ var events = this._leaflet_events = this._leaflet_events || {};
+ events[type] = events[type] || [];
+ events[type].push({
+ action: fn,
+ context: context || this
+ });
+ return this;
+ },
+
+ hasEventListeners: function (/*String*/ type) /*-> Boolean*/ {
+ var k = '_leaflet_events';
+ return (k in this) && (type in this[k]) && (this[k][type].length > 0);
+ },
+
+ removeEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
+ if (!this.hasEventListeners(type)) {
+ return this;
+ }
+
+ for (var i = 0, events = this._leaflet_events, len = events[type].length; i < len; i++) {
+ if (
+ (events[type][i].action === fn) &&
+ (!context || (events[type][i].context === context))
+ ) {
+ events[type].splice(i, 1);
+ return this;
+ }
+ }
+ return this;
+ },
+
+ fireEvent: function (/*String*/ type, /*(optional) Object*/ data) {
+ if (!this.hasEventListeners(type)) {
+ return this;
+ }
+
+ var event = L.Util.extend({
+ type: type,
+ target: this
+ }, data);
+
+ var listeners = this._leaflet_events[type].slice();
+
+ for (var i = 0, len = listeners.length; i < len; i++) {
+ listeners[i].action.call(listeners[i].context || this, event);
+ }
+
+ return this;
+ }
+};
+
+L.Mixin.Events.on = L.Mixin.Events.addEventListener;
+L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
+L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
+
+
+(function () {
+ var ua = navigator.userAgent.toLowerCase(),
+ ie = !!window.ActiveXObject,
+ webkit = ua.indexOf("webkit") !== -1,
+ mobile = typeof orientation !== 'undefined' ? true : false,
+ android = ua.indexOf("android") !== -1,
+ opera = window.opera;
+
+ L.Browser = {
+ ie: ie,
+ ie6: ie && !window.XMLHttpRequest,
+
+ webkit: webkit,
+ webkit3d: webkit && ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()),
+
+ gecko: ua.indexOf("gecko") !== -1,
+
+ opera: opera,
+
+ android: android,
+ mobileWebkit: mobile && webkit,
+ mobileOpera: mobile && opera,
+
+ mobile: mobile,
+ touch: (function () {
+ var touchSupported = false,
+ startName = 'ontouchstart';
+
+ // WebKit, etc
+ if (startName in document.documentElement) {
+ return true;
+ }
+
+ // Firefox/Gecko
+ var e = document.createElement('div');
+
+ // If no support for basic event stuff, unlikely to have touch support
+ if (!e.setAttribute || !e.removeAttribute) {
+ return false;
+ }
+
+ e.setAttribute(startName, 'return;');
+ if (typeof e[startName] === 'function') {
+ touchSupported = true;
+ }
+
+ e.removeAttribute(startName);
+ e = null;
+
+ return touchSupported;
+ }())
+ };
+}());
+
+
+/*
+ * L.Point represents a point with x and y coordinates.
+ */
+
+L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
+ this.x = (round ? Math.round(x) : x);
+ this.y = (round ? Math.round(y) : y);
+};
+
+L.Point.prototype = {
+ add: function (point) {
+ return this.clone()._add(point);
+ },
+
+ _add: function (point) {
+ this.x += point.x;
+ this.y += point.y;
+ return this;
+ },
+
+ subtract: function (point) {
+ return this.clone()._subtract(point);
+ },
+
+ // destructive subtract (faster)
+ _subtract: function (point) {
+ this.x -= point.x;
+ this.y -= point.y;
+ return this;
+ },
+
+ divideBy: function (num, round) {
+ return new L.Point(this.x / num, this.y / num, round);
+ },
+
+ multiplyBy: function (num) {
+ return new L.Point(this.x * num, this.y * num);
+ },
+
+ distanceTo: function (point) {
+ var x = point.x - this.x,
+ y = point.y - this.y;
+ return Math.sqrt(x * x + y * y);
+ },
+
+ round: function () {
+ return this.clone()._round();
+ },
+
+ // destructive round
+ _round: function () {
+ this.x = Math.round(this.x);
+ this.y = Math.round(this.y);
+ return this;
+ },
+
+ clone: function () {
+ return new L.Point(this.x, this.y);
+ },
+
+ toString: function () {
+ return 'Point(' +
+ L.Util.formatNum(this.x) + ', ' +
+ L.Util.formatNum(this.y) + ')';
+ }
+};
+
+
+/*
+ * L.Bounds represents a rectangular area on the screen in pixel coordinates.
+ */
+
+L.Bounds = L.Class.extend({
+ initialize: function (min, max) { //(Point, Point) or Point[]
+ if (!min) {
+ return;
+ }
+ var points = (min instanceof Array ? min : [min, max]);
+ for (var i = 0, len = points.length; i < len; i++) {
+ this.extend(points[i]);
+ }
+ },
+
+ // extend the bounds to contain the given point
+ extend: function (/*Point*/ point) {
+ if (!this.min && !this.max) {
+ this.min = new L.Point(point.x, point.y);
+ this.max = new L.Point(point.x, point.y);
+ } else {
+ this.min.x = Math.min(point.x, this.min.x);
+ this.max.x = Math.max(point.x, this.max.x);
+ this.min.y = Math.min(point.y, this.min.y);
+ this.max.y = Math.max(point.y, this.max.y);
+ }
+ },
+
+ getCenter: function (round)/*->Point*/ {
+ return new L.Point(
+ (this.min.x + this.max.x) / 2,
+ (this.min.y + this.max.y) / 2, round);
+ },
+
+ contains: function (/*Bounds or Point*/ obj)/*->Boolean*/ {
+ var min, max;
+
+ if (obj instanceof L.Bounds) {
+ min = obj.min;
+ max = obj.max;
+ } else {
+ min = max = obj;
+ }
+
+ return (min.x >= this.min.x) &&
+ (max.x <= this.max.x) &&
+ (min.y >= this.min.y) &&
+ (max.y <= this.max.y);
+ },
+
+ intersects: function (/*Bounds*/ bounds) {
+ var min = this.min,
+ max = this.max,
+ min2 = bounds.min,
+ max2 = bounds.max;
+
+ var xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
+ yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
+
+ return xIntersects && yIntersects;
+ }
+
+});
+
+
+/*
+ * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
+ */
+
+L.Transformation = L.Class.extend({
+ initialize: function (/*Number*/ a, /*Number*/ b, /*Number*/ c, /*Number*/ d) {
+ this._a = a;
+ this._b = b;
+ this._c = c;
+ this._d = d;
+ },
+
+ transform: function (point, scale) {
+ return this._transform(point.clone(), scale);
+ },
+
+ // destructive transform (faster)
+ _transform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
+ scale = scale || 1;
+ point.x = scale * (this._a * point.x + this._b);
+ point.y = scale * (this._c * point.y + this._d);
+ return point;
+ },
+
+ untransform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
+ scale = scale || 1;
+ return new L.Point(
+ (point.x / scale - this._b) / this._a,
+ (point.y / scale - this._d) / this._c);
+ }
+});
+
+
+/*
+ * L.DomUtil contains various utility functions for working with DOM
+ */
+
+L.DomUtil = {
+ get: function (id) {
+ return (typeof id === 'string' ? document.getElementById(id) : id);
+ },
+
+ getStyle: function (el, style) {
+ var value = el.style[style];
+ if (!value && el.currentStyle) {
+ value = el.currentStyle[style];
+ }
+ if (!value || value === 'auto') {
+ var css = document.defaultView.getComputedStyle(el, null);
+ value = css ? css[style] : null;
+ }
+ return (value === 'auto' ? null : value);
+ },
+
+ getViewportOffset: function (element) {
+ var top = 0,
+ left = 0,
+ el = element,
+ docBody = document.body;
+
+ do {
+ top += el.offsetTop || 0;
+ left += el.offsetLeft || 0;
+
+ if (el.offsetParent === docBody &&
+ L.DomUtil.getStyle(el, 'position') === 'absolute') {
+ break;
+ }
+ el = el.offsetParent;
+ } while (el);
+
+ el = element;
+
+ do {
+ if (el === docBody) {
+ break;
+ }
+
+ top -= el.scrollTop || 0;
+ left -= el.scrollLeft || 0;
+
+ el = el.parentNode;
+ } while (el);
+
+ return new L.Point(left, top);
+ },
+
+ create: function (tagName, className, container) {
+ var el = document.createElement(tagName);
+ el.className = className;
+ if (container) {
+ container.appendChild(el);
+ }
+ return el;
+ },
+
+ disableTextSelection: function () {
+ if (document.selection && document.selection.empty) {
+ document.selection.empty();
+ }
+ if (!this._onselectstart) {
+ this._onselectstart = document.onselectstart;
+ document.onselectstart = L.Util.falseFn;
+ }
+ },
+
+ enableTextSelection: function () {
+ document.onselectstart = this._onselectstart;
+ this._onselectstart = null;
+ },
+
+ hasClass: function (el, name) {
+ return (el.className.length > 0) &&
+ new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
+ },
+
+ addClass: function (el, name) {
+ if (!L.DomUtil.hasClass(el, name)) {
+ el.className += (el.className ? ' ' : '') + name;
+ }
+ },
+
+ removeClass: function (el, name) {
+ el.className = el.className.replace(/(\S+)\s*/g, function (w, match) {
+ if (match === name) {
+ return '';
+ }
+ return w;
+ }).replace(/^\s+/, '');
+ },
+
+ setOpacity: function (el, value) {
+ if (L.Browser.ie) {
+ el.style.filter = 'alpha(opacity=' + Math.round(value * 100) + ')';
+ } else {
+ el.style.opacity = value;
+ }
+ },
+
+ //TODO refactor away this ugly translate/position mess
+
+ testProp: function (props) {
+ var style = document.documentElement.style;
+
+ for (var i = 0; i < props.length; i++) {
+ if (props[i] in style) {
+ return props[i];
+ }
+ }
+ return false;
+ },
+
+ getTranslateString: function (point) {
+ return L.DomUtil.TRANSLATE_OPEN +
+ point.x + 'px,' + point.y + 'px' +
+ L.DomUtil.TRANSLATE_CLOSE;
+ },
+
+ getScaleString: function (scale, origin) {
+ var preTranslateStr = L.DomUtil.getTranslateString(origin),
+ scaleStr = ' scale(' + scale + ') ',
+ postTranslateStr = L.DomUtil.getTranslateString(origin.multiplyBy(-1));
+
+ return preTranslateStr + scaleStr + postTranslateStr;
+ },
+
+ setPosition: function (el, point) {
+ el._leaflet_pos = point;
+ if (L.Browser.webkit) {
+ el.style[L.DomUtil.TRANSFORM] = L.DomUtil.getTranslateString(point);
+ } else {
+ el.style.left = point.x + 'px';
+ el.style.top = point.y + 'px';
+ }
+ },
+
+ getPosition: function (el) {
+ return el._leaflet_pos;
+ }
+};
+
+L.Util.extend(L.DomUtil, {
+ TRANSITION: L.DomUtil.testProp(['transition', 'webkitTransition', 'OTransition', 'MozTransition', 'msTransition']),
+ TRANSFORM: L.DomUtil.testProp(['transformProperty', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']),
+
+ TRANSLATE_OPEN: 'translate' + (L.Browser.webkit3d ? '3d(' : '('),
+ TRANSLATE_CLOSE: L.Browser.webkit3d ? ',0)' : ')'
+});
+
+
+/*
+ CM.LatLng represents a geographical point with latitude and longtitude coordinates.
+*/
+
+L.LatLng = function (/*Number*/ rawLat, /*Number*/ rawLng, /*Boolean*/ noWrap) {
+ var lat = parseFloat(rawLat),
+ lng = parseFloat(rawLng);
+
+ if (isNaN(lat) || isNaN(lng)) {
+ throw new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');
+ }
+
+ if (noWrap !== true) {
+ lat = Math.max(Math.min(lat, 90), -90); // clamp latitude into -90..90
+ lng = (lng + 180) % 360 + ((lng < -180 || lng === 180) ? 180 : -180); // wrap longtitude into -180..180
+ }
+
+ //TODO change to lat() & lng()
+ this.lat = lat;
+ this.lng = lng;
+};
+
+L.Util.extend(L.LatLng, {
+ DEG_TO_RAD: Math.PI / 180,
+ RAD_TO_DEG: 180 / Math.PI,
+ MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
+});
+
+L.LatLng.prototype = {
+ equals: function (/*LatLng*/ obj) {
+ if (!(obj instanceof L.LatLng)) {
+ return false;
+ }
+
+ var margin = Math.max(Math.abs(this.lat - obj.lat), Math.abs(this.lng - obj.lng));
+ return margin <= L.LatLng.MAX_MARGIN;
+ },
+
+ toString: function () {
+ return 'LatLng(' +
+ L.Util.formatNum(this.lat) + ', ' +
+ L.Util.formatNum(this.lng) + ')';
+ },
+
+ // Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
+ distanceTo: function (/*LatLng*/ other)/*->Double*/ {
+ var R = 6378137, // earth radius in meters
+ d2r = L.LatLng.DEG_TO_RAD,
+ dLat = (other.lat - this.lat) * d2r,
+ dLon = (other.lng - this.lng) * d2r,
+ lat1 = this.lat * d2r,
+ lat2 = other.lat * d2r,
+ sin1 = Math.sin(dLat / 2),
+ sin2 = Math.sin(dLon / 2);
+
+ var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
+
+ return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+ }
+};
+
+
+/*
+ * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
+ */
+
+L.LatLngBounds = L.Class.extend({
+ initialize: function (southWest, northEast) { // (LatLng, LatLng) or (LatLng[])
+ if (!southWest) {
+ return;
+ }
+ var latlngs = (southWest instanceof Array ? southWest : [southWest, northEast]);
+ for (var i = 0, len = latlngs.length; i < len; i++) {
+ this.extend(latlngs[i]);
+ }
+ },
+
+ // extend the bounds to contain the given point
+ extend: function (/*LatLng*/ latlng) {
+ if (!this._southWest && !this._northEast) {
+ this._southWest = new L.LatLng(latlng.lat, latlng.lng, true);
+ this._northEast = new L.LatLng(latlng.lat, latlng.lng, true);
+ } else {
+ this._southWest.lat = Math.min(latlng.lat, this._southWest.lat);
+ this._southWest.lng = Math.min(latlng.lng, this._southWest.lng);
+ this._northEast.lat = Math.max(latlng.lat, this._northEast.lat);
+ this._northEast.lng = Math.max(latlng.lng, this._northEast.lng);
+ }
+ },
+
+ getCenter: function () /*-> LatLng*/ {
+ return new L.LatLng(
+ (this._southWest.lat + this._northEast.lat) / 2,
+ (this._southWest.lng + this._northEast.lng) / 2);
+ },
+
+ getSouthWest: function () {
+ return this._southWest;
+ },
+
+ getNorthEast: function () {
+ return this._northEast;
+ },
+
+ getNorthWest: function () {
+ return new L.LatLng(this._northEast.lat, this._southWest.lng, true);
+ },
+
+ getSouthEast: function () {
+ return new L.LatLng(this._southWest.lat, this._northEast.lng, true);
+ },
+
+ contains: function (/*LatLngBounds or LatLng*/ obj) /*-> Boolean*/ {
+ var sw = this._southWest,
+ ne = this._northEast,
+ sw2, ne2;
+
+ if (obj instanceof L.LatLngBounds) {
+ sw2 = obj.getSouthWest();
+ ne2 = obj.getNorthEast();
+ } else {
+ sw2 = ne2 = obj;
+ }
+
+ return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
+ (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
+ },
+
+ intersects: function (/*LatLngBounds*/ bounds) {
+ var sw = this._southWest,
+ ne = this._northEast,
+ sw2 = bounds.getSouthWest(),
+ ne2 = bounds.getNorthEast();
+
+ var latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
+ lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
+
+ return latIntersects && lngIntersects;
+ },
+
+ toBBoxString: function () {
+ var sw = this._southWest,
+ ne = this._northEast;
+ return [sw.lng, sw.lat, ne.lng, ne.lat].join(',');
+ }
+});
+
+//TODO International date line?
+
+
+/*
+ * L.Projection contains various geographical projections used by CRS classes.
+ */
+
+L.Projection = {};
+
+
+
+L.Projection.SphericalMercator = {
+ MAX_LATITUDE: 85.0511287798,
+
+ project: function (/*LatLng*/ latlng) /*-> Point*/ {
+ var d = L.LatLng.DEG_TO_RAD,
+ max = this.MAX_LATITUDE,
+ lat = Math.max(Math.min(max, latlng.lat), -max),
+ x = latlng.lng * d,
+ y = lat * d;
+ y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));
+
+ return new L.Point(x, y);
+ },
+
+ unproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {
+ var d = L.LatLng.RAD_TO_DEG,
+ lng = point.x * d,
+ lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;
+
+ return new L.LatLng(lat, lng, unbounded);
+ }
+};
+
+
+
+L.Projection.LonLat = {
+ project: function (latlng) {
+ return new L.Point(latlng.lng, latlng.lat);
+ },
+
+ unproject: function (point, unbounded) {
+ return new L.LatLng(point.y, point.x, unbounded);
+ }
+};
+
+
+
+L.CRS = {
+ latLngToPoint: function (/*LatLng*/ latlng, /*Number*/ scale)/*-> Point*/ {
+ var projectedPoint = this.projection.project(latlng);
+ return this.transformation._transform(projectedPoint, scale);
+ },
+
+ pointToLatLng: function (/*Point*/ point, /*Number*/ scale, /*(optional) Boolean*/ unbounded)/*-> LatLng*/ {
+ var untransformedPoint = this.transformation.untransform(point, scale);
+ return this.projection.unproject(untransformedPoint, unbounded);
+ //TODO get rid of 'unbounded' everywhere
+ },
+
+ project: function (latlng) {
+ return this.projection.project(latlng);
+ }
+};
+
+
+
+L.CRS.EPSG3857 = L.Util.extend({}, L.CRS, {
+ code: 'EPSG:3857',
+
+ projection: L.Projection.SphericalMercator,
+ transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
+
+ project: function (/*LatLng*/ latlng)/*-> Point*/ {
+ var projectedPoint = this.projection.project(latlng),
+ earthRadius = 6378137;
+ return projectedPoint.multiplyBy(earthRadius);
+ }
+});
+
+L.CRS.EPSG900913 = L.Util.extend({}, L.CRS.EPSG3857, {
+ code: 'EPSG:900913'
+});
+
+
+
+L.CRS.EPSG4326 = L.Util.extend({}, L.CRS, {
+ code: 'EPSG:4326',
+
+ projection: L.Projection.LonLat,
+ transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
+});
+
+
+/*
+ * L.Map is the central class of the API - it is used to create a map.
+ */
+
+L.Map = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ // projection
+ crs: L.CRS.EPSG3857 || L.CRS.EPSG4326,
+ scale: function (zoom) {
+ return 256 * Math.pow(2, zoom);
+ },
+
+ // state
+ center: null,
+ zoom: null,
+ layers: [],
+
+ // interaction
+ dragging: true,
+ touchZoom: L.Browser.touch && !L.Browser.android,
+ scrollWheelZoom: !L.Browser.touch,
+ doubleClickZoom: true,
+ boxZoom: true,
+
+ // controls
+ zoomControl: true,
+ attributionControl: true,
+
+ // animation
+ fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android,
+ zoomAnimation: L.DomUtil.TRANSITION && !L.Browser.android && !L.Browser.mobileOpera,
+
+ // misc
+ trackResize: true,
+ closePopupOnClick: true,
+ worldCopyJump: true
+ },
+
+
+ // constructor
+
+ initialize: function (id, options) { // (HTMLElement or String, Object)
+ L.Util.setOptions(this, options);
+
+ this._container = L.DomUtil.get(id);
+
+ if (this._container._leaflet) {
+ throw new Error("Map container is already initialized.");
+ }
+ this._container._leaflet = true;
+
+ this._initLayout();
+
+ if (L.DomEvent) {
+ this._initEvents();
+ if (L.Handler) {
+ this._initInteraction();
+ }
+ if (L.Control) {
+ this._initControls();
+ }
+ }
+
+ if (this.options.maxBounds) {
+ this.setMaxBounds(this.options.maxBounds);
+ }
+
+ var center = this.options.center,
+ zoom = this.options.zoom;
+
+ if (center !== null && zoom !== null) {
+ this.setView(center, zoom, true);
+ }
+
+ var layers = this.options.layers;
+ layers = (layers instanceof Array ? layers : [layers]);
+ this._tileLayersNum = 0;
+ this._initLayers(layers);
+ },
+
+
+ // public methods that modify map state
+
+ // replaced by animation-powered implementation in Map.PanAnimation.js
+ setView: function (center, zoom) {
+ // reset the map view
+ this._resetView(center, this._limitZoom(zoom));
+ return this;
+ },
+
+ setZoom: function (zoom) { // (Number)
+ return this.setView(this.getCenter(), zoom);
+ },
+
+ zoomIn: function () {
+ return this.setZoom(this._zoom + 1);
+ },
+
+ zoomOut: function () {
+ return this.setZoom(this._zoom - 1);
+ },
+
+ fitBounds: function (bounds) { // (LatLngBounds)
+ var zoom = this.getBoundsZoom(bounds);
+ return this.setView(bounds.getCenter(), zoom);
+ },
+
+ fitWorld: function () {
+ var sw = new L.LatLng(-60, -170),
+ ne = new L.LatLng(85, 179);
+ return this.fitBounds(new L.LatLngBounds(sw, ne));
+ },
+
+ panTo: function (center) { // (LatLng)
+ return this.setView(center, this._zoom);
+ },
+
+ panBy: function (offset) { // (Point)
+ // replaced with animated panBy in Map.Animation.js
+ this.fire('movestart');
+
+ this._rawPanBy(offset);
+
+ this.fire('move');
+ this.fire('moveend');
+
+ return this;
+ },
+
+ setMaxBounds: function (bounds) {
+ this.options.maxBounds = bounds;
+
+ if (!bounds) {
+ this._boundsMinZoom = null;
+ return this;
+ }
+
+ var minZoom = this.getBoundsZoom(bounds, true);
+
+ this._boundsMinZoom = minZoom;
+
+ if (this._loaded) {
+ if (this._zoom < minZoom) {
+ this.setView(bounds.getCenter(), minZoom);
+ } else {
+ this.panInsideBounds(bounds);
+ }
+ }
+ return this;
+ },
+
+ panInsideBounds: function (bounds) {
+ var viewBounds = this.getBounds(),
+ viewSw = this.project(viewBounds.getSouthWest()),
+ viewNe = this.project(viewBounds.getNorthEast()),
+ sw = this.project(bounds.getSouthWest()),
+ ne = this.project(bounds.getNorthEast()),
+ dx = 0,
+ dy = 0;
+
+ if (viewNe.y < ne.y) { // north
+ dy = ne.y - viewNe.y;
+ }
+ if (viewNe.x > ne.x) { // east
+ dx = ne.x - viewNe.x;
+ }
+ if (viewSw.y > sw.y) { // south
+ dy = sw.y - viewSw.y;
+ }
+ if (viewSw.x < sw.x) { // west
+ dx = sw.x - viewSw.x;
+ }
+
+ return this.panBy(new L.Point(dx, dy, true));
+ },
+
+ addLayer: function (layer, insertAtTheTop) {
+ var id = L.Util.stamp(layer);
+
+ if (this._layers[id]) {
+ return this;
+ }
+
+ this._layers[id] = layer;
+
+ if (layer.options && !isNaN(layer.options.maxZoom)) {
+ this._layersMaxZoom = Math.max(this._layersMaxZoom || 0, layer.options.maxZoom);
+ }
+ if (layer.options && !isNaN(layer.options.minZoom)) {
+ this._layersMinZoom = Math.min(this._layersMinZoom || Infinity, layer.options.minZoom);
+ }
+ //TODO getMaxZoom, getMinZoom in ILayer (instead of options)
+
+ if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
+ this._tileLayersNum++;
+ layer.on('load', this._onTileLayerLoad, this);
+ }
+ if (this.attributionControl && layer.getAttribution) {
+ this.attributionControl.addAttribution(layer.getAttribution());
+ }
+
+ var onMapLoad = function () {
+ layer.onAdd(this, insertAtTheTop);
+ this.fire('layeradd', {layer: layer});
+ };
+
+ if (this._loaded) {
+ onMapLoad.call(this);
+ } else {
+ this.on('load', onMapLoad, this);
+ }
+
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = L.Util.stamp(layer);
+
+ if (this._layers[id]) {
+ layer.onRemove(this);
+ delete this._layers[id];
+
+ if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
+ this._tileLayersNum--;
+ layer.off('load', this._onTileLayerLoad, this);
+ }
+ if (this.attributionControl && layer.getAttribution) {
+ this.attributionControl.removeAttribution(layer.getAttribution());
+ }
+
+ this.fire('layerremove', {layer: layer});
+ }
+ return this;
+ },
+
+ hasLayer: function (layer) {
+ var id = L.Util.stamp(layer);
+ return this._layers.hasOwnProperty(id);
+ },
+
+ invalidateSize: function () {
+ var oldSize = this.getSize();
+
+ this._sizeChanged = true;
+
+ if (this.options.maxBounds) {
+ this.setMaxBounds(this.options.maxBounds);
+ }
+
+ if (!this._loaded) {
+ return this;
+ }
+
+ this._rawPanBy(oldSize.subtract(this.getSize()).divideBy(2, true));
+
+ this.fire('move');
+
+ clearTimeout(this._sizeTimer);
+ this._sizeTimer = setTimeout(L.Util.bind(function () {
+ this.fire('moveend');
+ }, this), 200);
+
+ return this;
+ },
+
+
+ // public methods for getting map state
+
+ getCenter: function (unbounded) { // (Boolean)
+ var viewHalf = this.getSize().divideBy(2),
+ centerPoint = this._getTopLeftPoint().add(viewHalf);
+ return this.unproject(centerPoint, this._zoom, unbounded);
+ },
+
+ getZoom: function () {
+ return this._zoom;
+ },
+
+ getBounds: function () {
+ var bounds = this.getPixelBounds(),
+ sw = this.unproject(new L.Point(bounds.min.x, bounds.max.y), this._zoom, true),
+ ne = this.unproject(new L.Point(bounds.max.x, bounds.min.y), this._zoom, true);
+ return new L.LatLngBounds(sw, ne);
+ },
+
+ getMinZoom: function () {
+ var z1 = this.options.minZoom || 0,
+ z2 = this._layersMinZoom || 0,
+ z3 = this._boundsMinZoom || 0;
+
+ return Math.max(z1, z2, z3);
+ },
+
+ getMaxZoom: function () {
+ var z1 = isNaN(this.options.maxZoom) ? Infinity : this.options.maxZoom,
+ z2 = this._layersMaxZoom || Infinity;
+
+ return Math.min(z1, z2);
+ },
+
+ getBoundsZoom: function (bounds, inside) { // (LatLngBounds)
+ var size = this.getSize(),
+ zoom = this.options.minZoom || 0,
+ maxZoom = this.getMaxZoom(),
+ ne = bounds.getNorthEast(),
+ sw = bounds.getSouthWest(),
+ boundsSize,
+ nePoint,
+ swPoint,
+ zoomNotFound = true;
+
+ if (inside) {
+ zoom--;
+ }
+
+ do {
+ zoom++;
+ nePoint = this.project(ne, zoom);
+ swPoint = this.project(sw, zoom);
+ boundsSize = new L.Point(nePoint.x - swPoint.x, swPoint.y - nePoint.y);
+
+ if (!inside) {
+ zoomNotFound = (boundsSize.x <= size.x) && (boundsSize.y <= size.y);
+ } else {
+ zoomNotFound = (boundsSize.x < size.x) || (boundsSize.y < size.y);
+ }
+ } while (zoomNotFound && (zoom <= maxZoom));
+
+ if (zoomNotFound && inside) {
+ return null;
+ }
+
+ return inside ? zoom : zoom - 1;
+ },
+
+ getSize: function () {
+ if (!this._size || this._sizeChanged) {
+ this._size = new L.Point(this._container.clientWidth, this._container.clientHeight);
+ this._sizeChanged = false;
+ }
+ return this._size;
+ },
+
+ getPixelBounds: function () {
+ var topLeftPoint = this._getTopLeftPoint(),
+ size = this.getSize();
+ return new L.Bounds(topLeftPoint, topLeftPoint.add(size));
+ },
+
+ getPixelOrigin: function () {
+ return this._initialTopLeftPoint;
+ },
+
+ getPanes: function () {
+ return this._panes;
+ },
+
+
+ // conversion methods
+
+ mouseEventToContainerPoint: function (e) { // (MouseEvent)
+ return L.DomEvent.getMousePosition(e, this._container);
+ },
+
+ mouseEventToLayerPoint: function (e) { // (MouseEvent)
+ return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
+ },
+
+ mouseEventToLatLng: function (e) { // (MouseEvent)
+ return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
+ },
+
+ containerPointToLayerPoint: function (point) { // (Point)
+ return point.subtract(L.DomUtil.getPosition(this._mapPane));
+ },
+
+ layerPointToContainerPoint: function (point) { // (Point)
+ return point.add(L.DomUtil.getPosition(this._mapPane));
+ },
+
+ layerPointToLatLng: function (point) { // (Point)
+ return this.unproject(point.add(this._initialTopLeftPoint));
+ },
+
+ latLngToLayerPoint: function (latlng) { // (LatLng)
+ return this.project(latlng)._round()._subtract(this._initialTopLeftPoint);
+ },
+
+ project: function (latlng, zoom) { // (LatLng[, Number]) -> Point
+ zoom = (typeof zoom === 'undefined' ? this._zoom : zoom);
+ return this.options.crs.latLngToPoint(latlng, this.options.scale(zoom));
+ },
+
+ unproject: function (point, zoom, unbounded) { // (Point[, Number, Boolean]) -> LatLng
+ zoom = (typeof zoom === 'undefined' ? this._zoom : zoom);
+ return this.options.crs.pointToLatLng(point, this.options.scale(zoom), unbounded);
+ },
+
+
+ // private methods that modify map state
+
+ _initLayout: function () {
+ var container = this._container;
+
+ container.innerHTML = '';
+
+ container.className += ' leaflet-container';
+
+ if (this.options.fadeAnimation) {
+ container.className += ' leaflet-fade-anim';
+ }
+
+ var position = L.DomUtil.getStyle(container, 'position');
+ if (position !== 'absolute' && position !== 'relative') {
+ container.style.position = 'relative';
+ }
+
+ this._initPanes();
+
+ if (this._initControlPos) {
+ this._initControlPos();
+ }
+ },
+
+ _initPanes: function () {
+ var panes = this._panes = {};
+
+ this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);
+
+ this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);
+ this._objectsPane = panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);
+
+ panes.shadowPane = this._createPane('leaflet-shadow-pane');
+ panes.overlayPane = this._createPane('leaflet-overlay-pane');
+ panes.markerPane = this._createPane('leaflet-marker-pane');
+ panes.popupPane = this._createPane('leaflet-popup-pane');
+ },
+
+ _createPane: function (className, container) {
+ return L.DomUtil.create('div', className, container || this._objectsPane);
+ },
+
+ _resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {
+ var zoomChanged = (this._zoom !== zoom);
+
+ if (!afterZoomAnim) {
+ this.fire('movestart');
+
+ if (zoomChanged) {
+ this.fire('zoomstart');
+ }
+ }
+
+ this._zoom = zoom;
+
+ this._initialTopLeftPoint = this._getNewTopLeftPoint(center);
+
+ if (!preserveMapOffset) {
+ L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
+ } else {
+ var offset = L.DomUtil.getPosition(this._mapPane);
+ this._initialTopLeftPoint._add(offset);
+ }
+
+ this._tileLayersToLoad = this._tileLayersNum;
+ this.fire('viewreset', {hard: !preserveMapOffset});
+
+ this.fire('move');
+ if (zoomChanged || afterZoomAnim) {
+ this.fire('zoomend');
+ }
+ this.fire('moveend');
+
+ if (!this._loaded) {
+ this._loaded = true;
+ this.fire('load');
+ }
+ },
+
+ _initLayers: function (layers) {
+ this._layers = {};
+
+ var i, len;
+
+ for (i = 0, len = layers.length; i < len; i++) {
+ this.addLayer(layers[i]);
+ }
+ },
+
+ _initControls: function () {
+ if (this.options.zoomControl) {
+ this.addControl(new L.Control.Zoom());
+ }
+ if (this.options.attributionControl) {
+ this.attributionControl = new L.Control.Attribution();
+ this.addControl(this.attributionControl);
+ }
+ },
+
+ _rawPanBy: function (offset) {
+ var mapPaneOffset = L.DomUtil.getPosition(this._mapPane);
+ L.DomUtil.setPosition(this._mapPane, mapPaneOffset.subtract(offset));
+ },
+
+
+ // map events
+
+ _initEvents: function () {
+ L.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);
+
+ var events = ['dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'contextmenu'];
+
+ var i, len;
+
+ for (i = 0, len = events.length; i < len; i++) {
+ L.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);
+ }
+
+ if (this.options.trackResize) {
+ L.DomEvent.addListener(window, 'resize', this._onResize, this);
+ }
+ },
+
+ _onResize: function () {
+ L.Util.requestAnimFrame(this.invalidateSize, this, false, this._container);
+ },
+
+ _onMouseClick: function (e) {
+ if (!this._loaded || (this.dragging && this.dragging.moved())) {
+ return;
+ }
+
+ this.fire('pre' + e.type);
+ this._fireMouseEvent(e);
+ },
+
+ _fireMouseEvent: function (e) {
+ if (!this._loaded) {
+ return;
+ }
+
+ var type = e.type;
+ type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
+
+ if (!this.hasEventListeners(type)) {
+ return;
+ }
+
+ if (type === 'contextmenu') {
+ L.DomEvent.preventDefault(e);
+ }
+
+ this.fire(type, {
+ latlng: this.mouseEventToLatLng(e),
+ layerPoint: this.mouseEventToLayerPoint(e)
+ });
+ },
+
+ _initInteraction: function () {
+ var handlers = {
+ dragging: L.Map.Drag,
+ touchZoom: L.Map.TouchZoom,
+ doubleClickZoom: L.Map.DoubleClickZoom,
+ scrollWheelZoom: L.Map.ScrollWheelZoom,
+ boxZoom: L.Map.BoxZoom
+ };
+
+ var i;
+ for (i in handlers) {
+ if (handlers.hasOwnProperty(i) && handlers[i]) {
+ this[i] = new handlers[i](this);
+ if (this.options[i]) {
+ this[i].enable();
+ }
+ // TODO move enabling to handler contructor
+ }
+ }
+ },
+
+ _onTileLayerLoad: function () {
+ // clear scaled tiles after all new tiles are loaded (for performance)
+ this._tileLayersToLoad--;
+ if (this._tileLayersNum && !this._tileLayersToLoad && this._tileBg) {
+ clearTimeout(this._clearTileBgTimer);
+ this._clearTileBgTimer = setTimeout(L.Util.bind(this._clearTileBg, this), 500);
+ }
+ },
+
+
+ // private methods for getting map state
+
+ _getTopLeftPoint: function () {
+ if (!this._loaded) {
+ throw new Error('Set map center and zoom first.');
+ }
+
+ var offset = L.DomUtil.getPosition(this._mapPane);
+ return this._initialTopLeftPoint.subtract(offset);
+ },
+
+ _getNewTopLeftPoint: function (center) {
+ var viewHalf = this.getSize().divideBy(2);
+ return this.project(center).subtract(viewHalf).round();
+ },
+
+ _limitZoom: function (zoom) {
+ var min = this.getMinZoom();
+ var max = this.getMaxZoom();
+ return Math.max(min, Math.min(max, zoom));
+ }
+});
+
+
+
+L.Projection.Mercator = {
+ MAX_LATITUDE: 85.0840591556,
+
+ R_MINOR: 6356752.3142,
+ R_MAJOR: 6378137,
+
+ project: function (/*LatLng*/ latlng) /*-> Point*/ {
+ var d = L.LatLng.DEG_TO_RAD,
+ max = this.MAX_LATITUDE,
+ lat = Math.max(Math.min(max, latlng.lat), -max),
+ r = this.R_MAJOR,
+ r2 = this.R_MINOR,
+ x = latlng.lng * d * r,
+ y = lat * d,
+ tmp = r2 / r,
+ eccent = Math.sqrt(1.0 - tmp * tmp),
+ con = eccent * Math.sin(y);
+
+ con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
+
+ var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
+ y = -r2 * Math.log(ts);
+
+ return new L.Point(x, y);
+ },
+
+ unproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {
+ var d = L.LatLng.RAD_TO_DEG,
+ r = this.R_MAJOR,
+ r2 = this.R_MINOR,
+ lng = point.x * d / r,
+ tmp = r2 / r,
+ eccent = Math.sqrt(1 - (tmp * tmp)),
+ ts = Math.exp(- point.y / r2),
+ phi = (Math.PI / 2) - 2 * Math.atan(ts),
+ numIter = 15,
+ tol = 1e-7,
+ i = numIter,
+ dphi = 0.1,
+ con;
+
+ while ((Math.abs(dphi) > tol) && (--i > 0)) {
+ con = eccent * Math.sin(phi);
+ dphi = (Math.PI / 2) - 2 * Math.atan(ts * Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
+ phi += dphi;
+ }
+
+ return new L.LatLng(phi * d, lng, unbounded);
+ }
+};
+
+
+
+L.CRS.EPSG3395 = L.Util.extend({}, L.CRS, {
+ code: 'EPSG:3395',
+
+ projection: L.Projection.Mercator,
+ transformation: (function () {
+ var m = L.Projection.Mercator,
+ r = m.R_MAJOR,
+ r2 = m.R_MINOR;
+
+ return new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);
+ }())
+});
+
+
+/*
+ * L.TileLayer is used for standard xyz-numbered tile layers.
+ */
+
+L.TileLayer = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ minZoom: 0,
+ maxZoom: 18,
+ tileSize: 256,
+ subdomains: 'abc',
+ errorTileUrl: '',
+ attribution: '',
+ opacity: 1,
+ scheme: 'xyz',
+ continuousWorld: false,
+ noWrap: false,
+ zoomOffset: 0,
+ zoomReverse: false,
+
+ unloadInvisibleTiles: L.Browser.mobile,
+ updateWhenIdle: L.Browser.mobile
+ },
+
+ initialize: function (url, options, urlParams) {
+ L.Util.setOptions(this, options);
+
+ this._url = url;
+ this._urlParams = urlParams;
+
+ if (typeof this.options.subdomains === 'string') {
+ this.options.subdomains = this.options.subdomains.split('');
+ }
+ },
+
+ onAdd: function (map, insertAtTheBottom) {
+ this._map = map;
+ this._insertAtTheBottom = insertAtTheBottom;
+
+ // create a container div for tiles
+ this._initContainer();
+
+ // create an image to clone for tiles
+ this._createTileProto();
+
+ // set up events
+ map.on('viewreset', this._resetCallback, this);
+
+ if (this.options.updateWhenIdle) {
+ map.on('moveend', this._update, this);
+ } else {
+ this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
+ map.on('move', this._limitedUpdate, this);
+ }
+
+ this._reset();
+ this._update();
+ },
+
+ onRemove: function (map) {
+ this._map.getPanes().tilePane.removeChild(this._container);
+ this._container = null;
+
+ this._map.off('viewreset', this._resetCallback, this);
+
+ if (this.options.updateWhenIdle) {
+ this._map.off('moveend', this._update, this);
+ } else {
+ this._map.off('move', this._limitedUpdate, this);
+ }
+ },
+
+ getAttribution: function () {
+ return this.options.attribution;
+ },
+
+ setOpacity: function (opacity) {
+ this.options.opacity = opacity;
+
+ this._setOpacity(opacity);
+
+ // stupid webkit hack to force redrawing of tiles
+ if (L.Browser.webkit) {
+ for (var i in this._tiles) {
+ if (this._tiles.hasOwnProperty(i)) {
+ this._tiles[i].style.webkitTransform += ' translate(0,0)';
+ }
+ }
+ }
+ },
+
+ _setOpacity: function (opacity) {
+ if (opacity < 1) {
+ L.DomUtil.setOpacity(this._container, opacity);
+ }
+ },
+
+ _initContainer: function () {
+ var tilePane = this._map.getPanes().tilePane,
+ first = tilePane.firstChild;
+
+ if (!this._container || tilePane.empty) {
+ this._container = L.DomUtil.create('div', 'leaflet-layer');
+
+ if (this._insertAtTheBottom && first) {
+ tilePane.insertBefore(this._container, first);
+ } else {
+ tilePane.appendChild(this._container);
+ }
+
+ this._setOpacity(this.options.opacity);
+ }
+ },
+
+ _resetCallback: function (e) {
+ this._reset(e.hard);
+ },
+
+ _reset: function (clearOldContainer) {
+ var key;
+ for (key in this._tiles) {
+ if (this._tiles.hasOwnProperty(key)) {
+ this.fire("tileunload", {tile: this._tiles[key]});
+ }
+ }
+ this._tiles = {};
+
+ if (this.options.reuseTiles) {
+ this._unusedTiles = [];
+ }
+
+ if (clearOldContainer && this._container) {
+ this._container.innerHTML = "";
+ }
+ this._initContainer();
+ },
+
+ _update: function () {
+ var bounds = this._map.getPixelBounds(),
+ tileSize = this.options.tileSize;
+
+ var nwTilePoint = new L.Point(
+ Math.floor(bounds.min.x / tileSize),
+ Math.floor(bounds.min.y / tileSize)),
+ seTilePoint = new L.Point(
+ Math.floor(bounds.max.x / tileSize),
+ Math.floor(bounds.max.y / tileSize)),
+ tileBounds = new L.Bounds(nwTilePoint, seTilePoint);
+
+ this._addTilesFromCenterOut(tileBounds);
+
+ if (this.options.unloadInvisibleTiles ||
+ this.options.reuseTiles) {
+ this._removeOtherTiles(tileBounds);
+ }
+ },
+
+ _addTilesFromCenterOut: function (bounds) {
+ var queue = [],
+ center = bounds.getCenter();
+
+ for (var j = bounds.min.y; j <= bounds.max.y; j++) {
+ for (var i = bounds.min.x; i <= bounds.max.x; i++) {
+ if ((i + ':' + j) in this._tiles) {
+ continue;
+ }
+ queue.push(new L.Point(i, j));
+ }
+ }
+
+ // load tiles in order of their distance to center
+ queue.sort(function (a, b) {
+ return a.distanceTo(center) - b.distanceTo(center);
+ });
+
+ var fragment = document.createDocumentFragment();
+
+ this._tilesToLoad = queue.length;
+ for (var k = 0, len = this._tilesToLoad; k < len; k++) {
+ this._addTile(queue[k], fragment);
+ }
+
+ this._container.appendChild(fragment);
+ },
+
+ _removeOtherTiles: function (bounds) {
+ var kArr, x, y, key, tile;
+
+ for (key in this._tiles) {
+ if (this._tiles.hasOwnProperty(key)) {
+ kArr = key.split(':');
+ x = parseInt(kArr[0], 10);
+ y = parseInt(kArr[1], 10);
+
+ // remove tile if it's out of bounds
+ if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
+
+ tile = this._tiles[key];
+ this.fire("tileunload", {tile: tile, url: tile.src});
+
+ // evil, don't do this! crashes Android 3, produces load errors, doesn't solve memory leaks
+ // this._tiles[key].src = '';
+
+ if (tile.parentNode === this._container) {
+ this._container.removeChild(tile);
+ }
+ if (this.options.reuseTiles) {
+ this._unusedTiles.push(this._tiles[key]);
+ }
+ delete this._tiles[key];
+ }
+ }
+ }
+ },
+
+ _addTile: function (tilePoint, container) {
+ var tilePos = this._getTilePos(tilePoint),
+ zoom = this._map.getZoom(),
+ key = tilePoint.x + ':' + tilePoint.y,
+ tileLimit = Math.pow(2, this._getOffsetZoom(zoom));
+
+ // wrap tile coordinates
+ if (!this.options.continuousWorld) {
+ if (!this.options.noWrap) {
+ tilePoint.x = ((tilePoint.x % tileLimit) + tileLimit) % tileLimit;
+ } else if (tilePoint.x < 0 || tilePoint.x >= tileLimit) {
+ this._tilesToLoad--;
+ return;
+ }
+
+ if (tilePoint.y < 0 || tilePoint.y >= tileLimit) {
+ this._tilesToLoad--;
+ return;
+ }
+ }
+
+ // get unused tile - or create a new tile
+ var tile = this._getTile();
+ L.DomUtil.setPosition(tile, tilePos);
+
+ this._tiles[key] = tile;
+
+ if (this.options.scheme === 'tms') {
+ tilePoint.y = tileLimit - tilePoint.y - 1;
+ }
+
+ this._loadTile(tile, tilePoint, zoom);
+
+ container.appendChild(tile);
+ },
+
+ _getOffsetZoom: function (zoom) {
+ zoom = this.options.zoomReverse ? this.options.maxZoom - zoom : zoom;
+ return zoom + this.options.zoomOffset;
+ },
+
+ _getTilePos: function (tilePoint) {
+ var origin = this._map.getPixelOrigin(),
+ tileSize = this.options.tileSize;
+
+ return tilePoint.multiplyBy(tileSize).subtract(origin);
+ },
+
+ // image-specific code (override to implement e.g. Canvas or SVG tile layer)
+
+ getTileUrl: function (tilePoint, zoom) {
+ var subdomains = this.options.subdomains,
+ s = this.options.subdomains[(tilePoint.x + tilePoint.y) % subdomains.length];
+
+ return L.Util.template(this._url, L.Util.extend({
+ s: s,
+ z: this._getOffsetZoom(zoom),
+ x: tilePoint.x,
+ y: tilePoint.y
+ }, this._urlParams));
+ },
+
+ _createTileProto: function () {
+ this._tileImg = L.DomUtil.create('img', 'leaflet-tile');
+ this._tileImg.galleryimg = 'no';
+
+ var tileSize = this.options.tileSize;
+ this._tileImg.style.width = tileSize + 'px';
+ this._tileImg.style.height = tileSize + 'px';
+ },
+
+ _getTile: function () {
+ if (this.options.reuseTiles && this._unusedTiles.length > 0) {
+ var tile = this._unusedTiles.pop();
+ this._resetTile(tile);
+ return tile;
+ }
+ return this._createTile();
+ },
+
+ _resetTile: function (tile) {
+ // Override if data stored on a tile needs to be cleaned up before reuse
+ },
+
+ _createTile: function () {
+ var tile = this._tileImg.cloneNode(false);
+ tile.onselectstart = tile.onmousemove = L.Util.falseFn;
+ return tile;
+ },
+
+ _loadTile: function (tile, tilePoint, zoom) {
+ tile._layer = this;
+ tile.onload = this._tileOnLoad;
+ tile.onerror = this._tileOnError;
+ tile.src = this.getTileUrl(tilePoint, zoom);
+ },
+
+ _tileOnLoad: function (e) {
+ var layer = this._layer;
+
+ this.className += ' leaflet-tile-loaded';
+
+ layer.fire('tileload', {tile: this, url: this.src});
+
+ layer._tilesToLoad--;
+ if (!layer._tilesToLoad) {
+ layer.fire('load');
+ }
+ },
+
+ _tileOnError: function (e) {
+ var layer = this._layer;
+
+ layer.fire('tileerror', {tile: this, url: this.src});
+
+ var newUrl = layer.options.errorTileUrl;
+ if (newUrl) {
+ this.src = newUrl;
+ }
+ }
+});
+
+
+L.TileLayer.WMS = L.TileLayer.extend({
+ defaultWmsParams: {
+ service: 'WMS',
+ request: 'GetMap',
+ version: '1.1.1',
+ layers: '',
+ styles: '',
+ format: 'image/jpeg',
+ transparent: false
+ },
+
+ initialize: function (/*String*/ url, /*Object*/ options) {
+ this._url = url;
+
+ this.wmsParams = L.Util.extend({}, this.defaultWmsParams);
+ this.wmsParams.width = this.wmsParams.height = this.options.tileSize;
+
+ for (var i in options) {
+ // all keys that are not TileLayer options go to WMS params
+ if (!this.options.hasOwnProperty(i)) {
+ this.wmsParams[i] = options[i];
+ }
+ }
+
+ L.Util.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+ var projectionKey = (parseFloat(this.wmsParams.version) >= 1.3 ? 'crs' : 'srs');
+ this.wmsParams[projectionKey] = map.options.crs.code;
+
+ L.TileLayer.prototype.onAdd.call(this, map);
+ },
+
+ getTileUrl: function (/*Point*/ tilePoint, /*Number*/ zoom)/*-> String*/ {
+ var tileSize = this.options.tileSize,
+ nwPoint = tilePoint.multiplyBy(tileSize),
+ sePoint = nwPoint.add(new L.Point(tileSize, tileSize)),
+ nwMap = this._map.unproject(nwPoint, this._zoom, true),
+ seMap = this._map.unproject(sePoint, this._zoom, true),
+ nw = this._map.options.crs.project(nwMap),
+ se = this._map.options.crs.project(seMap),
+ bbox = [nw.x, se.y, se.x, nw.y].join(',');
+
+ return this._url + L.Util.getParamString(this.wmsParams) + "&bbox=" + bbox;
+ }
+});
+
+
+L.TileLayer.Canvas = L.TileLayer.extend({
+ options: {
+ async: false
+ },
+
+ initialize: function (options) {
+ L.Util.setOptions(this, options);
+ },
+
+ redraw: function () {
+ for (var i in this._tiles) {
+ var tile = this._tiles[i];
+ this._redrawTile(tile);
+ }
+ },
+
+ _redrawTile: function (tile) {
+ this.drawTile(tile, tile._tilePoint, tile._zoom);
+ },
+
+ _createTileProto: function () {
+ this._canvasProto = L.DomUtil.create('canvas', 'leaflet-tile');
+
+ var tileSize = this.options.tileSize;
+ this._canvasProto.width = tileSize;
+ this._canvasProto.height = tileSize;
+ },
+
+ _createTile: function () {
+ var tile = this._canvasProto.cloneNode(false);
+ tile.onselectstart = tile.onmousemove = L.Util.falseFn;
+ return tile;
+ },
+
+ _loadTile: function (tile, tilePoint, zoom) {
+ tile._layer = this;
+ tile._tilePoint = tilePoint;
+ tile._zoom = zoom;
+
+ this.drawTile(tile, tilePoint, zoom);
+
+ if (!this.options.async) {
+ this.tileDrawn(tile);
+ }
+ },
+
+ drawTile: function (tile, tilePoint, zoom) {
+ // override with rendering code
+ },
+
+ tileDrawn: function (tile) {
+ this._tileOnLoad.call(tile);
+ }
+});
+
+
+L.ImageOverlay = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ initialize: function (/*String*/ url, /*LatLngBounds*/ bounds) {
+ this._url = url;
+ this._bounds = bounds;
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ if (!this._image) {
+ this._initImage();
+ }
+
+ map.getPanes().overlayPane.appendChild(this._image);
+
+ map.on('viewreset', this._reset, this);
+ this._reset();
+ },
+
+ onRemove: function (map) {
+ map.getPanes().overlayPane.removeChild(this._image);
+ map.off('viewreset', this._reset, this);
+ },
+
+ _initImage: function () {
+ this._image = L.DomUtil.create('img', 'leaflet-image-layer');
+
+ this._image.style.visibility = 'hidden';
+ //TODO opacity option
+
+ //TODO createImage util method to remove duplication
+ L.Util.extend(this._image, {
+ galleryimg: 'no',
+ onselectstart: L.Util.falseFn,
+ onmousemove: L.Util.falseFn,
+ onload: L.Util.bind(this._onImageLoad, this),
+ src: this._url
+ });
+ },
+
+ _reset: function () {
+ var topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
+ bottomRight = this._map.latLngToLayerPoint(this._bounds.getSouthEast()),
+ size = bottomRight.subtract(topLeft);
+
+ L.DomUtil.setPosition(this._image, topLeft);
+
+ this._image.style.width = size.x + 'px';
+ this._image.style.height = size.y + 'px';
+ },
+
+ _onImageLoad: function () {
+ this._image.style.visibility = '';
+ this.fire('load');
+ }
+});
+
+
+L.Icon = L.Class.extend({
+ iconUrl: L.ROOT_URL + 'images/marker.png',
+ shadowUrl: L.ROOT_URL + 'images/marker-shadow.png',
+
+ iconSize: new L.Point(25, 41),
+ shadowSize: new L.Point(41, 41),
+
+ iconAnchor: new L.Point(13, 41),
+ popupAnchor: new L.Point(0, -33),
+
+ initialize: function (iconUrl) {
+ if (iconUrl) {
+ this.iconUrl = iconUrl;
+ }
+ },
+
+ createIcon: function () {
+ return this._createIcon('icon');
+ },
+
+ createShadow: function () {
+ return this._createIcon('shadow');
+ },
+
+ _createIcon: function (name) {
+ var size = this[name + 'Size'],
+ src = this[name + 'Url'];
+ if (!src && name === 'shadow') {
+ return null;
+ }
+
+ var img;
+ if (!src) {
+ img = this._createDiv();
+ }
+ else {
+ img = this._createImg(src);
+ }
+
+ img.className = 'leaflet-marker-' + name;
+
+ img.style.marginLeft = (-this.iconAnchor.x) + 'px';
+ img.style.marginTop = (-this.iconAnchor.y) + 'px';
+
+ if (size) {
+ img.style.width = size.x + 'px';
+ img.style.height = size.y + 'px';
+ }
+
+ return img;
+ },
+
+ _createImg: function (src) {
+ var el;
+ if (!L.Browser.ie6) {
+ el = document.createElement('img');
+ el.src = src;
+ } else {
+ el = document.createElement('div');
+ el.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '")';
+ }
+ return el;
+ },
+
+ _createDiv: function () {
+ return document.createElement('div');
+ }
+});
+
+
+/*
+ * L.Marker is used to display clickable/draggable icons on the map.
+ */
+
+L.Marker = L.Class.extend({
+
+ includes: L.Mixin.Events,
+
+ options: {
+ icon: new L.Icon(),
+ title: '',
+ clickable: true,
+ draggable: false,
+ zIndexOffset: 0
+ },
+
+ initialize: function (latlng, options) {
+ L.Util.setOptions(this, options);
+ this._latlng = latlng;
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ this._initIcon();
+
+ map.on('viewreset', this._reset, this);
+ this._reset();
+ },
+
+ onRemove: function (map) {
+ this._removeIcon();
+
+ // TODO move to Marker.Popup.js
+ if (this.closePopup) {
+ this.closePopup();
+ }
+
+ this._map = null;
+
+ map.off('viewreset', this._reset, this);
+ },
+
+ getLatLng: function () {
+ return this._latlng;
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = latlng;
+ if (this._icon) {
+ this._reset();
+
+ if (this._popup) {
+ this._popup.setLatLng(this._latlng);
+ }
+ }
+ },
+
+ setIcon: function (icon) {
+ if (this._map) {
+ this._removeIcon();
+ }
+
+ this.options.icon = icon;
+
+ if (this._map) {
+ this._initIcon();
+ this._reset();
+ }
+ },
+
+ _initIcon: function () {
+ if (!this._icon) {
+ this._icon = this.options.icon.createIcon();
+
+ if (this.options.title) {
+ this._icon.title = this.options.title;
+ }
+
+ this._initInteraction();
+ }
+ if (!this._shadow) {
+ this._shadow = this.options.icon.createShadow();
+ }
+
+ this._map._panes.markerPane.appendChild(this._icon);
+ if (this._shadow) {
+ this._map._panes.shadowPane.appendChild(this._shadow);
+ }
+ },
+
+ _removeIcon: function () {
+ this._map._panes.markerPane.removeChild(this._icon);
+ if (this._shadow) {
+ this._map._panes.shadowPane.removeChild(this._shadow);
+ }
+ this._icon = this._shadow = null;
+ },
+
+ _reset: function () {
+ var pos = this._map.latLngToLayerPoint(this._latlng).round();
+
+ L.DomUtil.setPosition(this._icon, pos);
+ if (this._shadow) {
+ L.DomUtil.setPosition(this._shadow, pos);
+ }
+
+ this._icon.style.zIndex = pos.y + this.options.zIndexOffset;
+ },
+
+ _initInteraction: function () {
+ if (this.options.clickable) {
+ this._icon.className += ' leaflet-clickable';
+
+ L.DomEvent.addListener(this._icon, 'click', this._onMouseClick, this);
+
+ var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout'];
+ for (var i = 0; i < events.length; i++) {
+ L.DomEvent.addListener(this._icon, events[i], this._fireMouseEvent, this);
+ }
+ }
+
+ if (L.Handler.MarkerDrag) {
+ this.dragging = new L.Handler.MarkerDrag(this);
+
+ if (this.options.draggable) {
+ this.dragging.enable();
+ }
+ }
+ },
+
+ _onMouseClick: function (e) {
+ L.DomEvent.stopPropagation(e);
+ if (this.dragging && this.dragging.moved()) { return; }
+ this.fire(e.type);
+ },
+
+ _fireMouseEvent: function (e) {
+ this.fire(e.type);
+ L.DomEvent.stopPropagation(e);
+ }
+});
+
+
+
+L.Popup = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ options: {
+ minWidth: 50,
+ maxWidth: 300,
+ autoPan: true,
+ closeButton: true,
+ offset: new L.Point(0, 2),
+ autoPanPadding: new L.Point(5, 5),
+ className: ''
+ },
+
+ initialize: function (options, source) {
+ L.Util.setOptions(this, options);
+
+ this._source = source;
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+ if (!this._container) {
+ this._initLayout();
+ }
+ this._updateContent();
+
+ this._container.style.opacity = '0';
+
+ this._map._panes.popupPane.appendChild(this._container);
+ this._map.on('viewreset', this._updatePosition, this);
+
+ if (this._map.options.closePopupOnClick) {
+ this._map.on('preclick', this._close, this);
+ }
+
+ this._update();
+
+ this._container.style.opacity = '1'; //TODO fix ugly opacity hack
+
+ this._opened = true;
+ },
+
+ onRemove: function (map) {
+ map._panes.popupPane.removeChild(this._container);
+ L.Util.falseFn(this._container.offsetWidth);
+
+ map.off('viewreset', this._updatePosition, this);
+ map.off('click', this._close, this);
+
+ this._container.style.opacity = '0';
+
+ this._opened = false;
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = latlng;
+ if (this._opened) {
+ this._update();
+ }
+ return this;
+ },
+
+ setContent: function (content) {
+ this._content = content;
+ if (this._opened) {
+ this._update();
+ }
+ return this;
+ },
+
+ _close: function () {
+ if (this._opened) {
+ this._map.closePopup();
+ }
+ },
+
+ _initLayout: function () {
+ this._container = L.DomUtil.create('div', 'leaflet-popup ' + this.options.className);
+
+ if (this.options.closeButton) {
+ this._closeButton = L.DomUtil.create('a', 'leaflet-popup-close-button', this._container);
+ this._closeButton.href = '#close';
+ L.DomEvent.addListener(this._closeButton, 'click', this._onCloseButtonClick, this);
+ }
+
+ this._wrapper = L.DomUtil.create('div', 'leaflet-popup-content-wrapper', this._container);
+ L.DomEvent.disableClickPropagation(this._wrapper);
+ this._contentNode = L.DomUtil.create('div', 'leaflet-popup-content', this._wrapper);
+
+ this._tipContainer = L.DomUtil.create('div', 'leaflet-popup-tip-container', this._container);
+ this._tip = L.DomUtil.create('div', 'leaflet-popup-tip', this._tipContainer);
+ },
+
+ _update: function () {
+ this._container.style.visibility = 'hidden';
+
+ this._updateContent();
+ this._updateLayout();
+ this._updatePosition();
+
+ this._container.style.visibility = '';
+
+ this._adjustPan();
+ },
+
+ _updateContent: function () {
+ if (!this._content) {
+ return;
+ }
+
+ if (typeof this._content === 'string') {
+ this._contentNode.innerHTML = this._content;
+ } else {
+ this._contentNode.innerHTML = '';
+ this._contentNode.appendChild(this._content);
+ }
+ },
+
+ _updateLayout: function () {
+ this._container.style.width = '';
+ this._container.style.whiteSpace = 'nowrap';
+
+ var width = this._container.offsetWidth;
+
+ this._container.style.width = (width > this.options.maxWidth ?
+ this.options.maxWidth : (width < this.options.minWidth ? this.options.minWidth : width)) + 'px';
+ this._container.style.whiteSpace = '';
+
+ this._containerWidth = this._container.offsetWidth;
+ },
+
+ _updatePosition: function () {
+ var pos = this._map.latLngToLayerPoint(this._latlng);
+
+ this._containerBottom = -pos.y - this.options.offset.y;
+ this._containerLeft = pos.x - Math.round(this._containerWidth / 2) + this.options.offset.x;
+
+ this._container.style.bottom = this._containerBottom + 'px';
+ this._container.style.left = this._containerLeft + 'px';
+ },
+
+ _adjustPan: function () {
+ if (!this.options.autoPan) {
+ return;
+ }
+
+ var containerHeight = this._container.offsetHeight,
+ layerPos = new L.Point(
+ this._containerLeft,
+ -containerHeight - this._containerBottom),
+ containerPos = this._map.layerPointToContainerPoint(layerPos),
+ adjustOffset = new L.Point(0, 0),
+ padding = this.options.autoPanPadding,
+ size = this._map.getSize();
+
+ if (containerPos.x < 0) {
+ adjustOffset.x = containerPos.x - padding.x;
+ }
+ if (containerPos.x + this._containerWidth > size.x) {
+ adjustOffset.x = containerPos.x + this._containerWidth - size.x + padding.x;
+ }
+ if (containerPos.y < 0) {
+ adjustOffset.y = containerPos.y - padding.y;
+ }
+ if (containerPos.y + containerHeight > size.y) {
+ adjustOffset.y = containerPos.y + containerHeight - size.y + padding.y;
+ }
+
+ if (adjustOffset.x || adjustOffset.y) {
+ this._map.panBy(adjustOffset);
+ }
+ },
+
+ _onCloseButtonClick: function (e) {
+ this._close();
+ L.DomEvent.stop(e);
+ }
+});
+
+
+/*
+ * Popup extension to L.Marker, adding openPopup & bindPopup methods.
+ */
+
+L.Marker.include({
+ openPopup: function () {
+ this._popup.setLatLng(this._latlng);
+ if (this._map) {
+ this._map.openPopup(this._popup);
+ }
+
+ return this;
+ },
+
+ closePopup: function () {
+ if (this._popup) {
+ this._popup._close();
+ }
+ return this;
+ },
+
+ bindPopup: function (content, options) {
+ options = L.Util.extend({offset: this.options.icon.popupAnchor}, options);
+
+ if (!this._popup) {
+ this.on('click', this.openPopup, this);
+ }
+
+ this._popup = new L.Popup(options, this);
+ this._popup.setContent(content);
+
+ return this;
+ },
+
+ unbindPopup: function () {
+ if (this._popup) {
+ this._popup = null;
+ this.off('click', this.openPopup);
+ }
+ return this;
+ }
+});
+
+
+
+L.Map.include({
+ openPopup: function (popup) {
+ this.closePopup();
+ this._popup = popup;
+ this.addLayer(popup);
+ this.fire('popupopen', { popup: this._popup });
+
+ return this;
+ },
+
+ closePopup: function () {
+ if (this._popup) {
+ this.removeLayer(this._popup);
+ this.fire('popupclose', { popup: this._popup });
+ this._popup = null;
+ }
+ return this;
+ }
+});
+
+
+/*
+ * L.LayerGroup is a class to combine several layers so you can manipulate the group (e.g. add/remove it) as one layer.
+ */
+
+L.LayerGroup = L.Class.extend({
+ initialize: function (layers) {
+ this._layers = {};
+
+ if (layers) {
+ for (var i = 0, len = layers.length; i < len; i++) {
+ this.addLayer(layers[i]);
+ }
+ }
+ },
+
+ addLayer: function (layer) {
+ var id = L.Util.stamp(layer);
+ this._layers[id] = layer;
+
+ if (this._map) {
+ this._map.addLayer(layer);
+ }
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = L.Util.stamp(layer);
+ delete this._layers[id];
+
+ if (this._map) {
+ this._map.removeLayer(layer);
+ }
+ return this;
+ },
+
+ clearLayers: function () {
+ this._iterateLayers(this.removeLayer, this);
+ return this;
+ },
+
+ invoke: function (methodName) {
+ var args = Array.prototype.slice.call(arguments, 1),
+ i, layer;
+
+ for (i in this._layers) {
+ if (this._layers.hasOwnProperty(i)) {
+ layer = this._layers[i];
+
+ if (layer[methodName]) {
+ layer[methodName].apply(layer, args);
+ }
+ }
+ }
+ return this;
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+ this._iterateLayers(map.addLayer, map);
+ },
+
+ onRemove: function (map) {
+ this._iterateLayers(map.removeLayer, map);
+ delete this._map;
+ },
+
+ _iterateLayers: function (method, context) {
+ for (var i in this._layers) {
+ if (this._layers.hasOwnProperty(i)) {
+ method.call(context, this._layers[i]);
+ }
+ }
+ }
+});
+
+
+/*
+ * L.FeatureGroup extends L.LayerGroup by introducing mouse events and bindPopup method shared between a group of layers.
+ */
+
+L.FeatureGroup = L.LayerGroup.extend({
+ includes: L.Mixin.Events,
+
+ addLayer: function (layer) {
+ this._initEvents(layer);
+ L.LayerGroup.prototype.addLayer.call(this, layer);
+
+ if (this._popupContent && layer.bindPopup) {
+ layer.bindPopup(this._popupContent);
+ }
+ },
+
+ bindPopup: function (content) {
+ this._popupContent = content;
+
+ return this.invoke('bindPopup', content);
+ },
+
+ setStyle: function (style) {
+ return this.invoke('setStyle', style);
+ },
+
+ _events: ['click', 'dblclick', 'mouseover', 'mouseout'],
+
+ _initEvents: function (layer) {
+ for (var i = 0, len = this._events.length; i < len; i++) {
+ layer.on(this._events[i], this._propagateEvent, this);
+ }
+ },
+
+ _propagateEvent: function (e) {
+ e.layer = e.target;
+ e.target = this;
+ this.fire(e.type, e);
+ }
+});
+
+
+/*
+ * L.Path is a base class for rendering vector paths on a map. It's inherited by Polyline, Circle, etc.
+ */
+
+L.Path = L.Class.extend({
+ includes: [L.Mixin.Events],
+
+ statics: {
+ // how much to extend the clip area around the map view
+ // (relative to its size, e.g. 0.5 is half the screen in each direction)
+ CLIP_PADDING: 0.5
+ },
+
+ options: {
+ stroke: true,
+ color: '#0033ff',
+ weight: 5,
+ opacity: 0.5,
+
+ fill: false,
+ fillColor: null, //same as color by default
+ fillOpacity: 0.2,
+
+ clickable: true,
+
+ // TODO remove this, as all paths now update on moveend
+ updateOnMoveEnd: true
+ },
+
+ initialize: function (options) {
+ L.Util.setOptions(this, options);
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ this._initElements();
+ this._initEvents();
+ this.projectLatlngs();
+ this._updatePath();
+
+ map.on('viewreset', this.projectLatlngs, this);
+
+ this._updateTrigger = this.options.updateOnMoveEnd ? 'moveend' : 'viewreset';
+ map.on(this._updateTrigger, this._updatePath, this);
+ },
+
+ onRemove: function (map) {
+ this._map = null;
+
+ map._pathRoot.removeChild(this._container);
+
+ map.off('viewreset', this.projectLatlngs, this);
+ map.off(this._updateTrigger, this._updatePath, this);
+ },
+
+ projectLatlngs: function () {
+ // do all projection stuff here
+ },
+
+ setStyle: function (style) {
+ L.Util.setOptions(this, style);
+ if (this._container) {
+ this._updateStyle();
+ }
+ return this;
+ },
+
+ _redraw: function () {
+ if (this._map) {
+ this.projectLatlngs();
+ this._updatePath();
+ }
+ }
+});
+
+L.Map.include({
+ _updatePathViewport: function () {
+ var p = L.Path.CLIP_PADDING,
+ size = this.getSize(),
+ //TODO this._map._getMapPanePos()
+ panePos = L.DomUtil.getPosition(this._mapPane),
+ min = panePos.multiplyBy(-1).subtract(size.multiplyBy(p)),
+ max = min.add(size.multiplyBy(1 + p * 2));
+
+ this._pathViewport = new L.Bounds(min, max);
+ }
+});
+
+
+L.Path.SVG_NS = 'http://www.w3.org/2000/svg';
+
+L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);
+
+L.Path = L.Path.extend({
+ statics: {
+ SVG: L.Browser.svg,
+ _createElement: function (name) {
+ return document.createElementNS(L.Path.SVG_NS, name);
+ }
+ },
+
+ getPathString: function () {
+ // form path string here
+ },
+
+ _initElements: function () {
+ this._map._initPathRoot();
+ this._initPath();
+ this._initStyle();
+ },
+
+ _initPath: function () {
+ this._container = L.Path._createElement('g');
+
+ this._path = L.Path._createElement('path');
+ this._container.appendChild(this._path);
+
+ this._map._pathRoot.appendChild(this._container);
+ },
+
+ _initStyle: function () {
+ if (this.options.stroke) {
+ this._path.setAttribute('stroke-linejoin', 'round');
+ this._path.setAttribute('stroke-linecap', 'round');
+ }
+ if (this.options.fill) {
+ this._path.setAttribute('fill-rule', 'evenodd');
+ } else {
+ this._path.setAttribute('fill', 'none');
+ }
+ this._updateStyle();
+ },
+
+ _updateStyle: function () {
+ if (this.options.stroke) {
+ this._path.setAttribute('stroke', this.options.color);
+ this._path.setAttribute('stroke-opacity', this.options.opacity);
+ this._path.setAttribute('stroke-width', this.options.weight);
+ }
+ if (this.options.fill) {
+ this._path.setAttribute('fill', this.options.fillColor || this.options.color);
+ this._path.setAttribute('fill-opacity', this.options.fillOpacity);
+ }
+ },
+
+ _updatePath: function () {
+ var str = this.getPathString();
+ if (!str) {
+ // fix webkit empty string parsing bug
+ str = 'M0 0';
+ }
+ this._path.setAttribute('d', str);
+ },
+
+ // TODO remove duplication with L.Map
+ _initEvents: function () {
+ if (this.options.clickable) {
+ if (!L.Browser.vml) {
+ this._path.setAttribute('class', 'leaflet-clickable');
+ }
+
+ L.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);
+
+ var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'mousemove'];
+ for (var i = 0; i < events.length; i++) {
+ L.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);
+ }
+ }
+ },
+
+ _onMouseClick: function (e) {
+ if (this._map.dragging && this._map.dragging.moved()) {
+ return;
+ }
+ this._fireMouseEvent(e);
+ },
+
+ _fireMouseEvent: function (e) {
+ if (!this.hasEventListeners(e.type)) {
+ return;
+ }
+ this.fire(e.type, {
+ latlng: this._map.mouseEventToLatLng(e),
+ layerPoint: this._map.mouseEventToLayerPoint(e)
+ });
+ L.DomEvent.stopPropagation(e);
+ }
+});
+
+L.Map.include({
+ _initPathRoot: function () {
+ if (!this._pathRoot) {
+ this._pathRoot = L.Path._createElement('svg');
+ this._panes.overlayPane.appendChild(this._pathRoot);
+
+ this.on('moveend', this._updateSvgViewport);
+ this._updateSvgViewport();
+ }
+ },
+
+ _updateSvgViewport: function () {
+ this._updatePathViewport();
+
+ var vp = this._pathViewport,
+ min = vp.min,
+ max = vp.max,
+ width = max.x - min.x,
+ height = max.y - min.y,
+ root = this._pathRoot,
+ pane = this._panes.overlayPane;
+
+ // Hack to make flicker on drag end on mobile webkit less irritating
+ // Unfortunately I haven't found a good workaround for this yet
+ if (L.Browser.webkit) {
+ pane.removeChild(root);
+ }
+
+ L.DomUtil.setPosition(root, min);
+ root.setAttribute('width', width);
+ root.setAttribute('height', height);
+ root.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));
+
+ if (L.Browser.webkit) {
+ pane.appendChild(root);
+ }
+ }
+});
+
+
+/*
+ * Popup extension to L.Path (polylines, polygons, circles), adding bindPopup method.
+ */
+
+L.Path.include({
+ bindPopup: function (content, options) {
+ if (!this._popup || this._popup.options !== options) {
+ this._popup = new L.Popup(options, this);
+ }
+ this._popup.setContent(content);
+
+ if (!this._openPopupAdded) {
+ this.on('click', this._openPopup, this);
+ this._openPopupAdded = true;
+ }
+
+ return this;
+ },
+
+ _openPopup: function (e) {
+ this._popup.setLatLng(e.latlng);
+ this._map.openPopup(this._popup);
+ }
+});
+
+
+/*
+ * Vector rendering for IE6-8 through VML.
+ * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
+ */
+
+L.Browser.vml = (function () {
+ var d = document.createElement('div'), s;
+ d.innerHTML = '<v:shape adj="1"/>';
+ s = d.firstChild;
+ s.style.behavior = 'url(#default#VML)';
+
+ return (s && (typeof s.adj === 'object'));
+}());
+
+L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
+ statics: {
+ VML: true,
+ CLIP_PADDING: 0.02,
+ _createElement: (function () {
+ try {
+ document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
+ return function (name) {
+ return document.createElement('<lvml:' + name + ' class="lvml">');
+ };
+ } catch (e) {
+ return function (name) {
+ return document.createElement('<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
+ };
+ }
+ }())
+ },
+
+ _initPath: function () {
+ this._container = L.Path._createElement('shape');
+ this._container.className += ' leaflet-vml-shape' +
+ (this.options.clickable ? ' leaflet-clickable' : '');
+ this._container.coordsize = '1 1';
+
+ this._path = L.Path._createElement('path');
+ this._container.appendChild(this._path);
+
+ this._map._pathRoot.appendChild(this._container);
+ },
+
+ _initStyle: function () {
+ if (this.options.stroke) {
+ this._stroke = L.Path._createElement('stroke');
+ this._stroke.endcap = 'round';
+ this._container.appendChild(this._stroke);
+ } else {
+ this._container.stroked = false;
+ }
+ if (this.options.fill) {
+ this._container.filled = true;
+ this._fill = L.Path._createElement('fill');
+ this._container.appendChild(this._fill);
+ } else {
+ this._container.filled = false;
+ }
+ this._updateStyle();
+ },
+
+ _updateStyle: function () {
+ if (this.options.stroke) {
+ this._stroke.weight = this.options.weight + 'px';
+ this._stroke.color = this.options.color;
+ this._stroke.opacity = this.options.opacity;
+ }
+ if (this.options.fill) {
+ this._fill.color = this.options.fillColor || this.options.color;
+ this._fill.opacity = this.options.fillOpacity;
+ }
+ },
+
+ _updatePath: function () {
+ this._container.style.display = 'none';
+ this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
+ this._container.style.display = '';
+ }
+});
+
+L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
+ _initPathRoot: function () {
+ if (!this._pathRoot) {
+ this._pathRoot = document.createElement('div');
+ this._pathRoot.className = 'leaflet-vml-container';
+ this._panes.overlayPane.appendChild(this._pathRoot);
+
+ this.on('moveend', this._updatePathViewport);
+ this._updatePathViewport();
+ }
+ }
+});
+
+
+/*
+ * L.LineUtil contains different utility functions for line segments
+ * and polylines (clipping, simplification, distances, etc.)
+ */
+
+L.LineUtil = {
+
+ // Simplify polyline with vertex reduction and Douglas-Peucker simplification.
+ // Improves rendering performance dramatically by lessening the number of points to draw.
+
+ simplify: function (/*Point[]*/ points, /*Number*/ tolerance) {
+ if (!tolerance || !points.length) {
+ return points.slice();
+ }
+
+ var sqTolerance = tolerance * tolerance;
+
+ // stage 1: vertex reduction
+ points = this._reducePoints(points, sqTolerance);
+
+ // stage 2: Douglas-Peucker simplification
+ points = this._simplifyDP(points, sqTolerance);
+
+ return points;
+ },
+
+ // distance from a point to a segment between two points
+ pointToSegmentDistance: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
+ return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));
+ },
+
+ closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
+ return this._sqClosestPointOnSegment(p, p1, p2);
+ },
+
+ // Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
+ _simplifyDP: function (points, sqTolerance) {
+
+ var len = points.length,
+ ArrayConstructor = typeof Uint8Array !== 'undefined' ? Uint8Array : Array,
+ markers = new ArrayConstructor(len);
+
+ markers[0] = markers[len - 1] = 1;
+
+ this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
+
+ var i,
+ newPoints = [];
+
+ for (i = 0; i < len; i++) {
+ if (markers[i]) {
+ newPoints.push(points[i]);
+ }
+ }
+
+ return newPoints;
+ },
+
+ _simplifyDPStep: function (points, markers, sqTolerance, first, last) {
+
+ var maxSqDist = 0,
+ index, i, sqDist;
+
+ for (i = first + 1; i <= last - 1; i++) {
+ sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);
+
+ if (sqDist > maxSqDist) {
+ index = i;
+ maxSqDist = sqDist;
+ }
+ }
+
+ if (maxSqDist > sqTolerance) {
+ markers[index] = 1;
+
+ this._simplifyDPStep(points, markers, sqTolerance, first, index);
+ this._simplifyDPStep(points, markers, sqTolerance, index, last);
+ }
+ },
+
+ // reduce points that are too close to each other to a single point
+ _reducePoints: function (points, sqTolerance) {
+ var reducedPoints = [points[0]];
+
+ for (var i = 1, prev = 0, len = points.length; i < len; i++) {
+ if (this._sqDist(points[i], points[prev]) > sqTolerance) {
+ reducedPoints.push(points[i]);
+ prev = i;
+ }
+ }
+ if (prev < len - 1) {
+ reducedPoints.push(points[len - 1]);
+ }
+ return reducedPoints;
+ },
+
+ /*jshint bitwise:false */ // temporarily allow bitwise oprations
+
+ // Cohen-Sutherland line clipping algorithm.
+ // Used to avoid rendering parts of a polyline that are not currently visible.
+
+ clipSegment: function (a, b, bounds, useLastCode) {
+ var min = bounds.min,
+ max = bounds.max;
+
+ var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),
+ codeB = this._getBitCode(b, bounds);
+
+ // save 2nd code to avoid calculating it on the next segment
+ this._lastCode = codeB;
+
+ while (true) {
+ // if a,b is inside the clip window (trivial accept)
+ if (!(codeA | codeB)) {
+ return [a, b];
+ // if a,b is outside the clip window (trivial reject)
+ } else if (codeA & codeB) {
+ return false;
+ // other cases
+ } else {
+ var codeOut = codeA || codeB,
+ p = this._getEdgeIntersection(a, b, codeOut, bounds),
+ newCode = this._getBitCode(p, bounds);
+
+ if (codeOut === codeA) {
+ a = p;
+ codeA = newCode;
+ } else {
+ b = p;
+ codeB = newCode;
+ }
+ }
+ }
+ },
+
+ _getEdgeIntersection: function (a, b, code, bounds) {
+ var dx = b.x - a.x,
+ dy = b.y - a.y,
+ min = bounds.min,
+ max = bounds.max;
+
+ if (code & 8) { // top
+ return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);
+ } else if (code & 4) { // bottom
+ return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);
+ } else if (code & 2) { // right
+ return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);
+ } else if (code & 1) { // left
+ return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);
+ }
+ },
+
+ _getBitCode: function (/*Point*/ p, bounds) {
+ var code = 0;
+
+ if (p.x < bounds.min.x) { // left
+ code |= 1;
+ } else if (p.x > bounds.max.x) { // right
+ code |= 2;
+ }
+ if (p.y < bounds.min.y) { // bottom
+ code |= 4;
+ } else if (p.y > bounds.max.y) { // top
+ code |= 8;
+ }
+
+ return code;
+ },
+
+ /*jshint bitwise:true */
+
+ // square distance (to avoid unnecessary Math.sqrt calls)
+ _sqDist: function (p1, p2) {
+ var dx = p2.x - p1.x,
+ dy = p2.y - p1.y;
+ return dx * dx + dy * dy;
+ },
+
+ // return closest point on segment or distance to that point
+ _sqClosestPointOnSegment: function (p, p1, p2, sqDist) {
+ var x = p1.x,
+ y = p1.y,
+ dx = p2.x - x,
+ dy = p2.y - y,
+ dot = dx * dx + dy * dy,
+ t;
+
+ if (dot > 0) {
+ t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
+
+ if (t > 1) {
+ x = p2.x;
+ y = p2.y;
+ } else if (t > 0) {
+ x += dx * t;
+ y += dy * t;
+ }
+ }
+
+ dx = p.x - x;
+ dy = p.y - y;
+
+ return sqDist ? dx * dx + dy * dy : new L.Point(x, y);
+ }
+};
+
+
+
+L.Polyline = L.Path.extend({
+ initialize: function (latlngs, options) {
+ L.Path.prototype.initialize.call(this, options);
+ this._latlngs = latlngs;
+ },
+
+ options: {
+ // how much to simplify the polyline on each zoom level
+ // more = better performance and smoother look, less = more accurate
+ smoothFactor: 1.0,
+ noClip: false,
+
+ updateOnMoveEnd: true
+ },
+
+ projectLatlngs: function () {
+ this._originalPoints = [];
+
+ for (var i = 0, len = this._latlngs.length; i < len; i++) {
+ this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
+ }
+ },
+
+ getPathString: function () {
+ for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
+ str += this._getPathPartStr(this._parts[i]);
+ }
+ return str;
+ },
+
+ getLatLngs: function () {
+ return this._latlngs;
+ },
+
+ setLatLngs: function (latlngs) {
+ this._latlngs = latlngs;
+ this._redraw();
+ return this;
+ },
+
+ addLatLng: function (latlng) {
+ this._latlngs.push(latlng);
+ this._redraw();
+ return this;
+ },
+
+ spliceLatLngs: function (index, howMany) {
+ var removed = [].splice.apply(this._latlngs, arguments);
+ this._redraw();
+ return removed;
+ },
+
+ closestLayerPoint: function (p) {
+ var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
+
+ for (var j = 0, jLen = parts.length; j < jLen; j++) {
+ var points = parts[j];
+ for (var i = 1, len = points.length; i < len; i++) {
+ p1 = points[i - 1];
+ p2 = points[i];
+ var point = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
+ if (point._sqDist < minDistance) {
+ minDistance = point._sqDist;
+ minPoint = point;
+ }
+ }
+ }
+ if (minPoint) {
+ minPoint.distance = Math.sqrt(minDistance);
+ }
+ return minPoint;
+ },
+
+ getBounds: function () {
+ var b = new L.LatLngBounds();
+ var latLngs = this.getLatLngs();
+ for (var i = 0, len = latLngs.length; i < len; i++) {
+ b.extend(latLngs[i]);
+ }
+ return b;
+ },
+
+ _getPathPartStr: function (points) {
+ var round = L.Path.VML;
+
+ for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
+ p = points[j];
+ if (round) {
+ p._round();
+ }
+ str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
+ }
+ return str;
+ },
+
+ _clipPoints: function () {
+ var points = this._originalPoints,
+ len = points.length,
+ i, k, segment;
+
+ if (this.options.noClip) {
+ this._parts = [points];
+ return;
+ }
+
+ this._parts = [];
+
+ var parts = this._parts,
+ vp = this._map._pathViewport,
+ lu = L.LineUtil;
+
+ for (i = 0, k = 0; i < len - 1; i++) {
+ segment = lu.clipSegment(points[i], points[i + 1], vp, i);
+ if (!segment) {
+ continue;
+ }
+
+ parts[k] = parts[k] || [];
+ parts[k].push(segment[0]);
+
+ // if segment goes out of screen, or it's the last one, it's the end of the line part
+ if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
+ parts[k].push(segment[1]);
+ k++;
+ }
+ }
+ },
+
+ // simplify each clipped part of the polyline
+ _simplifyPoints: function () {
+ var parts = this._parts,
+ lu = L.LineUtil;
+
+ for (var i = 0, len = parts.length; i < len; i++) {
+ parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
+ }
+ },
+
+ _updatePath: function () {
+ this._clipPoints();
+ this._simplifyPoints();
+
+ L.Path.prototype._updatePath.call(this);
+ }
+});
+
+
+/*
+ * L.PolyUtil contains utilify functions for polygons (clipping, etc.).
+ */
+
+/*jshint bitwise:false */ // allow bitwise oprations here
+
+L.PolyUtil = {};
+
+/*
+ * Sutherland-Hodgeman polygon clipping algorithm.
+ * Used to avoid rendering parts of a polygon that are not currently visible.
+ */
+L.PolyUtil.clipPolygon = function (points, bounds) {
+ var min = bounds.min,
+ max = bounds.max,
+ clippedPoints,
+ edges = [1, 4, 2, 8],
+ i, j, k,
+ a, b,
+ len, edge, p,
+ lu = L.LineUtil;
+
+ for (i = 0, len = points.length; i < len; i++) {
+ points[i]._code = lu._getBitCode(points[i], bounds);
+ }
+
+ // for each edge (left, bottom, right, top)
+ for (k = 0; k < 4; k++) {
+ edge = edges[k];
+ clippedPoints = [];
+
+ for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
+ a = points[i];
+ b = points[j];
+
+ // if a is inside the clip window
+ if (!(a._code & edge)) {
+ // if b is outside the clip window (a->b goes out of screen)
+ if (b._code & edge) {
+ p = lu._getEdgeIntersection(b, a, edge, bounds);
+ p._code = lu._getBitCode(p, bounds);
+ clippedPoints.push(p);
+ }
+ clippedPoints.push(a);
+
+ // else if b is inside the clip window (a->b enters the screen)
+ } else if (!(b._code & edge)) {
+ p = lu._getEdgeIntersection(b, a, edge, bounds);
+ p._code = lu._getBitCode(p, bounds);
+ clippedPoints.push(p);
+ }
+ }
+ points = clippedPoints;
+ }
+
+ return points;
+};
+
+/*jshint bitwise:true */
+
+
+/*
+ * L.Polygon is used to display polygons on a map.
+ */
+
+L.Polygon = L.Polyline.extend({
+ options: {
+ fill: true
+ },
+
+ initialize: function (latlngs, options) {
+ L.Polyline.prototype.initialize.call(this, latlngs, options);
+
+ if (latlngs && (latlngs[0] instanceof Array)) {
+ this._latlngs = latlngs[0];
+ this._holes = latlngs.slice(1);
+ }
+ },
+
+ projectLatlngs: function () {
+ L.Polyline.prototype.projectLatlngs.call(this);
+
+ // project polygon holes points
+ // TODO move this logic to Polyline to get rid of duplication
+ this._holePoints = [];
+
+ if (!this._holes) {
+ return;
+ }
+
+ for (var i = 0, len = this._holes.length, hole; i < len; i++) {
+ this._holePoints[i] = [];
+
+ for (var j = 0, len2 = this._holes[i].length; j < len2; j++) {
+ this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
+ }
+ }
+ },
+
+ _clipPoints: function () {
+ var points = this._originalPoints,
+ newParts = [];
+
+ this._parts = [points].concat(this._holePoints);
+
+ if (this.options.noClip) {
+ return;
+ }
+
+ for (var i = 0, len = this._parts.length; i < len; i++) {
+ var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
+ if (!clipped.length) {
+ continue;
+ }
+ newParts.push(clipped);
+ }
+
+ this._parts = newParts;
+ },
+
+ _getPathPartStr: function (points) {
+ var str = L.Polyline.prototype._getPathPartStr.call(this, points);
+ return str + (L.Browser.svg ? 'z' : 'x');
+ }
+});
+
+
+/*
+ * Contains L.MultiPolyline and L.MultiPolygon layers.
+ */
+
+(function () {
+ function createMulti(Klass) {
+ return L.FeatureGroup.extend({
+ initialize: function (latlngs, options) {
+ this._layers = {};
+ this._options = options;
+ this.setLatLngs(latlngs);
+ },
+
+ setLatLngs: function (latlngs) {
+ var i = 0, len = latlngs.length;
+
+ this._iterateLayers(function (layer) {
+ if (i < len) {
+ layer.setLatLngs(latlngs[i++]);
+ } else {
+ this.removeLayer(layer);
+ }
+ }, this);
+
+ while (i < len) {
+ this.addLayer(new Klass(latlngs[i++], this._options));
+ }
+ }
+ });
+ }
+
+ L.MultiPolyline = createMulti(L.Polyline);
+ L.MultiPolygon = createMulti(L.Polygon);
+}());
+
+
+/*
+ * L.Circle is a circle overlay (with a certain radius in meters).
+ */
+
+L.Circle = L.Path.extend({
+ initialize: function (latlng, radius, options) {
+ L.Path.prototype.initialize.call(this, options);
+
+ this._latlng = latlng;
+ this._mRadius = radius;
+ },
+
+ options: {
+ fill: true
+ },
+
+ setLatLng: function (latlng) {
+ this._latlng = latlng;
+ this._redraw();
+ return this;
+ },
+
+ setRadius: function (radius) {
+ this._mRadius = radius;
+ this._redraw();
+ return this;
+ },
+
+ projectLatlngs: function () {
+ var equatorLength = 40075017,
+ hLength = equatorLength * Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
+
+ var lngSpan = (this._mRadius / hLength) * 360,
+ latlng2 = new L.LatLng(this._latlng.lat, this._latlng.lng - lngSpan, true),
+ point2 = this._map.latLngToLayerPoint(latlng2);
+
+ this._point = this._map.latLngToLayerPoint(this._latlng);
+ this._radius = Math.round(this._point.x - point2.x);
+ },
+
+ getPathString: function () {
+ var p = this._point,
+ r = this._radius;
+
+ if (this._checkIfEmpty()) {
+ return '';
+ }
+
+ if (L.Browser.svg) {
+ return "M" + p.x + "," + (p.y - r) +
+ "A" + r + "," + r + ",0,1,1," +
+ (p.x - 0.1) + "," + (p.y - r) + " z";
+ } else {
+ p._round();
+ r = Math.round(r);
+ return "AL " + p.x + "," + p.y + " " + r + "," + r + " 0," + (65535 * 360);
+ }
+ },
+
+ _checkIfEmpty: function () {
+ var vp = this._map._pathViewport,
+ r = this._radius,
+ p = this._point;
+
+ return p.x - r > vp.max.x || p.y - r > vp.max.y ||
+ p.x + r < vp.min.x || p.y + r < vp.min.y;
+ }
+});
+
+
+/*
+ * L.CircleMarker is a circle overlay with a permanent pixel radius.
+ */
+
+L.CircleMarker = L.Circle.extend({
+ options: {
+ radius: 10,
+ weight: 2
+ },
+
+ initialize: function (latlng, options) {
+ L.Circle.prototype.initialize.call(this, latlng, null, options);
+ this._radius = this.options.radius;
+ },
+
+ projectLatlngs: function () {
+ this._point = this._map.latLngToLayerPoint(this._latlng);
+ },
+
+ setRadius: function (radius) {
+ this._radius = radius;
+ this._redraw();
+ return this;
+ }
+});
+
+
+/*
+ * Vector rendering for all browsers that support canvas.
+ */
+
+L.Browser.canvas = (function () {
+ return !!document.createElement('canvas').getContext;
+}());
+
+L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({
+ statics: {
+ //CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value
+ CANVAS: true,
+ SVG: false
+ },
+
+ options: {
+ updateOnMoveEnd: true
+ },
+
+ _initElements: function () {
+ this._map._initPathRoot();
+ this._ctx = this._map._canvasCtx;
+ },
+
+ _updateStyle: function () {
+ if (this.options.stroke) {
+ this._ctx.lineWidth = this.options.weight;
+ this._ctx.strokeStyle = this.options.color;
+ }
+ if (this.options.fill) {
+ this._ctx.fillStyle = this.options.fillColor || this.options.color;
+ }
+ },
+
+ _drawPath: function () {
+ var i, j, len, len2, point, drawMethod;
+
+ this._ctx.beginPath();
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ for (j = 0, len2 = this._parts[i].length; j < len2; j++) {
+ point = this._parts[i][j];
+ drawMethod = (j === 0 ? 'move' : 'line') + 'To';
+
+ this._ctx[drawMethod](point.x, point.y);
+ }
+ // TODO refactor ugly hack
+ if (this instanceof L.Polygon) {
+ this._ctx.closePath();
+ }
+ }
+ },
+
+ _checkIfEmpty: function () {
+ return !this._parts.length;
+ },
+
+ _updatePath: function () {
+ if (this._checkIfEmpty()) {
+ return;
+ }
+
+ this._drawPath();
+
+ this._ctx.save();
+
+ this._updateStyle();
+
+ var opacity = this.options.opacity,
+ fillOpacity = this.options.fillOpacity;
+
+ if (this.options.fill) {
+ if (fillOpacity < 1) {
+ this._ctx.globalAlpha = fillOpacity;
+ }
+ this._ctx.fill();
+ }
+
+ if (this.options.stroke) {
+ if (opacity < 1) {
+ this._ctx.globalAlpha = opacity;
+ }
+ this._ctx.stroke();
+ }
+
+ this._ctx.restore();
+
+ // TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
+ },
+
+ _initEvents: function () {
+ if (this.options.clickable) {
+ // TODO hand cursor
+ // TODO mouseover, mouseout, dblclick
+ this._map.on('click', this._onClick, this);
+ }
+ },
+
+ _onClick: function (e) {
+ if (this._containsPoint(e.layerPoint)) {
+ this.fire('click', e);
+ }
+ },
+
+ onRemove: function (map) {
+ map.off('viewreset', this._projectLatlngs, this);
+ map.off(this._updateTrigger, this._updatePath, this);
+ map.fire(this._updateTrigger);
+ }
+});
+
+L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {
+ _initPathRoot: function () {
+ var root = this._pathRoot,
+ ctx;
+
+ if (!root) {
+ root = this._pathRoot = document.createElement("canvas");
+ root.style.position = 'absolute';
+ ctx = this._canvasCtx = root.getContext('2d');
+
+ ctx.lineCap = "round";
+ ctx.lineJoin = "round";
+
+ this._panes.overlayPane.appendChild(root);
+
+ this.on('moveend', this._updateCanvasViewport);
+ this._updateCanvasViewport();
+ }
+ },
+
+ _updateCanvasViewport: function () {
+ this._updatePathViewport();
+
+ var vp = this._pathViewport,
+ min = vp.min,
+ size = vp.max.subtract(min),
+ root = this._pathRoot;
+
+ //TODO check if it's works properly on mobile webkit
+ L.DomUtil.setPosition(root, min);
+ root.width = size.x;
+ root.height = size.y;
+ root.getContext('2d').translate(-min.x, -min.y);
+ }
+});
+
+
+
+L.Polyline.include(!L.Path.CANVAS ? {} : {
+ _containsPoint: function (p, closed) {
+ var i, j, k, len, len2, dist, part,
+ w = this.options.weight / 2;
+
+ if (L.Browser.touch) {
+ w += 10; // polyline click tolerance on touch devices
+ }
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ part = this._parts[i];
+ for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
+ if (!closed && (j === 0)) {
+ continue;
+ }
+
+ dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);
+
+ if (dist <= w) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+});
+
+
+
+L.Polygon.include(!L.Path.CANVAS ? {} : {
+ _containsPoint: function (p) {
+ var inside = false,
+ part, p1, p2,
+ i, j, k,
+ len, len2;
+
+ // TODO optimization: check if within bounds first
+
+ if (L.Polyline.prototype._containsPoint.call(this, p, true)) {
+ // click on polygon border
+ return true;
+ }
+
+ // ray casting algorithm for detecting if point is in polygon
+
+ for (i = 0, len = this._parts.length; i < len; i++) {
+ part = this._parts[i];
+
+ for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
+ p1 = part[j];
+ p2 = part[k];
+
+ if (((p1.y > p.y) !== (p2.y > p.y)) &&
+ (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
+ inside = !inside;
+ }
+ }
+ }
+
+ return inside;
+ }
+});
+
+
+/*
+ * Circle canvas specific drawing parts.
+ */
+
+L.Circle.include(!L.Path.CANVAS ? {} : {
+ _drawPath: function () {
+ var p = this._point;
+ this._ctx.beginPath();
+ this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2);
+ },
+
+ _containsPoint: function (p) {
+ var center = this._point,
+ w2 = this.options.stroke ? this.options.weight / 2 : 0;
+
+ return (p.distanceTo(center) <= this._radius + w2);
+ }
+});
+
+
+
+L.GeoJSON = L.FeatureGroup.extend({
+ initialize: function (geojson, options) {
+ L.Util.setOptions(this, options);
+ this._geojson = geojson;
+ this._layers = {};
+
+ if (geojson) {
+ this.addGeoJSON(geojson);
+ }
+ },
+
+ addGeoJSON: function (geojson) {
+ if (geojson.features) {
+ for (var i = 0, len = geojson.features.length; i < len; i++) {
+ this.addGeoJSON(geojson.features[i]);
+ }
+ return;
+ }
+
+ var isFeature = (geojson.type === 'Feature'),
+ geometry = (isFeature ? geojson.geometry : geojson),
+ layer = L.GeoJSON.geometryToLayer(geometry, this.options.pointToLayer);
+
+ this.fire('featureparse', {
+ layer: layer,
+ properties: geojson.properties,
+ geometryType: geometry.type,
+ bbox: geojson.bbox,
+ id: geojson.id
+ });
+
+ this.addLayer(layer);
+ }
+});
+
+L.Util.extend(L.GeoJSON, {
+ geometryToLayer: function (geometry, pointToLayer) {
+ var coords = geometry.coordinates,
+ latlng, latlngs,
+ i, len,
+ layer,
+ layers = [];
+
+ switch (geometry.type) {
+ case 'Point':
+ latlng = this.coordsToLatLng(coords);
+ return pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);
+
+ case 'MultiPoint':
+ for (i = 0, len = coords.length; i < len; i++) {
+ latlng = this.coordsToLatLng(coords[i]);
+ layer = pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);
+ layers.push(layer);
+ }
+ return new L.FeatureGroup(layers);
+
+ case 'LineString':
+ latlngs = this.coordsToLatLngs(coords);
+ return new L.Polyline(latlngs);
+
+ case 'Polygon':
+ latlngs = this.coordsToLatLngs(coords, 1);
+ return new L.Polygon(latlngs);
+
+ case 'MultiLineString':
+ latlngs = this.coordsToLatLngs(coords, 1);
+ return new L.MultiPolyline(latlngs);
+
+ case "MultiPolygon":
+ latlngs = this.coordsToLatLngs(coords, 2);
+ return new L.MultiPolygon(latlngs);
+
+ case "GeometryCollection":
+ for (i = 0, len = geometry.geometries.length; i < len; i++) {
+ layer = this.geometryToLayer(geometry.geometries[i], pointToLayer);
+ layers.push(layer);
+ }
+ return new L.FeatureGroup(layers);
+
+ default:
+ throw new Error('Invalid GeoJSON object.');
+ }
+ },
+
+ coordsToLatLng: function (/*Array*/ coords, /*Boolean*/ reverse)/*: LatLng*/ {
+ var lat = parseFloat(coords[reverse ? 0 : 1]),
+ lng = parseFloat(coords[reverse ? 1 : 0]);
+ return new L.LatLng(lat, lng, true);
+ },
+
+ coordsToLatLngs: function (/*Array*/ coords, /*Number*/ levelsDeep, /*Boolean*/ reverse)/*: Array*/ {
+ var latlng, latlngs = [],
+ i, len = coords.length;
+
+ for (i = 0; i < len; i++) {
+ latlng = levelsDeep ?
+ this.coordsToLatLngs(coords[i], levelsDeep - 1, reverse) :
+ this.coordsToLatLng(coords[i], reverse);
+ latlngs.push(latlng);
+ }
+ return latlngs;
+ }
+});
+
+
+/*
+ * L.DomEvent contains functions for working with DOM events.
+ */
+
+L.DomEvent = {
+ /* inpired by John Resig, Dean Edwards and YUI addEvent implementations */
+ addListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn, /*Object*/ context) {
+ var id = L.Util.stamp(fn),
+ key = '_leaflet_' + type + id;
+
+ if (obj[key]) {
+ return;
+ }
+
+ var handler = function (e) {
+ return fn.call(context || obj, e || L.DomEvent._getEvent());
+ };
+
+ if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
+ this.addDoubleTapListener(obj, handler, id);
+ } else if ('addEventListener' in obj) {
+ if (type === 'mousewheel') {
+ obj.addEventListener('DOMMouseScroll', handler, false);
+ obj.addEventListener(type, handler, false);
+ } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+ var originalHandler = handler,
+ newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
+ handler = function (e) {
+ if (!L.DomEvent._checkMouse(obj, e)) {
+ return;
+ }
+ return originalHandler(e);
+ };
+ obj.addEventListener(newType, handler, false);
+ } else {
+ obj.addEventListener(type, handler, false);
+ }
+ } else if ('attachEvent' in obj) {
+ obj.attachEvent("on" + type, handler);
+ }
+
+ obj[key] = handler;
+ },
+
+ removeListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn) {
+ var id = L.Util.stamp(fn),
+ key = '_leaflet_' + type + id,
+ handler = obj[key];
+
+ if (!handler) {
+ return;
+ }
+
+ if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
+ this.removeDoubleTapListener(obj, id);
+ } else if ('removeEventListener' in obj) {
+ if (type === 'mousewheel') {
+ obj.removeEventListener('DOMMouseScroll', handler, false);
+ obj.removeEventListener(type, handler, false);
+ } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+ obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
+ } else {
+ obj.removeEventListener(type, handler, false);
+ }
+ } else if ('detachEvent' in obj) {
+ obj.detachEvent("on" + type, handler);
+ }
+ obj[key] = null;
+ },
+
+ _checkMouse: function (el, e) {
+ var related = e.relatedTarget;
+
+ if (!related) {
+ return true;
+ }
+
+ try {
+ while (related && (related !== el)) {
+ related = related.parentNode;
+ }
+ } catch (err) {
+ return false;
+ }
+
+ return (related !== el);
+ },
+
+ /*jshint noarg:false */ // evil magic for IE
+ _getEvent: function () {
+ var e = window.event;
+ if (!e) {
+ var caller = arguments.callee.caller;
+ while (caller) {
+ e = caller['arguments'][0];
+ if (e && window.Event === e.constructor) {
+ break;
+ }
+ caller = caller.caller;
+ }
+ }
+ return e;
+ },
+ /*jshint noarg:false */
+
+ stopPropagation: function (/*Event*/ e) {
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ } else {
+ e.cancelBubble = true;
+ }
+ },
+
+ disableClickPropagation: function (/*HTMLElement*/ el) {
+ L.DomEvent.addListener(el, L.Draggable.START, L.DomEvent.stopPropagation);
+ L.DomEvent.addListener(el, 'click', L.DomEvent.stopPropagation);
+ L.DomEvent.addListener(el, 'dblclick', L.DomEvent.stopPropagation);
+ },
+
+ preventDefault: function (/*Event*/ e) {
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ e.returnValue = false;
+ }
+ },
+
+ stop: function (e) {
+ L.DomEvent.preventDefault(e);
+ L.DomEvent.stopPropagation(e);
+ },
+
+ getMousePosition: function (e, container) {
+ var x = e.pageX ? e.pageX : e.clientX +
+ document.body.scrollLeft + document.documentElement.scrollLeft,
+ y = e.pageY ? e.pageY : e.clientY +
+ document.body.scrollTop + document.documentElement.scrollTop,
+ pos = new L.Point(x, y);
+ return (container ?
+ pos.subtract(L.DomUtil.getViewportOffset(container)) : pos);
+ },
+
+ getWheelDelta: function (e) {
+ var delta = 0;
+ if (e.wheelDelta) {
+ delta = e.wheelDelta / 120;
+ }
+ if (e.detail) {
+ delta = -e.detail / 3;
+ }
+ return delta;
+ }
+};
+
+
+
+/*
+ * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
+ */
+
+L.Draggable = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ statics: {
+ START: L.Browser.touch ? 'touchstart' : 'mousedown',
+ END: L.Browser.touch ? 'touchend' : 'mouseup',
+ MOVE: L.Browser.touch ? 'touchmove' : 'mousemove',
+ TAP_TOLERANCE: 15
+ },
+
+ initialize: function (element, dragStartTarget) {
+ this._element = element;
+ this._dragStartTarget = dragStartTarget || element;
+ },
+
+ enable: function () {
+ if (this._enabled) {
+ return;
+ }
+ L.DomEvent.addListener(this._dragStartTarget, L.Draggable.START, this._onDown, this);
+ this._enabled = true;
+ },
+
+ disable: function () {
+ if (!this._enabled) {
+ return;
+ }
+ L.DomEvent.removeListener(this._dragStartTarget, L.Draggable.START, this._onDown);
+ this._enabled = false;
+ },
+
+ _onDown: function (e) {
+ if ((!L.Browser.touch && e.shiftKey) || ((e.which !== 1) && (e.button !== 1) && !e.touches)) {
+ return;
+ }
+
+ if (e.touches && e.touches.length > 1) {
+ return;
+ }
+
+ var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
+ el = first.target;
+
+ L.DomEvent.preventDefault(e);
+
+ if (L.Browser.touch && el.tagName.toLowerCase() === 'a') {
+ el.className += ' leaflet-active';
+ }
+
+ this._moved = false;
+ if (this._moving) {
+ return;
+ }
+
+ if (!L.Browser.touch) {
+ L.DomUtil.disableTextSelection();
+ this._setMovingCursor();
+ }
+
+ this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
+ this._startPoint = new L.Point(first.clientX, first.clientY);
+
+ L.DomEvent.addListener(document, L.Draggable.MOVE, this._onMove, this);
+ L.DomEvent.addListener(document, L.Draggable.END, this._onUp, this);
+ },
+
+ _onMove: function (e) {
+ if (e.touches && e.touches.length > 1) {
+ return;
+ }
+
+ L.DomEvent.preventDefault(e);
+
+ var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e);
+
+ if (!this._moved) {
+ this.fire('dragstart');
+ this._moved = true;
+ }
+ this._moving = true;
+
+ var newPoint = new L.Point(first.clientX, first.clientY);
+ this._newPos = this._startPos.add(newPoint).subtract(this._startPoint);
+
+ L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);
+ },
+
+ _updatePosition: function () {
+ this.fire('predrag');
+ L.DomUtil.setPosition(this._element, this._newPos);
+ this.fire('drag');
+ },
+
+ _onUp: function (e) {
+ if (e.changedTouches) {
+ var first = e.changedTouches[0],
+ el = first.target,
+ dist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;
+
+ if (el.tagName.toLowerCase() === 'a') {
+ el.className = el.className.replace(' leaflet-active', '');
+ }
+
+ if (dist < L.Draggable.TAP_TOLERANCE) {
+ this._simulateEvent('click', first);
+ }
+ }
+
+ if (!L.Browser.touch) {
+ L.DomUtil.enableTextSelection();
+ this._restoreCursor();
+ }
+
+ L.DomEvent.removeListener(document, L.Draggable.MOVE, this._onMove);
+ L.DomEvent.removeListener(document, L.Draggable.END, this._onUp);
+
+ if (this._moved) {
+ this.fire('dragend');
+ }
+ this._moving = false;
+ },
+
+ _setMovingCursor: function () {
+ this._bodyCursor = document.body.style.cursor;
+ document.body.style.cursor = 'move';
+ },
+
+ _restoreCursor: function () {
+ document.body.style.cursor = this._bodyCursor;
+ },
+
+ _simulateEvent: function (type, e) {
+ var simulatedEvent = document.createEvent('MouseEvents');
+
+ simulatedEvent.initMouseEvent(
+ type, true, true, window, 1,
+ e.screenX, e.screenY,
+ e.clientX, e.clientY,
+ false, false, false, false, 0, null);
+
+ e.target.dispatchEvent(simulatedEvent);
+ }
+});
+
+
+/*
+ * L.Handler classes are used internally to inject interaction features to classes like Map and Marker.
+ */
+
+L.Handler = L.Class.extend({
+ initialize: function (map) {
+ this._map = map;
+ },
+
+ enable: function () {
+ if (this._enabled) {
+ return;
+ }
+ this._enabled = true;
+ this.addHooks();
+ },
+
+ disable: function () {
+ if (!this._enabled) {
+ return;
+ }
+ this._enabled = false;
+ this.removeHooks();
+ },
+
+ enabled: function () {
+ return !!this._enabled;
+ }
+});
+
+
+/*
+ * L.Handler.MapDrag is used internally by L.Map to make the map draggable.
+ */
+
+L.Map.Drag = L.Handler.extend({
+ addHooks: function () {
+ if (!this._draggable) {
+ this._draggable = new L.Draggable(this._map._mapPane, this._map._container);
+
+ this._draggable
+ .on('dragstart', this._onDragStart, this)
+ .on('drag', this._onDrag, this)
+ .on('dragend', this._onDragEnd, this);
+
+ var options = this._map.options;
+
+ if (options.worldCopyJump && !options.continuousWorld) {
+ this._draggable.on('predrag', this._onPreDrag, this);
+ this._map.on('viewreset', this._onViewReset, this);
+ }
+ }
+ this._draggable.enable();
+ },
+
+ removeHooks: function () {
+ this._draggable.disable();
+ },
+
+ moved: function () {
+ return this._draggable && this._draggable._moved;
+ },
+
+ _onDragStart: function () {
+ this._map
+ .fire('movestart')
+ .fire('dragstart');
+ },
+
+ _onDrag: function () {
+ this._map
+ .fire('move')
+ .fire('drag');
+ },
+
+ _onViewReset: function () {
+ var pxCenter = this._map.getSize().divideBy(2),
+ pxWorldCenter = this._map.latLngToLayerPoint(new L.LatLng(0, 0));
+
+ this._initialWorldOffset = pxWorldCenter.subtract(pxCenter);
+ },
+
+ _onPreDrag: function () {
+ var map = this._map,
+ worldWidth = map.options.scale(map.getZoom()),
+ halfWidth = Math.round(worldWidth / 2),
+ dx = this._initialWorldOffset.x,
+ x = this._draggable._newPos.x,
+ newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
+ newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
+ newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
+
+ this._draggable._newPos.x = newX;
+ },
+
+ _onDragEnd: function () {
+ var map = this._map;
+
+ map
+ .fire('moveend')
+ .fire('dragend');
+
+ if (map.options.maxBounds) {
+ // TODO predrag validation instead of animation
+ L.Util.requestAnimFrame(this._panInsideMaxBounds, map, true, map._container);
+ }
+ },
+
+ _panInsideMaxBounds: function () {
+ this.panInsideBounds(this.options.maxBounds);
+ }
+});
+
+
+/*
+ * L.Handler.DoubleClickZoom is used internally by L.Map to add double-click zooming.
+ */
+
+L.Map.DoubleClickZoom = L.Handler.extend({
+ addHooks: function () {
+ this._map.on('dblclick', this._onDoubleClick);
+ // TODO remove 3d argument?
+ },
+
+ removeHooks: function () {
+ this._map.off('dblclick', this._onDoubleClick);
+ },
+
+ _onDoubleClick: function (e) {
+ this.setView(e.latlng, this._zoom + 1);
+ }
+});
+
+
+/*
+ * L.Handler.ScrollWheelZoom is used internally by L.Map to enable mouse scroll wheel zooming on the map.
+ */
+
+L.Map.ScrollWheelZoom = L.Handler.extend({
+ addHooks: function () {
+ L.DomEvent.addListener(this._map._container, 'mousewheel', this._onWheelScroll, this);
+ this._delta = 0;
+ },
+
+ removeHooks: function () {
+ L.DomEvent.removeListener(this._map._container, 'mousewheel', this._onWheelScroll);
+ },
+
+ _onWheelScroll: function (e) {
+ var delta = L.DomEvent.getWheelDelta(e);
+ this._delta += delta;
+ this._lastMousePos = this._map.mouseEventToContainerPoint(e);
+
+ clearTimeout(this._timer);
+ this._timer = setTimeout(L.Util.bind(this._performZoom, this), 50);
+
+ L.DomEvent.preventDefault(e);
+ },
+
+ _performZoom: function () {
+ var map = this._map,
+ delta = Math.round(this._delta),
+ zoom = map.getZoom();
+
+ delta = Math.max(Math.min(delta, 4), -4);
+ delta = map._limitZoom(zoom + delta) - zoom;
+
+ this._delta = 0;
+
+ if (!delta) {
+ return;
+ }
+
+ var newCenter = this._getCenterForScrollWheelZoom(this._lastMousePos, delta),
+ newZoom = zoom + delta;
+
+ map.setView(newCenter, newZoom);
+ },
+
+ _getCenterForScrollWheelZoom: function (mousePos, delta) {
+ var map = this._map,
+ centerPoint = map.getPixelBounds().getCenter(),
+ viewHalf = map.getSize().divideBy(2),
+ centerOffset = mousePos.subtract(viewHalf).multiplyBy(1 - Math.pow(2, -delta)),
+ newCenterPoint = centerPoint.add(centerOffset);
+
+ return map.unproject(newCenterPoint, map._zoom, true);
+ }
+});
+
+
+L.Util.extend(L.DomEvent, {
+ // inspired by Zepto touch code by Thomas Fuchs
+ addDoubleTapListener: function (obj, handler, id) {
+ var last,
+ doubleTap = false,
+ delay = 250,
+ touch,
+ pre = '_leaflet_',
+ touchstart = 'touchstart',
+ touchend = 'touchend';
+
+ function onTouchStart(e) {
+ if (e.touches.length !== 1) {
+ return;
+ }
+
+ var now = Date.now(),
+ delta = now - (last || now);
+
+ touch = e.touches[0];
+ doubleTap = (delta > 0 && delta <= delay);
+ last = now;
+ }
+ function onTouchEnd(e) {
+ if (doubleTap) {
+ touch.type = 'dblclick';
+ handler(touch);
+ last = null;
+ }
+ }
+ obj[pre + touchstart + id] = onTouchStart;
+ obj[pre + touchend + id] = onTouchEnd;
+
+ obj.addEventListener(touchstart, onTouchStart, false);
+ obj.addEventListener(touchend, onTouchEnd, false);
+ },
+
+ removeDoubleTapListener: function (obj, id) {
+ var pre = '_leaflet_';
+ obj.removeEventListener(obj, obj[pre + 'touchstart' + id], false);
+ obj.removeEventListener(obj, obj[pre + 'touchend' + id], false);
+ }
+});
+
+
+/*
+ * L.Handler.TouchZoom is used internally by L.Map to add touch-zooming on Webkit-powered mobile browsers.
+ */
+
+L.Map.TouchZoom = L.Handler.extend({
+ addHooks: function () {
+ L.DomEvent.addListener(this._map._container, 'touchstart', this._onTouchStart, this);
+ },
+
+ removeHooks: function () {
+ L.DomEvent.removeListener(this._map._container, 'touchstart', this._onTouchStart, this);
+ },
+
+ _onTouchStart: function (e) {
+ if (!e.touches || e.touches.length !== 2 || this._map._animatingZoom) {
+ return;
+ }
+
+ var p1 = this._map.mouseEventToLayerPoint(e.touches[0]),
+ p2 = this._map.mouseEventToLayerPoint(e.touches[1]),
+ viewCenter = this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));
+
+ this._startCenter = p1.add(p2).divideBy(2, true);
+ this._startDist = p1.distanceTo(p2);
+ //this._startTransform = this._map._mapPane.style.webkitTransform;
+
+ this._moved = false;
+ this._zooming = true;
+
+ this._centerOffset = viewCenter.subtract(this._startCenter);
+
+ L.DomEvent.addListener(document, 'touchmove', this._onTouchMove, this);
+ L.DomEvent.addListener(document, 'touchend', this._onTouchEnd, this);
+
+ L.DomEvent.preventDefault(e);
+ },
+
+ _onTouchMove: function (e) {
+ if (!e.touches || e.touches.length !== 2) {
+ return;
+ }
+
+ if (!this._moved) {
+ this._map._mapPane.className += ' leaflet-zoom-anim';
+
+ this._map
+ .fire('zoomstart')
+ .fire('movestart')
+ ._prepareTileBg();
+
+ this._moved = true;
+ }
+
+ var p1 = this._map.mouseEventToLayerPoint(e.touches[0]),
+ p2 = this._map.mouseEventToLayerPoint(e.touches[1]);
+
+ this._scale = p1.distanceTo(p2) / this._startDist;
+ this._delta = p1.add(p2).divideBy(2, true).subtract(this._startCenter);
+
+ // Used 2 translates instead of transform-origin because of a very strange bug -
+ // it didn't count the origin on the first touch-zoom but worked correctly afterwards
+
+ this._map._tileBg.style.webkitTransform = [
+ L.DomUtil.getTranslateString(this._delta),
+ L.DomUtil.getScaleString(this._scale, this._startCenter)
+ ].join(" ");
+
+ L.DomEvent.preventDefault(e);
+ },
+
+ _onTouchEnd: function (e) {
+ if (!this._moved || !this._zooming) {
+ return;
+ }
+ this._zooming = false;
+
+ var oldZoom = this._map.getZoom(),
+ floatZoomDelta = Math.log(this._scale) / Math.LN2,
+ roundZoomDelta = (floatZoomDelta > 0 ? Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)),
+ zoom = this._map._limitZoom(oldZoom + roundZoomDelta),
+ zoomDelta = zoom - oldZoom,
+ centerOffset = this._centerOffset.subtract(this._delta).divideBy(this._scale),
+ centerPoint = this._map.getPixelOrigin().add(this._startCenter).add(centerOffset),
+ center = this._map.unproject(centerPoint);
+
+ L.DomEvent.removeListener(document, 'touchmove', this._onTouchMove);
+ L.DomEvent.removeListener(document, 'touchend', this._onTouchEnd);
+
+ var finalScale = Math.pow(2, zoomDelta);
+
+ this._map._runAnimation(center, zoom, finalScale / this._scale, this._startCenter.add(centerOffset));
+ }
+});
+
+
+/*
+ * L.Handler.ShiftDragZoom is used internally by L.Map to add shift-drag zoom (zoom to a selected bounding box).
+ */
+
+L.Map.BoxZoom = L.Handler.extend({
+ initialize: function (map) {
+ this._map = map;
+ this._container = map._container;
+ this._pane = map._panes.overlayPane;
+ },
+
+ addHooks: function () {
+ L.DomEvent.addListener(this._container, 'mousedown', this._onMouseDown, this);
+ },
+
+ removeHooks: function () {
+ L.DomEvent.removeListener(this._container, 'mousedown', this._onMouseDown);
+ },
+
+ _onMouseDown: function (e) {
+ if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) {
+ return false;
+ }
+
+ L.DomUtil.disableTextSelection();
+
+ this._startLayerPoint = this._map.mouseEventToLayerPoint(e);
+
+ this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._pane);
+ L.DomUtil.setPosition(this._box, this._startLayerPoint);
+
+ //TODO move cursor to styles
+ this._container.style.cursor = 'crosshair';
+
+ L.DomEvent.addListener(document, 'mousemove', this._onMouseMove, this);
+ L.DomEvent.addListener(document, 'mouseup', this._onMouseUp, this);
+
+ L.DomEvent.preventDefault(e);
+ },
+
+ _onMouseMove: function (e) {
+ var layerPoint = this._map.mouseEventToLayerPoint(e),
+ dx = layerPoint.x - this._startLayerPoint.x,
+ dy = layerPoint.y - this._startLayerPoint.y;
+
+ var newX = Math.min(layerPoint.x, this._startLayerPoint.x),
+ newY = Math.min(layerPoint.y, this._startLayerPoint.y),
+ newPos = new L.Point(newX, newY);
+
+ L.DomUtil.setPosition(this._box, newPos);
+
+ this._box.style.width = (Math.abs(dx) - 4) + 'px';
+ this._box.style.height = (Math.abs(dy) - 4) + 'px';
+ },
+
+ _onMouseUp: function (e) {
+ this._pane.removeChild(this._box);
+ this._container.style.cursor = '';
+
+ L.DomUtil.enableTextSelection();
+
+ L.DomEvent.removeListener(document, 'mousemove', this._onMouseMove);
+ L.DomEvent.removeListener(document, 'mouseup', this._onMouseUp);
+
+ var layerPoint = this._map.mouseEventToLayerPoint(e);
+
+ var bounds = new L.LatLngBounds(
+ this._map.layerPointToLatLng(this._startLayerPoint),
+ this._map.layerPointToLatLng(layerPoint));
+
+ this._map.fitBounds(bounds);
+ }
+});
+
+
+/*
+ * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
+ */
+
+L.Handler.MarkerDrag = L.Handler.extend({
+ initialize: function (marker) {
+ this._marker = marker;
+ },
+
+ addHooks: function () {
+ var icon = this._marker._icon;
+ if (!this._draggable) {
+ this._draggable = new L.Draggable(icon, icon);
+
+ this._draggable
+ .on('dragstart', this._onDragStart, this)
+ .on('drag', this._onDrag, this)
+ .on('dragend', this._onDragEnd, this);
+ }
+ this._draggable.enable();
+ },
+
+ removeHooks: function () {
+ this._draggable.disable();
+ },
+
+ moved: function () {
+ return this._draggable && this._draggable._moved;
+ },
+
+ _onDragStart: function (e) {
+ this._marker
+ .closePopup()
+ .fire('movestart')
+ .fire('dragstart');
+ },
+
+ _onDrag: function (e) {
+ // update shadow position
+ var iconPos = L.DomUtil.getPosition(this._marker._icon);
+ if (this._marker._shadow) {
+ L.DomUtil.setPosition(this._marker._shadow, iconPos);
+ }
+
+ this._marker._latlng = this._marker._map.layerPointToLatLng(iconPos);
+
+ this._marker
+ .fire('move')
+ .fire('drag');
+ },
+
+ _onDragEnd: function () {
+ this._marker
+ .fire('moveend')
+ .fire('dragend');
+ }
+});
+
+
+
+L.Control = {};
+
+L.Control.Position = {
+ TOP_LEFT: 'topLeft',
+ TOP_RIGHT: 'topRight',
+ BOTTOM_LEFT: 'bottomLeft',
+ BOTTOM_RIGHT: 'bottomRight'
+};
+
+
+L.Map.include({
+ addControl: function (control) {
+ control.onAdd(this);
+
+ var pos = control.getPosition(),
+ corner = this._controlCorners[pos],
+ container = control.getContainer();
+
+ L.DomUtil.addClass(container, 'leaflet-control');
+
+ if (pos.indexOf('bottom') !== -1) {
+ corner.insertBefore(container, corner.firstChild);
+ } else {
+ corner.appendChild(container);
+ }
+ return this;
+ },
+
+ removeControl: function (control) {
+ var pos = control.getPosition(),
+ corner = this._controlCorners[pos],
+ container = control.getContainer();
+
+ corner.removeChild(container);
+
+ if (control.onRemove) {
+ control.onRemove(this);
+ }
+ return this;
+ },
+
+ _initControlPos: function () {
+ var corners = this._controlCorners = {},
+ classPart = 'leaflet-',
+ top = classPart + 'top',
+ bottom = classPart + 'bottom',
+ left = classPart + 'left',
+ right = classPart + 'right',
+ controlContainer = L.DomUtil.create('div', classPart + 'control-container', this._container);
+
+ if (L.Browser.touch) {
+ controlContainer.className += ' ' + classPart + 'big-buttons';
+ }
+
+ corners.topLeft = L.DomUtil.create('div', top + ' ' + left, controlContainer);
+ corners.topRight = L.DomUtil.create('div', top + ' ' + right, controlContainer);
+ corners.bottomLeft = L.DomUtil.create('div', bottom + ' ' + left, controlContainer);
+ corners.bottomRight = L.DomUtil.create('div', bottom + ' ' + right, controlContainer);
+ }
+});
+
+
+
+L.Control.Zoom = L.Class.extend({
+ onAdd: function (map) {
+ this._map = map;
+ this._container = L.DomUtil.create('div', 'leaflet-control-zoom');
+
+ this._zoomInButton = this._createButton(
+ 'Zoom in', 'leaflet-control-zoom-in', this._map.zoomIn, this._map);
+ this._zoomOutButton = this._createButton(
+ 'Zoom out', 'leaflet-control-zoom-out', this._map.zoomOut, this._map);
+
+ this._container.appendChild(this._zoomInButton);
+ this._container.appendChild(this._zoomOutButton);
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+ getPosition: function () {
+ return L.Control.Position.TOP_LEFT;
+ },
+
+ _createButton: function (title, className, fn, context) {
+ var link = document.createElement('a');
+ link.href = '#';
+ link.title = title;
+ link.className = className;
+
+ L.DomEvent.disableClickPropagation(link);
+ L.DomEvent.addListener(link, 'click', L.DomEvent.preventDefault);
+ L.DomEvent.addListener(link, 'click', fn, context);
+
+ return link;
+ }
+});
+
+
+L.Control.Attribution = L.Class.extend({
+ initialize: function (prefix) {
+ this._prefix = prefix || 'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>';
+ this._attributions = {};
+ },
+
+ onAdd: function (map) {
+ this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
+ L.DomEvent.disableClickPropagation(this._container);
+ this._map = map;
+ this._update();
+ },
+
+ getPosition: function () {
+ return L.Control.Position.BOTTOM_RIGHT;
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+ setPrefix: function (prefix) {
+ this._prefix = prefix;
+ this._update();
+ },
+
+ addAttribution: function (text) {
+ if (!text) {
+ return;
+ }
+ this._attributions[text] = true;
+ this._update();
+ },
+
+ removeAttribution: function (text) {
+ if (!text) {
+ return;
+ }
+ delete this._attributions[text];
+ this._update();
+ },
+
+ _update: function () {
+ if (!this._map) {
+ return;
+ }
+
+ var attribs = [];
+
+ for (var i in this._attributions) {
+ if (this._attributions.hasOwnProperty(i)) {
+ attribs.push(i);
+ }
+ }
+
+ var prefixAndAttribs = [];
+ if (this._prefix) {
+ prefixAndAttribs.push(this._prefix);
+ }
+ if (attribs.length) {
+ prefixAndAttribs.push(attribs.join(', '));
+ }
+
+ this._container.innerHTML = prefixAndAttribs.join(' — ');
+ }
+});
+
+
+
+L.Control.Layers = L.Class.extend({
+ options: {
+ collapsed: !L.Browser.touch
+ },
+
+ initialize: function (baseLayers, overlays, options) {
+ L.Util.setOptions(this, options);
+
+ this._layers = {};
+
+ for (var i in baseLayers) {
+ if (baseLayers.hasOwnProperty(i)) {
+ this._addLayer(baseLayers[i], i);
+ }
+ }
+
+ for (i in overlays) {
+ if (overlays.hasOwnProperty(i)) {
+ this._addLayer(overlays[i], i, true);
+ }
+ }
+ },
+
+ onAdd: function (map) {
+ this._map = map;
+
+ this._initLayout();
+ this._update();
+ },
+
+ getContainer: function () {
+ return this._container;
+ },
+
+ getPosition: function () {
+ return L.Control.Position.TOP_RIGHT;
+ },
+
+ addBaseLayer: function (layer, name) {
+ this._addLayer(layer, name);
+ this._update();
+ return this;
+ },
+
+ addOverlay: function (layer, name) {
+ this._addLayer(layer, name, true);
+ this._update();
+ return this;
+ },
+
+ removeLayer: function (layer) {
+ var id = L.Util.stamp(layer);
+ delete this._layers[id];
+ this._update();
+ return this;
+ },
+
+ _initLayout: function () {
+ this._container = L.DomUtil.create('div', 'leaflet-control-layers');
+ L.DomEvent.disableClickPropagation(this._container);
+
+ this._form = L.DomUtil.create('form', 'leaflet-control-layers-list');
+
+ if (this.options.collapsed) {
+ L.DomEvent.addListener(this._container, 'mouseover', this._expand, this);
+ L.DomEvent.addListener(this._container, 'mouseout', this._collapse, this);
+
+ var link = this._layersLink = L.DomUtil.create('a', 'leaflet-control-layers-toggle');
+ link.href = '#';
+ link.title = 'Layers';
+
+ L.DomEvent.addListener(link, 'focus', this._expand, this);
+ L.DomEvent.addListener(this._map, L.Draggable.START, this._collapse, this);
+ // TODO keyboard accessibility
+
+ this._container.appendChild(link);
+ } else {
+ this._expand();
+ }
+
+ this._baseLayersList = L.DomUtil.create('div', 'leaflet-control-layers-base', this._form);
+ this._separator = L.DomUtil.create('div', 'leaflet-control-layers-separator', this._form);
+ this._overlaysList = L.DomUtil.create('div', 'leaflet-control-layers-overlays', this._form);
+
+ this._container.appendChild(this._form);
+ },
+
+ _addLayer: function (layer, name, overlay) {
+ var id = L.Util.stamp(layer);
+ this._layers[id] = {
+ layer: layer,
+ name: name,
+ overlay: overlay
+ };
+ },
+
+ _update: function () {
+ if (!this._container) {
+ return;
+ }
+
+ this._baseLayersList.innerHTML = '';
+ this._overlaysList.innerHTML = '';
+
+ var baseLayersPresent = false,
+ overlaysPresent = false;
+
+ for (var i in this._layers) {
+ if (this._layers.hasOwnProperty(i)) {
+ var obj = this._layers[i];
+ this._addItem(obj);
+ overlaysPresent = overlaysPresent || obj.overlay;
+ baseLayersPresent = baseLayersPresent || !obj.overlay;
+ }
+ }
+
+ this._separator.style.display = (overlaysPresent && baseLayersPresent ? '' : 'none');
+ },
+
+ _addItem: function (obj, onclick) {
+ var label = document.createElement('label');
+
+ var input = document.createElement('input');
+ if (!obj.overlay) {
+ input.name = 'leaflet-base-layers';
+ }
+ input.type = obj.overlay ? 'checkbox' : 'radio';
+ input.checked = this._map.hasLayer(obj.layer);
+ input.layerId = L.Util.stamp(obj.layer);
+
+ L.DomEvent.addListener(input, 'click', this._onInputClick, this);
+
+ var name = document.createTextNode(' ' + obj.name);
+
+ label.appendChild(input);
+ label.appendChild(name);
+
+ var container = obj.overlay ? this._overlaysList : this._baseLayersList;
+ container.appendChild(label);
+ },
+
+ _onInputClick: function () {
+ var i, input, obj,
+ inputs = this._form.getElementsByTagName('input'),
+ inputsLen = inputs.length;
+
+ for (i = 0; i < inputsLen; i++) {
+ input = inputs[i];
+ obj = this._layers[input.layerId];
+
+ if (input.checked) {
+ this._map.addLayer(obj.layer, !obj.overlay);
+ } else {
+ this._map.removeLayer(obj.layer);
+ }
+ }
+ },
+
+ _expand: function () {
+ L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
+ },
+
+ _collapse: function () {
+ this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
+ }
+});
+
+
+L.Transition = L.Class.extend({
+ includes: L.Mixin.Events,
+
+ statics: {
+ CUSTOM_PROPS_SETTERS: {
+ position: L.DomUtil.setPosition
+ //TODO transform custom attr
+ },
+
+ implemented: function () {
+ return L.Transition.NATIVE || L.Transition.TIMER;
+ }
+ },
+
+ options: {
+ easing: 'ease',
+ duration: 0.5
+ },
+
+ _setProperty: function (prop, value) {
+ var setters = L.Transition.CUSTOM_PROPS_SETTERS;
+ if (prop in setters) {
+ setters[prop](this._el, value);
+ } else {
+ this._el.style[prop] = value;
+ }
+ }
+});
+
+
+/*
+ * L.Transition native implementation that powers Leaflet animation
+ * in browsers that support CSS3 Transitions
+ */
+
+L.Transition = L.Transition.extend({
+ statics: (function () {
+ var transition = L.DomUtil.TRANSITION,
+ transitionEnd = (transition === 'webkitTransition' || transition === 'OTransition' ?
+ transition + 'End' : 'transitionend');
+
+ return {
+ NATIVE: !!transition,
+
+ TRANSITION: transition,
+ PROPERTY: transition + 'Property',
+ DURATION: transition + 'Duration',
+ EASING: transition + 'TimingFunction',
+ END: transitionEnd,
+
+ // transition-property value to use with each particular custom property
+ CUSTOM_PROPS_PROPERTIES: {
+ position: L.Browser.webkit ? L.DomUtil.TRANSFORM : 'top, left'
+ }
+ };
+ }()),
+
+ options: {
+ fakeStepInterval: 100
+ },
+
+ initialize: function (/*HTMLElement*/ el, /*Object*/ options) {
+ this._el = el;
+ L.Util.setOptions(this, options);
+
+ L.DomEvent.addListener(el, L.Transition.END, this._onTransitionEnd, this);
+ this._onFakeStep = L.Util.bind(this._onFakeStep, this);
+ },
+
+ run: function (/*Object*/ props) {
+ var prop,
+ propsList = [],
+ customProp = L.Transition.CUSTOM_PROPS_PROPERTIES;
+
+ for (prop in props) {
+ if (props.hasOwnProperty(prop)) {
+ prop = customProp[prop] ? customProp[prop] : prop;
+ prop = this._dasherize(prop);
+ propsList.push(prop);
+ }
+ }
+
+ this._el.style[L.Transition.DURATION] = this.options.duration + 's';
+ this._el.style[L.Transition.EASING] = this.options.easing;
+ this._el.style[L.Transition.PROPERTY] = propsList.join(', ');
+
+ for (prop in props) {
+ if (props.hasOwnProperty(prop)) {
+ this._setProperty(prop, props[prop]);
+ }
+ }
+
+ this._inProgress = true;
+
+ this.fire('start');
+
+ if (L.Transition.NATIVE) {
+ clearInterval(this._timer);
+ this._timer = setInterval(this._onFakeStep, this.options.fakeStepInterval);
+ } else {
+ this._onTransitionEnd();
+ }
+ },
+
+ _dasherize: (function () {
+ var re = /([A-Z])/g;
+
+ function replaceFn(w) {
+ return '-' + w.toLowerCase();
+ }
+
+ return function (str) {
+ return str.replace(re, replaceFn);
+ };
+ }()),
+
+ _onFakeStep: function () {
+ this.fire('step');
+ },
+
+ _onTransitionEnd: function () {
+ if (this._inProgress) {
+ this._inProgress = false;
+ clearInterval(this._timer);
+
+ this._el.style[L.Transition.PROPERTY] = 'none';
+
+ this.fire('step');
+ this.fire('end');
+ }
+ }
+});
+
+
+/*
+ * L.Transition fallback implementation that powers Leaflet animation
+ * in browsers that don't support CSS3 Transitions
+ */
+
+L.Transition = L.Transition.NATIVE ? L.Transition : L.Transition.extend({
+ statics: {
+ getTime: Date.now || function () {
+ return +new Date();
+ },
+
+ TIMER: true,
+
+ EASINGS: {
+ 'ease': [0.25, 0.1, 0.25, 1.0],
+ 'linear': [0.0, 0.0, 1.0, 1.0],
+ 'ease-in': [0.42, 0, 1.0, 1.0],
+ 'ease-out': [0, 0, 0.58, 1.0],
+ 'ease-in-out': [0.42, 0, 0.58, 1.0]
+ },
+
+ CUSTOM_PROPS_GETTERS: {
+ position: L.DomUtil.getPosition
+ },
+
+ //used to get units from strings like "10.5px" (->px)
+ UNIT_RE: /^[\d\.]+(\D*)$/
+ },
+
+ options: {
+ fps: 50
+ },
+
+ initialize: function (el, options) {
+ this._el = el;
+ L.Util.extend(this.options, options);
+
+ var easings = L.Transition.EASINGS[this.options.easing] || L.Transition.EASINGS.ease;
+
+ this._p1 = new L.Point(0, 0);
+ this._p2 = new L.Point(easings[0], easings[1]);
+ this._p3 = new L.Point(easings[2], easings[3]);
+ this._p4 = new L.Point(1, 1);
+
+ this._step = L.Util.bind(this._step, this);
+ this._interval = Math.round(1000 / this.options.fps);
+ },
+
+ run: function (props) {
+ this._props = {};
+
+ var getters = L.Transition.CUSTOM_PROPS_GETTERS,
+ re = L.Transition.UNIT_RE;
+
+ this.fire('start');
+
+ for (var prop in props) {
+ if (props.hasOwnProperty(prop)) {
+ var p = {};
+ if (prop in getters) {
+ p.from = getters[prop](this._el);
+ } else {
+ var matches = this._el.style[prop].match(re);
+ p.from = parseFloat(matches[0]);
+ p.unit = matches[1];
+ }
+ p.to = props[prop];
+ this._props[prop] = p;
+ }
+ }
+
+ clearInterval(this._timer);
+ this._timer = setInterval(this._step, this._interval);
+ this._startTime = L.Transition.getTime();
+ },
+
+ _step: function () {
+ var time = L.Transition.getTime(),
+ elapsed = time - this._startTime,
+ duration = this.options.duration * 1000;
+
+ if (elapsed < duration) {
+ this._runFrame(this._cubicBezier(elapsed / duration));
+ } else {
+ this._runFrame(1);
+ this._complete();
+ }
+ },
+
+ _runFrame: function (percentComplete) {
+ var setters = L.Transition.CUSTOM_PROPS_SETTERS,
+ prop, p, value;
+
+ for (prop in this._props) {
+ if (this._props.hasOwnProperty(prop)) {
+ p = this._props[prop];
+ if (prop in setters) {
+ value = p.to.subtract(p.from).multiplyBy(percentComplete).add(p.from);
+ setters[prop](this._el, value);
+ } else {
+ this._el.style[prop] =
+ ((p.to - p.from) * percentComplete + p.from) + p.unit;
+ }
+ }
+ }
+ this.fire('step');
+ },
+
+ _complete: function () {
+ clearInterval(this._timer);
+ this.fire('end');
+ },
+
+ _cubicBezier: function (t) {
+ var a = Math.pow(1 - t, 3),
+ b = 3 * Math.pow(1 - t, 2) * t,
+ c = 3 * (1 - t) * Math.pow(t, 2),
+ d = Math.pow(t, 3),
+ p1 = this._p1.multiplyBy(a),
+ p2 = this._p2.multiplyBy(b),
+ p3 = this._p3.multiplyBy(c),
+ p4 = this._p4.multiplyBy(d);
+
+ return p1.add(p2).add(p3).add(p4).y;
+ }
+});
+
+
+L.Map.include(!(L.Transition && L.Transition.implemented()) ? {} : {
+ setView: function (center, zoom, forceReset) {
+ zoom = this._limitZoom(zoom);
+ var zoomChanged = (this._zoom !== zoom);
+
+ if (this._loaded && !forceReset && this._layers) {
+ // difference between the new and current centers in pixels
+ var offset = this._getNewTopLeftPoint(center).subtract(this._getTopLeftPoint());
+
+ center = new L.LatLng(center.lat, center.lng);
+
+ var done = (zoomChanged ?
+ !!this._zoomToIfCenterInView && this._zoomToIfCenterInView(center, zoom, offset) :
+ this._panByIfClose(offset));
+
+ // exit if animated pan or zoom started
+ if (done) {
+ return this;
+ }
+ }
+
+ // reset the map view
+ this._resetView(center, zoom);
+
+ return this;
+ },
+
+ panBy: function (offset) {
+ if (!(offset.x || offset.y)) {
+ return this;
+ }
+
+ if (!this._panTransition) {
+ this._panTransition = new L.Transition(this._mapPane, {duration: 0.3});
+
+ this._panTransition.on('step', this._onPanTransitionStep, this);
+ this._panTransition.on('end', this._onPanTransitionEnd, this);
+ }
+ this.fire('movestart');
+
+ this._panTransition.run({
+ position: L.DomUtil.getPosition(this._mapPane).subtract(offset)
+ });
+
+ return this;
+ },
+
+ _onPanTransitionStep: function () {
+ this.fire('move');
+ },
+
+ _onPanTransitionEnd: function () {
+ this.fire('moveend');
+ },
+
+ _panByIfClose: function (offset) {
+ if (this._offsetIsWithinView(offset)) {
+ this.panBy(offset);
+ return true;
+ }
+ return false;
+ },
+
+ _offsetIsWithinView: function (offset, multiplyFactor) {
+ var m = multiplyFactor || 1,
+ size = this.getSize();
+ return (Math.abs(offset.x) <= size.x * m) &&
+ (Math.abs(offset.y) <= size.y * m);
+ }
+});
+
+
+L.Map.include(!L.DomUtil.TRANSITION ? {} : {
+ _zoomToIfCenterInView: function (center, zoom, centerOffset) {
+
+ if (this._animatingZoom) {
+ return true;
+ }
+ if (!this.options.zoomAnimation) {
+ return false;
+ }
+
+ var zoomDelta = zoom - this._zoom,
+ scale = Math.pow(2, zoomDelta),
+ offset = centerOffset.divideBy(1 - 1 / scale);
+
+ //if offset does not exceed half of the view
+ if (!this._offsetIsWithinView(offset, 1)) {
+ return false;
+ }
+
+ this._mapPane.className += ' leaflet-zoom-anim';
+
+ this
+ .fire('movestart')
+ .fire('zoomstart');
+
+ var centerPoint = this.containerPointToLayerPoint(this.getSize().divideBy(2)),
+ origin = centerPoint.add(offset);
+
+ this._prepareTileBg();
+
+ this._runAnimation(center, zoom, scale, origin);
+
+ return true;
+ },
+
+
+ _runAnimation: function (center, zoom, scale, origin) {
+ this._animatingZoom = true;
+
+ this._animateToCenter = center;
+ this._animateToZoom = zoom;
+
+ var transform = L.DomUtil.TRANSFORM;
+
+ //dumb FireFox hack, I have no idea why this magic zero translate fixes the scale transition problem
+ if (L.Browser.gecko || window.opera) {
+ this._tileBg.style[transform] += ' translate(0,0)';
+ }
+
+ var scaleStr;
+
+ // Android doesn't like translate/scale chains, transformOrigin + scale works better but
+ // it breaks touch zoom which Anroid doesn't support anyway, so that's a really ugly hack
+ // TODO work around this prettier
+ if (L.Browser.android) {
+ this._tileBg.style[transform + 'Origin'] = origin.x + 'px ' + origin.y + 'px';
+ scaleStr = 'scale(' + scale + ')';
+ } else {
+ scaleStr = L.DomUtil.getScaleString(scale, origin);
+ }
+
+ L.Util.falseFn(this._tileBg.offsetWidth); //hack to make sure transform is updated before running animation
+
+ var options = {};
+ options[transform] = this._tileBg.style[transform] + ' ' + scaleStr;
+ this._tileBg.transition.run(options);
+ },
+
+ _prepareTileBg: function () {
+ if (!this._tileBg) {
+ this._tileBg = this._createPane('leaflet-tile-pane', this._mapPane);
+ this._tileBg.style.zIndex = 1;
+ }
+
+ var tilePane = this._tilePane,
+ tileBg = this._tileBg;
+
+ // prepare the background pane to become the main tile pane
+ //tileBg.innerHTML = '';
+ tileBg.style[L.DomUtil.TRANSFORM] = '';
+ tileBg.style.visibility = 'hidden';
+
+ // tells tile layers to reinitialize their containers
+ tileBg.empty = true;
+ tilePane.empty = false;
+
+ this._tilePane = this._panes.tilePane = tileBg;
+ this._tileBg = tilePane;
+
+ if (!this._tileBg.transition) {
+ this._tileBg.transition = new L.Transition(this._tileBg, {duration: 0.3, easing: 'cubic-bezier(0.25,0.1,0.25,0.75)'});
+ this._tileBg.transition.on('end', this._onZoomTransitionEnd, this);
+ }
+
+ this._stopLoadingBgTiles();
+ },
+
+ // stops loading all tiles in the background layer
+ _stopLoadingBgTiles: function () {
+ var tiles = [].slice.call(this._tileBg.getElementsByTagName('img'));
+
+ for (var i = 0, len = tiles.length; i < len; i++) {
+ if (!tiles[i].complete) {
+ // tiles[i].src = '' - evil, doesn't cancel the request!
+ tiles[i].parentNode.removeChild(tiles[i]);
+ tiles[i] = null;
+ }
+ }
+ },
+
+ _onZoomTransitionEnd: function () {
+ this._restoreTileFront();
+
+ L.Util.falseFn(this._tileBg.offsetWidth);
+ this._resetView(this._animateToCenter, this._animateToZoom, true, true);
+
+ this._mapPane.className = this._mapPane.className.replace(' leaflet-zoom-anim', ''); //TODO toggleClass util
+ this._animatingZoom = false;
+ },
+
+ _restoreTileFront: function () {
+ this._tilePane.innerHTML = '';
+ this._tilePane.style.visibility = '';
+ this._tilePane.style.zIndex = 2;
+ this._tileBg.style.zIndex = 1;
+ },
+
+ _clearTileBg: function () {
+ if (!this._animatingZoom && !this.touchZoom._zooming) {
+ this._tileBg.innerHTML = '';
+ }
+ }
+});
+
+
+/*
+ * Provides L.Map with convenient shortcuts for W3C geolocation.
+ */
+
+L.Map.include({
+ locate: function (/*Object*/ options) {
+
+ this._locationOptions = options = L.Util.extend({
+ watch: false,
+ setView: false,
+ maxZoom: Infinity,
+ timeout: 10000,
+ maximumAge: 0,
+ enableHighAccuracy: false
+ }, options);
+
+ if (!navigator.geolocation) {
+ return this.fire('locationerror', {
+ code: 0,
+ message: "Geolocation not supported."
+ });
+ }
+
+ var onResponse = L.Util.bind(this._handleGeolocationResponse, this),
+ onError = L.Util.bind(this._handleGeolocationError, this);
+
+ if (options.watch) {
+ this._locationWatchId = navigator.geolocation.watchPosition(onResponse, onError, options);
+ } else {
+ navigator.geolocation.getCurrentPosition(onResponse, onError, options);
+ }
+ return this;
+ },
+
+ stopLocate: function () {
+ if (navigator.geolocation) {
+ navigator.geolocation.clearWatch(this._locationWatchId);
+ }
+ },
+
+ locateAndSetView: function (maxZoom, options) {
+ options = L.Util.extend({
+ maxZoom: maxZoom || Infinity,
+ setView: true
+ }, options);
+ return this.locate(options);
+ },
+
+ _handleGeolocationError: function (error) {
+ var c = error.code,
+ message = (c === 1 ? "permission denied" :
+ (c === 2 ? "position unavailable" : "timeout"));
+
+ if (this._locationOptions.setView && !this._loaded) {
+ this.fitWorld();
+ }
+
+ this.fire('locationerror', {
+ code: c,
+ message: "Geolocation error: " + message + "."
+ });
+ },
+
+ _handleGeolocationResponse: function (pos) {
+ var latAccuracy = 180 * pos.coords.accuracy / 4e7,
+ lngAccuracy = latAccuracy * 2,
+ lat = pos.coords.latitude,
+ lng = pos.coords.longitude,
+ latlng = new L.LatLng(lat, lng);
+
+ var sw = new L.LatLng(lat - latAccuracy, lng - lngAccuracy),
+ ne = new L.LatLng(lat + latAccuracy, lng + lngAccuracy),
+ bounds = new L.LatLngBounds(sw, ne);
+
+ if (this._locationOptions.setView) {
+ var zoom = Math.min(this.getBoundsZoom(bounds), this._locationOptions.maxZoom);
+ this.setView(latlng, zoom);
+ }
+
+ this.fire('locationfound', {
+ latlng: latlng,
+ bounds: bounds,
+ accuracy: pos.coords.accuracy
+ });
+ }
+});
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/leaflet/leaflet.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,323 @@
+/* required styles */
+
+.leaflet-map-pane,
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-tile-pane,
+.leaflet-overlay-pane,
+.leaflet-shadow-pane,
+.leaflet-marker-pane,
+.leaflet-popup-pane,
+.leaflet-overlay-pane svg,
+.leaflet-zoom-box,
+.leaflet-image-layer { /* TODO optimize classes */
+ position: absolute;
+ }
+.leaflet-container {
+ overflow: hidden;
+ }
+.leaflet-tile-pane {
+ -webkit-transform: translate3d(0,0,0);
+ }
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+ }
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+ display: block;
+ }
+.leaflet-clickable {
+ cursor: pointer;
+ }
+.leaflet-container img {
+ max-width: none !important;
+ }
+
+.leaflet-tile-pane { z-index: 2; }
+
+.leaflet-objects-pane { z-index: 3; }
+.leaflet-overlay-pane { z-index: 4; }
+.leaflet-shadow-pane { z-index: 5; }
+.leaflet-marker-pane { z-index: 6; }
+.leaflet-popup-pane { z-index: 7; }
+
+.leaflet-zoom-box {
+ width: 0;
+ height: 0;
+ }
+
+.leaflet-tile {
+ visibility: hidden;
+ }
+.leaflet-tile-loaded {
+ visibility: inherit;
+ }
+
+a.leaflet-active {
+ outline: 2px solid orange;
+ }
+
+
+/* Leaflet controls */
+
+.leaflet-control {
+ position: relative;
+ z-index: 7;
+ }
+.leaflet-top,
+.leaflet-bottom {
+ position: absolute;
+ }
+.leaflet-top {
+ top: 0;
+ }
+.leaflet-right {
+ right: 0;
+ }
+.leaflet-bottom {
+ bottom: 0;
+ }
+.leaflet-left {
+ left: 0;
+ }
+.leaflet-control {
+ float: left;
+ clear: both;
+ }
+.leaflet-right .leaflet-control {
+ float: right;
+ }
+.leaflet-top .leaflet-control {
+ margin-top: 10px;
+ }
+.leaflet-bottom .leaflet-control {
+ margin-bottom: 10px;
+ }
+.leaflet-left .leaflet-control {
+ margin-left: 10px;
+ }
+.leaflet-right .leaflet-control {
+ margin-right: 10px;
+ }
+
+.leaflet-control-zoom, .leaflet-control-layers {
+ -moz-border-radius: 7px;
+ -webkit-border-radius: 7px;
+ border-radius: 7px;
+ }
+.leaflet-control-zoom {
+ padding: 5px;
+ background: rgba(0, 0, 0, 0.25);
+ }
+.leaflet-control-zoom a {
+ background-color: rgba(255, 255, 255, 0.75);
+ }
+.leaflet-control-zoom a, .leaflet-control-layers a {
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ display: block;
+ }
+.leaflet-control-zoom a {
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ width: 19px;
+ height: 19px;
+ }
+.leaflet-control-zoom a:hover {
+ background-color: #fff;
+ }
+.leaflet-big-buttons .leaflet-control-zoom a {
+ width: 27px;
+ height: 27px;
+ }
+.leaflet-control-zoom-in {
+ background-image: url(images/zoom-in.png);
+ margin-bottom: 5px;
+ }
+.leaflet-control-zoom-out {
+ background-image: url(images/zoom-out.png);
+ }
+
+.leaflet-control-layers {
+ -moz-box-shadow: 0 0 7px #999;
+ -webkit-box-shadow: 0 0 7px #999;
+ box-shadow: 0 0 7px #999;
+
+ background: #f8f8f9;
+ }
+.leaflet-control-layers a {
+ background-image: url(images/layers.png);
+ width: 36px;
+ height: 36px;
+ }
+.leaflet-big-buttons .leaflet-control-layers a {
+ width: 44px;
+ height: 44px;
+ }
+.leaflet-control-layers .leaflet-control-layers-list,
+.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
+ display: none;
+ }
+.leaflet-control-layers-expanded .leaflet-control-layers-list {
+ display: block;
+ position: relative;
+ }
+.leaflet-control-layers-expanded {
+ padding: 6px 10px 6px 6px;
+ font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+ color: #333;
+ background: #fff;
+ }
+.leaflet-control-layers input {
+ margin-top: 2px;
+ position: relative;
+ top: 1px;
+ }
+.leaflet-control-layers label {
+ display: block;
+ }
+.leaflet-control-layers-separator {
+ height: 0;
+ border-top: 1px solid #ddd;
+ margin: 5px -10px 5px -6px;
+ }
+
+.leaflet-container .leaflet-control-attribution {
+ margin: 0;
+ padding: 0 5px;
+
+ font: 11px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+ color: #333;
+
+ background-color: rgba(255, 255, 255, 0.7);
+
+ -moz-box-shadow: 0 0 7px #ccc;
+ -webkit-box-shadow: 0 0 7px #ccc;
+ box-shadow: 0 0 7px #ccc;
+ }
+
+
+/* Fade animations */
+
+.leaflet-fade-anim .leaflet-tile {
+ opacity: 0;
+
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ -o-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
+ }
+.leaflet-fade-anim .leaflet-tile-loaded {
+ opacity: 1;
+ }
+
+.leaflet-fade-anim .leaflet-popup {
+ opacity: 0;
+
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ -o-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
+ }
+.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
+ opacity: 1;
+ }
+
+.leaflet-zoom-anim .leaflet-tile {
+ -webkit-transition: none;
+ -moz-transition: none;
+ -o-transition: none;
+ transition: none;
+ }
+
+.leaflet-zoom-anim .leaflet-objects-pane {
+ visibility: hidden;
+ }
+
+
+/* Popup layout */
+
+.leaflet-popup {
+ position: absolute;
+ text-align: center;
+ -webkit-transform: translate3d(0,0,0);
+ }
+.leaflet-popup-content-wrapper {
+ padding: 1px;
+ text-align: left;
+ }
+.leaflet-popup-content {
+ margin: 19px;
+ }
+.leaflet-popup-tip-container {
+ margin: 0 auto;
+ width: 40px;
+ height: 16px;
+ position: relative;
+ overflow: hidden;
+ }
+.leaflet-popup-tip {
+ width: 15px;
+ height: 15px;
+ padding: 1px;
+
+ margin: -8px auto 0;
+
+ -moz-transform: rotate(45deg);
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ -o-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+.leaflet-popup-close-button {
+ position: absolute;
+ top: 9px;
+ right: 9px;
+
+ width: 10px;
+ height: 10px;
+
+ overflow: hidden;
+ }
+.leaflet-popup-content p {
+ margin: 18px 0;
+ }
+
+
+/* Visual appearance */
+
+.leaflet-container {
+ background: #ddd;
+ }
+.leaflet-container a {
+ color: #0078A8;
+ }
+.leaflet-zoom-box {
+ border: 2px dotted #05f;
+ background: white;
+ opacity: 0.5;
+ }
+.leaflet-popup-content-wrapper, .leaflet-popup-tip {
+ background: white;
+
+ box-shadow: 0 1px 10px #888;
+ -moz-box-shadow: 0 1px 10px #888;
+ -webkit-box-shadow: 0 1px 14px #999;
+ }
+.leaflet-popup-content-wrapper {
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ border-radius: 20px;
+ }
+.leaflet-popup-content {
+ font: 12px/1.4 "Helvetica Neue", Arial, Helvetica, sans-serif;
+ }
+.leaflet-popup-close-button {
+ background: white url(images/popup-close.png);
+ }
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/leaflet/leaflet.ie.css Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,48 @@
+.leaflet-tile {
+ filter: inherit;
+ }
+
+.leaflet-vml-shape {
+ width: 1px;
+ height: 1px;
+ }
+.lvml {
+ behavior: url(#default#VML);
+ display: inline-block;
+ position: absolute;
+ }
+
+.leaflet-control {
+ display: inline;
+ }
+
+.leaflet-popup-tip {
+ width: 21px;
+ _width: 27px;
+ margin: 0 auto;
+ _margin-top: -3px;
+
+ filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
+ -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
+ }
+.leaflet-popup-tip-container {
+ margin-top: -1px;
+ }
+.leaflet-popup-content-wrapper, .leaflet-popup-tip {
+ border: 1px solid #bbb;
+ }
+
+.leaflet-control-zoom {
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#3F000000',EndColorStr='#3F000000');
+ }
+.leaflet-control-zoom a {
+ background-color: #eee;
+ }
+.leaflet-control-zoom a:hover {
+ background-color: #fff;
+ }
+.leaflet-control-layers-toggle {
+ }
+.leaflet-control-attribution, .leaflet-control-layers {
+ background: white;
+ }
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/leaflet/leaflet.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,6 @@
+/*
+ Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
+ Leaflet is a modern open-source JavaScript library for interactive maps.
+ http://leaflet.cloudmade.com
+*/
+(function(a){a.L={VERSION:"0.3",ROOT_URL:a.L_ROOT_URL||function(){var a=document.getElementsByTagName("script"),b=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/,c,d,e,f;for(c=0,d=a.length;c<d;c++){e=a[c].src,f=e.match(b);if(f)return f[1]==="include"?"../../dist/":e.replace(b,"")+"/"}return""}(),noConflict:function(){return a.L=this._originalL,this},_originalL:a.L}})(this),L.Util={extend:function(a){var b=Array.prototype.slice.call(arguments,1);for(var c=0,d=b.length,e;c<d;c++){e=b[c]||{};for(var f in e)e.hasOwnProperty(f)&&(a[f]=e[f])}return a},bind:function(a,b){return function(){return a.apply(b,arguments)}},stamp:function(){var a=0,b="_leaflet_id";return function(c){return c[b]=c[b]||++a,c[b]}}(),requestAnimFrame:function(){function a(a){window.setTimeout(a,1e3/60)}var b=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||a;return function(c,d,e,f){c=d?L.Util.bind(c,d):c,e&&b===a?c():b(c,f)}}(),limitExecByInterval:function(a,b,c){function g(){d=!1,e&&(f.callee.apply(c,f),e=!1)}var d,e,f;return function(){f=arguments,d?e=!0:(d=!0,setTimeout(g,b),a.apply(c,f))}},falseFn:function(){return!1},formatNum:function(a,b){var c=Math.pow(10,b||5);return Math.round(a*c)/c},setOptions:function(a,b){a.options=L.Util.extend({},a.options,b)},getParamString:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+"="+a[c]);return"?"+b.join("&")},template:function(a,b){return a.replace(/\{ *([\w_]+) *\}/g,function(a,c){var d=b[c];if(!b.hasOwnProperty(c))throw Error("No value provided for variable "+a);return d})}},L.Class=function(){},L.Class.extend=function(a){var b=function(){this.initialize&&this.initialize.apply(this,arguments)},c=function(){};c.prototype=this.prototype;var d=new c;d.constructor=b,b.prototype=d,b.superclass=this.prototype;for(var e in this)this.hasOwnProperty(e)&&e!=="prototype"&&e!=="superclass"&&(b[e]=this[e]);return a.statics&&(L.Util.extend(b,a.statics),delete a.statics),a.includes&&(L.Util.extend.apply(null,[d].concat(a.includes)),delete a.includes),a.options&&d.options&&(a.options=L.Util.extend({},d.options,a.options)),L.Util.extend(d,a),b.extend=L.Class.extend,b.include=function(a){L.Util.extend(this.prototype,a)},b},L.Mixin={},L.Mixin.Events={addEventListener:function(a,b,c){var d=this._leaflet_events=this._leaflet_events||{};return d[a]=d[a]||[],d[a].push({action:b,context:c||this}),this},hasEventListeners:function(a){var b="_leaflet_events";return b in this&&a in this[b]&&this[b][a].length>0},removeEventListener:function(a,b,c){if(!this.hasEventListeners(a))return this;for(var d=0,e=this._leaflet_events,f=e[a].length;d<f;d++)if(e[a][d].action===b&&(!c||e[a][d].context===c))return e[a].splice(d,1),this;return this},fireEvent:function(a,b){if(!this.hasEventListeners(a))return this;var c=L.Util.extend({type:a,target:this},b),d=this._leaflet_events[a].slice();for(var e=0,f=d.length;e<f;e++)d[e].action.call(d[e].context||this,c);return this}},L.Mixin.Events.on=L.Mixin.Events.addEventListener,L.Mixin.Events.off=L.Mixin.Events.removeEventListener,L.Mixin.Events.fire=L.Mixin.Events.fireEvent,function(){var a=navigator.userAgent.toLowerCase(),b=!!window.ActiveXObject,c=a.indexOf("webkit")!==-1,d=typeof orientation!="undefined"?!0:!1,e=a.indexOf("android")!==-1,f=window.opera;L.Browser={ie:b,ie6:b&&!window.XMLHttpRequest,webkit:c,webkit3d:c&&"WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix,gecko:a.indexOf("gecko")!==-1,opera:f,android:e,mobileWebkit:d&&c,mobileOpera:d&&f,mobile:d,touch:function(){var a=!1,b="ontouchstart";if(b in document.documentElement)return!0;var c=document.createElement("div");return!c.setAttribute||!c.removeAttribute?!1:(c.setAttribute(b,"return;"),typeof c[b]=="function"&&(a=!0),c.removeAttribute(b),c=null,a)}()}}(),L.Point=function(a,b,c){this.x=c?Math.round(a):a,this.y=c?Math.round(b):b},L.Point.prototype={add:function(a){return this.clone()._add(a)},_add:function(a){return this.x+=a.x,this.y+=a.y,this},subtract:function(a){return this.clone()._subtract(a)},_subtract:function(a){return this.x-=a.x,this.y-=a.y,this},divideBy:function(a,b){return new L.Point(this.x/a,this.y/a,b)},multiplyBy:function(a){return new L.Point(this.x*a,this.y*a)},distanceTo:function(a){var b=a.x-this.x,c=a.y-this.y;return Math.sqrt(b*b+c*c)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},clone:function(){return new L.Point(this.x,this.y)},toString:function(){return"Point("+L.Util.formatNum(this.x)+", "+L.Util.formatNum(this.y)+")"}},L.Bounds=L.Class.extend({initialize:function(a,b){if(!a)return;var c=a instanceof Array?a:[a,b];for(var d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this.min&&!this.max?(this.min=new L.Point(a.x,a.y),this.max=new L.Point(a.x,a.y)):(this.min.x=Math.min(a.x,this.min.x),this.max.x=Math.max(a.x,this.max.x),this.min.y=Math.min(a.y,this.min.y),this.max.y=Math.max(a.y,this.max.y))},getCenter:function(a){return new L.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,a)},contains:function(a){var b,c;return a instanceof L.Bounds?(b=a.min,c=a.max):b=c=a,b.x>=this.min.x&&c.x<=this.max.x&&b.y>=this.min.y&&c.y<=this.max.y},intersects:function(a){var b=this.min,c=this.max,d=a.min,e=a.max,f=e.x>=b.x&&d.x<=c.x,g=e.y>=b.y&&d.y<=c.y;return f&&g}}),L.Transformation=L.Class.extend({initialize:function(a,b,c,d){this._a=a,this._b=b,this._c=c,this._d=d},transform:function(a,b){return this._transform(a.clone(),b)},_transform:function(a,b){return b=b||1,a.x=b*(this._a*a.x+this._b),a.y=b*(this._c*a.y+this._d),a},untransform:function(a,b){return b=b||1,new L.Point((a.x/b-this._b)/this._a,(a.y/b-this._d)/this._c)}}),L.DomUtil={get:function(a){return typeof a=="string"?document.getElementById(a):a},getStyle:function(a,b){var c=a.style[b];!c&&a.currentStyle&&(c=a.currentStyle[b]);if(!c||c==="auto"){var d=document.defaultView.getComputedStyle(a,null);c=d?d[b]:null}return c==="auto"?null:c},getViewportOffset:function(a){var b=0,c=0,d=a,e=document.body;do{b+=d.offsetTop||0,c+=d.offsetLeft||0;if(d.offsetParent===e&&L.DomUtil.getStyle(d,"position")==="absolute")break;d=d.offsetParent}while(d);d=a;do{if(d===e)break;b-=d.scrollTop||0,c-=d.scrollLeft||0,d=d.parentNode}while(d);return new L.Point(c,b)},create:function(a,b,c){var d=document.createElement(a);return d.className=b,c&&c.appendChild(d),d},disableTextSelection:function(){document.selection&&document.selection.empty&&document.selection.empty(),this._onselectstart||(this._onselectstart=document.onselectstart,document.onselectstart=L.Util.falseFn)},enableTextSelection:function(){document.onselectstart=this._onselectstart,this._onselectstart=null},hasClass:function(a,b){return a.className.length>0&&RegExp("(^|\\s)"+b+"(\\s|$)").test(a.className)},addClass:function(a,b){L.DomUtil.hasClass(a,b)||(a.className+=(a.className?" ":"")+b)},removeClass:function(a,b){a.className=a.className.replace(/(\S+)\s*/g,function(a,c){return c===b?"":a}).replace(/^\s+/,"")},setOpacity:function(a,b){L.Browser.ie?a.style.filter="alpha(opacity="+Math.round(b*100)+")":a.style.opacity=b},testProp:function(a){var b=document.documentElement.style;for(var c=0;c<a.length;c++)if(a[c]in b)return a[c];return!1},getTranslateString:function(a){return L.DomUtil.TRANSLATE_OPEN+a.x+"px,"+a.y+"px"+L.DomUtil.TRANSLATE_CLOSE},getScaleString:function(a,b){var c=L.DomUtil.getTranslateString(b),d=" scale("+a+") ",e=L.DomUtil.getTranslateString(b.multiplyBy(-1));return c+d+e},setPosition:function(a,b){a._leaflet_pos=b,L.Browser.webkit?a.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(b):(a.style.left=b.x+"px",a.style.top=b.y+"px")},getPosition:function(a){return a._leaflet_pos}},L.Util.extend(L.DomUtil,{TRANSITION:L.DomUtil.testProp(["transition","webkitTransition","OTransition","MozTransition","msTransition"]),TRANSFORM:L.DomUtil.testProp(["transformProperty","WebkitTransform","OTransform","MozTransform","msTransform"]),TRANSLATE_OPEN:"translate"+(L.Browser.webkit3d?"3d(":"("),TRANSLATE_CLOSE:L.Browser.webkit3d?",0)":")"}),L.LatLng=function(a,b,c){var d=parseFloat(a),e=parseFloat(b);if(isNaN(d)||isNaN(e))throw Error("Invalid LatLng object: ("+a+", "+b+")");c!==!0&&(d=Math.max(Math.min(d,90),-90),e=(e+180)%360+(e<-180||e===180?180:-180)),this.lat=d,this.lng=e},L.Util.extend(L.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),L.LatLng.prototype={equals:function(a){if(a instanceof L.LatLng){var b=Math.max(Math.abs(this.lat-a.lat),Math.abs(this.lng-a.lng));return b<=L.LatLng.MAX_MARGIN}return!1},toString:function(){return"LatLng("+L.Util.formatNum(this.lat)+", "+L.Util.formatNum(this.lng)+")"},distanceTo:function(a){var b=6378137,c=L.LatLng.DEG_TO_RAD,d=(a.lat-this.lat)*c,e=(a.lng-this.lng)*c,f=this.lat*c,g=a.lat*c,h=Math.sin(d/2),i=Math.sin(e/2),j=h*h+i*i*Math.cos(f)*Math.cos(g);return b*2*Math.atan2(Math.sqrt(j),Math.sqrt(1-j))}},L.LatLngBounds=L.Class.extend({initialize:function(a,b){if(!a)return;var c=a instanceof Array?a:[a,b];for(var d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this._southWest&&!this._northEast?(this._southWest=new L.LatLng(a.lat,a.lng,!0),this._northEast=new L.LatLng(a.lat,a.lng,!0)):(this._southWest.lat=Math.min(a.lat,this._southWest.lat),this._southWest.lng=Math.min(a.lng,this._southWest.lng),this._northEast.lat=Math.max(a.lat,this._northEast.lat),this._northEast.lng=Math.max(a.lng,this._northEast.lng))},getCenter:function(){return new L.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new L.LatLng(this._northEast.lat,this._southWest.lng,!0)},getSouthEast:function(){return new L.LatLng(this._southWest.lat,this._northEast.lng,!0)},contains:function(a){var b=this._southWest,c=this._northEast,d,e;return a instanceof L.LatLngBounds?(d=a.getSouthWest(),e=a.getNorthEast()):d=e=a,d.lat>=b.lat&&e.lat<=c.lat&&d.lng>=b.lng&&e.lng<=c.lng},intersects:function(a){var b=this._southWest,c=this._northEast,d=a.getSouthWest(),e=a.getNorthEast(),f=e.lat>=b.lat&&d.lat<=c.lat,g=e.lng>=b.lng&&d.lng<=c.lng;return f&&g},toBBoxString:function(){var a=this._southWest,b=this._northEast;return[a.lng,a.lat,b.lng,b.lat].join(",")}}),L.Projection={},L.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=Math.max(Math.min(c,a.lat),-c),e=a.lng*b,f=d*b;return f=Math.log(Math.tan(Math.PI/4+f/2)),new L.Point(e,f)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG,d=a.x*c,e=(2*Math.atan(Math.exp(a.y))-Math.PI/2)*c;return new L.LatLng(e,d,b)}},L.Projection.LonLat={project:function(a){return new L.Point(a.lng,a.lat)},unproject:function(a,b){return new L.LatLng(a.y,a.x,b)}},L.CRS={latLngToPoint:function(a,b){var c=this.projection.project(a);return this.transformation._transform(c,b)},pointToLatLng:function(a,b,c){var d=this.transformation.untransform(a,b);return this.projection.unproject(d,c)},project:function(a){return this.projection.project(a)}},L.CRS.EPSG3857=L.Util.extend({},L.CRS,{code:"EPSG:3857",projection:L.Projection.SphericalMercator,transformation:new L.Transformation(.5/Math.PI,.5,-0.5/Math.PI,.5),project:function(a){var b=this.projection.project(a),c=6378137;return b.multiplyBy(c)}}),L.CRS.EPSG900913=L.Util.extend({},L.CRS.EPSG3857,{code:"EPSG:900913"}),L.CRS.EPSG4326=L.Util.extend({},L.CRS,{code:"EPSG:4326",projection:L.Projection.LonLat,transformation:new L.Transformation(1/360,.5,-1/360,.5)}),L.Map=L.Class.extend({includes:L.Mixin.Events,options:{crs:L.CRS.EPSG3857||L.CRS.EPSG4326,scale:function(a){return 256*Math.pow(2,a)},center:null,zoom:null,layers:[],dragging:!0,touchZoom:L.Browser.touch&&!L.Browser.android,scrollWheelZoom:!L.Browser.touch,doubleClickZoom:!0,boxZoom:!0,zoomControl:!0,attributionControl:!0,fadeAnimation:L.DomUtil.TRANSITION&&!L.Browser.android,zoomAnimation:L.DomUtil.TRANSITION&&!L.Browser.android&&!L.Browser.mobileOpera,trackResize:!0,closePopupOnClick:!0,worldCopyJump:!0},initialize:function(a,b){L.Util.setOptions(this,b),this._container=L.DomUtil.get(a);if(this._container._leaflet)throw Error("Map container is already initialized.");this._container._leaflet=!0,this._initLayout(),L.DomEvent&&(this._initEvents(),L.Handler&&this._initInteraction(),L.Control&&this._initControls()),this.options.maxBounds&&this.setMaxBounds(this.options.maxBounds);var c=this.options.center,d=this.options.zoom;c!==null&&d!==null&&this.setView(c,d,!0);var e=this.options.layers;e=e instanceof Array?e:[e],this._tileLayersNum=0,this._initLayers(e)},setView:function(a,b){return this._resetView(a,this._limitZoom(b)),this},setZoom:function(a){return this.setView(this.getCenter(),a)},zoomIn:function(){return this.setZoom(this._zoom+1)},zoomOut:function(){return this.setZoom(this._zoom-1)},fitBounds:function(a){var b=this.getBoundsZoom(a);return this.setView(a.getCenter(),b)},fitWorld:function(){var a=new L.LatLng(-60,-170),b=new L.LatLng(85,179);return this.fitBounds(new L.LatLngBounds(a,b))},panTo:function(a){return this.setView(a,this._zoom)},panBy:function(a){return this.fire("movestart"),this._rawPanBy(a),this.fire("move"),this.fire("moveend"),this},setMaxBounds:function(a){this.options.maxBounds=a;if(!a)return this._boundsMinZoom=null,this;var b=this.getBoundsZoom(a,!0);return this._boundsMinZoom=b,this._loaded&&(this._zoom<b?this.setView(a.getCenter(),b):this.panInsideBounds(a)),this},panInsideBounds:function(a){var b=this.getBounds(),c=this.project(b.getSouthWest()),d=this.project(b.getNorthEast()),e=this.project(a.getSouthWest()),f=this.project(a.getNorthEast()),g=0,h=0;return d.y<f.y&&(h=f.y-d.y),d.x>f.x&&(g=f.x-d.x),c.y>e.y&&(h=e.y-c.y),c.x<e.x&&(g=e.x-c.x),this.panBy(new L.Point(g,h,!0))},addLayer:function(a,b){var c=L.Util.stamp(a);if(this._layers[c])return this;this._layers[c]=a,a.options&&!isNaN(a.options.maxZoom)&&(this._layersMaxZoom=Math.max(this._layersMaxZoom||0,a.options.maxZoom)),a.options&&!isNaN(a.options.minZoom)&&(this._layersMinZoom=Math.min(this._layersMinZoom||Infinity,a.options.minZoom)),this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum++,a.on("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.addAttribution(a.getAttribution());var d=function(){a.onAdd(this,b),this.fire("layeradd",{layer:a})};return this._loaded?d.call(this):this.on("load",d,this),this},removeLayer:function(a){var b=L.Util.stamp(a);return this._layers[b]&&(a.onRemove(this),delete this._layers[b],this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum--,a.off("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.removeAttribution(a.getAttribution()),this.fire("layerremove",{layer:a})),this},hasLayer:function(a){var b=L.Util.stamp(a);return this._layers.hasOwnProperty(b)},invalidateSize:function(){var a=this.getSize();return this._sizeChanged=!0,this.options.maxBounds&&this.setMaxBounds(this.options.maxBounds),this._loaded?(this._rawPanBy(a.subtract(this.getSize()).divideBy(2,!0)),this.fire("move"),clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(L.Util.bind(function(){this.fire("moveend")},this),200),this):this},getCenter:function(a){var b=this.getSize().divideBy(2),c=this._getTopLeftPoint().add(b);return this.unproject(c,this._zoom,a)},getZoom:function(){return this._zoom},getBounds:function(){var a=this.getPixelBounds(),b=this.unproject(new L.Point(a.min.x,a.max.y),this._zoom,!0),c=this.unproject(new L.Point(a.max.x,a.min.y),this._zoom,!0);return new L.LatLngBounds(b,c)},getMinZoom:function(){var a=this.options.minZoom||0,b=this._layersMinZoom||0,c=this._boundsMinZoom||0;return Math.max(a,b,c)},getMaxZoom:function(){var a=isNaN(this.options.maxZoom)?Infinity:this.options.maxZoom,b=this._layersMaxZoom||Infinity;return Math.min(a,b)},getBoundsZoom:function(a,b){var c=this.getSize(),d=this.options.minZoom||0,e=this.getMaxZoom(),f=a.getNorthEast(),g=a.getSouthWest(),h,i,j,k=!0;b&&d--;do d++,i=this.project(f,d),j=this.project(g,d),h=new L.Point(i.x-j.x,j.y-i.y),b?k=h.x<c.x||h.y<c.y:k=h.x<=c.x&&h.y<=c.y;while(k&&d<=e);return k&&b?null:b?d:d-1},getSize:function(){if(!this._size||this._sizeChanged)this._size=new L.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1;return this._size},getPixelBounds:function(){var a=this._getTopLeftPoint(),b=this.getSize();return new L.Bounds(a,a.add(b))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},mouseEventToContainerPoint:function(a){return L.DomEvent.getMousePosition(a,this._container)},mouseEventToLayerPoint:function(a){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(a))},mouseEventToLatLng:function(a){return this.layerPointToLatLng(this.mouseEventToLayerPoint(a))},containerPointToLayerPoint:function(a){return a.subtract(L.DomUtil.getPosition(this._mapPane))},layerPointToContainerPoint:function(a){return a.add(L.DomUtil.getPosition(this._mapPane))},layerPointToLatLng:function(a){return this.unproject(a.add(this._initialTopLeftPoint))},latLngToLayerPoint:function(a){return this.project(a)._round()._subtract(this._initialTopLeftPoint)},project:function(a,b){return b=typeof b=="undefined"?this._zoom:b,this.options.crs.latLngToPoint(a,this.options.scale(b))},unproject:function(a,b,c){return b=typeof b=="undefined"?this._zoom:b,this.options.crs.pointToLatLng(a,this.options.scale(b),c)},_initLayout:function(){var a=this._container;a.innerHTML="",a.className+=" leaflet-container",this.options.fadeAnimation&&(a.className+=" leaflet-fade-anim");var b=L.DomUtil.getStyle(a,"position");b!=="absolute"&&b!=="relative"&&(a.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var a=this._panes={};this._mapPane=a.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=a.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),this._objectsPane=a.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),a.shadowPane=this._createPane("leaflet-shadow-pane"),a.overlayPane=this._createPane("leaflet-overlay-pane"),a.markerPane=this._createPane("leaflet-marker-pane"),a.popupPane=this._createPane("leaflet-popup-pane")},_createPane:function(a,b){return L.DomUtil.create("div",a,b||this._objectsPane)},_resetView:function(a,b,c,d){var e=this._zoom!==b;d||(this.fire("movestart"),e&&this.fire("zoomstart")),this._zoom=b,this._initialTopLeftPoint=this._getNewTopLeftPoint(a);if(!c)L.DomUtil.setPosition(this._mapPane,new L.Point(0,0));else{var f=L.DomUtil.getPosition(this._mapPane);this._initialTopLeftPoint._add(f)}this._tileLayersToLoad=this._tileLayersNum,this.fire("viewreset",{hard:!c}),this.fire("move"),(e||d)&&this.fire("zoomend"),this.fire("moveend"),this._loaded||(this._loaded=!0,this.fire("load"))},_initLayers:function(a){this._layers={};var b,c;for(b=0,c=a.length;b<c;b++)this.addLayer(a[b])},_initControls:function(){this.options.zoomControl&&this.addControl(new L.Control.Zoom),this.options.attributionControl&&(this.attributionControl=new L.Control.Attribution,this.addControl(this.attributionControl))},_rawPanBy:function(a){var b=L.DomUtil.getPosition(this._mapPane);L.DomUtil.setPosition(this._mapPane,b.subtract(a))},_initEvents:function(){L.DomEvent.addListener(this._container,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseenter","mouseleave","mousemove","contextmenu"],b,c;for(b=0,c=a.length;b<c;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this);this.options.trackResize&&L.DomEvent.addListener(window,"resize",this._onResize,this)},_onResize:function(){L.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(a){if(!this._loaded||this.dragging&&this.dragging.moved())return;this.fire("pre"+a.type),this._fireMouseEvent(a)},_fireMouseEvent:function(a){if(!this._loaded)return;var b=a.type;b=b==="mouseenter"?"mouseover":b==="mouseleave"?"mouseout":b;if(!this.hasEventListeners(b))return;b==="contextmenu"&&L.DomEvent.preventDefault(a),this.fire(b,{latlng:this.mouseEventToLatLng(a),layerPoint:this.mouseEventToLayerPoint(a)})},_initInteraction:function(){var a={dragging:L.Map.Drag,touchZoom:L.Map.TouchZoom,doubleClickZoom:L.Map.DoubleClickZoom,scrollWheelZoom:L.Map.ScrollWheelZoom,boxZoom:L.Map.BoxZoom},b;for(b in a)a.hasOwnProperty(b)&&a[b]&&(this[b]=new a[b](this),this.options[b]&&this[b].enable())},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(L.Util.bind(this._clearTileBg,this),500))},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");var a=L.DomUtil.getPosition(this._mapPane);return this._initialTopLeftPoint.subtract(a)},_getNewTopLeftPoint:function(a){var b=this.getSize().divideBy(2);return this.project(a).subtract(b).round()},_limitZoom:function(a){var b=this.getMinZoom(),c=this.getMaxZoom();return Math.max(b,Math.min(c,a))}}),L.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=Math.max(Math.min(c,a.lat),-c),e=this.R_MAJOR,f=this.R_MINOR,g=a.lng*b*e,h=d*b,i=f/e,j=Math.sqrt(1-i*i),k=j*Math.sin(h);k=Math.pow((1-k)/(1+k),j*.5);var l=Math.tan(.5*(Math.PI*.5-h))/k;return h=-f*Math.log(l),new L.Point(g,h)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG,d=this.R_MAJOR,e=this.R_MINOR,f=a.x*c/d,g=e/d,h=Math.sqrt(1-g*g),i=Math.exp(-a.y/e),j=Math.PI/2-2*Math.atan(i),k=15,l=1e-7,m=k,n=.1,o;while(Math.abs(n)>l&&--m>0)o=h*Math.sin(j),n=Math.PI/2-2*Math.atan(i*Math.pow((1-o)/(1+o),.5*h))-j,j+=n;return new L.LatLng(j*c,f,b)}},L.CRS.EPSG3395=L.Util.extend({},L.CRS,{code:"EPSG:3395",projection:L.Projection.Mercator,transformation:function(){var a=L.Projection.Mercator,b=a.R_MAJOR,c=a.R_MINOR;return new L.Transformation(.5/(Math.PI*b),.5,-0.5/(Math.PI*c),.5)}()}),L.TileLayer=L.Class.extend({includes:L.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",opacity:1,scheme:"xyz",continuousWorld:!1,noWrap:!1,zoomOffset:0,zoomReverse:!1,unloadInvisibleTiles:L.Browser.mobile,updateWhenIdle:L.Browser.mobile},initialize:function(a,b,c){L.Util.setOptions(this,b),this._url=a,this._urlParams=c,typeof this.options.subdomains=="string"&&(this.options.subdomains=this.options.subdomains.split(""))},onAdd:function(a,b){this._map=a,this._insertAtTheBottom=b,this._initContainer(),this._createTileProto(),a.on("viewreset",this._resetCallback,this),this.options.updateWhenIdle?a.on("moveend",this._update,this):(this._limitedUpdate=L.Util.limitExecByInterval(this._update,150,this),a.on("move",this._limitedUpdate,this)),this._reset(),this._update()},onRemove:function(a){this._map.getPanes().tilePane.removeChild(this._container),this._container=null,this._map.off("viewreset",this._resetCallback,this),this.options.updateWhenIdle?this._map.off("moveend",this._update,this):this._map.off("move",this._limitedUpdate,this)},getAttribution:function(){return this.options.attribution},setOpacity:function(a){this.options.opacity=a,this._setOpacity(a);if(L.Browser.webkit)for(var b in this._tiles)this._tiles.hasOwnProperty(b)&&(this._tiles[b].style.webkitTransform+=" translate(0,0)")},_setOpacity:function(a){a<1&&L.DomUtil.setOpacity(this._container,a)},_initContainer:function(){var a=this._map.getPanes().tilePane,b=a.firstChild;if(!this._container||a.empty)this._container=L.DomUtil.create("div","leaflet-layer"),this._insertAtTheBottom&&b?a.insertBefore(this._container,b):a.appendChild(this._container),this._setOpacity(this.options.opacity)},_resetCallback:function(a){this._reset(a.hard)},_reset:function(a){var b;for(b in this._tiles)this._tiles.hasOwnProperty(b)&&this.fire("tileunload",{tile:this._tiles[b]});this._tiles={},this.options.reuseTiles&&(this._unusedTiles=[]),a&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){var a=this._map.getPixelBounds(),b=this.options.tileSize,c=new L.Point(Math.floor(a.min.x/b),Math.floor(a.min.y/b)),d=new L.Point(Math.floor(a.max.x/b),Math.floor(a.max.y/b)),e=new L.Bounds(c,d);this._addTilesFromCenterOut(e),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(e)},_addTilesFromCenterOut:function(a){var b=[],c=a.getCenter();for(var d=a.min.y;d<=a.max.y;d++)for(var e=a.min.x;e<=a.max.x;e++){if(e+":"+d in this._tiles)continue;b.push(new L.Point(e,d))}b.sort(function(a,b){return a.distanceTo(c)-b.distanceTo(c)});var f=document.createDocumentFragment();this._tilesToLoad=b.length;for(var g=0,h=this._tilesToLoad;g<h;g++)this._addTile(b[g],f);this._container.appendChild(f)},_removeOtherTiles:function(a){var b,c,d,e,f;for(e in this._tiles)if(this._tiles.hasOwnProperty(e)){b=e.split(":"),c=parseInt(b[0],10),d=parseInt(b[1],10);if(c<a.min.x||c>a.max.x||d<a.min.y||d>a.max.y)f=this._tiles[e],this.fire("tileunload",{tile:f,url:f.src}),f.parentNode===this._container&&this._container.removeChild(f),this.options.reuseTiles&&this._unusedTiles.push(this._tiles[e]),delete this._tiles[e]}},_addTile:function(a,b){var c=this._getTilePos(a),d=this._map.getZoom(),e=a.x+":"+a.y,f=Math.pow(2,this._getOffsetZoom(d));if(!this.options.continuousWorld){if(!this.options.noWrap)a.x=(a.x%f+f)%f;else if(a.x<0||a.x>=f){this._tilesToLoad--;return}if(a.y<0||a.y>=f){this._tilesToLoad--;return}}var g=this._getTile();L.DomUtil.setPosition(g,c),this._tiles[e]=g,this.options.scheme==="tms"&&(a.y=f-a.y-1),this._loadTile(g,a,d),b.appendChild(g)},_getOffsetZoom:function(a){return a=this.options.zoomReverse?this.options.maxZoom-a:a,a+this.options.zoomOffset},_getTilePos:function(a){var b=this._map.getPixelOrigin(),c=this.options.tileSize;return a.multiplyBy(c).subtract(b)},getTileUrl:function(a,b){var c=this.options.subdomains,d=this.options.subdomains[(a.x+a.y)%c.length];return L.Util.template(this._url,L.Util.extend({s:d,z:this._getOffsetZoom(b),x:a.x,y:a.y},this._urlParams))},_createTileProto:function(){this._tileImg=L.DomUtil.create("img","leaflet-tile"),this._tileImg.galleryimg="no";var a=this.options.tileSize;this._tileImg.style.width=a+"px",this._tileImg.style.height=a+"px"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var a=this._unusedTiles.pop();return this._resetTile(a),a}return this._createTile()},_resetTile:function(a){},_createTile:function(){var a=this._tileImg.cloneNode(!1);return a.onselectstart=a.onmousemove=L.Util.falseFn,a},_loadTile:function(a,b,c){a._layer=this,a.onload=this._tileOnLoad,a.onerror=this._tileOnError,a.src=this.getTileUrl(b,c)},_tileOnLoad:function(a){var b=this._layer;this.className+=" leaflet-tile-loaded",b.fire("tileload",{tile:this,url:this.src}),b._tilesToLoad--,b._tilesToLoad||b.fire("load")},_tileOnError:function(a){var b=this._layer;b.fire("tileerror",{tile:this,url:this.src});var c=b.options.errorTileUrl;c&&(this.src=c)}}),L.TileLayer.WMS=L.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(a,b){this._url=a,this.wmsParams=L.Util.extend({},this.defaultWmsParams),this.wmsParams.width=this.wmsParams.height=this.options.tileSize;for(var c in b)this.options.hasOwnProperty(c)||(this.wmsParams[c]=b[c]);L.Util.setOptions(this,b)},onAdd:function(a){var b=parseFloat(this.wmsParams.version)<1.3?"srs":"crs";this.wmsParams[b]=a.options.crs.code,L.TileLayer.prototype.onAdd.call(this,a)},getTileUrl:function(a,b){var c=this.options.tileSize,d=a.multiplyBy(c),e=d.add(new L.Point(c,c)),f=this._map.unproject(d,this._zoom,!0),g=this._map.unproject(e,this._zoom,!0),h=this._map.options.crs.project(f),i=this._map.options.crs.project(g),j=[h.x,i.y,i.x,h.y].join(",");return this._url+L.Util.getParamString(this.wmsParams)+"&bbox="+j}}),L.TileLayer.Canvas=L.TileLayer.extend({options:{async:!1},initialize:function(a){L.Util.setOptions(this,a)},redraw:function(){for(var a in this._tiles){var b=this._tiles[a];this._redrawTile(b)}},_redrawTile:function(a){this.drawTile(a,a._tilePoint,a._zoom)},_createTileProto:function(){this._canvasProto=L.DomUtil.create("canvas","leaflet-tile");var a=this.options.tileSize;this._canvasProto.width=a,this._canvasProto.height=a},_createTile:function(){var a=this._canvasProto.cloneNode(!1);return a.onselectstart=a.onmousemove=L.Util.falseFn,a},_loadTile:function(a,b,c){a._layer=this,a._tilePoint=b,a._zoom=c,this.drawTile(a,b,c),this.options.async||this.tileDrawn(a)},drawTile:function(a,b,c){},tileDrawn:function(a){this._tileOnLoad.call(a)}}),L.ImageOverlay=L.Class.extend({includes:L.Mixin.Events,initialize:function(a,b){this._url=a,this._bounds=b},onAdd:function(a){this._map=a,this._image||this._initImage(),a.getPanes().overlayPane.appendChild(this._image),a.on("viewreset",this._reset,this),this._reset()},onRemove:function(a){a.getPanes().overlayPane.removeChild(this._image),a.off("viewreset",this._reset,this)},_initImage:function(){this._image=L.DomUtil.create("img","leaflet-image-layer"),this._image.style.visibility="hidden",L.Util.extend(this._image,{galleryimg:"no",onselectstart:L.Util.falseFn,onmousemove:L.Util.falseFn,onload:L.Util.bind(this._onImageLoad,this),src:this._url})},_reset:function(){var a=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),b=this._map.latLngToLayerPoint(this._bounds.getSouthEast()),c=b.subtract(a);L.DomUtil.setPosition(this._image,a),this._image.style.width=c.x+"px",this._image.style.height=c.y+"px"},_onImageLoad:function(){this._image.style.visibility="",this.fire("load")}}),L.Icon=L.Class.extend({iconUrl:L.ROOT_URL+"images/marker.png",shadowUrl:L.ROOT_URL+"images/marker-shadow.png",iconSize:new L.Point(25,41),shadowSize:new L.Point(41,41),iconAnchor:new L.Point(13,41),popupAnchor:new L.Point(0,-33),initialize:function(a){a&&(this.iconUrl=a)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(a){var b=this[a+"Size"],c=this[a+"Url"];if(!c&&a==="shadow")return null;var d;return c?d=this._createImg(c):d=this._createDiv(),d.className="leaflet-marker-"+a,d.style.marginLeft=-this.iconAnchor.x+"px",d.style.marginTop=-this.iconAnchor.y+"px",b&&(d.style.width=b.x+"px",d.style.height=b.y+"px"),d},_createImg:function(a){var b;return L.Browser.ie6?(b=document.createElement("div"),b.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+a+'")'):(b=document.createElement("img"),b.src=a),b},_createDiv:function(){return document.createElement("div")}}),L.Marker=L.Class.extend({includes:L.Mixin.Events,options:{icon:new L.Icon,title:"",clickable:!0,draggable:!1,zIndexOffset:0},initialize:function(a,b){L.Util.setOptions(this,b),this._latlng=a},onAdd:function(a){this._map=a,this._initIcon(),a.on("viewreset",this._reset,this),this._reset()},onRemove:function(a){this._removeIcon(),this.closePopup&&this.closePopup(),this._map=null,a.off("viewreset",this._reset,this)},getLatLng:function(){return this._latlng},setLatLng:function(a){this._latlng=a,this._icon&&(this._reset(),this._popup&&this._popup.setLatLng(this._latlng))},setIcon:function(a){this._map&&this._removeIcon(),this.options.icon=a,this._map&&(this._initIcon(),this._reset())},_initIcon:function(){this._icon||(this._icon=this.options.icon.createIcon(),this.options.title&&(this._icon.title=this.options.title),this._initInteraction()),this._shadow||(this._shadow=this.options.icon.createShadow()),this._map._panes.markerPane.appendChild(this._icon),this._shadow&&this._map._panes.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this._map._panes.markerPane.removeChild(this._icon),this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_reset:function(){var a=this._map.latLngToLayerPoint(this._latlng).round();L.DomUtil.setPosition(this._icon,a),this._shadow&&L.DomUtil.setPosition(this._shadow,a),this._icon.style.zIndex=a.y+this.options.zIndexOffset},_initInteraction:function(){if(this.options.clickable){this._icon.className+=" leaflet-clickable",L.DomEvent.addListener(this._icon,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseover","mouseout"];for(var b=0;b<a.length;b++)L.DomEvent.addListener(this._icon,a[b],this._fireMouseEvent,this)}L.Handler.MarkerDrag&&(this.dragging=new L.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())},_onMouseClick:function(a){L.DomEvent.stopPropagation(a);if(this.dragging&&this.dragging.moved())return;this.fire(a.type)},_fireMouseEvent:function(a){this.fire(a.type),L.DomEvent.stopPropagation(a)}}),L.Popup=L.Class.extend({includes:L.Mixin.Events,options:{minWidth:50,maxWidth:300,autoPan:!0,closeButton:!0,offset:new L.Point(0,2),autoPanPadding:new L.Point(5,5),className:""},initialize:function(a,b){L.Util.setOptions(this,a),this._source=b},onAdd:function(a){this._map=a,this._container||this._initLayout(),this._updateContent(),this._container.style.opacity="0",this._map._panes.popupPane.appendChild(this._container),this._map.on("viewreset",this._updatePosition,this),this._map.options.closePopupOnClick&&this._map.on("preclick",this._close,this),this._update(),this._container.style.opacity="1",this._opened=!0},onRemove:function(a){a._panes.popupPane.removeChild(this._container),L.Util.falseFn(this._container.offsetWidth),a.off("viewreset",this._updatePosition,this),a.off("click",this._close,this),this._container.style.opacity="0",this._opened=!1},setLatLng:function(a){return this._latlng=a,this._opened&&this._update(),this},setContent:function(a){return this._content=a,this._opened&&this._update(),this},_close:function(){this._opened&&this._map.closePopup()},_initLayout:function(){this._container=L.DomUtil.create("div","leaflet-popup "+this.options.className),this.options.closeButton&&(this._closeButton=L.DomUtil.create("a","leaflet-popup-close-button",this._container),this._closeButton.href="#close",L.DomEvent.addListener(this._closeButton,"click",this._onCloseButtonClick,this)),this._wrapper=L.DomUtil.create("div","leaflet-popup-content-wrapper",this._container),L.DomEvent.disableClickPropagation(this._wrapper),this._contentNode=L.DomUtil.create("div","leaflet-popup-content",this._wrapper),this._tipContainer=L.DomUtil.create("div","leaflet-popup-tip-container",this._container),this._tip=L.DomUtil.create("div","leaflet-popup-tip",this._tipContainer)},_update:function(){this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan()},_updateContent:function(){if(!this._content)return;typeof this._content=="string"?this._contentNode.innerHTML=this._content:(this._contentNode.innerHTML="",this._contentNode.appendChild(this._content))},_updateLayout:function(){this._container.style.width="",this._container.style.whiteSpace="nowrap";var a=this._container.offsetWidth;this._container.style.width=(a>this.options.maxWidth?this.options.maxWidth:a<this.options.minWidth?this.options.minWidth:a)+"px",this._container.style.whiteSpace="",this._containerWidth=this._container.offsetWidth},_updatePosition:function(){var a=this._map.latLngToLayerPoint(this._latlng);this._containerBottom=-a.y-this.options.offset.y,this._containerLeft=a.x-Math.round(this._containerWidth/2)+this.options.offset.x,this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"},_adjustPan:function(){if(!this.options.autoPan)return;var a=this._container.offsetHeight,b=new L.Point(this._containerLeft,-a-this._containerBottom),c=this._map.layerPointToContainerPoint(b),d=new L.Point(0,0),e=this.options.autoPanPadding,f=this._map.getSize();c.x<0&&(d.x=c.x-e.x),c.x+this._containerWidth>f.x&&(d.x=c.x+this._containerWidth-f.x+e.x),c.y<0&&(d.y=c.y-e.y),c.y+a>f.y&&(d.y=c.y+a-f.y+e.y),(d.x||d.y)&&this._map.panBy(d)},_onCloseButtonClick:function(a){this._close(),L.DomEvent.stop(a)}}),L.Marker.include({openPopup:function(){return this._popup.setLatLng(this._latlng),this._map&&this._map.openPopup(this._popup),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(a,b){return b=L.Util.extend({offset:this.options.icon.popupAnchor},b),this._popup||this.on("click",this.openPopup,this),this._popup=new L.Popup(b,this),this._popup.setContent(a),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup)),this}}),L.Map.include({openPopup:function(a){return this.closePopup(),this._popup=a,this.addLayer(a),this.fire("popupopen",{popup:this._popup}),this},closePopup:function(){return this._popup&&(this.removeLayer(this._popup),this.fire("popupclose",{popup:this._popup}),this._popup=null),this}}),L.LayerGroup=L.Class.extend({initialize:function(a){this._layers={};if(a)for(var b=0,c=a.length;b<c;b++)this.addLayer(a[b])},addLayer:function(a){var b=L.Util.stamp(a);return this._layers[b]=a,this._map&&this._map.addLayer(a),this},removeLayer:function(a){var b=L.Util.stamp(a);return delete this._layers[b],this._map&&this._map.removeLayer(a),this},clearLayers:function(){return this._iterateLayers(this.removeLayer,this),this},invoke:function(a){var b=Array.prototype.slice.call(arguments,1),c,d;for(c in this._layers)this._layers.hasOwnProperty(c)&&(d=this._layers[c],d[a]&&d[a].apply(d,b));return this},onAdd:function(a){this._map=a,this._iterateLayers(a.addLayer,a)},onRemove:function(a){this._iterateLayers(a.removeLayer,a),delete this._map},_iterateLayers:function(a,b){for(var c in this._layers)this._layers.hasOwnProperty(c)&&a.call(b,this._layers[c])}}),L.FeatureGroup=L.LayerGroup.extend({includes:L.Mixin.Events,addLayer:function(a){this._initEvents(a),L.LayerGroup.prototype.addLayer.call(this,a),this._popupContent&&a.bindPopup&&a.bindPopup(this._popupContent)},bindPopup:function(a){return this._popupContent=a,this.invoke("bindPopup",a)},setStyle:function(a){return this.invoke("setStyle",a)},_events:["click","dblclick","mouseover","mouseout"],_initEvents:function(a){for(var b=0,c=this._events.length;b<c;b++)a.on(this._events[b],this._propagateEvent,this)},_propagateEvent:function(a){a.layer=a.target,a.target=this,this.fire(a.type,a)}}),L.Path=L.Class.extend({includes:[L.Mixin.Events],statics:{CLIP_PADDING:.5},options:{stroke:!0,color:"#0033ff",weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0,updateOnMoveEnd:!0},initialize:function(a){L.Util.setOptions(this,a)},onAdd:function(a){this._map=a,this._initElements(),this._initEvents(),this.projectLatlngs(),this._updatePath(),a.on("viewreset",this.projectLatlngs,this),this._updateTrigger=this.options.updateOnMoveEnd?"moveend":"viewreset",a.on(this._updateTrigger,this._updatePath,this)},onRemove:function(a){this._map=null,a._pathRoot.removeChild(this._container),a.off("viewreset",this.projectLatlngs,this),a.off(this._updateTrigger,this._updatePath,this)},projectLatlngs:function(){},setStyle:function(a){return L.Util.setOptions(this,a),this._container&&this._updateStyle(),this},_redraw:function(){this._map&&(this.projectLatlngs(),this._updatePath())}}),L.Map.include({_updatePathViewport:function(){var a=L.Path.CLIP_PADDING,b=this.getSize(),c=L.DomUtil.getPosition(this._mapPane),d=c.multiplyBy(-1).subtract(b.multiplyBy(a)),e=d.add(b.multiplyBy(1+a*2));this._pathViewport=new L.Bounds(d,e)}}),L.Path.SVG_NS="http://www.w3.org/2000/svg",L.Browser.svg=!!document.createElementNS&&!!document.createElementNS(L.Path.SVG_NS,"svg").createSVGRect,L.Path=L.Path.extend({statics:{SVG:L.Browser.svg,_createElement:function(a){return document.createElementNS(L.Path.SVG_NS,a)}},getPathString:function(){},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=L.Path._createElement("g"),this._path=L.Path._createElement("path"),this._container.appendChild(this._path),this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill?this._path.setAttribute("fill-rule","evenodd"):this._path.setAttribute("fill","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight)),this.options.fill&&(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity))},_updatePath:function(){var a=this.getPathString();a||(a="M0 0"),this._path.setAttribute("d",a)},_initEvents:function(){if(this.options.clickable){L.Browser.vml||this._path.setAttribute("class","leaflet-clickable"),L.DomEvent.addListener(this._container,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseover","mouseout","mousemove"];for(var b=0;b<a.length;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this)}},_onMouseClick:function(a){if(this._map.dragging&&this._map.dragging.moved())return;this._fireMouseEvent(a)},_fireMouseEvent:function(a){if(!this.hasEventListeners(a.type))return;this.fire(a.type,{latlng:this._map.mouseEventToLatLng(a),layerPoint:this._map.mouseEventToLayerPoint(a)}),L.DomEvent.stopPropagation(a)}}),L.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=L.Path._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_updateSvgViewport:function(){this._updatePathViewport();var a=this._pathViewport,b=a.min,c=a.max,d=c.x-b.x,e=c.y-b.y,f=this._pathRoot,g=this._panes.overlayPane;L.Browser.webkit&&g.removeChild(f),L.DomUtil.setPosition(f,b),f.setAttribute("width",d),f.setAttribute("height",e),f.setAttribute("viewBox",[b.x,b.y,d,e].join(" ")),L.Browser.webkit&&g.appendChild(f)}}),L.Path.include({bindPopup:function(a,b){if(!this._popup||this._popup.options!==b)this._popup=new L.Popup(b,this);return this._popup.setContent(a),this._openPopupAdded||(this.on("click",this._openPopup,this),this._openPopupAdded=!0),this},_openPopup:function(a){this._popup.setLatLng(a.latlng),this._map.openPopup(this._popup)}}),L.Browser.vml=function(){var a=document.createElement("div"),b;return a.innerHTML='<v:shape adj="1"/>',b=a.firstChild,b.style.behavior="url(#default#VML)",b&&typeof b.adj=="object"}(),L.Path=L.Browser.svg||!L.Browser.vml?L.Path:L.Path.extend({statics:{VML:!0,CLIP_PADDING:.02,_createElement:function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(a){return document.createElement("<lvml:"+a+' class="lvml">')}}catch(a){return function(a){return document.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}()},_initPath:function(){this._container=L.Path._createElement("shape"),this._container.className+=" leaflet-vml-shape"+(this.options.clickable?" leaflet-clickable":""),this._container.coordsize="1 1",this._path=L.Path._createElement("path"),this._container.appendChild(this._path),this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke?(this._stroke=L.Path._createElement("stroke"),this._stroke.endcap="round",this._container.appendChild(this._stroke)):this._container.stroked=!1,this.options.fill?(this._container.filled=!0,this._fill=L.Path._createElement("fill"),this._container.appendChild(this._fill)):this._container.filled=!1,this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._stroke.weight=this.options.weight+"px",this._stroke.color=this.options.color,this._stroke.opacity=this.options.opacity),this.options.fill&&(this._fill.color=this.options.fillColor||this.options.color,this._fill.opacity=this.options.fillOpacity)},_updatePath:function(){this._container.style.display="none",this._path.v=this.getPathString()+" ",this._container.style.display=""}}),L.Map.include(L.Browser.svg||!L.Browser.vml?{}:{_initPathRoot:function(){this._pathRoot||(this._pathRoot=document.createElement("div"),this._pathRoot.className="leaflet-vml-container",this._panes.overlayPane.appendChild(this._pathRoot),this.on("moveend",this._updatePathViewport),this._updatePathViewport())}}),L.LineUtil={simplify:function(a,b){if(!b||!a.length)return a.slice();var c=b*b;return a=this._reducePoints(a,c),a=this._simplifyDP(a,c),a},pointToSegmentDistance:function(a,b,c){return Math.sqrt(this._sqClosestPointOnSegment(a,b,c,!0))},closestPointOnSegment:function(a,b,c){return this._sqClosestPointOnSegment(a,b,c)},_simplifyDP:function(a,b){var c=a.length,d=typeof Uint8Array!="undefined"?Uint8Array:Array,e=new d(c);e[0]=e[c-1]=1,this._simplifyDPStep(a,e,b,0,c-1);var f,g=[];for(f=0;f<c;f++)e[f]&&g.push(a[f]);return g},_simplifyDPStep:function(a,b,c,d,e){var f=0,g,h,i;for(h=d+1;h<=e-1;h++)i=this._sqClosestPointOnSegment(a[h],a[d],a[e],!0),i>f&&(g=h,f=i);f>c&&(b[g]=1,this._simplifyDPStep(a,b,c,d,g),this._simplifyDPStep(a,b,c,g,e))},_reducePoints:function(a,b){var c=[a[0]];for(var d=1,e=0,f=a.length;d<f;d++)this._sqDist(a[d],a[e])>b&&(c.push(a[d]),e=d);return e<f-1&&c.push(a[f-1]),c},clipSegment:function(a,b,c,d){var e=c.min,f=c.max,g=d?this._lastCode:this._getBitCode(a,c),h=this._getBitCode(b,c);this._lastCode=h;for(;;){if(!(g|h))return[a,b];if(g&h)return!1;var i=g||h,j=this._getEdgeIntersection(a,b,i,c),k=this._getBitCode(j,c);i===g?(a=j,g=k):(b=j,h=k)}},_getEdgeIntersection:function(a,b,c,d){var e=b.x-a.x,f=b.y-a.y,g=d.min,h=d.max;if(c&8)return new L.Point(a.x+e*(h.y-a.y)/f,h.y);if(c&4)return new L.Point(a.x+e*(g.y-a.y)/f,g.y);if(c&2)return new L.Point(h.x,a.y+f*(h.x-a.x)/e);if(c&1)return new L.Point(g.x,a.y+f*(g.x-a.x)/e)},_getBitCode:function(a,b){var c=0;return a.x<b.min.x?c|=1:a.x>b.max.x&&(c|=2),a.y<b.min.y?c|=4:a.y>b.max.y&&(c|=8),c},_sqDist:function(a,b){var c=b.x-a.x,d=b.y-a.y;return c*c+d*d},_sqClosestPointOnSegment:function(a,b,c,d){var e=b.x,f=b.y,g=c.x-e,h=c.y-f,i=g*g+h*h,j;return i>0&&(j=((a.x-e)*g+(a.y-f)*h)/i,j>1?(e=c.x,f=c.y):j>0&&(e+=g*j,f+=h*j)),g=a.x-e,h=a.y-f,d?g*g+h*h:new L.Point(e,f)}},L.Polyline=L.Path.extend({initialize:function(a,b){L.Path.prototype.initialize.call(this,b),this._latlngs=a},options:{smoothFactor:1,noClip:!1,updateOnMoveEnd:!0},projectLatlngs:function(){this._originalPoints=[];for(var a=0,b=this._latlngs.length;a<b;a++)this._originalPoints[a]=this._map.latLngToLayerPoint(this._latlngs[a])},getPathString:function(){for(var a=0,b=this._parts.length,c="";a<b;a++)c+=this._getPathPartStr(this._parts[a]);return c},getLatLngs:function(){return this._latlngs},setLatLngs:function(a){return this._latlngs=a,this._redraw(),this},addLatLng:function(a){return this._latlngs.push(a),this._redraw(),this},spliceLatLngs:function(a,b){var c=[].splice.apply(this._latlngs,arguments);return this._redraw(),c},closestLayerPoint:function(a){var b=Infinity,c=this._parts,d,e,f=null;for(var g=0,h=c.length;g<h;g++){var i=c[g];for(var j=1,k=i.length;j<k;j++){d=i[j-1],e=i[j];var l=L.LineUtil._sqClosestPointOnSegment(a,d,e);l._sqDist<b&&(b=l._sqDist,f=l)}}return f&&(f.distance=Math.sqrt(b)),f},getBounds:function(){var a=new L.LatLngBounds,b=this.getLatLngs();for(var c=0,d=b.length;c<d;c++)a.extend(b[c]);return a},_getPathPartStr:function(a){var b=L.Path.VML;for(var c=0,d=a.length,e="",f;c<d;c++)f=a[c],b&&f._round(),e+=(c?"L":"M")+f.x+" "+f.y;return e},_clipPoints:function(){var a=this._originalPoints,b=a.length,c,d,e;if(this.options.noClip){this._parts=[a];return}this._parts=[];var f=this._parts,g=this._map._pathViewport,h=L.LineUtil;for(c=0,d=0;c<b-1;c++){e=h.clipSegment(a[c],a[c+1],g,c);if(!e)continue;f[d]=f[d]||[],f[d].push(e[0]);if(e[1]!==a[c+1]||c===b-2)f[d].push(e[1]),d++}},_simplifyPoints:function(){var a=this._parts,b=L.LineUtil;for(var c=0,d=a.length;c<d;c++)a[c]=b.simplify(a[c],this.options.smoothFactor)},_updatePath:function(){this._clipPoints(),this._simplifyPoints(),L.Path.prototype._updatePath.call(this)}}),L.PolyUtil={},L.PolyUtil.clipPolygon=function(a,b){var c=b.min,d=b.max,e,f=[1,4,2,8],g,h,i,j,k,l,m,n,o=L.LineUtil;for(g=0,l=a.length;g<l;g++)a[g]._code=o._getBitCode(a[g],b);for(i=0;i<4;i++){m=f[i],e=[];for(g=0,l=a.length,h=l-1;g<l;h=g++)j=a[g],k=a[h],j._code&m?k._code&m||(n=o._getEdgeIntersection(k,j,m,b),n._code=o._getBitCode(n,b),e.push(n)):(k._code&m&&(n=o._getEdgeIntersection(k,j,m,b),n._code=o._getBitCode(n,b),e.push(n)),e.push(j));a=e}return a},L.Polygon=L.Polyline.extend({options:{fill:!0},initialize:function(a,b){L.Polyline.prototype.initialize.call(this,a,b),a&&a[0]instanceof Array&&(this._latlngs=a[0],this._holes=a.slice(1))},projectLatlngs:function(){L.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[];if(!this._holes)return;for(var a=0,b=this._holes.length,c;a<b;a++){this._holePoints[a]=[];for(var d=0,e=this._holes[a].length;d<e;d++)this._holePoints[a][d]=this._map.latLngToLayerPoint(this._holes[a][d])}},_clipPoints:function(){var a=this._originalPoints,b=[];this._parts=[a].concat(this._holePoints);if(this.options.noClip)return;for(var c=0,d=this._parts.length;c<d;c++){var e=L.PolyUtil.clipPolygon(this._parts[c],this._map._pathViewport);if(!e.length)continue;b.push(e)}this._parts=b},_getPathPartStr:function(a){var b=L.Polyline.prototype._getPathPartStr.call(this,a);return b+(L.Browser.svg?"z":"x")}}),function(){function a(a){return L.FeatureGroup.extend({initialize:function(a,b){this._layers={},this._options=b,this.setLatLngs(a)},setLatLngs:function(b){var c=0,d=b.length;this._iterateLayers(function(a){c<d?a.setLatLngs(b[c++]):this.removeLayer(a)},this);while(c<d)this.addLayer(new a(b[c++],this._options))}})}L.MultiPolyline=a(L.Polyline),L.MultiPolygon=a(L.Polygon)}(),L.Circle=L.Path.extend({initialize:function(a,b,c){L.Path.prototype.initialize.call(this,c),this._latlng=a,this._mRadius=b},options:{fill:!0},setLatLng:function(a){return this._latlng=a,this._redraw(),this},setRadius:function(a){return this._mRadius=a,this._redraw(),this},projectLatlngs:function(){var a=40075017,b=a*Math.cos(L.LatLng.DEG_TO_RAD*this._latlng.lat),c=this._mRadius/b*360,d=new L.LatLng(this._latlng.lat,this._latlng.lng-c,!0),e=this._map.latLngToLayerPoint(d);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.round(this._point.x-e.x)},getPathString:function(){var a=this._point,b=this._radius;return this._checkIfEmpty()?"":L.Browser.svg?"M"+a.x+","+(a.y-b)+"A"+b+","+b+",0,1,1,"+(a.x-.1)+","+(a.y-b)+" z":(a._round(),b=Math.round(b),"AL "+a.x+","+a.y+" "+b+","+b+" 0,"+23592600)},_checkIfEmpty:function(){var a=this._map._pathViewport,b=this._radius,c=this._point;return c.x-b>a.max.x||c.y-b>a.max.y||c.x+b<a.min.x||c.y+b<a.min.y}}),L.CircleMarker=L.Circle.extend({options:{radius:10,weight:2},initialize:function(a,b){L.Circle.prototype.initialize.call(this,a,null,b),this._radius=this.options.radius},projectLatlngs:function(){this._point=this._map.latLngToLayerPoint(this._latlng)},setRadius:function(a){return this._radius=a,this._redraw(),this}}),L.Browser.canvas=function(){return!!document.createElement("canvas").getContext}(),L.Path=L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?L.Path:L.Path.extend({statics:{CANVAS:!0,SVG:!1},options:{updateOnMoveEnd:!0},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){this.options.stroke&&(this._ctx.lineWidth=this.options.weight,this._ctx.strokeStyle=this.options.color),this.options.fill&&(this._ctx.fillStyle=this.options.fillColor||this.options.color)},_drawPath:function(){var a,b,c,d,e,f;this._ctx.beginPath();for(a=0,c=this._parts.length;a<c;a++){for(b=0,d=this._parts[a].length;b<d;b++)e=this._parts[a][b],f=(b===0?"move":"line")+"To",this._ctx[f](e.x,e.y);this instanceof L.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(this._checkIfEmpty())return;this._drawPath(),this._ctx.save(),this._updateStyle();var a=this.options.opacity,b=this.options.fillOpacity;this.options.fill&&(b<1&&(this._ctx.globalAlpha=b),this._ctx.fill()),this.options.stroke&&(a<1&&(this._ctx.globalAlpha=a),this._ctx.stroke()),this._ctx.restore()},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(a){this._containsPoint(a.layerPoint)&&this.fire("click",a)},onRemove:function(a){a.off("viewreset",this._projectLatlngs,this),a.off(this._updateTrigger,this._updatePath,this),a.fire(this._updateTrigger)}}),L.Map.include(L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?{}:{_initPathRoot:function(){var a=this._pathRoot,b;a||(a=this._pathRoot=document.createElement("canvas"),a.style.position="absolute",b=this._canvasCtx=a.getContext("2d"),b.lineCap="round",b.lineJoin="round",this._panes.overlayPane.appendChild(a),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){this._updatePathViewport();var a=this._pathViewport,b=a.min,c=a.max.subtract(b),d=this._pathRoot;L.DomUtil.setPosition(d,b),d.width=c.x,d.height=c.y,d.getContext("2d").translate(-b.x,-b.y)}}),L.Polyline.include(L.Path.CANVAS?{_containsPoint:function(a,b){var c,d,e,f,g,h,i,j=this.options.weight/2;L.Browser.touch&&(j+=10);for(c=0,f=this._parts.length;c<f;c++){i=this._parts[c];for(d=0,g=i.length,e=g-1;d<g;e=d++){if(!b&&d===0)continue;h=L.LineUtil.pointToSegmentDistance(a,i[e],i[d]);if(h<=j)return!0}}return!1}}:{}),L.Polygon.include(L.Path.CANVAS?{_containsPoint:function(a){var b=!1,c,d,e,f,g,h,i,j;if(L.Polyline.prototype._containsPoint.call(this,a,!0))return!0;for(f=0,i=this._parts.length;f<i;f++){c=this._parts[f];for(g=0,j=c.length,h=j-1;g<j;h=g++)d=c[g],e=c[h],d.y>a.y!=e.y>a.y&&a.x<(e.x-d.x)*(a.y-d.y)/(e.y-d.y)+d.x&&(b=!b)}return b}}:{}),L.Circle.include(L.Path.CANVAS?{_drawPath:function(){var a=this._point;this._ctx.beginPath(),this._ctx.arc(a.x,a.y,this._radius,0,Math.PI*2)},_containsPoint:function(a){var b=this._point,c=this.options.stroke?this.options.weight/2:0;return a.distanceTo(b)<=this._radius+c}}:{}),L.GeoJSON=L.FeatureGroup.extend({initialize:function(a,b){L.Util.setOptions(this,b),this._geojson=a,this._layers={},a&&this.addGeoJSON(a)},addGeoJSON:function(a){if(a.features){for(var b=0,c=a.features.length;b<c;b++)this.addGeoJSON(a.features[b]);return}var d=a.type==="Feature",e=d?a.geometry:a,f=L.GeoJSON.geometryToLayer(e,this.options.pointToLayer);this.fire("featureparse",{layer:f,properties:a.properties,geometryType:e.type,bbox:a.bbox,id:a.id}),this.addLayer(f)}}),L.Util.extend(L.GeoJSON,{geometryToLayer:function(a,b){var c=a.coordinates,d,e,f,g,h,i=[];switch(a.type){case"Point":return d=this.coordsToLatLng(c),b?b(d):new L.Marker(d);case"MultiPoint":for(f=0,g=c.length;f<g;f++)d=this.coordsToLatLng(c[f]),h=b?b(d):new L.Marker(d),i.push(h);return new L.FeatureGroup(i);case"LineString":return e=this.coordsToLatLngs(c),new L.Polyline(e);case"Polygon":return e=this.coordsToLatLngs(c,1),new L.Polygon(e);case"MultiLineString":return e=this.coordsToLatLngs(c,1),new L.MultiPolyline(e);case"MultiPolygon":return e=this.coordsToLatLngs(c,2),new L.MultiPolygon(e);case"GeometryCollection":for(f=0,g=a.geometries.length;f<g;f++)h=this.geometryToLayer(a.geometries[f],b),i.push(h);return new L.FeatureGroup(i);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(a,b){var c=parseFloat(a[b?0:1]),d=parseFloat(a[b?1:0]);return new L.LatLng(c,d,!0)},coordsToLatLngs:function(a,b,c){var d,e=[],f,g=a.length;for(f=0;f<g;f++)d=b?this.coordsToLatLngs(a[f],b-1,c):this.coordsToLatLng(a[f],c),e.push(d);return e}}),L.DomEvent={addListener:function(a,b,c,d){var e=L.Util.stamp(c),f="_leaflet_"+b+e;if(a[f])return;var g=function(b){return c.call(d||a,b||L.DomEvent._getEvent())};if(L.Browser.touch&&b==="dblclick"&&this.addDoubleTapListener)this.addDoubleTapListener(a,g,e);else if("addEventListener"in a)if(b==="mousewheel")a.addEventListener("DOMMouseScroll",g,!1),a.addEventListener(b,g,!1);else if(b==="mouseenter"||b==="mouseleave"){var h=g,i=b==="mouseenter"?"mouseover":"mouseout";g=function(b){if(!L.DomEvent._checkMouse(a,b))return;return h(b)},a.addEventListener(i,g,!1)}else a.addEventListener(b,g,!1);else"attachEvent"in a&&a.attachEvent("on"+b,g);a[f]=g},removeListener:function(a,b,c){var d=L.Util.stamp(c),e="_leaflet_"+b+d,f=a[e];if(!f)return;L.Browser.touch&&b==="dblclick"&&this.removeDoubleTapListener?this.removeDoubleTapListener(a,d):"removeEventListener"in a?b==="mousewheel"?(a.removeEventListener("DOMMouseScroll",f,!1),a.removeEventListener(b,f,!1)):b==="mouseenter"||b==="mouseleave"?a.removeEventListener(b==="mouseenter"?"mouseover":"mouseout",f,!1):a.removeEventListener(b,f,!1):"detachEvent"in a&&a.detachEvent("on"+b,f),a[e]=null},_checkMouse:function(a,b){var c=b.relatedTarget;if(!c)return!0;try{while(c&&c!==a)c=c.parentNode}catch(d){return!1}return c!==a},_getEvent:function(){var a=window.event;if(!a){var b=arguments.callee.caller;while(b){a=b.arguments[0];if(a&&window.Event===a.constructor)break;b=b.caller}}return a},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},disableClickPropagation:function(a){L.DomEvent.addListener(a,L.Draggable.START,L.DomEvent.stopPropagation),L.DomEvent.addListener(a,"click",L.DomEvent.stopPropagation),L.DomEvent.addListener(a,"dblclick",L.DomEvent.stopPropagation)},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},stop:function(a){L.DomEvent.preventDefault(a),L.DomEvent.stopPropagation(a)},getMousePosition:function(a,b){var c=a.pageX?a.pageX:a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,d=a.pageY?a.pageY:a.clientY+document.body.scrollTop+document.documentElement.scrollTop,e=new L.Point(c,d);return b?e.subtract(L.DomUtil.getViewportOffset(b)):e},getWheelDelta:function(a){var b=0;return a.wheelDelta&&(b=a.wheelDelta/120),a.detail&&(b=-a.detail/3),b}},L.Draggable=L.Class.extend({includes:L.Mixin.Events,statics:{START:L.Browser.touch?"touchstart":"mousedown",END:L.Browser.touch?"touchend":"mouseup",MOVE:L.Browser.touch?"touchmove":"mousemove",TAP_TOLERANCE:15},initialize:function(a,b){this._element=a,this._dragStartTarget=b||a},enable:function(){if(this._enabled)return;L.DomEvent.addListener(this._dragStartTarget,L.Draggable.START,this._onDown,this),this._enabled=!0},disable:function(){if(!this._enabled)return;L.DomEvent.removeListener(this._dragStartTarget,L.Draggable.START,this._onDown),this._enabled=!1},_onDown:function(a){if(!L.Browser.touch&&a.shiftKey||a.which!==1&&a.button!==1&&!a.touches)return;if(a.touches&&a.touches.length>1)return;var b=a.touches&&a.touches.length===1?a.touches[0]:a,c=b.target;L.DomEvent.preventDefault(a),L.Browser.touch&&c.tagName.toLowerCase()==="a"&&(c.className+=" leaflet-active"),this._moved=!1;if(this._moving)return;L.Browser.touch||(L.DomUtil.disableTextSelection(),this._setMovingCursor()),this._startPos=this._newPos=L.DomUtil.getPosition(this._element),this._startPoint=new L.Point(b.clientX,b.clientY),L.DomEvent.addListener(document,L.Draggable.MOVE,this._onMove,this),L.DomEvent.addListener(document,L.Draggable.END,this._onUp,this)},_onMove:function(a){if(a.touches&&a.touches.length>1)return;L.DomEvent.preventDefault(a);var b=a.touches&&a.touches.length===1?a.touches[0]:a;this._moved||(this.fire("dragstart"),this._moved=!0),this._moving=!0;var c=new L.Point(b.clientX,b.clientY);this._newPos=this._startPos.add(c).subtract(this._startPoint),L.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)},_updatePosition:function(){this.fire("predrag"),L.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(a){if(a.changedTouches){var b=a.changedTouches[0],c=b.target,d=this._newPos&&this._newPos.distanceTo(this._startPos)||0;c.tagName.toLowerCase()==="a"&&(c.className=c.className.replace(" leaflet-active","")),d<L.Draggable.TAP_TOLERANCE&&this._simulateEvent("click",b)}L.Browser.touch||(L.DomUtil.enableTextSelection(),this._restoreCursor()),L.DomEvent.removeListener(document,L.Draggable.MOVE,this._onMove),L.DomEvent.removeListener(document,L.Draggable.END,this._onUp),this._moved&&this.fire("dragend"),this._moving=!1},_setMovingCursor:function(){this._bodyCursor=document.body.style.cursor,document.body.style.cursor="move"},_restoreCursor:function(){document.body.style.cursor=this._bodyCursor},_simulateEvent:function(a,b){var c=document.createEvent("MouseEvents");c.initMouseEvent(a,!0,!0,window,1,b.screenX,b.screenY,b.clientX,b.clientY,!1,!1,!1,!1,0,null),b.target.dispatchEvent(c)}}),L.Handler=L.Class.extend({initialize:function(a){this._map=a},enable:function(){if(this._enabled)return;this._enabled=!0,this.addHooks()},disable:function(){if(!this._enabled)return;this._enabled=!1,this.removeHooks()},enabled:function(){return!!this._enabled}}),L.Map.Drag=L.Handler.extend({addHooks:function(){if(!this._draggable){this._draggable=new L.Draggable(this._map._mapPane,this._map._container),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this);var a=this._map.options;a.worldCopyJump&&!a.continuousWorld&&(this._draggable.on("predrag",this._onPreDrag,this),this._map.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._map.fire("movestart").fire("dragstart")},_onDrag:function(){this._map.fire("move").fire("drag")},_onViewReset:function(){var a=this._map.getSize().divideBy(2),b=this._map.latLngToLayerPoint(new L.LatLng(0,0));this._initialWorldOffset=b.subtract(a)},_onPreDrag:function(){var a=this._map,b=a.options.scale(a.getZoom()),c=Math.round(b/2),d=this._initialWorldOffset.x,e=this._draggable._newPos.x,f=(e-c+d)%b+c-d,g=(e+c+d)%b-c-d,h=Math.abs(f+d)<Math.abs(g+d)?f:g;this._draggable._newPos.x=h},_onDragEnd:function(){var a=this._map;a.fire("moveend").fire("dragend"),a.options.maxBounds&&L.Util.requestAnimFrame(this._panInsideMaxBounds,a,!0,a._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),L.Map.DoubleClickZoom=L.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(a){this.setView(a.latlng,this._zoom+1)}}),L.Map.ScrollWheelZoom=L.Handler.extend({addHooks:function(){L.DomEvent.addListener(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){L.DomEvent.removeListener(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(a){var b=L.DomEvent.getWheelDelta(a);this._delta+=b,this._lastMousePos=this._map.mouseEventToContainerPoint(a),clearTimeout(this._timer),this._timer=setTimeout(L.Util.bind(this._performZoom,this),50),L.DomEvent.preventDefault(a)},_performZoom:function(){var a=this._map,b=Math.round(this._delta),c=a.getZoom();b=Math.max(Math.min(b,4),-4),b=a._limitZoom(c+b)-c,this._delta=0;if(!b)return;var d=this._getCenterForScrollWheelZoom(this._lastMousePos,b),e=c+b;a.setView(d,e)},_getCenterForScrollWheelZoom:function(a,b){var c=this._map,d=c.getPixelBounds().getCenter(),e=c.getSize().divideBy(2),f=a.subtract(e).multiplyBy(1-Math.pow(2,-b)),g=d.add(f);return c.unproject(g,c._zoom,!0)}}),L.Util.extend(L.DomEvent,{addDoubleTapListener:function(a,b,c){function k(a){if(a.touches.length!==1)return;var b=Date.now(),c=b-(d||b);g=a.touches[0],e=c>0&&c<=f,d=b}function l(a){e&&(g.type="dblclick",b(g),d=null)}var d,e=!1,f=250,g,h="_leaflet_",i="touchstart",j="touchend";a[h+i+c]=k,a[h+j+c]=l,a.addEventListener(i,k,!1),a.addEventListener(j,l,!1)},removeDoubleTapListener:function(a,b){var c="_leaflet_";a.removeEventListener(a,a[c+"touchstart"+b],!1),a.removeEventListener(a,a[c+"touchend"+b],!1)}}),L.Map.TouchZoom=L.Handler.extend({addHooks:function(){L.DomEvent.addListener(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){L.DomEvent.removeListener(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(a){if(!a.touches||a.touches.length!==2||this._map._animatingZoom)return;var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]),d=this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));this._startCenter=b.add(c).divideBy(2,!0),this._startDist=b.distanceTo(c),this._moved=!1,this._zooming=!0,this._centerOffset=d.subtract(this._startCenter),L.DomEvent.addListener(document,"touchmove",this._onTouchMove,this),L.DomEvent.addListener(document,"touchend",this._onTouchEnd,this),L.DomEvent.preventDefault(a)},_onTouchMove:function(a){if(!a.touches||a.touches.length!==2)return;this._moved||(this._map._mapPane.className+=" leaflet-zoom-anim",this._map.fire("zoomstart").fire("movestart")._prepareTileBg(),this._moved=!0);var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]);this._scale=b.distanceTo(c)/this._startDist,this._delta=b.add(c).divideBy(2,!0).subtract(this._startCenter),this._map._tileBg.style.webkitTransform=[L.DomUtil.getTranslateString(this._delta),L.DomUtil.getScaleString(this._scale,this._startCenter)].join(" "),L.DomEvent.preventDefault(a)},_onTouchEnd:function(a){if(!this._moved||!this._zooming)return;this._zooming=!1;var b=this._map.getZoom(),c=Math.log(this._scale)/Math.LN2,d=c>0?Math.ceil(c):Math.floor(c),e=this._map._limitZoom(b+d),f=e-b,g=this._centerOffset.subtract(this._delta).divideBy(this._scale),h=this._map.getPixelOrigin().add(this._startCenter).add(g),i=this._map.unproject(h);L.DomEvent.removeListener(document,"touchmove",this._onTouchMove),L.DomEvent.removeListener(document,"touchend",this._onTouchEnd);var j=Math.pow(2,f);this._map._runAnimation(i,e,j/this._scale,this._startCenter.add(g))}}),L.Map.BoxZoom=L.Handler.extend({initialize:function(a){this._map=a,this._container=a._container,this._pane=a._panes.overlayPane},addHooks:function(){L.DomEvent.addListener(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.removeListener(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(a){if(!a.shiftKey||a.which!==1&&a.button!==1)return!1;L.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(a),this._box=L.DomUtil.create("div","leaflet-zoom-box",this._pane),L.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",L.DomEvent.addListener(document,"mousemove",this._onMouseMove,this),L.DomEvent.addListener(document,"mouseup",this._onMouseUp,this),L.DomEvent.preventDefault(a)},_onMouseMove:function(a){var b=this._map.mouseEventToLayerPoint(a),c=b.x-this._startLayerPoint.x,d=b.y-this._startLayerPoint.y,e=Math.min(b.x,this._startLayerPoint.x),f=Math.min(b.y,this._startLayerPoint.y),g=new L.Point(e,f);L.DomUtil.setPosition(this._box,g),this._box.style.width=Math.abs(c)-4+"px",this._box.style.height=Math.abs(d)-4+"px"},_onMouseUp:function(a){this._pane.removeChild(this._box),this._container.style.cursor="",L.DomUtil.enableTextSelection(),L.DomEvent.removeListener(document,"mousemove",this._onMouseMove),L.DomEvent.removeListener(document,"mouseup",this._onMouseUp);var b=this._map.mouseEventToLayerPoint(a),c=new L.LatLngBounds(this._map.layerPointToLatLng(this._startLayerPoint),this._map.layerPointToLatLng(b));this._map.fitBounds(c)}}),L.Handler.MarkerDrag=L.Handler.extend({initialize:function(a){this._marker=a},addHooks:function(){var a=this._marker._icon;this._draggable||(this._draggable=new L.Draggable(a,a),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(a){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(a){var b=L.DomUtil.getPosition(this._marker._icon);this._marker._shadow&&L.DomUtil.setPosition(this._marker._shadow,b),this._marker._latlng=this._marker._map.layerPointToLatLng(b),this._marker.fire("move").fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),L.Control={},L.Control.Position={TOP_LEFT:"topLeft",TOP_RIGHT:"topRight",BOTTOM_LEFT:"bottomLeft",BOTTOM_RIGHT:"bottomRight"},L.Map.include({addControl:function(a){a.onAdd(this);var b=a.getPosition(),c=this._controlCorners[b],d=a.getContainer();return L.DomUtil.addClass(d,"leaflet-control"),b.indexOf("bottom")!==-1?c.insertBefore(d,c.firstChild):c.appendChild(d),this},removeControl:function(a){var b=a.getPosition(),c=this._controlCorners[b],d=a.getContainer();return c.removeChild(d),a.onRemove&&a.onRemove(this),this},_initControlPos:function(){var a=this._controlCorners={},b="leaflet-",c=b+"top",d=b+"bottom",e=b+"left",f=b+"right",g=L.DomUtil.create("div",b+"control-container",this._container);L.Browser.touch&&(g.className+=" "+b+"big-buttons"),a.topLeft=L.DomUtil.create("div",c+" "+e,g),a.topRight=L.DomUtil.create("div",c+" "+f,g),a.bottomLeft=L.DomUtil.create("div",d+" "+e,g),a.bottomRight=L.DomUtil.create("div",d+" "+f,g)}}),L.Control.Zoom=L.Class.extend({onAdd:function(a){this._map=a,this._container=L.DomUtil.create("div","leaflet-control-zoom"),this._zoomInButton=this._createButton("Zoom in","leaflet-control-zoom-in",this._map.zoomIn,this._map),this._zoomOutButton=this._createButton("Zoom out","leaflet-control-zoom-out",this._map.zoomOut,this._map),this._container.appendChild(this._zoomInButton),this._container.appendChild(this._zoomOutButton)},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_LEFT},_createButton:function(a,b,c,d){var e=document.createElement("a");return e.href="#",e.title=a,e.className=b,L.DomEvent.disableClickPropagation(e),L.DomEvent.addListener(e,"click",L.DomEvent.preventDefault),L.DomEvent.addListener(e,"click",c,d),e}}),L.Control.Attribution=L.Class.extend({initialize:function(a){this._prefix=a||'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>',this._attributions={}},onAdd:function(a){this._container=L.DomUtil.create("div","leaflet-control-attribution"),L.DomEvent.disableClickPropagation(this._container),this._map=a,this._update()},getPosition:function(){return L.Control.Position.BOTTOM_RIGHT},getContainer:function(){return this._container},setPrefix:function(a){this._prefix=a,this._update()},addAttribution:function(a){if(!a)return;this._attributions[a]=!0,this._update()},removeAttribution:function(a){if(!a)return;delete this._attributions[a],this._update()},_update:function(){if(!this._map)return;var a=[];for(var b in this._attributions)this._attributions.hasOwnProperty(b)&&a.push(b);var c=[];this._prefix&&c.push(this._prefix),a.length&&c.push(a.join(", ")),this._container.innerHTML=c.join(" — ")}}),L.Control.Layers=L.Class.extend({options:{collapsed:!L.Browser.touch},initialize:function(a,b,c){L.Util.setOptions(this,c),this._layers={};for(var d in a)a.hasOwnProperty(d)&&this._addLayer(a[d],d);for(d in b)b.hasOwnProperty(d)&&this._addLayer(b[d],d,!0)},onAdd:function(a){this._map=a,this._initLayout(),this._update()},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_RIGHT},addBaseLayer:function(a,b){return this._addLayer(a,b),this._update(),this},addOverlay:function(a,b){return this._addLayer(a,b,!0),this._update(),this},removeLayer:function(a){var b=L.Util.stamp(a);return delete this._layers[b],this._update(),this},_initLayout:function(){this._container=L.DomUtil.create("div","leaflet-control-layers"),L.DomEvent.disableClickPropagation(this._container),this._form=L.DomUtil.create("form","leaflet-control-layers-list");if(this.options.collapsed){L.DomEvent.addListener(this._container,"mouseover",this._expand,this),L.DomEvent.addListener(this._container,"mouseout",this._collapse,this);var a=this._layersLink=L.DomUtil.create("a","leaflet-control-layers-toggle");a.href="#",a.title="Layers",L.DomEvent.addListener(a,"focus",this._expand,this),L.DomEvent.addListener(this._map,L.Draggable.START,this._collapse,this),this._container.appendChild(a)}else this._expand();this._baseLayersList=L.DomUtil.create("div","leaflet-control-layers-base",this._form),this._separator=L.DomUtil.create("div","leaflet-control-layers-separator",this._form),this._overlaysList=L.DomUtil.create("div","leaflet-control-layers-overlays",this._form),this._container.appendChild(this._form)},_addLayer:function(a,b,c){var d=L.Util.stamp(a);this._layers[d]={layer:a,name:b,overlay:c}},_update:function(){if(!this._container)return;this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var a=!1,b=!1;for(var c in this._layers)if(this._layers.hasOwnProperty(c)){var d=this._layers[c];this._addItem(d),b=b||d.overlay,a=a||!d.overlay}this._separator.style.display=b&&a?"":"none"},_addItem:function(a,b){var c=document.createElement("label"),d=document.createElement("input");a.overlay||(d.name="leaflet-base-layers"),d.type=a.overlay?"checkbox":"radio",d.checked=this._map.hasLayer(a.layer),d.layerId=L.Util.stamp(a.layer),L.DomEvent.addListener(d,"click",this._onInputClick,this);var e=document.createTextNode(" "+a.name);c.appendChild(d),c.appendChild(e);var f=a.overlay?this._overlaysList:this._baseLayersList;f.appendChild(c)},_onInputClick:function(){var a,b,c,d=this._form.getElementsByTagName("input"),e=d.length;for(a=0;a<e;a++)b=d[a],c=this._layers[b.layerId],b.checked?this._map.addLayer(c.layer,!c.overlay):this._map.removeLayer(c.layer)},_expand:function(){L.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),L.Transition=L.Class.extend({includes:L.Mixin.Events,statics:{CUSTOM_PROPS_SETTERS:{position:L.DomUtil.setPosition},implemented:function(){return L.Transition.NATIVE||L.Transition.TIMER}},options:{easing:"ease",duration:.5},_setProperty:function(a,b){var c=L.Transition.CUSTOM_PROPS_SETTERS;a in c?c[a](this._el,b):this._el.style[a]=b}}),L.Transition=L.Transition.extend({statics:function(){var a=L.DomUtil.TRANSITION,b=a==="webkitTransition"||a==="OTransition"?a+"End":"transitionend";return{NATIVE:!!a,TRANSITION:a,PROPERTY:a+"Property",DURATION:a+"Duration",EASING:a+"TimingFunction",END:b,CUSTOM_PROPS_PROPERTIES:{position:L.Browser.webkit?L.DomUtil.TRANSFORM:"top, left"}}}(),options:{fakeStepInterval:100},initialize:function(a,b){this._el=a,L.Util.setOptions(this,b),L.DomEvent.addListener(a,L.Transition.END,this._onTransitionEnd,this),this._onFakeStep=L.Util.bind(this._onFakeStep,this)},run:function(a){var b,c=[],d=L.Transition.CUSTOM_PROPS_PROPERTIES;for(b in a)a.hasOwnProperty(b)&&(b=d[b]?d[b]:b,b=this._dasherize(b),c.push(b));this._el.style[L.Transition.DURATION]=this.options.duration+"s",this._el.style[L.Transition.EASING]=this.options.easing,this._el.style[L.Transition.PROPERTY]=c.join(", ");for(b in a)a.hasOwnProperty(b)&&this._setProperty(b,a[b]);this._inProgress=!0,this.fire("start"),L.Transition.NATIVE?(clearInterval(this._timer),this._timer=setInterval(this._onFakeStep,this.options.fakeStepInterval)):this._onTransitionEnd()},_dasherize:function(){function b(a){return"-"+a.toLowerCase()}var a=/([A-Z])/g;return function(c){return c.replace(a,b)}}(),_onFakeStep:function(){this.fire("step")},_onTransitionEnd:function(){this._inProgress&&(this._inProgress=!1,clearInterval(this._timer),this._el.style[L.Transition.PROPERTY]="none",this.fire("step"),this.fire("end"))}}),L.Transition=L.Transition.NATIVE?L.Transition:L.Transition.extend({statics:{getTime:Date.now||function(){return+(new Date)},TIMER:!0,EASINGS:{ease:[.25,.1,.25,1],linear:[0,0,1,1],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]},CUSTOM_PROPS_GETTERS:{position:L.DomUtil.getPosition},UNIT_RE:/^[\d\.]+(\D*)$/},options:{fps:50},initialize:function(a,b){this._el=a,L.Util.extend(this.options,b);var c=L.Transition.EASINGS[this.options.easing]||L.Transition.EASINGS.ease;this._p1=new L.Point(0,0),this._p2=new L.Point(c[0],c[1]),this._p3=new L.Point(c[2],c[3]),this._p4=new L.Point(1,1),this._step=L.Util.bind(this._step,this),this._interval=Math.round(1e3/this.options.fps)},run:function(a){this._props={};var b=L.Transition.CUSTOM_PROPS_GETTERS,c=L.Transition.UNIT_RE;this.fire("start");for(var d in a)if(a.hasOwnProperty(d)){var e={};if(d in b)e.from=b[d](this._el);else{var f=this._el.style[d].match(c);e.from=parseFloat(f[0]),e.unit=f[1]}e.to=a[d],this._props[d]=e}clearInterval(this._timer),this._timer=setInterval(this._step,this._interval),this._startTime=L.Transition.getTime()},_step:function(){var a=L.Transition.getTime(),b=a-this._startTime,c=this.options.duration*1e3;b<c?this._runFrame(this._cubicBezier(b/c)):(this._runFrame(1),this._complete())},_runFrame:function(a){var b=L.Transition.CUSTOM_PROPS_SETTERS,c,d,e;for(c in this._props)this._props.hasOwnProperty(c)&&(d=this._props[c],c in b?(e=d.to.subtract(d.from).multiplyBy(a).add(d.from),b[c](this._el,e)):this._el.style[c]=(d.to-d.from)*a+d.from+d.unit);this.fire("step")},_complete:function(){clearInterval(this._timer),this.fire("end")},_cubicBezier:function(a){var b=Math.pow(1-a,3),c=3*Math.pow(1-a,2)*a,d=3*(1-a)*Math.pow(a,2),e=Math.pow(a,3),f=this._p1.multiplyBy(b),g=this._p2.multiplyBy(c),h=this._p3.multiplyBy(d),i=this._p4.multiplyBy(e);return f.add(g).add(h).add(i).y}}),L.Map.include(!L.Transition||!L.Transition.implemented()?{}:{setView:function(a,b,c){b=this._limitZoom(b);var d=this._zoom!==b;if(this._loaded&&!c&&this._layers){var e=this._getNewTopLeftPoint(a).subtract(this._getTopLeftPoint());a=new L.LatLng(a.lat,a.lng);var f=d?!!this._zoomToIfCenterInView&&this._zoomToIfCenterInView(a,b,e):this._panByIfClose(e);if(f)return this}return this._resetView(a,b),this},panBy:function(a){return!a.x&&!a.y?this:(this._panTransition||(this._panTransition=new L.Transition(this._mapPane,{duration:.3}),this._panTransition.on("step",this._onPanTransitionStep,this),this._panTransition.on("end",this._onPanTransitionEnd,this)),this.fire("movestart"),this._panTransition.run({position:L.DomUtil.getPosition(this._mapPane).subtract(a)}),this)},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){this.fire("moveend")},_panByIfClose:function(a){return this._offsetIsWithinView(a)?(this.panBy(a),!0):!1},_offsetIsWithinView:function(a,b){var c=b||1,d=this.getSize();return Math.abs(a.x)<=d.x*c&&Math.abs(a.y)<=d.y*c}}),L.Map.include(L.DomUtil.TRANSITION?{_zoomToIfCenterInView:function(a,b,c){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var d=b-this._zoom,e=Math.pow(2,d),f=c.divideBy(1-1/e);if(!this._offsetIsWithinView(f,1))return!1;this._mapPane.className+=" leaflet-zoom-anim",this.fire("movestart").fire("zoomstart");var g=this.containerPointToLayerPoint(this.getSize().divideBy(2)),h=g.add(f);return this._prepareTileBg(),this._runAnimation(a,b,e,h),!0},_runAnimation:function(a,b,c,d){this._animatingZoom=!0,this._animateToCenter=a,this._animateToZoom=b;var e=L.DomUtil.TRANSFORM;if(L.Browser.gecko||window.opera)this._tileBg.style[e]+=" translate(0,0)";var f;L.Browser.android?(this._tileBg.style[e+"Origin"]=d.x+"px "+d.y+"px",f="scale("+c+")"):f=L.DomUtil.getScaleString(c,d),L.Util.falseFn(this._tileBg.offsetWidth);var g={};g[e]=this._tileBg.style[e]+" "+f,this._tileBg.transition.run(g)},_prepareTileBg:function(){this._tileBg||(this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),this._tileBg.style.zIndex=1);var a=this._tilePane,b=this._tileBg;b.style[L.DomUtil.TRANSFORM]="",b.style.visibility="hidden",b.empty=!0,a.empty=!1,this._tilePane=this._panes.tilePane=b,this._tileBg=a,this._tileBg.transition||(this._tileBg.transition=new L.Transition(this._tileBg,{duration:.3,easing:"cubic-bezier(0.25,0.1,0.25,0.75)"}),this._tileBg.transition.on("end",this._onZoomTransitionEnd,this)),this._stopLoadingBgTiles()},_stopLoadingBgTiles:function(){var a=[].slice.call(this._tileBg.getElementsByTagName("img"));for(var b=0,c=a.length;b<c;b++)a[b].complete||(a[b].parentNode.removeChild(a[b]),a[b]=null)},_onZoomTransitionEnd:function(){this._restoreTileFront(),L.Util.falseFn(this._tileBg.offsetWidth),this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),this._mapPane.className=this._mapPane.className.replace(" leaflet-zoom-anim",""),this._animatingZoom=!1},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){!this._animatingZoom&&!this.touchZoom._zooming&&(this._tileBg.innerHTML="")}}:{}),L.Map.include({locate:function(a){this._locationOptions=a=L.Util.extend({watch:!1,setView:!1,maxZoom:Infinity,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},a);if(!navigator.geolocation)return this.fire("locationerror",{code:0,message:"Geolocation not supported."});var b=L.Util.bind(this._handleGeolocationResponse,this),c=L.Util.bind(this._handleGeolocationError,this);return a.watch?this._locationWatchId=navigator.geolocation.watchPosition(b,c,a):navigator.geolocation.getCurrentPosition(b,c,a),this},stopLocate:function(){navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId)},locateAndSetView:function(a,b){return b=L.Util.extend({maxZoom:a||Infinity,setView:!0},b),this.locate(b)},_handleGeolocationError:function(a){var b=a.code,c=b===1?"permission denied":b===2?"position unavailable":"timeout";this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:b,message:"Geolocation error: "+c+"."})},_handleGeolocationResponse:function(a){var b=180*a.coords.accuracy/4e7,c=b*2,d=a.coords.latitude,e=a.coords.longitude,f=new L.LatLng(d,e),g=new L.LatLng(d-b,e-c),h=new L.LatLng(d+b,e+c),i=new L.LatLngBounds(g,h);if(this._locationOptions.setView){var j=Math.min(this.getBoundsZoom(i),this._locationOptions.maxZoom);this.setView(f,j)}this.fire("locationfound",{latlng:f,bounds:i,accuracy:a.coords.accuracy})}});
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/mustache.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,436 @@
+/*
+ mustache.js — Logic-less templates in JavaScript
+
+ See http://mustache.github.com/ for more info.
+*/
+
+var Mustache = function () {
+ var _toString = Object.prototype.toString;
+
+ Array.isArray = Array.isArray || function (obj) {
+ return _toString.call(obj) == "[object Array]";
+ }
+
+ var _trim = String.prototype.trim, trim;
+
+ if (_trim) {
+ trim = function (text) {
+ return text == null ? "" : _trim.call(text);
+ }
+ } else {
+ var trimLeft, trimRight;
+
+ // IE doesn't match non-breaking spaces with \s.
+ if ((/\S/).test("\xA0")) {
+ trimLeft = /^[\s\xA0]+/;
+ trimRight = /[\s\xA0]+$/;
+ } else {
+ trimLeft = /^\s+/;
+ trimRight = /\s+$/;
+ }
+
+ trim = function (text) {
+ return text == null ? "" :
+ text.toString().replace(trimLeft, "").replace(trimRight, "");
+ }
+ }
+
+ var escapeMap = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ '"': '"',
+ "'": '''
+ };
+
+ function escapeHTML(string) {
+ return String(string).replace(/&(?!\w+;)|[<>"']/g, function (s) {
+ return escapeMap[s] || s;
+ });
+ }
+
+ var regexCache = {};
+ var Renderer = function () {};
+
+ Renderer.prototype = {
+ otag: "{{",
+ ctag: "}}",
+ pragmas: {},
+ buffer: [],
+ pragmas_implemented: {
+ "IMPLICIT-ITERATOR": true
+ },
+ context: {},
+
+ render: function (template, context, partials, in_recursion) {
+ // reset buffer & set context
+ if (!in_recursion) {
+ this.context = context;
+ this.buffer = []; // TODO: make this non-lazy
+ }
+
+ // fail fast
+ if (!this.includes("", template)) {
+ if (in_recursion) {
+ return template;
+ } else {
+ this.send(template);
+ return;
+ }
+ }
+
+ // get the pragmas together
+ template = this.render_pragmas(template);
+
+ // render the template
+ var html = this.render_section(template, context, partials);
+
+ // render_section did not find any sections, we still need to render the tags
+ if (html === false) {
+ html = this.render_tags(template, context, partials, in_recursion);
+ }
+
+ if (in_recursion) {
+ return html;
+ } else {
+ this.sendLines(html);
+ }
+ },
+
+ /*
+ Sends parsed lines
+ */
+ send: function (line) {
+ if (line !== "") {
+ this.buffer.push(line);
+ }
+ },
+
+ sendLines: function (text) {
+ if (text) {
+ var lines = text.split("\n");
+ for (var i = 0; i < lines.length; i++) {
+ this.send(lines[i]);
+ }
+ }
+ },
+
+ /*
+ Looks for %PRAGMAS
+ */
+ render_pragmas: function (template) {
+ // no pragmas
+ if (!this.includes("%", template)) {
+ return template;
+ }
+
+ var that = this;
+ var regex = this.getCachedRegex("render_pragmas", function (otag, ctag) {
+ return new RegExp(otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + ctag, "g");
+ });
+
+ return template.replace(regex, function (match, pragma, options) {
+ if (!that.pragmas_implemented[pragma]) {
+ throw({message:
+ "This implementation of mustache doesn't understand the '" +
+ pragma + "' pragma"});
+ }
+ that.pragmas[pragma] = {};
+ if (options) {
+ var opts = options.split("=");
+ that.pragmas[pragma][opts[0]] = opts[1];
+ }
+ return "";
+ // ignore unknown pragmas silently
+ });
+ },
+
+ /*
+ Tries to find a partial in the curent scope and render it
+ */
+ render_partial: function (name, context, partials) {
+ name = trim(name);
+ if (!partials || partials[name] === undefined) {
+ throw({message: "unknown_partial '" + name + "'"});
+ }
+ if (!context || typeof context[name] != "object") {
+ return this.render(partials[name], context, partials, true);
+ }
+ return this.render(partials[name], context[name], partials, true);
+ },
+
+ /*
+ Renders inverted (^) and normal (#) sections
+ */
+ render_section: function (template, context, partials) {
+ if (!this.includes("#", template) && !this.includes("^", template)) {
+ // did not render anything, there were no sections
+ return false;
+ }
+
+ var that = this;
+
+ var regex = this.getCachedRegex("render_section", function (otag, ctag) {
+ // This regex matches _the first_ section ({{#foo}}{{/foo}}), and captures the remainder
+ return new RegExp(
+ "^([\\s\\S]*?)" + // all the crap at the beginning that is not {{*}} ($1)
+
+ otag + // {{
+ "(\\^|\\#)\\s*(.+)\\s*" + // #foo (# == $2, foo == $3)
+ ctag + // }}
+
+ "\n*([\\s\\S]*?)" + // between the tag ($2). leading newlines are dropped
+
+ otag + // {{
+ "\\/\\s*\\3\\s*" + // /foo (backreference to the opening tag).
+ ctag + // }}
+
+ "\\s*([\\s\\S]*)$", // everything else in the string ($4). leading whitespace is dropped.
+
+ "g");
+ });
+
+
+ // for each {{#foo}}{{/foo}} section do...
+ return template.replace(regex, function (match, before, type, name, content, after) {
+ // before contains only tags, no sections
+ var renderedBefore = before ? that.render_tags(before, context, partials, true) : "",
+
+ // after may contain both sections and tags, so use full rendering function
+ renderedAfter = after ? that.render(after, context, partials, true) : "",
+
+ // will be computed below
+ renderedContent,
+
+ value = that.find(name, context);
+
+ if (type === "^") { // inverted section
+ if (!value || Array.isArray(value) && value.length === 0) {
+ // false or empty list, render it
+ renderedContent = that.render(content, context, partials, true);
+ } else {
+ renderedContent = "";
+ }
+ } else if (type === "#") { // normal section
+ if (Array.isArray(value)) { // Enumerable, Let's loop!
+ renderedContent = that.map(value, function (row) {
+ return that.render(content, that.create_context(row), partials, true);
+ }).join("");
+ } else if (that.is_object(value)) { // Object, Use it as subcontext!
+ renderedContent = that.render(content, that.create_context(value),
+ partials, true);
+ } else if (typeof value == "function") {
+ // higher order section
+ renderedContent = value.call(context, content, function (text) {
+ return that.render(text, context, partials, true);
+ });
+ } else if (value) { // boolean section
+ renderedContent = that.render(content, context, partials, true);
+ } else {
+ renderedContent = "";
+ }
+ }
+
+ return renderedBefore + renderedContent + renderedAfter;
+ });
+ },
+
+ /*
+ Replace {{foo}} and friends with values from our view
+ */
+ render_tags: function (template, context, partials, in_recursion) {
+ // tit for tat
+ var that = this;
+
+ var new_regex = function () {
+ return that.getCachedRegex("render_tags", function (otag, ctag) {
+ return new RegExp(otag + "(=|!|>|&|\\{|%)?([^#\\^]+?)\\1?" + ctag + "+", "g");
+ });
+ };
+
+ var regex = new_regex();
+ var tag_replace_callback = function (match, operator, name) {
+ switch(operator) {
+ case "!": // ignore comments
+ return "";
+ case "=": // set new delimiters, rebuild the replace regexp
+ that.set_delimiters(name);
+ regex = new_regex();
+ return "";
+ case ">": // render partial
+ return that.render_partial(name, context, partials);
+ case "{": // the triple mustache is unescaped
+ case "&": // & operator is an alternative unescape method
+ return that.find(name, context);
+ default: // escape the value
+ return escapeHTML(that.find(name, context));
+ }
+ };
+ var lines = template.split("\n");
+ for(var i = 0; i < lines.length; i++) {
+ lines[i] = lines[i].replace(regex, tag_replace_callback, this);
+ if (!in_recursion) {
+ this.send(lines[i]);
+ }
+ }
+
+ if (in_recursion) {
+ return lines.join("\n");
+ }
+ },
+
+ set_delimiters: function (delimiters) {
+ var dels = delimiters.split(" ");
+ this.otag = this.escape_regex(dels[0]);
+ this.ctag = this.escape_regex(dels[1]);
+ },
+
+ escape_regex: function (text) {
+ // thank you Simon Willison
+ if (!arguments.callee.sRE) {
+ var specials = [
+ '/', '.', '*', '+', '?', '|',
+ '(', ')', '[', ']', '{', '}', '\\'
+ ];
+ arguments.callee.sRE = new RegExp(
+ '(\\' + specials.join('|\\') + ')', 'g'
+ );
+ }
+ return text.replace(arguments.callee.sRE, '\\$1');
+ },
+
+ /*
+ find `name` in current `context`. That is find me a value
+ from the view object
+ */
+ find: function (name, context) {
+ name = trim(name);
+
+ // Checks whether a value is thruthy or false or 0
+ function is_kinda_truthy(bool) {
+ return bool === false || bool === 0 || bool;
+ }
+
+ var value;
+
+ // check for dot notation eg. foo.bar
+ if (name.match(/([a-z_]+)\./ig)) {
+ var childValue = this.walk_context(name, context);
+ if (is_kinda_truthy(childValue)) {
+ value = childValue;
+ }
+ } else {
+ if (is_kinda_truthy(context[name])) {
+ value = context[name];
+ } else if (is_kinda_truthy(this.context[name])) {
+ value = this.context[name];
+ }
+ }
+
+ if (typeof value == "function") {
+ return value.apply(context);
+ }
+ if (value !== undefined) {
+ return value;
+ }
+ // silently ignore unkown variables
+ return "";
+ },
+
+ walk_context: function (name, context) {
+ var path = name.split('.');
+ // if the var doesn't exist in current context, check the top level context
+ var value_context = (context[path[0]] != undefined) ? context : this.context;
+ var value = value_context[path.shift()];
+ while (value != undefined && path.length > 0) {
+ value_context = value;
+ value = value[path.shift()];
+ }
+ // if the value is a function, call it, binding the correct context
+ if (typeof value == "function") {
+ return value.apply(value_context);
+ }
+ return value;
+ },
+
+ // Utility methods
+
+ /* includes tag */
+ includes: function (needle, haystack) {
+ return haystack.indexOf(this.otag + needle) != -1;
+ },
+
+ // by @langalex, support for arrays of strings
+ create_context: function (_context) {
+ if (this.is_object(_context)) {
+ return _context;
+ } else {
+ var iterator = ".";
+ if (this.pragmas["IMPLICIT-ITERATOR"]) {
+ iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
+ }
+ var ctx = {};
+ ctx[iterator] = _context;
+ return ctx;
+ }
+ },
+
+ is_object: function (a) {
+ return a && typeof a == "object";
+ },
+
+ /*
+ Why, why, why? Because IE. Cry, cry cry.
+ */
+ map: function (array, fn) {
+ if (typeof array.map == "function") {
+ return array.map(fn);
+ } else {
+ var r = [];
+ var l = array.length;
+ for(var i = 0; i < l; i++) {
+ r.push(fn(array[i]));
+ }
+ return r;
+ }
+ },
+
+ getCachedRegex: function (name, generator) {
+ var byOtag = regexCache[this.otag];
+ if (!byOtag) {
+ byOtag = regexCache[this.otag] = {};
+ }
+
+ var byCtag = byOtag[this.ctag];
+ if (!byCtag) {
+ byCtag = byOtag[this.ctag] = {};
+ }
+
+ var regex = byCtag[name];
+ if (!regex) {
+ regex = byCtag[name] = generator(this.otag, this.ctag);
+ }
+
+ return regex;
+ }
+ };
+
+ return({
+ name: "mustache.js",
+ version: "0.5.0-dev",
+
+ /*
+ Turns a template and view into HTML
+ */
+ to_html: function (template, view, partials, send_fun) {
+ var renderer = new Renderer();
+ if (send_fun) {
+ renderer.send = send_fun;
+ }
+ renderer.render(template, view || {}, partials);
+ if (!send_fun) {
+ return renderer.buffer.join("\n");
+ }
+ }
+ });
+}();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/raphael-min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,116 @@
+/*
+ * Raphael 1.4.7 - JavaScript Vector Library
+ *
+ * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael=function(){function l(){if(l.is(arguments[0],U)){for(var a=arguments[0],b=Ca[K](l,a.splice(0,3+l.is(a[0],P))),c=b.set(),d=0,f=a[o];d<f;d++){var e=a[d]||{};sb.test(e.type)&&c[F](b[e.type]().attr(e))}return c}return Ca[K](l,arguments)}l.version="1.4.7";var V=/[, ]+/,sb=/^(circle|rect|path|ellipse|text|image)$/,p="prototype",z="hasOwnProperty",C=document,aa=window,Qa={was:Object[p][z].call(aa,"Raphael"),is:aa.Raphael};function H(){}var x="appendChild",K="apply",M="concat",Da="createTouch"in C,
+A="",N=" ",D=String,G="split",Ra="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[G](N),Ea={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},R="join",o="length",fa=String[p].toLowerCase,v=Math,Y=v.max,ba=v.min,P="number",ga="string",U="array",O="toString",ca="fill",tb=Object[p][O],E=v.pow,F="push",ja=/^(?=[\da-f]$)/,Sa=/^url\(['"]?([^\)]+?)['"]?\)$/i,ub=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+(?:\s*,\s*[\d\.]+)?)\s*\)|rgba?\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%(?:\s*,\s*[\d\.]+%)?)\s*\)|hsb\(\s*([\d\.]+(?:deg|\xb0)?\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hsb\(\s*([\d\.]+(?:deg|\xb0|%)\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hsl\(\s*([\d\.]+(?:deg|\xb0)?\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hsl\(\s*([\d\.]+(?:deg|\xb0|%)\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i,
+Q=v.round,W="setAttribute",y=parseFloat,ha=parseInt,Fa=" progid:DXImageTransform.Microsoft",sa=String[p].toUpperCase,ta={blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt",
+"stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",translation:"0 0",width:0,x:0,y:0},Ga={along:"along",blur:P,"clip-rect":"csv",cx:P,cy:P,fill:"colour","fill-opacity":P,"font-size":P,height:P,opacity:P,path:"path",r:P,rotation:"csv",rx:P,ry:P,scale:"csv",stroke:"colour","stroke-opacity":P,"stroke-width":P,translation:"csv",width:P,x:P,y:P},I="replace";l.type=aa.SVGAngle||C.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure",
+"1.1")?"SVG":"VML";if(l.type=="VML"){var da=C.createElement("div");da.innerHTML='<v:shape adj="1"/>';da=da.firstChild;da.style.behavior="url(#default#VML)";if(!(da&&typeof da.adj=="object"))return l.type=null;da=null}l.svg=!(l.vml=l.type=="VML");H[p]=l[p];l._id=0;l._oid=0;l.fn={};l.is=function(a,b){b=fa.call(b);return b=="object"&&a===Object(a)||b=="undefined"&&typeof a==b||b=="null"&&a==null||b=="array"&&Array.isArray&&Array.isArray(a)||fa.call(tb.call(a).slice(8,-1))==b};l.setWindow=function(a){aa=
+a;C=aa.document};function ua(a){if(l.vml){var b=/^\s+|\s+$/g;ua=Z(function(d){var f;d=D(d)[I](b,A);try{var e=new aa.ActiveXObject("htmlfile");e.write("<body>");e.close();f=e.body}catch(g){f=aa.createPopup().document.body}e=f.createTextRange();try{f.style.color=d;var h=e.queryCommandValue("ForeColor");h=(h&255)<<16|h&65280|(h&16711680)>>>16;return"#"+("000000"+h[O](16)).slice(-6)}catch(i){return"none"}})}else{var c=C.createElement("i");c.title="Rapha\u00ebl Colour Picker";c.style.display="none";C.body[x](c);
+ua=Z(function(d){c.style.color=d;return C.defaultView.getComputedStyle(c,A).getPropertyValue("color")})}return ua(a)}function Ta(){return"hsb("+[this.h,this.s,this.b]+")"}function vb(){return"hsl("+[this.h,this.s,this.l]+")"}function wb(){return this.hex}l.hsb2rgb=function(a,b,c){if(l.is(a,"object")&&"h"in a&&"s"in a&&"b"in a){c=a.b;b=a.s;a=a.h}return l.hsl2rgb(a,b,c/2)};l.hsl2rgb=function(a,b,c){if(l.is(a,"object")&&"h"in a&&"s"in a&&"l"in a){c=a.l;b=a.s;a=a.h}var d={},f=["r","g","b"],e;if(b){b=
+c<0.5?c*(1+b):c+b-c*b;c=2*c-b;for(var g=0,h=f.length;g<h;g++){e=a+1/3*-(g-1);e<0&&e++;e>1&&e--;d[f[g]]=e*6<1?c+(b-c)*6*e:e*2<1?b:e*3<2?c+(b-c)*(2/3-e)*6:c}}else d={r:c,g:c,b:c};d.r*=255;d.g*=255;d.b*=255;a=(~~d.r)[O](16);f=(~~d.g)[O](16);b=(~~d.b)[O](16);a=a[I](ja,"0");f=f[I](ja,"0");b=b[I](ja,"0");d.hex="#"+a+f+b;d.toString=wb;return d};l.rgb2hsb=function(a,b,c){if(b==null&&l.is(a,"object")&&"r"in a&&"g"in a&&"b"in a){c=a.b;b=a.g;a=a.r}if(b==null&&l.is(a,ga)){var d=l.getRGB(a);a=d.r;b=d.g;c=d.b}if(a>
+1||b>1||c>1){a/=255;b/=255;c/=255}var f=Y(a,b,c),e=ba(a,b,c);d=f;if(e==f)return{h:0,s:0,b:f,toString:Ta};else{var g=f-e;e=g/f;a=a==f?(b-c)/g:b==f?2+(c-a)/g:4+(a-b)/g;a/=6;a<0&&a++;a>1&&a--}return{h:a,s:e,b:d,toString:Ta}};l.rgb2hsl=function(a,b,c){if(b==null&&l.is(a,"object")&&"r"in a&&"g"in a&&"b"in a){c=a.b;b=a.g;a=a.r}if(b==null&&l.is(a,ga)){var d=l.getRGB(a);a=d.r;b=d.g;c=d.b}if(a>1||b>1||c>1){a/=255;b/=255;c/=255}var f=Y(a,b,c),e=ba(a,b,c);d=(f+e)/2;if(e==f)a={h:0,s:0,l:d};else{var g=f-e;e=d<
+0.5?g/(f+e):g/(2-f-e);a=a==f?(b-c)/g:b==f?2+(c-a)/g:4+(a-b)/g;a/=6;a<0&&a++;a>1&&a--;a={h:a,s:e,l:d}}a.toString=vb;return a};var xb=/,?([achlmqrstvxz]),?/gi,ka=/\s*,\s*/,yb={hs:1,rg:1};l._path2string=function(){return this.join(",")[I](xb,"$1")};function Z(a,b,c){function d(){var f=Array[p].slice.call(arguments,0),e=f[R]("\u25ba"),g=d.cache=d.cache||{},h=d.count=d.count||[];if(g[z](e))return c?c(g[e]):g[e];h[o]>=1000&&delete g[h.shift()];h[F](e);g[e]=a[K](b,f);return c?c(g[e]):g[e]}return d}l.getRGB=
+Z(function(a){if(!a||(a=D(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1};if(a=="none")return{r:-1,g:-1,b:-1,hex:"none"};!(yb[z](a.substring(0,2))||a.charAt()=="#")&&(a=ua(a));var b,c,d,f,e;if(a=a.match(ub)){if(a[2]){d=ha(a[2].substring(5),16);c=ha(a[2].substring(3,5),16);b=ha(a[2].substring(1,3),16)}if(a[3]){d=ha((e=a[3].charAt(3))+e,16);c=ha((e=a[3].charAt(2))+e,16);b=ha((e=a[3].charAt(1))+e,16)}if(a[4]){a=a[4][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);f=y(a[3])}if(a[5]){a=a[5][G](ka);b=
+y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;f=y(a[3])}if(a[6]){a=a[6][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360);return l.hsb2rgb(b,c,d)}if(a[7]){a=a[7][G](ka);b=y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360*2.55);return l.hsb2rgb(b,c,d)}if(a[8]){a=a[8][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360);return l.hsl2rgb(b,c,d)}if(a[9]){a=a[9][G](ka);
+b=y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360*2.55);return l.hsl2rgb(b,c,d)}a={r:b,g:c,b:d};b=(~~b)[O](16);c=(~~c)[O](16);d=(~~d)[O](16);b=b[I](ja,"0");c=c[I](ja,"0");d=d[I](ja,"0");a.hex="#"+b+c+d;isFinite(y(f))&&(a.o=f);return a}return{r:-1,g:-1,b:-1,hex:"none",error:1}},l);l.getColor=function(a){a=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||0.75};var b=this.hsb2rgb(a.h,a.s,a.b);a.h+=0.075;if(a.h>1){a.h=0;a.s-=0.2;a.s<=0&&(this.getColor.start=
+{h:0,s:1,b:a.b})}return b.hex};l.getColor.reset=function(){delete this.start};var zb=/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,Ab=/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig;l.parsePathString=Z(function(a){if(!a)return null;var b={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},c=[];if(l.is(a,U)&&l.is(a[0],U))c=va(a);c[o]||D(a)[I](zb,function(d,f,e){var g=[];d=fa.call(f);e[I](Ab,function(h,i){i&&g[F](+i)});if(d=="m"&&g[o]>2){c[F]([f][M](g.splice(0,2)));d="l";f=f=="m"?"l":"L"}for(;g[o]>=
+b[d];){c[F]([f][M](g.splice(0,b[d])));if(!b[d])break}});c[O]=l._path2string;return c});l.findDotsAtSegment=function(a,b,c,d,f,e,g,h,i){var j=1-i,m=E(j,3)*a+E(j,2)*3*i*c+j*3*i*i*f+E(i,3)*g;j=E(j,3)*b+E(j,2)*3*i*d+j*3*i*i*e+E(i,3)*h;var n=a+2*i*(c-a)+i*i*(f-2*c+a),r=b+2*i*(d-b)+i*i*(e-2*d+b),q=c+2*i*(f-c)+i*i*(g-2*f+c),k=d+2*i*(e-d)+i*i*(h-2*e+d);a=(1-i)*a+i*c;b=(1-i)*b+i*d;f=(1-i)*f+i*g;e=(1-i)*e+i*h;h=90-v.atan((n-q)/(r-k))*180/v.PI;(n>q||r<k)&&(h+=180);return{x:m,y:j,m:{x:n,y:r},n:{x:q,y:k},start:{x:a,
+y:b},end:{x:f,y:e},alpha:h}};var xa=Z(function(a){if(!a)return{x:0,y:0,width:0,height:0};a=wa(a);for(var b=0,c=0,d=[],f=[],e,g=0,h=a[o];g<h;g++){e=a[g];if(e[0]=="M"){b=e[1];c=e[2];d[F](b);f[F](c)}else{b=Bb(b,c,e[1],e[2],e[3],e[4],e[5],e[6]);d=d[M](b.min.x,b.max.x);f=f[M](b.min.y,b.max.y);b=e[5];c=e[6]}}a=ba[K](0,d);e=ba[K](0,f);return{x:a,y:e,width:Y[K](0,d)-a,height:Y[K](0,f)-e}});function va(a){var b=[];if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);for(var c=0,d=a[o];c<d;c++){b[c]=[];for(var f=
+0,e=a[c][o];f<e;f++)b[c][f]=a[c][f]}b[O]=l._path2string;return b}var Ha=Z(function(a){if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);var b=[],c=0,d=0,f=0,e=0,g=0;if(a[0][0]=="M"){c=a[0][1];d=a[0][2];f=c;e=d;g++;b[F](["M",c,d])}g=g;for(var h=a[o];g<h;g++){var i=b[g]=[],j=a[g];if(j[0]!=fa.call(j[0])){i[0]=fa.call(j[0]);switch(i[0]){case "a":i[1]=j[1];i[2]=j[2];i[3]=j[3];i[4]=j[4];i[5]=j[5];i[6]=+(j[6]-c).toFixed(3);i[7]=+(j[7]-d).toFixed(3);break;case "v":i[1]=+(j[1]-d).toFixed(3);break;case "m":f=
+j[1];e=j[2];default:for(var m=1,n=j[o];m<n;m++)i[m]=+(j[m]-(m%2?c:d)).toFixed(3)}}else{b[g]=[];if(j[0]=="m"){f=j[1]+c;e=j[2]+d}i=0;for(m=j[o];i<m;i++)b[g][i]=j[i]}j=b[g][o];switch(b[g][0]){case "z":c=f;d=e;break;case "h":c+=+b[g][j-1];break;case "v":d+=+b[g][j-1];break;default:c+=+b[g][j-2];d+=+b[g][j-1]}}b[O]=l._path2string;return b},0,va),oa=Z(function(a){if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);var b=[],c=0,d=0,f=0,e=0,g=0;if(a[0][0]=="M"){c=+a[0][1];d=+a[0][2];f=c;e=d;g++;b[0]=["M",
+c,d]}g=g;for(var h=a[o];g<h;g++){var i=b[g]=[],j=a[g];if(j[0]!=sa.call(j[0])){i[0]=sa.call(j[0]);switch(i[0]){case "A":i[1]=j[1];i[2]=j[2];i[3]=j[3];i[4]=j[4];i[5]=j[5];i[6]=+(j[6]+c);i[7]=+(j[7]+d);break;case "V":i[1]=+j[1]+d;break;case "H":i[1]=+j[1]+c;break;case "M":f=+j[1]+c;e=+j[2]+d;default:for(var m=1,n=j[o];m<n;m++)i[m]=+j[m]+(m%2?c:d)}}else{m=0;for(n=j[o];m<n;m++)b[g][m]=j[m]}switch(i[0]){case "Z":c=f;d=e;break;case "H":c=i[1];break;case "V":d=i[1];break;case "M":f=b[g][b[g][o]-2];e=b[g][b[g][o]-
+1];default:c=b[g][b[g][o]-2];d=b[g][b[g][o]-1]}}b[O]=l._path2string;return b},null,va);function ya(a,b,c,d){return[a,b,c,d,c,d]}function Ua(a,b,c,d,f,e){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*f+h*c,g*e+h*d,f,e]}function Va(a,b,c,d,f,e,g,h,i,j){var m=v.PI,n=m*120/180,r=m/180*(+f||0),q=[],k,t=Z(function(J,ia,za){var Cb=J*v.cos(za)-ia*v.sin(za);J=J*v.sin(za)+ia*v.cos(za);return{x:Cb,y:J}});if(j){w=j[0];k=j[1];e=j[2];B=j[3]}else{k=t(a,b,-r);a=k.x;b=k.y;k=t(h,i,-r);h=k.x;i=k.y;v.cos(m/180*f);v.sin(m/
+180*f);k=(a-h)/2;w=(b-i)/2;B=k*k/(c*c)+w*w/(d*d);if(B>1){B=v.sqrt(B);c=B*c;d=B*d}B=c*c;var L=d*d;B=(e==g?-1:1)*v.sqrt(v.abs((B*L-B*w*w-L*k*k)/(B*w*w+L*k*k)));e=B*c*w/d+(a+h)/2;var B=B*-d*k/c+(b+i)/2,w=v.asin(((b-B)/d).toFixed(7));k=v.asin(((i-B)/d).toFixed(7));w=a<e?m-w:w;k=h<e?m-k:k;w<0&&(w=m*2+w);k<0&&(k=m*2+k);if(g&&w>k)w-=m*2;if(!g&&k>w)k-=m*2}m=k-w;if(v.abs(m)>n){q=k;m=h;L=i;k=w+n*(g&&k>w?1:-1);h=e+c*v.cos(k);i=B+d*v.sin(k);q=Va(h,i,c,d,f,0,g,m,L,[k,q,e,B])}m=k-w;f=v.cos(w);e=v.sin(w);g=v.cos(k);
+k=v.sin(k);m=v.tan(m/4);c=4/3*c*m;m=4/3*d*m;d=[a,b];a=[a+c*e,b-m*f];b=[h+c*k,i-m*g];h=[h,i];a[0]=2*d[0]-a[0];a[1]=2*d[1]-a[1];if(j)return[a,b,h][M](q);else{q=[a,b,h][M](q)[R]()[G](",");j=[];h=0;for(i=q[o];h<i;h++)j[h]=h%2?t(q[h-1],q[h],r).y:t(q[h],q[h+1],r).x;return j}}function la(a,b,c,d,f,e,g,h,i){var j=1-i;return{x:E(j,3)*a+E(j,2)*3*i*c+j*3*i*i*f+E(i,3)*g,y:E(j,3)*b+E(j,2)*3*i*d+j*3*i*i*e+E(i,3)*h}}var Bb=Z(function(a,b,c,d,f,e,g,h){var i=f-2*c+a-(g-2*f+c),j=2*(c-a)-2*(f-c),m=a-c,n=(-j+v.sqrt(j*
+j-4*i*m))/2/i;i=(-j-v.sqrt(j*j-4*i*m))/2/i;var r=[b,h],q=[a,g];v.abs(n)>1000000000000&&(n=0.5);v.abs(i)>1000000000000&&(i=0.5);if(n>0&&n<1){n=la(a,b,c,d,f,e,g,h,n);q[F](n.x);r[F](n.y)}if(i>0&&i<1){n=la(a,b,c,d,f,e,g,h,i);q[F](n.x);r[F](n.y)}i=e-2*d+b-(h-2*e+d);j=2*(d-b)-2*(e-d);m=b-d;n=(-j+v.sqrt(j*j-4*i*m))/2/i;i=(-j-v.sqrt(j*j-4*i*m))/2/i;v.abs(n)>1000000000000&&(n=0.5);v.abs(i)>1000000000000&&(i=0.5);if(n>0&&n<1){n=la(a,b,c,d,f,e,g,h,n);q[F](n.x);r[F](n.y)}if(i>0&&i<1){n=la(a,b,c,d,f,e,g,h,i);
+q[F](n.x);r[F](n.y)}return{min:{x:ba[K](0,q),y:ba[K](0,r)},max:{x:Y[K](0,q),y:Y[K](0,r)}}}),wa=Z(function(a,b){var c=oa(a),d=b&&oa(b);a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};b={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};function f(q,k){var t;if(!q)return["C",k.x,k.y,k.x,k.y,k.x,k.y];!(q[0]in{T:1,Q:1})&&(k.qx=k.qy=null);switch(q[0]){case "M":k.X=q[1];k.Y=q[2];break;case "A":q=["C"][M](Va[K](0,[k.x,k.y][M](q.slice(1))));break;case "S":t=k.x+(k.x-(k.bx||k.x));k=k.y+(k.y-(k.by||k.y));q=["C",t,k][M](q.slice(1));
+break;case "T":k.qx=k.x+(k.x-(k.qx||k.x));k.qy=k.y+(k.y-(k.qy||k.y));q=["C"][M](Ua(k.x,k.y,k.qx,k.qy,q[1],q[2]));break;case "Q":k.qx=q[1];k.qy=q[2];q=["C"][M](Ua(k.x,k.y,q[1],q[2],q[3],q[4]));break;case "L":q=["C"][M](ya(k.x,k.y,q[1],q[2]));break;case "H":q=["C"][M](ya(k.x,k.y,q[1],k.y));break;case "V":q=["C"][M](ya(k.x,k.y,k.x,q[1]));break;case "Z":q=["C"][M](ya(k.x,k.y,k.X,k.Y));break}return q}function e(q,k){if(q[k][o]>7){q[k].shift();for(var t=q[k];t[o];)q.splice(k++,0,["C"][M](t.splice(0,6)));
+q.splice(k,1);i=Y(c[o],d&&d[o]||0)}}function g(q,k,t,L,B){if(q&&k&&q[B][0]=="M"&&k[B][0]!="M"){k.splice(B,0,["M",L.x,L.y]);t.bx=0;t.by=0;t.x=q[B][1];t.y=q[B][2];i=Y(c[o],d&&d[o]||0)}}for(var h=0,i=Y(c[o],d&&d[o]||0);h<i;h++){c[h]=f(c[h],a);e(c,h);d&&(d[h]=f(d[h],b));d&&e(d,h);g(c,d,a,b,h);g(d,c,b,a,h);var j=c[h],m=d&&d[h],n=j[o],r=d&&m[o];a.x=j[n-2];a.y=j[n-1];a.bx=y(j[n-4])||a.x;a.by=y(j[n-3])||a.y;b.bx=d&&(y(m[r-4])||b.x);b.by=d&&(y(m[r-3])||b.y);b.x=d&&m[r-2];b.y=d&&m[r-1]}return d?[c,d]:c},null,
+va),Wa=Z(function(a){for(var b=[],c=0,d=a[o];c<d;c++){var f={},e=a[c].match(/^([^:]*):?([\d\.]*)/);f.color=l.getRGB(e[1]);if(f.color.error)return null;f.color=f.color.hex;e[2]&&(f.offset=e[2]+"%");b[F](f)}c=1;for(d=b[o]-1;c<d;c++)if(!b[c].offset){a=y(b[c-1].offset||0);e=0;for(f=c+1;f<d;f++)if(b[f].offset){e=b[f].offset;break}if(!e){e=100;f=d}e=y(e);for(e=(e-a)/(f-c+1);c<f;c++){a+=e;b[c].offset=a+"%"}}return b});function Xa(a,b,c,d){if(l.is(a,ga)||l.is(a,"object")){a=l.is(a,ga)?C.getElementById(a):
+a;if(a.tagName)return b==null?{container:a,width:a.style.pixelWidth||a.offsetWidth,height:a.style.pixelHeight||a.offsetHeight}:{container:a,width:b,height:c}}else return{container:1,x:a,y:b,width:c,height:d}}function Ia(a,b){var c=this;for(var d in b)if(b[z](d)&&!(d in a))switch(typeof b[d]){case "function":(function(f){a[d]=a===c?f:function(){return f[K](c,arguments)}})(b[d]);break;case "object":a[d]=a[d]||{};Ia.call(this,a[d],b[d]);break;default:a[d]=b[d];break}}function ma(a,b){a==b.top&&(b.top=
+a.prev);a==b.bottom&&(b.bottom=a.next);a.next&&(a.next.prev=a.prev);a.prev&&(a.prev.next=a.next)}function Ya(a,b){if(b.top!==a){ma(a,b);a.next=null;a.prev=b.top;b.top.next=a;b.top=a}}function Za(a,b){if(b.bottom!==a){ma(a,b);a.next=b.bottom;a.prev=null;b.bottom.prev=a;b.bottom=a}}function $a(a,b,c){ma(a,c);b==c.top&&(c.top=a);b.next&&(b.next.prev=a);a.next=b.next;a.prev=b;b.next=a}function ab(a,b,c){ma(a,c);b==c.bottom&&(c.bottom=a);b.prev&&(b.prev.next=a);a.prev=b.prev;b.prev=a;a.next=b}function bb(a){return function(){throw new Error("Rapha\u00ebl: you are calling to method \u201c"+
+a+"\u201d of removed object");}}var cb=/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/;l.pathToRelative=Ha;if(l.svg){H[p].svgns="http://www.w3.org/2000/svg";H[p].xlink="http://www.w3.org/1999/xlink";Q=function(a){return+a+(~~a===a)*0.5};var u=function(a,b){if(b)for(var c in b)b[z](c)&&a[W](c,D(b[c]));else{a=C.createElementNS(H[p].svgns,a);a.style.webkitTapHighlightColor="rgba(0,0,0,0)";return a}};l[O]=function(){return"Your browser supports SVG.\nYou are running Rapha\u00ebl "+this.version};var db=function(a,
+b){var c=u("path");b.canvas&&b.canvas[x](c);b=new s(c,b);b.type="path";ea(b,{fill:"none",stroke:"#000",path:a});return b},pa=function(a,b,c){var d="linear",f=0.5,e=0.5,g=a.style;b=D(b)[I](cb,function(m,n,r){d="radial";if(n&&r){f=y(n);e=y(r);m=(e>0.5)*2-1;E(f-0.5,2)+E(e-0.5,2)>0.25&&(e=v.sqrt(0.25-E(f-0.5,2))*m+0.5)&&e!=0.5&&(e=e.toFixed(5)-1.0E-5*m)}return A});b=b[G](/\s*\-\s*/);if(d=="linear"){var h=b.shift();h=-y(h);if(isNaN(h))return null;h=[0,0,v.cos(h*v.PI/180),v.sin(h*v.PI/180)];var i=1/(Y(v.abs(h[2]),
+v.abs(h[3]))||1);h[2]*=i;h[3]*=i;if(h[2]<0){h[0]=-h[2];h[2]=0}if(h[3]<0){h[1]=-h[3];h[3]=0}}b=Wa(b);if(!b)return null;i=a.getAttribute(ca);(i=i.match(/^url\(#(.*)\)$/))&&c.defs.removeChild(C.getElementById(i[1]));i=u(d+"Gradient");i.id="r"+(l._id++)[O](36);u(i,d=="radial"?{fx:f,fy:e}:{x1:h[0],y1:h[1],x2:h[2],y2:h[3]});c.defs[x](i);c=0;for(h=b[o];c<h;c++){var j=u("stop");u(j,{offset:b[c].offset?b[c].offset:!c?"0%":"100%","stop-color":b[c].color||"#fff"});i[x](j)}u(a,{fill:"url(#"+i.id+")",opacity:1,
+"fill-opacity":1});g.fill=A;g.opacity=1;return g.fillOpacity=1},Ja=function(a){var b=a.getBBox();u(a.pattern,{patternTransform:l.format("translate({0},{1})",b.x,b.y)})},ea=function(a,b){var c={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},d=a.node,f=a.attrs,e=a.rotate();function g(k,t){if(t=c[fa.call(t)]){var L=k.attrs["stroke-width"]||"1";k={round:L,square:L,butt:0}[k.attrs["stroke-linecap"]||
+b["stroke-linecap"]]||0;for(var B=[],w=t[o];w--;)B[w]=t[w]*L+(w%2?1:-1)*k;u(d,{"stroke-dasharray":B[R](",")})}}b[z]("rotation")&&(e=b.rotation);var h=D(e)[G](V);if(h.length-1){h[1]=+h[1];h[2]=+h[2]}else h=null;y(e)&&a.rotate(0,true);for(var i in b)if(b[z](i))if(ta[z](i)){var j=b[i];f[i]=j;switch(i){case "blur":a.blur(j);break;case "rotation":a.rotate(j,true);break;case "href":case "title":case "target":var m=d.parentNode;if(fa.call(m.tagName)!="a"){var n=u("a");m.insertBefore(n,d);n[x](d);m=n}m.setAttributeNS(a.paper.xlink,
+i,j);break;case "cursor":d.style.cursor=j;break;case "clip-rect":m=D(j)[G](V);if(m[o]==4){a.clip&&a.clip.parentNode.parentNode.removeChild(a.clip.parentNode);var r=u("clipPath");n=u("rect");r.id="r"+(l._id++)[O](36);u(n,{x:m[0],y:m[1],width:m[2],height:m[3]});r[x](n);a.paper.defs[x](r);u(d,{"clip-path":"url(#"+r.id+")"});a.clip=n}if(!j){(j=C.getElementById(d.getAttribute("clip-path")[I](/(^url\(#|\)$)/g,A)))&&j.parentNode.removeChild(j);u(d,{"clip-path":A});delete a.clip}break;case "path":if(a.type==
+"path")u(d,{d:j?(f.path=oa(j)):"M0,0"});break;case "width":d[W](i,j);if(f.fx){i="x";j=f.x}else break;case "x":if(f.fx)j=-f.x-(f.width||0);case "rx":if(i=="rx"&&a.type=="rect")break;case "cx":h&&(i=="x"||i=="cx")&&(h[1]+=j-f[i]);d[W](i,j);a.pattern&&Ja(a);break;case "height":d[W](i,j);if(f.fy){i="y";j=f.y}else break;case "y":if(f.fy)j=-f.y-(f.height||0);case "ry":if(i=="ry"&&a.type=="rect")break;case "cy":h&&(i=="y"||i=="cy")&&(h[2]+=j-f[i]);d[W](i,j);a.pattern&&Ja(a);break;case "r":a.type=="rect"?
+u(d,{rx:j,ry:j}):d[W](i,j);break;case "src":a.type=="image"&&d.setAttributeNS(a.paper.xlink,"href",j);break;case "stroke-width":d.style.strokeWidth=j;d[W](i,j);f["stroke-dasharray"]&&g(a,f["stroke-dasharray"]);break;case "stroke-dasharray":g(a,j);break;case "translation":j=D(j)[G](V);j[0]=+j[0]||0;j[1]=+j[1]||0;if(h){h[1]+=j[0];h[2]+=j[1]}Aa.call(a,j[0],j[1]);break;case "scale":j=D(j)[G](V);a.scale(+j[0]||1,+j[1]||+j[0]||1,isNaN(y(j[2]))?null:+j[2],isNaN(y(j[3]))?null:+j[3]);break;case ca:if(m=D(j).match(Sa)){r=
+u("pattern");var q=u("image");r.id="r"+(l._id++)[O](36);u(r,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1});u(q,{x:0,y:0});q.setAttributeNS(a.paper.xlink,"href",m[1]);r[x](q);j=C.createElement("img");j.style.cssText="position:absolute;left:-9999em;top-9999em";j.onload=function(){u(r,{width:this.offsetWidth,height:this.offsetHeight});u(q,{width:this.offsetWidth,height:this.offsetHeight});C.body.removeChild(this);a.paper.safari()};C.body[x](j);j.src=m[1];a.paper.defs[x](r);d.style.fill="url(#"+
+r.id+")";u(d,{fill:"url(#"+r.id+")"});a.pattern=r;a.pattern&&Ja(a);break}m=l.getRGB(j);if(m.error){if(({circle:1,ellipse:1}[z](a.type)||D(j).charAt()!="r")&&pa(d,j,a.paper)){f.gradient=j;f.fill="none";break}}else{delete b.gradient;delete f.gradient;!l.is(f.opacity,"undefined")&&l.is(b.opacity,"undefined")&&u(d,{opacity:f.opacity});!l.is(f["fill-opacity"],"undefined")&&l.is(b["fill-opacity"],"undefined")&&u(d,{"fill-opacity":f["fill-opacity"]})}m[z]("o")&&u(d,{"fill-opacity":m.o/100});case "stroke":m=
+l.getRGB(j);d[W](i,m.hex);i=="stroke"&&m[z]("o")&&u(d,{"stroke-opacity":m.o/100});break;case "gradient":(({circle:1,ellipse:1})[z](a.type)||D(j).charAt()!="r")&&pa(d,j,a.paper);break;case "opacity":case "fill-opacity":if(f.gradient){if(m=C.getElementById(d.getAttribute(ca)[I](/^url\(#|\)$/g,A))){m=m.getElementsByTagName("stop");m[m[o]-1][W]("stop-opacity",j)}break}default:i=="font-size"&&(j=ha(j,10)+"px");m=i[I](/(\-.)/g,function(k){return sa.call(k.substring(1))});d.style[m]=j;d[W](i,j);break}}Db(a,
+b);if(h)a.rotate(h.join(N));else y(e)&&a.rotate(e,true)},eb=1.2,Db=function(a,b){if(!(a.type!="text"||!(b[z]("text")||b[z]("font")||b[z]("font-size")||b[z]("x")||b[z]("y")))){var c=a.attrs,d=a.node,f=d.firstChild?ha(C.defaultView.getComputedStyle(d.firstChild,A).getPropertyValue("font-size"),10):10;if(b[z]("text")){for(c.text=b.text;d.firstChild;)d.removeChild(d.firstChild);b=D(b.text)[G]("\n");for(var e=0,g=b[o];e<g;e++)if(b[e]){var h=u("tspan");e&&u(h,{dy:f*eb,x:c.x});h[x](C.createTextNode(b[e]));
+d[x](h)}}else{b=d.getElementsByTagName("tspan");e=0;for(g=b[o];e<g;e++)e&&u(b[e],{dy:f*eb,x:c.x})}u(d,{y:c.y});a=a.getBBox();(a=c.y-(a.y+a.height/2))&&isFinite(a)&&u(d,{y:c.y+a})}},s=function(a,b){this[0]=a;this.id=l._oid++;this.node=a;a.raphael=this;this.paper=b;this.attrs=this.attrs||{};this.transformations=[];this._={tx:0,ty:0,rt:{deg:0,cx:0,cy:0},sx:1,sy:1};!b.bottom&&(b.bottom=this);(this.prev=b.top)&&(b.top.next=this);b.top=this;this.next=null};s[p].rotate=function(a,b,c){if(this.removed)return this;
+if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][R](N);return this._.rt.deg}var d=this.getBBox();a=D(a)[G](V);if(a[o]-1){b=y(a[1]);c=y(a[2])}a=y(a[0]);if(b!=null)this._.rt.deg=a;else this._.rt.deg+=a;c==null&&(b=null);this._.rt.cx=b;this._.rt.cy=c;b=b==null?d.x+d.width/2:b;c=c==null?d.y+d.height/2:c;if(this._.rt.deg){this.transformations[0]=l.format("rotate({0} {1} {2})",this._.rt.deg,b,c);this.clip&&u(this.clip,{transform:l.format("rotate({0} {1} {2})",-this._.rt.deg,b,
+c)})}else{this.transformations[0]=A;this.clip&&u(this.clip,{transform:A})}u(this.node,{transform:this.transformations[R](N)});return this};s[p].hide=function(){!this.removed&&(this.node.style.display="none");return this};s[p].show=function(){!this.removed&&(this.node.style.display="");return this};s[p].remove=function(){if(!this.removed){ma(this,this.paper);this.node.parentNode.removeChild(this.node);for(var a in this)delete this[a];this.removed=true}};s[p].getBBox=function(){if(this.removed)return this;
+if(this.type=="path")return xa(this.attrs.path);if(this.node.style.display=="none"){this.show();var a=true}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}if(this.type=="text"){b={x:b.x,y:Infinity,width:0,height:0};for(var d=0,f=this.node.getNumberOfChars();d<f;d++){var e=this.node.getExtentOfChar(d);e.y<b.y&&(b.y=e.y);e.y+e.height-b.y>b.height&&(b.height=e.y+e.height-b.y);e.x+e.width-b.x>b.width&&(b.width=e.x+e.width-b.x)}}a&&this.hide();return b};s[p].attr=function(a,b){if(this.removed)return this;
+if(a==null){a={};for(var c in this.attrs)if(this.attrs[z](c))a[c]=this.attrs[c];this._.rt.deg&&(a.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(a.scale=this.scale());a.gradient&&a.fill=="none"&&(a.fill=a.gradient)&&delete a.gradient;return a}if(b==null&&l.is(a,ga)){if(a=="translation")return Aa.call(this);if(a=="rotation")return this.rotate();if(a=="scale")return this.scale();if(a==ca&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[a]}if(b==null&&
+l.is(a,U)){b={};c=0;for(var d=a.length;c<d;c++)b[a[c]]=this.attr(a[c]);return b}if(b!=null){c={};c[a]=b;ea(this,c)}else a!=null&&l.is(a,"object")&&ea(this,a);return this};s[p].toFront=function(){if(this.removed)return this;this.node.parentNode[x](this.node);var a=this.paper;a.top!=this&&Ya(this,a);return this};s[p].toBack=function(){if(this.removed)return this;if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);Za(this,this.paper)}return this};
+s[p].insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length].node;b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode[x](this.node);$a(this,a,this.paper);return this};s[p].insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;b.parentNode.insertBefore(this.node,b);ab(this,a,this.paper);return this};s[p].blur=function(a){var b=this;if(+a!==0){var c=u("filter"),d=u("feGaussianBlur");b.attrs.blur=a;c.id="r"+(l._id++)[O](36);u(d,{stdDeviation:+a||
+1.5});c.appendChild(d);b.paper.defs.appendChild(c);b._blur=c;u(b.node,{filter:"url(#"+c.id+")"})}else{if(b._blur){b._blur.parentNode.removeChild(b._blur);delete b._blur;delete b.attrs.blur}b.node.removeAttribute("filter")}};var fb=function(a,b,c,d){var f=u("circle");a.canvas&&a.canvas[x](f);a=new s(f,a);a.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"};a.type="circle";u(f,a.attrs);return a},gb=function(a,b,c,d,f,e){var g=u("rect");a.canvas&&a.canvas[x](g);a=new s(g,a);a.attrs={x:b,y:c,width:d,height:f,
+r:e||0,rx:e||0,ry:e||0,fill:"none",stroke:"#000"};a.type="rect";u(g,a.attrs);return a},hb=function(a,b,c,d,f){var e=u("ellipse");a.canvas&&a.canvas[x](e);a=new s(e,a);a.attrs={cx:b,cy:c,rx:d,ry:f,fill:"none",stroke:"#000"};a.type="ellipse";u(e,a.attrs);return a},ib=function(a,b,c,d,f,e){var g=u("image");u(g,{x:c,y:d,width:f,height:e,preserveAspectRatio:"none"});g.setAttributeNS(a.xlink,"href",b);a.canvas&&a.canvas[x](g);a=new s(g,a);a.attrs={x:c,y:d,width:f,height:e,src:b};a.type="image";return a},
+jb=function(a,b,c,d){var f=u("text");u(f,{x:b,y:c,"text-anchor":"middle"});a.canvas&&a.canvas[x](f);a=new s(f,a);a.attrs={x:b,y:c,"text-anchor":"middle",text:d,font:ta.font,stroke:"none",fill:"#000"};a.type="text";ea(a,a.attrs);return a},kb=function(a,b){this.width=a||this.width;this.height=b||this.height;this.canvas[W]("width",this.width);this.canvas[W]("height",this.height);return this},Ca=function(){var a=Xa[K](0,arguments),b=a&&a.container,c=a.x,d=a.y,f=a.width;a=a.height;if(!b)throw new Error("SVG container not found.");
+var e=u("svg");c=c||0;d=d||0;f=f||512;a=a||342;u(e,{xmlns:"http://www.w3.org/2000/svg",version:1.1,width:f,height:a});if(b==1){e.style.cssText="position:absolute;left:"+c+"px;top:"+d+"px";C.body[x](e)}else b.firstChild?b.insertBefore(e,b.firstChild):b[x](e);b=new H;b.width=f;b.height=a;b.canvas=e;Ia.call(b,b,l.fn);b.clear();return b};H[p].clear=function(){for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null;(this.desc=u("desc"))[x](C.createTextNode("Created with Rapha\u00ebl"));
+a[x](this.desc);a[x](this.defs=u("defs"))};H[p].remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=bb(a)}}if(l.vml){var lb={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},Eb=/([clmz]),?([^clmz]*)/gi,Fb=/-?[^,\s-]+/g,qa=1000+N+1000,na=10,ra={path:1,rect:1},Gb=function(a){var b=/[ahqstv]/ig,c=oa;D(a).match(b)&&(c=wa);b=/[clmz]/g;if(c==oa&&!D(a).match(b))return a=D(a)[I](Eb,function(i,j,m){var n=[],r=fa.call(j)=="m",q=lb[j];m[I](Fb,function(k){if(r&&
+n[o]==2){q+=n+lb[j=="m"?"l":"L"];n=[]}n[F](Q(k*na))});return q+n});b=c(a);var d;a=[];for(var f=0,e=b[o];f<e;f++){c=b[f];d=fa.call(b[f][0]);d=="z"&&(d="x");for(var g=1,h=c[o];g<h;g++)d+=Q(c[g]*na)+(g!=h-1?",":A);a[F](d)}return a[R](N)};l[O]=function(){return"Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\u00ebl "+this.version};db=function(a,b){var c=S("group");c.style.cssText="position:absolute;left:0;top:0;width:"+b.width+"px;height:"+b.height+"px";c.coordsize=
+b.coordsize;c.coordorigin=b.coordorigin;var d=S("shape"),f=d.style;f.width=b.width+"px";f.height=b.height+"px";d.coordsize=qa;d.coordorigin=b.coordorigin;c[x](d);d=new s(d,c,b);f={fill:"none",stroke:"#000"};a&&(f.path=a);d.isAbsolute=true;d.type="path";d.path=[];d.Path=A;ea(d,f);b.canvas[x](c);return d};ea=function(a,b){a.attrs=a.attrs||{};var c=a.node,d=a.attrs,f=c.style,e;e=(b.x!=d.x||b.y!=d.y||b.width!=d.width||b.height!=d.height||b.r!=d.r)&&a.type=="rect";var g=a;for(var h in b)if(b[z](h))d[h]=
+b[h];if(e){d.path=mb(d.x,d.y,d.width,d.height,d.r);a.X=d.x;a.Y=d.y;a.W=d.width;a.H=d.height}b.href&&(c.href=b.href);b.title&&(c.title=b.title);b.target&&(c.target=b.target);b.cursor&&(f.cursor=b.cursor);"blur"in b&&a.blur(b.blur);if(b.path&&a.type=="path"||e)c.path=Gb(d.path);b.rotation!=null&&a.rotate(b.rotation,true);if(b.translation){e=D(b.translation)[G](V);Aa.call(a,e[0],e[1]);if(a._.rt.cx!=null){a._.rt.cx+=+e[0];a._.rt.cy+=+e[1];a.setBox(a.attrs,e[0],e[1])}}if(b.scale){e=D(b.scale)[G](V);a.scale(+e[0]||
+1,+e[1]||+e[0]||1,+e[2]||null,+e[3]||null)}if("clip-rect"in b){e=D(b["clip-rect"])[G](V);if(e[o]==4){e[2]=+e[2]+ +e[0];e[3]=+e[3]+ +e[1];h=c.clipRect||C.createElement("div");var i=h.style,j=c.parentNode;i.clip=l.format("rect({1}px {2}px {3}px {0}px)",e);if(!c.clipRect){i.position="absolute";i.top=0;i.left=0;i.width=a.paper.width+"px";i.height=a.paper.height+"px";j.parentNode.insertBefore(h,j);h[x](j);c.clipRect=h}}if(!b["clip-rect"])c.clipRect&&(c.clipRect.style.clip=A)}if(a.type=="image"&&b.src)c.src=
+b.src;if(a.type=="image"&&b.opacity){c.filterOpacity=Fa+".Alpha(opacity="+b.opacity*100+")";f.filter=(c.filterMatrix||A)+(c.filterOpacity||A)}b.font&&(f.font=b.font);b["font-family"]&&(f.fontFamily='"'+b["font-family"][G](",")[0][I](/^['"]+|['"]+$/g,A)+'"');b["font-size"]&&(f.fontSize=b["font-size"]);b["font-weight"]&&(f.fontWeight=b["font-weight"]);b["font-style"]&&(f.fontStyle=b["font-style"]);if(b.opacity!=null||b["stroke-width"]!=null||b.fill!=null||b.stroke!=null||b["stroke-width"]!=null||b["stroke-opacity"]!=
+null||b["fill-opacity"]!=null||b["stroke-dasharray"]!=null||b["stroke-miterlimit"]!=null||b["stroke-linejoin"]!=null||b["stroke-linecap"]!=null){c=a.shape||c;f=c.getElementsByTagName(ca)&&c.getElementsByTagName(ca)[0];e=false;!f&&(e=f=S(ca));if("fill-opacity"in b||"opacity"in b){a=((+d["fill-opacity"]+1||2)-1)*((+d.opacity+1||2)-1)*((+l.getRGB(b.fill).o+1||2)-1);a<0&&(a=0);a>1&&(a=1);f.opacity=a}b.fill&&(f.on=true);if(f.on==null||b.fill=="none")f.on=false;if(f.on&&b.fill)if(a=b.fill.match(Sa)){f.src=
+a[1];f.type="tile"}else{f.color=l.getRGB(b.fill).hex;f.src=A;f.type="solid";if(l.getRGB(b.fill).error&&(g.type in{circle:1,ellipse:1}||D(b.fill).charAt()!="r")&&pa(g,b.fill)){d.fill="none";d.gradient=b.fill}}e&&c[x](f);f=c.getElementsByTagName("stroke")&&c.getElementsByTagName("stroke")[0];e=false;!f&&(e=f=S("stroke"));if(b.stroke&&b.stroke!="none"||b["stroke-width"]||b["stroke-opacity"]!=null||b["stroke-dasharray"]||b["stroke-miterlimit"]||b["stroke-linejoin"]||b["stroke-linecap"])f.on=true;(b.stroke==
+"none"||f.on==null||b.stroke==0||b["stroke-width"]==0)&&(f.on=false);a=l.getRGB(b.stroke);f.on&&b.stroke&&(f.color=a.hex);a=((+d["stroke-opacity"]+1||2)-1)*((+d.opacity+1||2)-1)*((+a.o+1||2)-1);h=(y(b["stroke-width"])||1)*0.75;a<0&&(a=0);a>1&&(a=1);b["stroke-width"]==null&&(h=d["stroke-width"]);b["stroke-width"]&&(f.weight=h);h&&h<1&&(a*=h)&&(f.weight=1);f.opacity=a;b["stroke-linejoin"]&&(f.joinstyle=b["stroke-linejoin"]||"miter");f.miterlimit=b["stroke-miterlimit"]||8;b["stroke-linecap"]&&(f.endcap=
+b["stroke-linecap"]=="butt"?"flat":b["stroke-linecap"]=="square"?"square":"round");if(b["stroke-dasharray"]){a={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};f.dashstyle=a[z](b["stroke-dasharray"])?a[b["stroke-dasharray"]]:A}e&&c[x](f)}if(g.type=="text"){f=g.paper.span.style;d.font&&(f.font=d.font);d["font-family"]&&(f.fontFamily=d["font-family"]);d["font-size"]&&(f.fontSize=
+d["font-size"]);d["font-weight"]&&(f.fontWeight=d["font-weight"]);d["font-style"]&&(f.fontStyle=d["font-style"]);g.node.string&&(g.paper.span.innerHTML=D(g.node.string)[I](/</g,"<")[I](/&/g,"&")[I](/\n/g,"<br>"));g.W=d.w=g.paper.span.offsetWidth;g.H=d.h=g.paper.span.offsetHeight;g.X=d.x;g.Y=d.y+Q(g.H/2);switch(d["text-anchor"]){case "start":g.node.style["v-text-align"]="left";g.bbx=Q(g.W/2);break;case "end":g.node.style["v-text-align"]="right";g.bbx=-Q(g.W/2);break;default:g.node.style["v-text-align"]=
+"center";break}}};pa=function(a,b){a.attrs=a.attrs||{};var c="linear",d=".5 .5";a.attrs.gradient=b;b=D(b)[I](cb,function(i,j,m){c="radial";if(j&&m){j=y(j);m=y(m);E(j-0.5,2)+E(m-0.5,2)>0.25&&(m=v.sqrt(0.25-E(j-0.5,2))*((m>0.5)*2-1)+0.5);d=j+N+m}return A});b=b[G](/\s*\-\s*/);if(c=="linear"){var f=b.shift();f=-y(f);if(isNaN(f))return null}var e=Wa(b);if(!e)return null;a=a.shape||a.node;b=a.getElementsByTagName(ca)[0]||S(ca);!b.parentNode&&a.appendChild(b);if(e[o]){b.on=true;b.method="none";b.color=e[0].color;
+b.color2=e[e[o]-1].color;a=[];for(var g=0,h=e[o];g<h;g++)e[g].offset&&a[F](e[g].offset+N+e[g].color);b.colors&&(b.colors.value=a[o]?a[R]():"0% "+b.color);if(c=="radial"){b.type="gradientradial";b.focus="100%";b.focussize=d;b.focusposition=d}else{b.type="gradient";b.angle=(270-f)%360}}return 1};s=function(a,b,c){this[0]=a;this.id=l._oid++;this.node=a;a.raphael=this;this.Y=this.X=0;this.attrs={};this.Group=b;this.paper=c;this._={tx:0,ty:0,rt:{deg:0},sx:1,sy:1};!c.bottom&&(c.bottom=this);(this.prev=
+c.top)&&(c.top.next=this);c.top=this;this.next=null};s[p].rotate=function(a,b,c){if(this.removed)return this;if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][R](N);return this._.rt.deg}a=D(a)[G](V);if(a[o]-1){b=y(a[1]);c=y(a[2])}a=y(a[0]);if(b!=null)this._.rt.deg=a;else this._.rt.deg+=a;c==null&&(b=null);this._.rt.cx=b;this._.rt.cy=c;this.setBox(this.attrs,b,c);this.Group.style.rotation=this._.rt.deg;return this};s[p].setBox=function(a,b,c){if(this.removed)return this;var d=
+this.Group.style,f=this.shape&&this.shape.style||this.node.style;a=a||{};for(var e in a)if(a[z](e))this.attrs[e]=a[e];b=b||this._.rt.cx;c=c||this._.rt.cy;var g=this.attrs,h;switch(this.type){case "circle":a=g.cx-g.r;e=g.cy-g.r;h=g=g.r*2;break;case "ellipse":a=g.cx-g.rx;e=g.cy-g.ry;h=g.rx*2;g=g.ry*2;break;case "image":a=+g.x;e=+g.y;h=g.width||0;g=g.height||0;break;case "text":this.textpath.v=["m",Q(g.x),", ",Q(g.y-2),"l",Q(g.x)+1,", ",Q(g.y-2)][R](A);a=g.x-Q(this.W/2);e=g.y-this.H/2;h=this.W;g=this.H;
+break;case "rect":case "path":if(this.attrs.path){g=xa(this.attrs.path);a=g.x;e=g.y;h=g.width;g=g.height}else{e=a=0;h=this.paper.width;g=this.paper.height}break;default:e=a=0;h=this.paper.width;g=this.paper.height;break}b=b==null?a+h/2:b;c=c==null?e+g/2:c;b=b-this.paper.width/2;c=c-this.paper.height/2;var i;d.left!=(i=b+"px")&&(d.left=i);d.top!=(i=c+"px")&&(d.top=i);this.X=ra[z](this.type)?-b:a;this.Y=ra[z](this.type)?-c:e;this.W=h;this.H=g;if(ra[z](this.type)){f.left!=(i=-b*na+"px")&&(f.left=i);
+f.top!=(i=-c*na+"px")&&(f.top=i)}else if(this.type=="text"){f.left!=(i=-b+"px")&&(f.left=i);f.top!=(i=-c+"px")&&(f.top=i)}else{d.width!=(i=this.paper.width+"px")&&(d.width=i);d.height!=(i=this.paper.height+"px")&&(d.height=i);f.left!=(i=a-b+"px")&&(f.left=i);f.top!=(i=e-c+"px")&&(f.top=i);f.width!=(i=h+"px")&&(f.width=i);f.height!=(i=g+"px")&&(f.height=i)}};s[p].hide=function(){!this.removed&&(this.Group.style.display="none");return this};s[p].show=function(){!this.removed&&(this.Group.style.display=
+"block");return this};s[p].getBBox=function(){if(this.removed)return this;if(ra[z](this.type))return xa(this.attrs.path);return{x:this.X+(this.bbx||0),y:this.Y,width:this.W,height:this.H}};s[p].remove=function(){if(!this.removed){ma(this,this.paper);this.node.parentNode.removeChild(this.node);this.Group.parentNode.removeChild(this.Group);this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)delete this[a];this.removed=true}};s[p].attr=function(a,b){if(this.removed)return this;
+if(a==null){a={};for(var c in this.attrs)if(this.attrs[z](c))a[c]=this.attrs[c];this._.rt.deg&&(a.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(a.scale=this.scale());a.gradient&&a.fill=="none"&&(a.fill=a.gradient)&&delete a.gradient;return a}if(b==null&&l.is(a,ga)){if(a=="translation")return Aa.call(this);if(a=="rotation")return this.rotate();if(a=="scale")return this.scale();if(a==ca&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[a]}if(this.attrs&&
+b==null&&l.is(a,U)){var d={};c=0;for(b=a[o];c<b;c++)d[a[c]]=this.attr(a[c]);return d}if(b!=null){d={};d[a]=b}b==null&&l.is(a,"object")&&(d=a);if(d){if(d.text&&this.type=="text")this.node.string=d.text;ea(this,d);if(d.gradient&&({circle:1,ellipse:1}[z](this.type)||D(d.gradient).charAt()!="r"))pa(this,d.gradient);(!ra[z](this.type)||this._.rt.deg)&&this.setBox(this.attrs)}return this};s[p].toFront=function(){!this.removed&&this.Group.parentNode[x](this.Group);this.paper.top!=this&&Ya(this,this.paper);
+return this};s[p].toBack=function(){if(this.removed)return this;if(this.Group.parentNode.firstChild!=this.Group){this.Group.parentNode.insertBefore(this.Group,this.Group.parentNode.firstChild);Za(this,this.paper)}return this};s[p].insertAfter=function(a){if(this.removed)return this;if(a.constructor==X)a=a[a.length];a.Group.nextSibling?a.Group.parentNode.insertBefore(this.Group,a.Group.nextSibling):a.Group.parentNode[x](this.Group);$a(this,a,this.paper);return this};s[p].insertBefore=function(a){if(this.removed)return this;
+if(a.constructor==X)a=a[0];a.Group.parentNode.insertBefore(this.Group,a.Group);ab(this,a,this.paper);return this};var Hb=/ progid:\S+Blur\([^\)]+\)/g;s[p].blur=function(a){var b=this.node.runtimeStyle,c=b.filter;c=c.replace(Hb,A);if(+a!==0){this.attrs.blur=a;b.filter=c+N+Fa+".Blur(pixelradius="+(+a||1.5)+")";b.margin=l.format("-{0}px 0 0 -{0}px",Q(+a||1.5))}else{b.filter=c;b.margin=0;delete this.attrs.blur}};fb=function(a,b,c,d){var f=S("group"),e=S("oval");f.style.cssText="position:absolute;left:0;top:0;width:"+
+a.width+"px;height:"+a.height+"px";f.coordsize=qa;f.coordorigin=a.coordorigin;f[x](e);e=new s(e,f,a);e.type="circle";ea(e,{stroke:"#000",fill:"none"});e.attrs.cx=b;e.attrs.cy=c;e.attrs.r=d;e.setBox({x:b-d,y:c-d,width:d*2,height:d*2});a.canvas[x](f);return e};function mb(a,b,c,d,f){return f?l.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z",a+f,b,c-f*2,f,-f,d-f*2,f*2-c,f*2-d):l.format("M{0},{1}l{2},0,0,{3},{4},0z",a,
+b,c,d,-c)}gb=function(a,b,c,d,f,e){var g=mb(b,c,d,f,e);a=a.path(g);var h=a.attrs;a.X=h.x=b;a.Y=h.y=c;a.W=h.width=d;a.H=h.height=f;h.r=e;h.path=g;a.type="rect";return a};hb=function(a,b,c,d,f){var e=S("group"),g=S("oval");e.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";e.coordsize=qa;e.coordorigin=a.coordorigin;e[x](g);g=new s(g,e,a);g.type="ellipse";ea(g,{stroke:"#000"});g.attrs.cx=b;g.attrs.cy=c;g.attrs.rx=d;g.attrs.ry=f;g.setBox({x:b-d,y:c-f,width:d*2,
+height:f*2});a.canvas[x](e);return g};ib=function(a,b,c,d,f,e){var g=S("group"),h=S("image");g.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";g.coordsize=qa;g.coordorigin=a.coordorigin;h.src=b;g[x](h);h=new s(h,g,a);h.type="image";h.attrs.src=b;h.attrs.x=c;h.attrs.y=d;h.attrs.w=f;h.attrs.h=e;h.setBox({x:c,y:d,width:f,height:e});a.canvas[x](g);return h};jb=function(a,b,c,d){var f=S("group"),e=S("shape"),g=e.style,h=S("path"),i=S("textpath");f.style.cssText=
+"position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";f.coordsize=qa;f.coordorigin=a.coordorigin;h.v=l.format("m{0},{1}l{2},{1}",Q(b*10),Q(c*10),Q(b*10)+1);h.textpathok=true;g.width=a.width;g.height=a.height;i.string=D(d);i.on=true;e[x](i);e[x](h);f[x](e);g=new s(i,f,a);g.shape=e;g.textpath=h;g.type="text";g.attrs.text=d;g.attrs.x=b;g.attrs.y=c;g.attrs.w=1;g.attrs.h=1;ea(g,{font:ta.font,stroke:"none",fill:"#000"});g.setBox();a.canvas[x](f);return g};kb=function(a,b){var c=this.canvas.style;
+a==+a&&(a+="px");b==+b&&(b+="px");c.width=a;c.height=b;c.clip="rect(0 "+a+" "+b+" 0)";return this};var S;C.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!C.namespaces.rvml&&C.namespaces.add("rvml","urn:schemas-microsoft-com:vml");S=function(a){return C.createElement("<rvml:"+a+' class="rvml">')}}catch(Pb){S=function(a){return C.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}Ca=function(){var a=Xa[K](0,arguments),b=a.container,c=a.height,d=a.width,
+f=a.x;a=a.y;if(!b)throw new Error("VML container not found.");var e=new H,g=e.canvas=C.createElement("div"),h=g.style;f=f||0;a=a||0;d=d||512;c=c||342;d==+d&&(d+="px");c==+c&&(c+="px");e.width=1000;e.height=1000;e.coordsize=na*1000+N+na*1000;e.coordorigin="0 0";e.span=C.createElement("span");e.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";g[x](e.span);h.cssText=l.format("width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",
+d,c);if(b==1){C.body[x](g);h.left=f+"px";h.top=a+"px";h.position="absolute"}else b.firstChild?b.insertBefore(g,b.firstChild):b[x](g);Ia.call(e,e,l.fn);return e};H[p].clear=function(){this.canvas.innerHTML=A;this.span=C.createElement("span");this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";this.canvas[x](this.span);this.bottom=this.top=null};H[p].remove=function(){this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=
+bb(a);return true}}H[p].safari=navigator.vendor=="Apple Computer, Inc."&&(navigator.userAgent.match(/Version\/(.*?)\s/)[1]<4||aa.navigator.platform.slice(0,2)=="iP")?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});aa.setTimeout(function(){a.remove()})}:function(){};function Ib(){this.returnValue=false}function Jb(){return this.originalEvent.preventDefault()}function Kb(){this.cancelBubble=true}function Lb(){return this.originalEvent.stopPropagation()}var Mb=
+function(){if(C.addEventListener)return function(a,b,c,d){var f=Da&&Ea[b]?Ea[b]:b;function e(g){if(Da&&Ea[z](b))for(var h=0,i=g.targetTouches&&g.targetTouches.length;h<i;h++)if(g.targetTouches[h].target==a){i=g;g=g.targetTouches[h];g.originalEvent=i;g.preventDefault=Jb;g.stopPropagation=Lb;break}return c.call(d,g)}a.addEventListener(f,e,false);return function(){a.removeEventListener(f,e,false);return true}};else if(C.attachEvent)return function(a,b,c,d){function f(g){g=g||aa.event;g.preventDefault=
+g.preventDefault||Ib;g.stopPropagation=g.stopPropagation||Kb;return c.call(d,g)}a.attachEvent("on"+b,f);function e(){a.detachEvent("on"+b,f);return true}return e}}(),$=[];function Ka(a){for(var b=a.clientX,c=a.clientY,d,f=$.length;f--;){d=$[f];if(Da)for(var e=a.touches.length,g;e--;){g=a.touches[e];if(g.identifier==d.el._drag.id){b=g.clientX;c=g.clientY;(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();d.move&&d.move.call(d.el,b-d.el._drag.x,c-d.el._drag.y,b,c)}}
+function La(){l.unmousemove(Ka).unmouseup(La);for(var a=$.length,b;a--;){b=$[a];b.el._drag={};b.end&&b.end.call(b.el)}$=[]}for(da=Ra[o];da--;)(function(a){l[a]=s[p][a]=function(b){if(l.is(b,"function")){this.events=this.events||[];this.events.push({name:a,f:b,unbind:Mb(this.shape||this.node||C,a,b,this)})}return this};l["un"+a]=s[p]["un"+a]=function(b){for(var c=this.events,d=c[o];d--;)if(c[d].name==a&&c[d].f==b){c[d].unbind();c.splice(d,1);!c.length&&delete this.events;return this}return this}})(Ra[da]);
+s[p].hover=function(a,b){return this.mouseover(a).mouseout(b)};s[p].unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};s[p].drag=function(a,b,c){this._drag={};this.mousedown(function(d){(d.originalEvent||d).preventDefault();this._drag.x=d.clientX;this._drag.y=d.clientY;this._drag.id=d.identifier;b&&b.call(this,d.clientX,d.clientY);!$.length&&l.mousemove(Ka).mouseup(La);$.push({el:this,move:a,end:c})});return this};s[p].undrag=function(a,b,c){for(b=$.length;b--;){$[b].el==this&&$[b].move==
+a&&$[b].end==c&&$.splice(b,1);!$.length&&l.unmousemove(Ka).unmouseup(La)}};H[p].circle=function(a,b,c){return fb(this,a||0,b||0,c||0)};H[p].rect=function(a,b,c,d,f){return gb(this,a||0,b||0,c||0,d||0,f||0)};H[p].ellipse=function(a,b,c,d){return hb(this,a||0,b||0,c||0,d||0)};H[p].path=function(a){a&&!l.is(a,ga)&&!l.is(a[0],U)&&(a+=A);return db(l.format[K](l,arguments),this)};H[p].image=function(a,b,c,d,f){return ib(this,a||"about:blank",b||0,c||0,d||0,f||0)};H[p].text=function(a,b,c){return jb(this,
+a||0,b||0,c||A)};H[p].set=function(a){arguments[o]>1&&(a=Array[p].splice.call(arguments,0,arguments[o]));return new X(a)};H[p].setSize=kb;H[p].top=H[p].bottom=null;H[p].raphael=l;function nb(){return this.x+N+this.y}s[p].resetScale=function(){if(this.removed)return this;this._.sx=1;this._.sy=1;this.attrs.scale="1 1"};s[p].scale=function(a,b,c,d){if(this.removed)return this;if(a==null&&b==null)return{x:this._.sx,y:this._.sy,toString:nb};b=b||a;!+b&&(b=a);var f,e,g=this.attrs;if(a!=0){var h=this.getBBox(),
+i=h.x+h.width/2,j=h.y+h.height/2;f=a/this._.sx;e=b/this._.sy;c=+c||c==0?c:i;d=+d||d==0?d:j;h=~~(a/v.abs(a));var m=~~(b/v.abs(b)),n=this.node.style,r=c+(i-c)*f;j=d+(j-d)*e;switch(this.type){case "rect":case "image":var q=g.width*h*f,k=g.height*m*e;this.attr({height:k,r:g.r*ba(h*f,m*e),width:q,x:r-q/2,y:j-k/2});break;case "circle":case "ellipse":this.attr({rx:g.rx*h*f,ry:g.ry*m*e,r:g.r*ba(h*f,m*e),cx:r,cy:j});break;case "text":this.attr({x:r,y:j});break;case "path":i=Ha(g.path);for(var t=true,L=0,B=
+i[o];L<B;L++){var w=i[L],J=sa.call(w[0]);if(!(J=="M"&&t)){t=false;if(J=="A"){w[i[L][o]-2]*=f;w[i[L][o]-1]*=e;w[1]*=h*f;w[2]*=m*e;w[5]=+!(h+m?!+w[5]:+w[5])}else if(J=="H"){J=1;for(var ia=w[o];J<ia;J++)w[J]*=f}else if(J=="V"){J=1;for(ia=w[o];J<ia;J++)w[J]*=e}else{J=1;for(ia=w[o];J<ia;J++)w[J]*=J%2?f:e}}}e=xa(i);f=r-e.x-e.width/2;e=j-e.y-e.height/2;i[0][1]+=f;i[0][2]+=e;this.attr({path:i});break}if(this.type in{text:1,image:1}&&(h!=1||m!=1))if(this.transformations){this.transformations[2]="scale("[M](h,
+",",m,")");this.node[W]("transform",this.transformations[R](N));f=h==-1?-g.x-(q||0):g.x;e=m==-1?-g.y-(k||0):g.y;this.attr({x:f,y:e});g.fx=h-1;g.fy=m-1}else{this.node.filterMatrix=Fa+".Matrix(M11="[M](h,", M12=0, M21=0, M22=",m,", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");n.filter=(this.node.filterMatrix||A)+(this.node.filterOpacity||A)}else if(this.transformations){this.transformations[2]=A;this.node[W]("transform",this.transformations[R](N));g.fx=0;g.fy=0}else{this.node.filterMatrix=
+A;n.filter=(this.node.filterMatrix||A)+(this.node.filterOpacity||A)}g.scale=[a,b,c,d][R](N);this._.sx=a;this._.sy=b}return this};s[p].clone=function(){if(this.removed)return null;var a=this.attr();delete a.scale;delete a.translation;return this.paper[this.type]().attr(a)};var ob=Z(function(a,b,c,d,f,e,g,h,i){for(var j=0,m,n=0;n<1.01;n+=0.01){var r=la(a,b,c,d,f,e,g,h,n);n&&(j+=E(E(m.x-r.x,2)+E(m.y-r.y,2),0.5));if(j>=i)return r;m=r}});function Ma(a,b){return function(c,d,f){c=wa(c);for(var e,g,h,i,
+j="",m={},n=0,r=0,q=c.length;r<q;r++){h=c[r];if(h[0]=="M"){e=+h[1];g=+h[2]}else{i=Nb(e,g,h[1],h[2],h[3],h[4],h[5],h[6]);if(n+i>d){if(b&&!m.start){e=ob(e,g,h[1],h[2],h[3],h[4],h[5],h[6],d-n);j+=["C",e.start.x,e.start.y,e.m.x,e.m.y,e.x,e.y];if(f)return j;m.start=j;j=["M",e.x,e.y+"C",e.n.x,e.n.y,e.end.x,e.end.y,h[5],h[6]][R]();n+=i;e=+h[5];g=+h[6];continue}if(!a&&!b){e=ob(e,g,h[1],h[2],h[3],h[4],h[5],h[6],d-n);return{x:e.x,y:e.y,alpha:e.alpha}}}n+=i;e=+h[5];g=+h[6]}j+=h}m.end=j;e=a?n:b?m:l.findDotsAtSegment(e,
+g,h[1],h[2],h[3],h[4],h[5],h[6],1);e.alpha&&(e={x:e.x,y:e.y,alpha:e.alpha});return e}}var Nb=Z(function(a,b,c,d,f,e,g,h){for(var i={x:0,y:0},j=0,m=0;m<1.01;m+=0.01){var n=la(a,b,c,d,f,e,g,h,m);m&&(j+=E(E(i.x-n.x,2)+E(i.y-n.y,2),0.5));i=n}return j}),pb=Ma(1),Ba=Ma(),Na=Ma(0,1);s[p].getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return pb(this.attrs.path)}};s[p].getPointAtLength=function(a){if(this.type=="path"){if(this.node.getPointAtLength)return this.node.getPointAtLength(a);
+return Ba(this.attrs.path,a)}};s[p].getSubpath=function(a,b){if(this.type=="path"){if(v.abs(this.getTotalLength()-b)<1.0E-6)return Na(this.attrs.path,a).end;b=Na(this.attrs.path,b,1);return a?Na(b,a).end:b}};l.easing_formulas={linear:function(a){return a},"<":function(a){return E(a,3)},">":function(a){return E(a-1,3)+1},"<>":function(a){a*=2;if(a<1)return E(a,3)/2;a-=2;return(E(a,3)+2)/2},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+
+1)*a+b)+1},elastic:function(a){if(a==0||a==1)return a;var b=0.3,c=b/4;return E(2,-10*a)*v.sin((a-c)*2*v.PI/b)+1},bounce:function(a){var b=7.5625,c=2.75;if(a<1/c)a=b*a*a;else if(a<2/c){a-=1.5/c;a=b*a*a+0.75}else if(a<2.5/c){a-=2.25/c;a=b*a*a+0.9375}else{a-=2.625/c;a=b*a*a+0.984375}return a}};var T={length:0};function qb(){var a=+new Date;for(var b in T)if(b!="length"&&T[z](b)){var c=T[b];if(c.stop||c.el.removed){delete T[b];T[o]--}else{var d=a-c.start,f=c.ms,e=c.easing,g=c.from,h=c.diff,i=c.to,j=c.t,
+m=c.prev||0,n=c.el,r=c.callback,q={},k;if(d<f){r=l.easing_formulas[e]?l.easing_formulas[e](d/f):d/f;for(var t in g)if(g[z](t)){switch(Ga[t]){case "along":k=r*f*h[t];i.back&&(k=i.len-k);e=Ba(i[t],k);n.translate(h.sx-h.x||0,h.sy-h.y||0);h.x=e.x;h.y=e.y;n.translate(e.x-h.sx,e.y-h.sy);i.rot&&n.rotate(h.r+e.alpha,e.x,e.y);break;case P:k=+g[t]+r*f*h[t];break;case "colour":k="rgb("+[Oa(Q(g[t].r+r*f*h[t].r)),Oa(Q(g[t].g+r*f*h[t].g)),Oa(Q(g[t].b+r*f*h[t].b))][R](",")+")";break;case "path":k=[];e=0;for(var L=
+g[t][o];e<L;e++){k[e]=[g[t][e][0]];for(var B=1,w=g[t][e][o];B<w;B++)k[e][B]=+g[t][e][B]+r*f*h[t][e][B];k[e]=k[e][R](N)}k=k[R](N);break;case "csv":switch(t){case "translation":k=h[t][0]*(d-m);e=h[t][1]*(d-m);j.x+=k;j.y+=e;k=k+N+e;break;case "rotation":k=+g[t][0]+r*f*h[t][0];g[t][1]&&(k+=","+g[t][1]+","+g[t][2]);break;case "scale":k=[+g[t][0]+r*f*h[t][0],+g[t][1]+r*f*h[t][1],2 in i[t]?i[t][2]:A,3 in i[t]?i[t][3]:A][R](N);break;case "clip-rect":k=[];for(e=4;e--;)k[e]=+g[t][e]+r*f*h[t][e];break}break}q[t]=
+k}n.attr(q);n._run&&n._run.call(n)}else{if(i.along){e=Ba(i.along,i.len*!i.back);n.translate(h.sx-(h.x||0)+e.x-h.sx,h.sy-(h.y||0)+e.y-h.sy);i.rot&&n.rotate(h.r+e.alpha,e.x,e.y)}(j.x||j.y)&&n.translate(-j.x,-j.y);i.scale&&(i.scale+=A);n.attr(i);delete T[b];T[o]--;n.in_animation=null;l.is(r,"function")&&r.call(n)}c.prev=d}}l.svg&&n&&n.paper&&n.paper.safari();T[o]&&aa.setTimeout(qb)}function Oa(a){return Y(ba(a,255),0)}function Aa(a,b){if(a==null)return{x:this._.tx,y:this._.ty,toString:nb};this._.tx+=
++a;this._.ty+=+b;switch(this.type){case "circle":case "ellipse":this.attr({cx:+a+this.attrs.cx,cy:+b+this.attrs.cy});break;case "rect":case "image":case "text":this.attr({x:+a+this.attrs.x,y:+b+this.attrs.y});break;case "path":var c=Ha(this.attrs.path);c[0][1]+=+a;c[0][2]+=+b;this.attr({path:c});break}return this}s[p].animateWith=function(a,b,c,d,f){T[a.id]&&(b.start=T[a.id].start);return this.animate(b,c,d,f)};s[p].animateAlong=rb();s[p].animateAlongBack=rb(1);function rb(a){return function(b,c,
+d,f){var e={back:a};l.is(d,"function")?(f=d):(e.rot=d);b&&b.constructor==s&&(b=b.attrs.path);b&&(e.along=b);return this.animate(e,c,f)}}s[p].onAnimation=function(a){this._run=a||0;return this};s[p].animate=function(a,b,c,d){if(l.is(c,"function")||!c)d=c||null;var f={},e={},g={};for(var h in a)if(a[z](h))if(Ga[z](h)){f[h]=this.attr(h);f[h]==null&&(f[h]=ta[h]);e[h]=a[h];switch(Ga[h]){case "along":var i=pb(a[h]),j=Ba(a[h],i*!!a.back),m=this.getBBox();g[h]=i/b;g.tx=m.x;g.ty=m.y;g.sx=j.x;g.sy=j.y;e.rot=
+a.rot;e.back=a.back;e.len=i;a.rot&&(g.r=y(this.rotate())||0);break;case P:g[h]=(e[h]-f[h])/b;break;case "colour":f[h]=l.getRGB(f[h]);i=l.getRGB(e[h]);g[h]={r:(i.r-f[h].r)/b,g:(i.g-f[h].g)/b,b:(i.b-f[h].b)/b};break;case "path":i=wa(f[h],e[h]);f[h]=i[0];j=i[1];g[h]=[];i=0;for(m=f[h][o];i<m;i++){g[h][i]=[0];for(var n=1,r=f[h][i][o];n<r;n++)g[h][i][n]=(j[i][n]-f[h][i][n])/b}break;case "csv":j=D(a[h])[G](V);i=D(f[h])[G](V);switch(h){case "translation":f[h]=[0,0];g[h]=[j[0]/b,j[1]/b];break;case "rotation":f[h]=
+i[1]==j[1]&&i[2]==j[2]?i:[0,j[1],j[2]];g[h]=[(j[0]-f[h][0])/b,0,0];break;case "scale":a[h]=j;f[h]=D(f[h])[G](V);g[h]=[(j[0]-f[h][0])/b,(j[1]-f[h][1])/b,0,0];break;case "clip-rect":f[h]=D(f[h])[G](V);g[h]=[];for(i=4;i--;)g[h][i]=(j[i]-f[h][i])/b;break}e[h]=j}}this.stop();this.in_animation=1;T[this.id]={start:a.start||+new Date,ms:b,easing:c,from:f,diff:g,to:e,el:this,callback:d,t:{x:0,y:0}};++T[o]==1&&qb();return this};s[p].stop=function(){T[this.id]&&T[o]--;delete T[this.id];return this};s[p].translate=
+function(a,b){return this.attr({translation:a+" "+b})};s[p][O]=function(){return"Rapha\u00ebl\u2019s object"};l.ae=T;function X(a){this.items=[];this[o]=0;this.type="set";if(a)for(var b=0,c=a[o];b<c;b++)if(a[b]&&(a[b].constructor==s||a[b].constructor==X)){this[this.items[o]]=this.items[this.items[o]]=a[b];this[o]++}}X[p][F]=function(){for(var a,b,c=0,d=arguments[o];c<d;c++)if((a=arguments[c])&&(a.constructor==s||a.constructor==X)){b=this.items[o];this[b]=this.items[b]=a;this[o]++}return this};X[p].pop=
+function(){delete this[this[o]--];return this.items.pop()};for(var Pa in s[p])if(s[p][z](Pa))X[p][Pa]=function(a){return function(){for(var b=0,c=this.items[o];b<c;b++)this.items[b][a][K](this.items[b],arguments);return this}}(Pa);X[p].attr=function(a,b){if(a&&l.is(a,U)&&l.is(a[0],"object")){b=0;for(var c=a[o];b<c;b++)this.items[b].attr(a[b])}else{c=0;for(var d=this.items[o];c<d;c++)this.items[c].attr(a,b)}return this};X[p].animate=function(a,b,c,d){(l.is(c,"function")||!c)&&(d=c||null);var f=this.items[o],
+e=f,g,h=this,i;d&&(i=function(){!--f&&d.call(h)});c=l.is(c,ga)?c:i;for(g=this.items[--e].animate(a,b,c,i);e--;)this.items[e].animateWith(g,a,b,c,i);return this};X[p].insertAfter=function(a){for(var b=this.items[o];b--;)this.items[b].insertAfter(a);return this};X[p].getBBox=function(){for(var a=[],b=[],c=[],d=[],f=this.items[o];f--;){var e=this.items[f].getBBox();a[F](e.x);b[F](e.y);c[F](e.x+e.width);d[F](e.y+e.height)}a=ba[K](0,a);b=ba[K](0,b);return{x:a,y:b,width:Y[K](0,c)-a,height:Y[K](0,d)-b}};
+X[p].clone=function(a){a=new X;for(var b=0,c=this.items[o];b<c;b++)a[F](this.items[b].clone());return a};l.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)if(a.face[z](d))b.face[d]=a.face[d];if(this.fonts[c])this.fonts[c][F](b);else this.fonts[c]=[b];if(!a.svg){b.face["units-per-em"]=ha(a.face["units-per-em"],10);for(var f in a.glyphs)if(a.glyphs[z](f)){c=a.glyphs[f];b.glyphs[f]={w:c.w,k:{},d:c.d&&"M"+
+c.d[I](/[mlcxtrv]/g,function(g){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[g]||"M"})+"z"};if(c.k)for(var e in c.k)if(c[z](e))b.glyphs[f].k[e]=c.k[e]}}return a};H[p].getFont=function(a,b,c,d){d=d||"normal";c=c||"normal";b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400;if(l.fonts){var f=l.fonts[a];if(!f){a=new RegExp("(^|\\s)"+a[I](/[^\w\d\s+!~.:_-]/g,A)+"(\\s|$)","i");for(var e in l.fonts)if(l.fonts[z](e))if(a.test(e)){f=l.fonts[e];break}}var g;if(f){e=0;for(a=f[o];e<a;e++){g=f[e];if(g.face["font-weight"]==
+b&&(g.face["font-style"]==c||!g.face["font-style"])&&g.face["font-stretch"]==d)break}}return g}};H[p].print=function(a,b,c,d,f,e){e=e||"middle";var g=this.set(),h=D(c)[G](A),i=0;l.is(d,c)&&(d=this.getFont(d));if(d){c=(f||16)/d.face["units-per-em"];var j=d.face.bbox.split(V);f=+j[0];e=+j[1]+(e=="baseline"?j[3]-j[1]+ +d.face.descent:(j[3]-j[1])/2);j=0;for(var m=h[o];j<m;j++){var n=j&&d.glyphs[h[j-1]]||{},r=d.glyphs[h[j]];i+=j?(n.w||d.w)+(n.k&&n.k[h[j]]||0):0;r&&r.d&&g[F](this.path(r.d).attr({fill:"#000",
+stroke:"none",translation:[i,0]}))}g.scale(c,c,f,e).translate(a-f,b-e)}return g};var Ob=/\{(\d+)\}/g;l.format=function(a,b){var c=l.is(b,U)?[0][M](b):arguments;a&&l.is(a,ga)&&c[o]-1&&(a=a[I](Ob,function(d,f){return c[++f]==null?A:c[f]}));return a||A};l.ninja=function(){Qa.was?(Raphael=Qa.is):delete Raphael;return l};l.el=s[p];return l}();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/underscore-min.js Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,30 @@
+// Underscore.js 1.2.3
+// (c) 2009-2011 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore is freely distributable under the MIT license.
+// Portions of Underscore are inspired or borrowed from Prototype,
+// Oliver Steele's Functional, and John Resig's Micro-Templating.
+// For all details and documentation:
+// http://documentcloud.github.com/underscore
+(function(){function r(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
+c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&r(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(m.call(a,h)&&(f++,!(g=m.call(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c,
+h)&&!f--)break;g=!f}}d.pop();return g}var s=this,F=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.concat,H=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,I=Object.keys,t=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&
+define.amd?define("underscore",function(){return b}):s._=b;b.VERSION="1.2.3";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,
+c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,
+c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,c,b){var e;D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,
+b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return o});return e};var D=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,
+d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,
+computed:b})});return e.value};b.shuffle=function(a){var c=[],b;j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,c){var b=a.criteria,d=c.criteria;return b<d?-1:b>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=
+function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-
+1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},
+[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,
+c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
+var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
+c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
+a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=G.apply([a],arguments);return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=
+function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=I||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,
+1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===
+Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)==
+"[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){s._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a),function(c){J(c,
+b[c]=a[c])})};var K=0;b.uniqueId=function(a){var b=K++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,
+"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var u=function(a,c){return c?b(a).chain():a},J=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);H.call(a,this._wrapped);return u(c.apply(b,
+a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped,arguments);return u(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return u(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}}).call(this);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/base.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,67 @@
+{% load analytics %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
+ <head>
+ <meta charset="utf-8" />
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
+ <link rel="SHORTCUT ICON" href="{{STATIC_URL}}hdalab/img/favicon.ico" />
+ <title>{% block title %}HdA Lab{% endblock %}</title>
+
+{% block css_import %}
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/common.css" />
+{% endblock %}
+
+{% block js_import %}
+ <script src="{{STATIC_URL}}hdalab/lib/jquery-1.7.1.min.js"></script>
+{% endblock %}
+
+ </head>
+ <body>
+
+{% block header %}
+ <div id="header">
+ <ul id="nav">
+ <li><a class="{% block home_actif %}{% endblock %}" href="{% url home %}">Accueil</a></li>
+ <li>—</li>
+ <li>Navigation par :</li>
+ <li><a class="{% block facettes_actif %}{% endblock %}" href="{% url facettes %}">Facettes</a></li>
+ <li><a class="{% block categories_actif %}{% endblock %}" href="{% url categories %}">Catégories de Wikipedia</a></li>
+ <li><a class="{% block thesaurus_actif %}{% endblock %}" href="{% url thesaurus %}">Thésaurus</a></li>
+ </ul>
+ <h1>
+ <a href="{% url home %}">HdA Lab</a>
+ </h1>
+ </div>
+ <div id="container">
+{% endblock %}
+
+{% block main_content %}
+
+{% endblock %}
+
+{% block footer %}
+ </div>
+ <div id="footer">
+ <ul id="footer-contents">
+ <li>
+ <p>Une expérimentation de l'Institut de Recherche et d'Innovation et du Ministère de la Culture et de la Communication</p>
+ </li>
+ <li>
+ <a href="http://culture.gouv.fr/" target="_blank">
+ <img src="{{STATIC_URL}}hdalab/img/logo_mcc_blanc.png" />
+ </a>
+ </li>
+ <li>
+ <a href="http://www.iri-research.org/" target="_blank">
+ <img src="{{STATIC_URL}}hdalab/img/logo_iri_blanc.png" />
+ </a>
+ </li>
+ </ul>
+ </div>
+{% endblock %}
+ {% analytics %}
+ </body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/categories.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,62 @@
+{% extends "base.html" %}
+
+{% block title %}{{block.super}} > Recherche par arbre{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/trees.css?refresh" />
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/cattree.css?refresh" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+ <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
+ <script src="{{STATIC_URL}}hdalab/lib/mustache.js"></script>
+ <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
+ <script type="text/javascript">
+ endpoints = {
+ cat_search: "{% url cat_search %}",
+ cat_tree: "{% url cat_tree %}",
+ fill_tree: "{% url fill_tree %}",
+ datasheet: "{% url notice 'ID' %}"
+ };
+ </script>
+ <script src="{{STATIC_URL}}hdalab/js/trees.js?refresh"></script>
+ <script src="{{STATIC_URL}}hdalab/js/cattree.js?refresh"></script>
+{% endblock %}
+
+{% block categories_actif %}actif{% endblock %}
+
+{% block main_content %}
+ <div class="leftzone">
+ <h2>Explorer les domaines artistiques</h2>
+ <p>
+ Cette interface expérimentale présente les ressources d'<a href="http://histoiredesarts.culture.fr/" target="_blank">Histoire des Arts</a>,
+ ordonnées selon l'arborescence des <a href="http://fr.wikipedia.org/wiki/Sp%C3%A9cial:ArbreCat%C3%A9gorie/Espace_Cat%C3%A9gorie" target="_blank">catégories de Wikipédia</a>.
+ Seules les ressources les plus pertinentes sont affichées.
+ </p>
+ <ul class="disciplist">
+ <li><a href="#">Architecture</a></li>
+ <li><a href="#">Cinéma</a></li>
+ <li><a href="#">Littérature</a></li>
+ <li><a href="#">Musique</a></li>
+ <li><a href="#">Peinture</a></li>
+ <li><a href="#">Photographie</a></li>
+ <li><a href="#">Poésie</a></li>
+ <li><a href="#">Sculpture</a></li>
+ <li><a href="#">Théâtre</a></li>
+ </ul>
+ <h3>Recherche de catégories de Wikipédia : </h3>
+ <p>
+ <form id="catform"><input id="catsearch" /></form>
+ </p>
+ <div class="results hidden">
+ <h2>Résultats pour « <span class="label-name"></span> » :</h2>
+ <p class="category-results"><span class="category-count"></span> sous-catégorie(s)</p>
+ <p class="tag-results"><span class="tag-count"></span> tag(s)</p>
+ <p class="content-results"><span class="content-count"></span> contenu(s)</p>
+ </div>
+ </div>
+ <div id="tree" class="cattree"></div>
+{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/facettes.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,165 @@
+{% extends "base.html" %}
+
+{% load i18n %}
+
+{% block title %}{{block.super}} > {% trans "Recherche par facettes" %}{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/lib/leaflet/leaflet.css" />
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/facettes.css?refresh" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+ <script src="{{STATIC_URL}}hdalab/lib/raphael-min.js"></script>
+ <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
+ <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
+ <script src="{{STATIC_URL}}hdalab/lib/leaflet/leaflet.js"></script>
+ <script src="{{STATIC_URL}}hdalab/lib/ZeroClipboard.js"></script>
+
+ <script src="{% url jsi18n 'hdalab' %}"></script>
+ <script src="{{STATIC_URL}}hdalab/js/gomina.js?refresh"></script>
+
+ <script type="text/javascript">
+ gomNs.languageCode = '{{LANGUAGE_CODE}}';
+ gomNs.urls = {
+ 'filter': "{% url filter %}",
+ 'session_info': "{% url session_info %}",
+ 'countries': "{{STATIC_URL}}hdalab/lib/countries.geo.json",
+ 'tag_search': "{% url tag_search %}",
+ 'datasheet': "{% url notice 'ID' %}"
+ };
+ ZeroClipboard.setMoviePath('{{STATIC_URL}}hdalab/lib/ZeroClipboard.swf');
+ </script>
+{% endblock %}
+
+{% block facettes_actif %}actif{% endblock %}
+
+{% block main_content %}
+ <div id="titleleft">
+ <h2 id="hdatitle">{% trans "Recherche par facettes" %} : <span id="sessionname"></span></h2>
+ </div>
+ <div id="titleright">
+ <div id='langselect'>
+ <form action="{% url django.views.i18n.set_language %}" method="post" id="lang_form">
+ {% csrf_token %}
+ <!--input name="next" type="hidden" value="" /-->
+ {% get_language_info_list for LANGUAGES as languages %}
+ {% for language in languages %}
+ <input type="submit" name="language" class="langbutton{% if language.code == LANGUAGE_CODE %} selected{% endif %}" style="background-image: url({{STATIC_URL}}hdalab/img/flag_{{ language.code }}.png)" value="{{ language.code }}" title="{{ language.name_local }}" />
+ {% endfor %}
+ </form>
+ </div>
+ <div id="apartager"><a href="#">{% trans "Partager la session" %}</a></div>
+ <div id="partageurls">
+ <ul>
+ <li class="actif" id="partagero"><a href="#">{% trans "En lecture seule" %}</a></li>
+ <li id="partagerw"><a href="#">{% trans "En lecture-ecriture" %}</a></li>
+ </ul>
+ <div id="zc-partageligne">
+ <label id="zc-partagelabel">{% trans "Copier le lien" %} : </label>
+ <input id="zc-partageinput" onfocus="select();" />
+ </div>
+ </div>
+ <div id="vues">
+ <h4 id="vuestitre">{% trans "Mes vues :"%}</h4>
+ <ul id="ongletsvues">
+ </ul>
+ <span id="nouvellevue"><a href="#">+</a></span>
+ </div>
+ <ul id="plusdevues">
+ <li id="nouv_resrech"><a href="#">{% trans "Creer une vue sur des resultats de recherche" %}</a></li>
+ <li id="nouv_liste"><a href="#">{% trans "Creer une liste de notices" %}</a></li>
+ </ul>
+ </div>
+ <div id="waitcontainer">
+ <div id="waiting"></div>
+ </div>
+ <div id="bandefiltre">
+ <h4 id="filtertitle">
+ {% trans "Filtres :" %}
+ </h4>
+ <ul id="filters">
+ </ul>
+ </div>
+ <div id="timeline">
+ <ul id="dates"></ul>
+ <div id="dateheat"></div>
+ <div id="handle_0" class="handle">
+ <div class="handleinner"></div>
+ </div>
+ <div id="handle_1" class="handle">
+ <div class="handleinner"></div>
+ </div>
+ </div>
+ <div id="leftcol">
+ <div id="bloc_gestvue">
+ <div class="barrebloc">
+ <h2>{% trans "Gerer la vue" %}</h2>
+ </div>
+ <div class="corpsbloc" id="gestvue">
+ <div id="div_titrevue">
+ <label>{% trans "Nom :" %}</label>
+ <input id="titrevue" />
+ </div>
+ <h4>{% trans "Blocs visibles :" %}</h4>
+ </div>
+ </div>
+ <div class="bloc" id="bloc_map">
+ <div class="barrebloc">
+ <h2>{% trans "Pays" %}</h2>
+ </div>
+ <div class="corpsbloc" id="map"></div>
+ </div>
+ <div class="bloc" id="bloc_tagcloud">
+ <div class="barrebloc">
+ <h2>{% trans "Nuage de mots-cles" %}</h2>
+ </div>
+ <div class="corpsbloc" id="tagcloud">
+ </div>
+ </div>
+ <div class="bloc" id="bloc_taginfo">
+ <div class="barrebloc">
+ <h2>{% trans "Rechercher un tag" %}</h2>
+ </div>
+ <div class="corpsbloc" id="taginfo">
+ <form id="tagform">
+ <input id="tagsearch" placeholder="{% trans "Rechercher un tag" %}" />
+ </form>
+ <div class="wpinfo">
+
+ </div>
+ </div>
+ </div>
+ <div class="bloc" id="bloc_translationinfo">
+ {% trans "translation_info" %}
+ </div>
+ </div>
+ <div id="rightcol">
+ <div class="bloc" id="bloc_notes">
+ <div class="barrebloc">
+ <h2>{% trans "Notes" %}</h2>
+ </div>
+ <div id="notes" class="corpsbloc"></div>
+ </div>
+ <div class="bloc" id="bloc_disciplines">
+ <div class="barrebloc">
+ <h2>{% trans "Disciplines artistiques" %}</h2>
+ </div>
+ <div id="disciplines" class="corpsbloc"></div>
+ </div>
+ <div class="bloc" id="bloc_notices">
+ <div class="barrebloc">
+ <h2>{% trans "Resultats de recherche" %}</h2>
+ </div>
+ <div class="corpsbloc">
+ <div id="contentcount"></div>
+ <div id="contents"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+{% endblock %}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/google_analytics/analytics_template.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,10 @@
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', '{{ analytics_code }}']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/google_analytics/async_analytics_template.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,6 @@
+<script>
+var _gaq=[['_setAccount','{{ analytics_code }}'],['_trackPageview']];
+(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
+g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
+s.parentNode.insertBefore(g,s)}(document,'script'));
+</script>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/index.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,132 @@
+{% extends "base.html" %}
+
+{% block title %}{{block.super}} > Accueil{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/index.css" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+ <script type="text/javascript">
+ $(function() {
+ $(".fond-bloc").mouseover(function() {
+ var _this = this;
+ $(".overlay-bloc").each(function() {
+ if (this.parentNode == _this) {
+ $(this).slideDown();
+ } else {
+ $(this).slideUp();
+ }
+ });
+ }).click(function() {
+ document.location.href = $(this).find("a").attr("href");
+ return false;
+ });
+ });
+ </script>
+{% endblock %}
+
+{% block home_actif %}actif{% endblock %}
+
+{% block main_content %}
+ <h2>Explorez autrement le portail Histoire des Arts</h2>
+ <div class="liste-applis">
+ <div class="bloc-appli">
+ <h3>Recherche par facettes</h3>
+ <div class="fond-bloc" id="bloc-facettes">
+ <div class="overlay-bloc">
+ <p>Recherchez les contenus d'Histoire des Arts par plusieurs points d'entrée : pays, périodes historiques, disciplines artistiques et mots-clés liés aux œvres.</p>
+ <p>Les éléments de l'interface sont à la fois des critères de recherche et des mode de visualisation des résultats : Au fur et à mesure de vos recherches, ils se mettent à jour pour refléter le nombre de contenus correspondant.</p>
+ <p class="goto"><a href="{% url facettes %}">»</a></p>
+ </div>
+ </div>
+ </div>
+
+ <div class="separateur-applis"></div>
+ <div class="bloc-appli">
+ <h3>Catégories de Wikipedia</h3>
+ <div class="fond-bloc" id="bloc-categories">
+ <div class="overlay-bloc">
+ <p>Naviguez dans l'arbre des catégories de Wikipedia pour atteindre les contenus du portail Histoire des Arts.</p>
+ <p>Recherchez une catégorie par son titre, puis explorez les sous-catégories et les tags qui y sont rattachés.</p>
+ <p class="goto"><a href="{% url categories %}">»</a></p>
+ </div>
+ </div>
+ </div>
+
+ <div class="separateur-applis"></div>
+ <div class="bloc-appli">
+ <h3>Navigation par thésaurus</h3>
+ <div class="fond-bloc" id="bloc-thesaurus">
+ <div class="overlay-bloc">
+ <p>Cette interface présente deux extraits de thésaurus utilisés par le ministère de la Culture et de la Communication :</p>
+ <ul>
+ <li>La branche « Secteur urbain » du Thésaurus de l’architecture et de l’urbanisme (état 2010)</li>
+ <li>La branche « Architecture d’habitation » du Thésaurus iconographique Garnier (état 2012)</li>
+ </ul>
+ <p class="goto"><a href="{% url thesaurus %}">»</a></p>
+ </div>
+ </div>
+ </div>
+
+ <div style="clear: both;"> </div>
+ </div>
+ <h3>À propos de HdA Lab</h3>
+ <p>Le portail Histoire des arts a pour vocation de mettre à la disposition de publics prescripteurs — via un site Internet — une sélection de ressources culturelles et éducatives riches en lien avec le programme officiel de l’enseignement de l’Histoire des arts. Le volet HDA-Lab de ce projet s’inscrit dans le cadre d’une collaboration entre l’Institut de Recherche et d'Innovation (IRI) et le Ministère de la Culture et de la Communication. Ce projet de recherche et développement prévoit la réalisation d’une preuve de concept destinée à montrer le potentiel heuristique du tagging sémantique.</p>
+ <p>Le corpus utilisé pour les besoins de ce projet est extrait du site Histoire des arts, proposant un accès à près de 5 000 ressources qualifiées, accessible à l’adresse <a href="http://www.histoiredesarts.culture.fr" target="_blank">http://histoiredesarts.culture.fr</a>. Ce portail est alimenté par un réseau dynamique de 350 institutions culturelles, sur l’ensemble du territoire. Cet annuaire a pour vocation d’aider la communauté éducative (enseignants, médiateurs culturels…) à trouver des documents fiables dans le domaine de l’histoire des arts. Les notices descriptives de chaque ressource renvoient, par des liens profonds, vers autant de ressources en ligne, chaque notice contenant des mots-clés, initialement produits comme de simples tags.</p>
+ <p>Le programme de Recherche et Développement impliquant l’IRI et le Ministère de la Culture et de la Communication — via son Département des Programmes Numériques (DPN) — a permis la réalisation de deux outils :</p>
+ <ul>
+ <li>Un module de tagging sémantique du corpus « Histoire des Arts » destiné à l’indexation des ressources, via le back-office du site (module « HDA-BO »)</li>
+ <li>Une interface de recherche et de navigation de la version sémantisée du corpus (projet « HDA-Lab »)</li>
+ </ul>
+ <p>Les tags sémantiques sont constitués des entrées de Wikipédia et dotés de métadonnées, dont les URIs de DBpedia.org correspondant à ces entrées. Les données-clés extraites des articles de Wikipedia sont les infobox et les catégories. Les fonctionnalités de recherche et de navigation dans le corpus s’appuient sur le graphe de DBpedia. L’interface propose des fonctionnalités telles qu’une recherche par facettes, une carte heuristique, etc. ainsi qu’un enrichissement des résultats de recherche à l’aide d’extraits de Wikipedia (photos, définitions…).</p>
+ <p>La preuve de concept est résolument orientée utilisateur final, répondant à une approche de recherche appliquée. Les internautes pourront comparer en direct les fonctionnalités classiques de l’interface d’origine avec les fonctionnalités enrichies de la preuve de concept. L’objectif est de démontrer l’intérêt du tagging sémantique et de sensibiliser l’utilisateur final aux enjeux du Web de données. À terme, cette phase expérimentale a vocation à enrichir les fonctionnalités du portail Histoire des arts.</p>
+ <p> </p>
+ <p>NB : La première version de HDA-Lab disponible en mars 2012 s’appuie sur une sémantisation (production des tags sémantiques) très partielle du corpus « Histoire des Arts ». De même les fonctionnalités ne sont pas définitives. L’ensemble du projet — sémantisation et fonctionnalités — sera mis en œuvre progressivement d'ici juin 2012.</p>
+ <div class="mini-table">
+ <div class="half-bloc">
+ <p>
+ <a href="http://culture.gouv.fr/" target="_blank" title="Ministère de la Culture et de la Communication">
+ <img src="{{STATIC_URL}}hdalab/img/logo_mcc.png" alt="Ministère de la Culture et de la Communication" />
+ </a>
+ </p>
+ </div>
+ <div class="half-bloc">
+ <p>
+ <a href="http://www.iri-research.org/" target="_blank">
+ <img src="{{STATIC_URL}}hdalab/img/logo_iri.png" alt="Institut de Recherche et d'Innovation" />
+ </a>
+ </p>
+ </div>
+ </div>
+ <div class="mini-table">
+ <div class="half-bloc">
+ <p>Département des Programmes Numériques</p>
+ </div>
+ <div class="half-bloc">
+ <p>Directeur : <strong>Bernard Stiegler</strong></p>
+ <p>Directeur exécutif : <strong>Vincent Puig</strong></p>
+ </div>
+ </div>
+ <h4>Équipes projet</h4>
+ <div class="mini-table">
+ <div class="half-bloc">
+ <p>Pour le DPN :</p>
+ <ul>
+ <li>Chef de projet utilisateur : <strong>Bertrand Sajus</strong></li>
+ <li>Responsables éditoriales : <strong>Marion Martin Laprade</strong> et <strong>Cécile Riottot</strong></li>
+ </ul>
+ </div>
+ <div class="half-bloc">
+ <p>Pour l'IRI :</p>
+ <ul>
+ <li>Architecture back-office et coordination technique : <strong>Yves-Marie Haussonne</strong></li>
+ <li>Coordination scientifique : <strong>Alexandre Monnin</strong></li>
+ <li>Outils de sémantisation : <strong>Thibaut Cavalié</strong></li>
+ <li>Interfaces de visualisation et d'annotation : <strong>Raphaël Velt</strong></li>
+ </ul>
+ </div>
+ </div>
+{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/notice.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,54 @@
+{% extends "base.html" %}
+
+{% block title %}{{block.super}} > {{datasheet.title}}{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/notice.css?refresh" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+ <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
+ <script src="{{STATIC_URL}}hdalab/js/notice.js?refresh"></script>
+{% endblock %}
+
+{% block main_content %}
+<div class="main-datasheet">
+ <h2><a href="{{datasheet.url}}" target="_blank">{{datasheet.title}}</a></h2>
+ <h3><a href="{{datasheet.organisation.website}}" target="_blank">{{datasheet.organisation.name}}</a></h3>
+ <img src="http://histoiredesarts.culture.fr/images/cached/images/{{datasheet.hda_id}}.jpg" />
+ <p>{{datasheet.description}}</p>
+ <ul>
+ <li>Accéder à cette ressource sur <a href="{{datasheet.url}}" target="_blank">{{domain}}</a></li>
+ <li>Plus d'informations sur <a href="http://histoiredesarts.culture.fr/notices/{{datasheet.hda_id}}/" target="_blank">histoiredesarts.culture.fr</a></li>
+ </ul>
+</div>
+
+<div class="tag-container">
+ <canvas class="tag-canvas"></canvas>
+ <div class="tags-main">
+ <h2>Mots-clés</h2>
+ <ul class="tags">
+ {% for t in ordered_tags %}
+ <li><span class="main-datasheet-tag" data-tag-id="{{t.tag.id}}">{{t.tag.label}}</span></li>
+ {% endfor %}
+ </ul>
+ </div>
+</div>
+
+<div class="related-datasheets">
+ <h2>Notices liées :</h2>
+ <ul class="datasheets">
+ {% for ds in related %}
+ <li class="datasheet">
+ <img src="http://histoiredesarts.culture.fr/images/cached/images/{{ds.hda_id}}.jpg" />
+ <h3><a href="{% url notice ds.hda_id %}">{{ds.title}}</a></h3>
+ <h4>{{ds.organisation_name}}</h4>
+ <ul class="datasheet-tags">{% for t in ds.ordered_tags %}<li data-tag-id="{{t.id}}" class="related-datasheet-tag {% if t.common %} common-tag{% endif %}">{{t.label}}</li>{% endfor %}</ul>
+ </li>
+ {% endfor %}
+ </ul>
+</div>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/thesaurus.html Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,52 @@
+{% extends "base.html" %}
+
+{% block title %}{{block.super}} > Recherche par arbre{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/trees.css?refresh" />
+ <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/thesaurus.css?refresh" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+ <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
+ <script src="{{STATIC_URL}}hdalab/lib/mustache.js"></script>
+ <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
+ <script type="text/javascript">
+ endpoints = {
+ fill_tree: "{% url fill_tree %}",
+ datasheet: "{% url notice 'ID' %}"
+ };
+ </script>
+ <script src="{{STATIC_URL}}hdalab/js/trees.js?refresh"></script>
+ <script src="{{STATIC_URL}}hdalab/js/thesaurus.js?refresh"></script>
+{% endblock %}
+
+{% block thesaurus_actif %}actif{% endblock %}
+
+{% block main_content %}
+ <div class="explain">
+ <p>Cette interface présente deux extraits de thésaurus utilisés par le ministère de la Culture et de la Communication :</p>
+ <ul>
+ <li>La branche « Secteur urbain » du Thésaurus de l’architecture et de l’urbanisme (état 2010)</li>
+ <li>La branche « Architecture d’habitation » du Thésaurus iconographique Garnier (état 2012)</li>
+ </ul>
+ <p>Les mots-clés de ces branches ont été liés avec Wikipédia. Ils deviennent ainsi sémantiquement interopérables avec les tags d’HDA-Lab. Comme le montre l’interface, ce procédé permet d’organiser et de visualiser les tags et les ressources d'HDA-Lab en utilisant des thésaurus « métiers » externes. Dans cet extrait, le mot-clé « Cité jardin » est présenté, en vis-à-vis, dans deux univers sémantiques différents</p>
+ </div>
+
+ <div class="column leftcol">
+ <h3>Arborescence 1</h3>
+ <div class="cattree">
+
+ </div>
+ </div>
+ <div class="separator"></div>
+ <div class="column rightcol">
+ <h3>Arborescence 2</h3>
+ <div class="cattree">
+
+ </div>
+ </div>
+{% endblock %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templatetags/analytics.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,70 @@
+###
+# Taken and adapted form django-google-analytics : http://
+#
+#
+##
+from django import template
+
+from django.template import Context, loader
+from django.conf import settings
+
+
+register = template.Library()
+
+def __clean_token(str, tag_name):
+ if not (str[0] == str[-1] and str[0] in ('"', "'")):
+ raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
+ return str[1:-1]
+
+def do_get_analytics(parser, token):
+ code = None
+ style = None
+ tag_name = None
+ try:
+ # split_contents() knows not to split quoted strings.
+ tokens = token.split_contents()
+ if len(tokens) > 0 :
+ tag_name = tokens[0]
+ if len(tokens) > 1 :
+ style = tokens[1]
+ if len(tokens) > 2 :
+ code = tokens[2]
+ except ValueError:
+ code = None
+
+ if not code:
+ code = getattr(settings,'GOOGLE_ANALYTICS_CODE',None)
+ else:
+ code = __clean_token(code, tag_name)
+
+ if style:
+ style = __clean_token(style, tag_name)
+ else:
+ style = 'async'
+
+ return AnalyticsNode(code, style)
+
+class AnalyticsNode(template.Node):
+ def __init__(self, code=None, style='async'):
+ self.code = code
+ self.style = style
+
+ def render(self, context):
+ if not self.code:
+ return ''
+
+ if self.style == 'async':
+ template_path = 'google_analytics/async_analytics_template.html'
+ else:
+ template_path = 'google_analytics/analytics_template.html'
+
+ if self.code.strip() != '':
+ t = loader.get_template(template_path)
+ c = Context({
+ 'analytics_code': self.code,
+ })
+ return t.render(c)
+ else:
+ return ''
+
+register.tag('analytics', do_get_analytics)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/urls.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+from django.conf.urls.defaults import patterns, include, url
+from django.contrib import admin
+from django.views.generic import TemplateView
+#from hdalab.views.ajax import filter
+
+# Uncomment the next two lines to enable the admin:
+# from django.contrib import admin
+# admin.autodiscover()
+
+urlpatterns = patterns('',
+ # Examples:
+ # url(r'^$', 'hdalab.views.home', name='home'),
+ # url(r'^hdalab/', include('hdalab.foo.urls')),
+
+ # Uncomment the admin/doc line below to enable admin documentation:
+ # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
+
+ # Uncomment the next line to enable the admin:
+ url(r'^admin/', include(admin.site.urls)),
+
+ url(r'^i18n/', include('django.conf.urls.i18n')),
+ url('^jsi18n/?$', 'django.views.i18n.javascript_catalog', name='jsi18n.all'),
+ url('^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog', {'domain':'djangojs'}, name='jsi18n'),
+
+ url(r'^facettes/', TemplateView.as_view(template_name="facettes.html"), name='facettes'),
+ url(r'^categories/', TemplateView.as_view(template_name="categories.html"), name='categories'),
+ url(r'^thesaurus/', TemplateView.as_view(template_name="thesaurus.html"), name='thesaurus'),
+ url(r'^$', TemplateView.as_view(template_name="index.html"), name='home'),
+
+ url(r'^notice/(?P<hda_id>[\w-]+)$', 'hdalab.views.pages.datasheet', name='notice')
+
+)
+
+urlpatterns += patterns('hdalab.views.ajax',
+ (r'^a/filter$', 'filter', {}, 'filter'),
+ (r'^a/sessioninfo$', 'sessioninfo', {}, 'session_info'),
+ (r'^a/tagsearch$', 'tagsearch', {}, 'tag_search'),
+ (r'^a/catsearch$', 'catsearch', {}, 'cat_search'),
+ (r'^a/cattree$', 'cattree', {}, 'cat_tree'),
+ (r'^a/filltree$', 'filltree', {}, 'fill_tree'),
+)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/utils.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Mar 13, 2012
+
+@author: ymh
+'''
+from django.core.cache import cache
+from django.utils.encoding import smart_str
+import md5
+import re
+
+
+def fix_cache_key(key):
+ cache_key = re.sub(r'\s+', '-', key)
+ cache_key = smart_str(cache_key)
+ if len(cache_key) > (250-(2+len(cache.key_prefix)+len(str(cache.version)))-33):
+ cache_key = cache_key[:(250-(2+len(cache.key_prefix)+len(str(cache.version)))-33)] + '-' + md5.new(cache_key).hexdigest()
+ return cache_key
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/views/ajax.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,458 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 31, 2012
+
+@author: ymh
+'''
+from django.conf import settings
+from django.core.cache import cache
+from django.db.models import Q, Count, Min
+from django.http import HttpResponse
+from hdabo.models import Tag, Datasheet, TaggedSheet
+from hdalab.models import HdaSession, Country, TagYears, DatasheetExtras
+from hdalab.models.dataviz import DbpediaFieldsTranslation, DbpediaFields
+from hdalab.models.categories import WpCategory, WpCategoryInclusion, TagWpCategory
+from hdalab.utils import fix_cache_key
+import copy
+import django.utils.simplejson as json
+import hmac
+import itertools
+import uuid
+
+def tagtranslation(request):
+
+ lang = request.GET.get('lang',request.LANGUAGE_CODE)
+ labels = request.GET.get('labels',None)
+
+ if not labels:
+ return HttpResponse(content=json.dumps({}), mimetype='application/json')
+
+ labelslist = [lbl.strip() for lbl in labels.split(",")]
+ masters = []
+
+ for lbl in labelslist:
+ labelqs = Tag.objects.select_related('dbpedia_fields').filter(~Q(dbpedia_uri = None), label__iexact = lbl)[0:1]
+ if len(labelqs) > 0:
+ tag = labelqs.get()
+ if tag.dbpedia_fields:
+ masters.append(tag.dbpedia_fields)
+
+ translationqs = DbpediaFieldsTranslation.objects.select_related("master", "master__tag").filter(master__in = masters, language_code=lang)
+
+ translations = dict([(t.master.label, t.label) for t in translationqs])
+
+ return HttpResponse(content=json.dumps(translations), mimetype='application/json')
+
+def subcat(category, globtags, level, max_level ):
+ # recursive function used by cattree
+ catlabel = category.label
+ tags = Tag.objects.filter(wp_categories__wp_category = category).distinct()
+ taglabels = [k for k in dict([(t.label,t.label) for t in tags])]
+ resobj = {
+ 'label': category.label,
+ 'themes': [],
+ 'contents': []
+ }
+ for label in taglabels:
+ if label == catlabel:
+ globtags[label] = {'level': level, 'access': resobj }
+ else:
+ tag_in_list = {'label' : label, 'contents': []}
+ resobj['themes'].append(tag_in_list)
+ globtags[label] = {'level': (level + 1), 'access': tag_in_list }
+
+ if level < max_level:
+ subcats = WpCategory.objects.filter(parent_categories__parent_category = category)
+ resobj['themes'] += [subcat(subcats[i], globtags, level + 1, max_level ) for i in range(len(subcats))]
+ return resobj
+
+def cleantags(category):
+ if category.has_key('contents') and len(category['contents']) == 0:
+ del category['contents']
+ if category.has_key('contents'):
+ category['contents'] = sorted(category['contents'], key=lambda content: -content['score'])
+ if category.has_key('themes'):
+ themes = []
+ for theme in category['themes']:
+ clean_theme = cleantags(theme)
+ if clean_theme.has_key('themes') or clean_theme.has_key('contents'):
+ themes.append(clean_theme)
+ category['themes'] = sorted(themes, key=lambda cat: cat['label'])
+ if len(category['themes']) == 0:
+ del category['themes']
+ return category
+
+def cattree(request):
+ # Gets the category tree from a label
+ ROOT_MAX_TAG_ORDER = 8
+ MAX_TAG_ORDER = 8
+ MAX_LEVEL = 3
+ LEVEL_COEFF = 5
+ label = request.GET.get('label', None)
+ lowerlabel = label.lower()
+ globtags = {}
+ resobj = None
+ master_category = WpCategory.objects.filter(label__iexact=label)[0:1]
+ if len(master_category):
+ resobj = subcat(master_category[0], globtags, 1, MAX_LEVEL )
+
+# tag_list = [k for k in globtags]
+
+# if len(tag_list):
+ contents = []
+# datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__in = tag_list, taggedsheet__order__lte = MAX_TAG_ORDER).distinct()
+ datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = ROOT_MAX_TAG_ORDER).select_related('organisation').distinct()
+ for datasheet in datasheets:
+ # Calculating where we add the datasheet in the tree
+ maintag = None
+ maintagscore = -5
+ dsscore = 0
+ rootscore = 0
+ for ts in TaggedSheet.objects.select_related('tag','datasheet').filter(datasheet__id=datasheet.id,order__lte=MAX_TAG_ORDER):
+ label = ts.tag.label
+ if globtags.has_key(label):
+ score = LEVEL_COEFF * globtags[label]['level'] - ts.order
+ if score > maintagscore:
+ maintagscore = score
+ maintag = label
+ dsscore = (MAX_TAG_ORDER - ts.order)
+ if label.lower() == lowerlabel:
+ rootscore = (ROOT_MAX_TAG_ORDER - ts.order)
+ if maintag is not None:
+ globtags[maintag]['access']['contents'].append({
+ 'id': datasheet.id,
+ 'title': datasheet.title,
+ 'url': datasheet.url,
+ 'description': datasheet.description,
+ 'hda_id': datasheet.hda_id,
+ 'organization': datasheet.organisation.name,
+ 'organization_url': datasheet.organisation.website,
+ 'score': max(dsscore, rootscore)
+ })
+ cleantags(resobj)
+
+# resobj['contents'] = [{'id': d.id, 'title': d.title, 'tags': [t.label for t in d.tags.filter(taggedsheet__order__lte=5)]} for d in datasheets]
+
+ return HttpResponse(content=json.dumps(resobj), mimetype='application/json')
+
+def sessioninfo(request):
+
+ data = json.loads(request.GET.get('data', "{}"))
+ write = False
+
+ if 'sessionid' in request.GET:
+ request.session['sessionid'] = request.GET['sessionid']
+ if 'sessionkey' in request.GET:
+ request.session['sessionkey'] = request.GET['sessionkey']
+
+ if 'sessionid' in request.session:
+ sessionid = request.session['sessionid']
+
+ if HdaSession.objects.filter(sessionid=sessionid).count() == 1:
+ sessionkey = request.session.get('sessionkey',None)
+ hm = hmac.new(settings.SECRET_KEY, sessionid)
+ if hm.hexdigest() == sessionkey:
+ write = True
+ else:
+ del request.session['sessionid']
+
+ if 'sessionid' not in request.session:
+ sessionid = unicode(uuid.uuid1())
+ HdaSession.objects.create(sessionid=sessionid, data=json.dumps({}))
+ write = True
+ request.session['sessionid'] = sessionid
+ request.session['sessionkey'] = hmac.new(settings.SECRET_KEY, sessionid).hexdigest()
+
+ if write and data:
+ HdaSession.objects.filter(sessionid=sessionid).update(data=json.dumps(data))
+ else:
+ data = HdaSession.objects.get(sessionid=sessionid).data
+ data = json.loads(data) if data else {}
+
+ resobj = {'data': data, "write_allowed" : write, "sessionid": sessionid }
+ if write:
+ resobj['sessionkey'] = request.session['sessionkey']
+
+ return HttpResponse(content=json.dumps(resobj), mimetype='application/json')
+
+
+def tagsearch(request):
+
+ q = request.GET.get('term',None)
+ maxcount = int(request.GET.get('count','40'))
+ lang = request.GET.get('lang',request.LANGUAGE_CODE)
+
+ stemming_langs = [ 'fr', 'en', 'de', 'it' ]
+ # For Japanese, there are no word boundaries, we should not use the regexp in that case
+ no_translate_langs = [ 'fr' ]
+
+ if q:
+ lq = q.lower()
+ qs = Tag.objects.select_related('dbpedia_fields').filter(datasheet__validated=True)
+ qrx = '(\\m|\\b)%s'%q
+ if lang in no_translate_langs:
+ if lang in stemming_langs:
+ qs = qs.filter( label__iregex = qrx )
+ else:
+ qs = qs.filter( label__icontains = q )
+ else:
+ if lang in stemming_langs:
+ qs = qs.filter(dbpedia_fields__translations__label__iregex=qrx, dbpedia_fields__translations__language_code=lang, dbpedia_fields__translations__is_label_translated = True)
+ else:
+ qs = qs.filter(dbpedia_fields__translations__label__icontains=q, dbpedia_fields__translations__language_code=lang, dbpedia_fields__translations__is_label_translated = True)
+ else:
+ qs = Tag.objects.filter(~Q(dbpedia_uri = None))
+
+ qs = qs.annotate(nb=Count('datasheet',distinct=True)).order_by('-nb')[:maxcount]
+
+ qslist = list(qs)
+
+ if lang in no_translate_langs:
+ translations = {}
+ else:
+ transqs = DbpediaFieldsTranslation.objects.filter(master__tag__in = qslist, language_code=lang, is_label_translated=True).select_related("master")
+ translations = dict([(tr.master.tag_id, {'label':tr.label,'abstract':tr.abstract, 'is_label_translated': tr.is_label_translated}) for tr in transqs])
+
+ res = []
+
+ for t in qslist:
+ dbfields = t.dbpedia_fields
+ resobj = {'original_label':t.label,'nb':t.nb}
+ resobj['thumbnail'] = dbfields.thumbnail if dbfields is not None else None
+
+# if t.id in translations and not translations[t.id].get('is_label_translated', True):
+# continue
+ if t.id in translations:
+ resobj['value'] = translations[t.id]['label']
+ resobj['abstract'] = translations[t.id]['abstract']
+ else:
+ resobj['value'] = t.label
+ resobj['abstract'] = dbfields.abstract if dbfields is not None else None
+ if q is None or resobj['value'].lower().find(lq) != -1:
+ res.append(resobj)
+
+ return HttpResponse(content=json.dumps(res), mimetype='application/json')
+
+def catsearch(request):
+
+ q = request.GET.get('term',None)
+
+ # On ne récupère que les catégories qui sont également des tags
+ qrx = '(\\m|\\b)%s'%q
+ qs = Tag.objects.filter(label__iregex=q)
+
+ labels = [tag.label for tag in qs]
+
+ qs = WpCategory.objects.annotate(nb=Count('child_categories__child_category__tags')).filter(label__in = labels, nb__gt=0)
+
+ res = [{'value':t.label} for t in qs]
+
+ return HttpResponse(content=json.dumps(res), mimetype='application/json')
+
+def filter(request):
+
+ lang = request.GET.get('lang',request.LANGUAGE_CODE)
+ periode = request.GET.get('period',None)
+ label = request.GET.get('label', None)
+ country = request.GET.get('country', None)
+ contentlist = request.GET.get('contentlist', None)
+ max_tag_order = int(request.GET.get('mto', '12'))
+ content_count = request.GET.get('contentcount', 12)
+ tag_count = request.GET.get('tagcount', 30)
+ no_translate_langs = [ 'fr' ]
+
+ key_parts = ("filter",lang,periode,label,country,contentlist,max_tag_order,content_count,tag_count)
+ key_parts = [unicode(p).encode("utf-8") for p in key_parts]
+
+ cache_key = fix_cache_key("-".join(key_parts))
+
+ outputstr = cache.get(cache_key)
+
+ if outputstr is None:
+
+ matchtagids = []
+
+ tagqs = Tag.objects.exclude(category__label__in = ['Datation', 'Localisation', 'Discipline artistique']).filter(~Q(dbpedia_uri = None))
+ countryqs = Country.objects
+ discqs = Tag.objects.filter(~Q(dbpedia_uri = None), category__label = u'Discipline artistique').select_related('dbpedia_fields')
+ yearqs = TagYears.objects
+
+ contentqs = Datasheet.objects.filter(validated=True)
+ labeltranslations = []
+
+ if label or periode or country or contentlist :
+ matchtagqslist = []
+
+ if periode:
+ years = periode.split(",")
+ start_year = int(years[0])
+ end_year = int(years[0:2][-1])
+ delta = max(1, (end_year-start_year)/2)
+ minstart = start_year - delta
+ maxend = end_year + delta
+ matchtagqs = Tag.objects.filter(~Q(dbpedia_uri = None),
+ years__end_year__gte = start_year,
+ years__start_year__lte = end_year,
+ years__end_year__lte = maxend,
+ years__start_year__gte = minstart,
+ )
+ matchtagqslist.append(matchtagqs)
+
+ if label:
+ for txtlbl in label.split(","):
+ matchtagqs = Tag.objects.select_related('dbpedia_fields').filter(~Q(dbpedia_uri = None), label__iexact = txtlbl.strip())
+ matchtagqslist.append(matchtagqs)
+
+ if country:
+ for country_uri in country.split(","):
+ matchtagqs = Tag.objects.filter(~Q(dbpedia_uri = None),locatedin__country__dbpedia_uri = country_uri)
+ matchtagids += [t.id for t in matchtagqs if t.id not in matchtagids]
+ matchtagqslist.append(matchtagqs)
+ if contentlist:
+ contentqs = contentqs.filter(id__in = contentlist.split(","))
+
+ tagcond = None
+ tagcondid = None
+ for matchtagqs in matchtagqslist:
+ newcond = Q(id__in = TaggedSheet.objects.filter(tag__in = copy.deepcopy(matchtagqs), order__lte = max_tag_order).values('datasheet_id'))
+ newcondid = Q(id__in = matchtagqs)
+ tagcond = newcond if tagcond is None else (tagcond & newcond)
+ tagcondid = newcondid if tagcondid is None else (tagcondid | newcondid)
+
+ contentqs = contentqs.filter(tagcond).distinct()
+ matchtagidsqs = list(Tag.objects.select_related("dbpedia_fields").only("id").filter(tagcondid))
+ matchtagids = [t.id for t in matchtagidsqs]
+
+ if lang not in no_translate_langs:
+ masters = [t.dbpedia_fields for t in matchtagidsqs if t.dbpedia_fields is not None]
+
+ translationqs = DbpediaFieldsTranslation.objects.select_related("master", "master__tag").filter(master__in = masters, language_code=lang)
+ labeltranslations = [{'label':t.master.label, 'translated_label':t.label} for t in translationqs]
+
+ tagqs = tagqs.filter(datasheet__in = contentqs)
+ countryqs = countryqs.filter(includes__tag__taggedsheet__datasheet__in = contentqs)
+ discqs = discqs.filter(datasheet__in = contentqs)
+ yearqs = yearqs.filter(tag__taggedsheet__datasheet__in = contentqs)
+
+ if contentlist is None:
+ contentqs.order_by('?')
+
+ cont_count = contentqs.count()
+
+ contenus = dict([(content.id, {'score' : 0, 'tags' : [], 'hda_id': content.hda_id, 'id':content.id, 'title': content.title, 'description': content.description, 'url': content.url}) for content in contentqs[0:content_count]])
+ contentids = contenus.keys()
+
+ qs = DatasheetExtras.objects.select_related('insee').filter(datasheet__in = contentids)
+ for dse in qs:
+ contenus[dse.datasheet_id]['coords'] = {'city_name': dse.insee.city_name, 'latitude': dse.insee.latitude, 'longitude': dse.insee.longitude}
+
+ qs = list(TaggedSheet.objects.select_related('tag', 'tag__dbpedia_fields').filter(datasheet__in = contentids, order__lte = max_tag_order).order_by('order'))
+
+ translations = {}
+
+ if lang not in no_translate_langs:
+ transqs = DbpediaFieldsTranslation.objects.filter(master__in = [ts.tag.dbpedia_fields for ts in qs], language_code = lang)
+ translations = dict([(trans.master_id,trans.label) for trans in transqs])
+
+ for ts in qs:
+ match_tag = ts.tag.id in matchtagids
+ contenus[ts.datasheet_id]['tags'].append({'id': ts.tag.id, 'label':ts.tag.label, 'order':ts.order, 'match': match_tag , 'translated_label': translations.get(ts.tag.dbpedia_fields.id, ts.tag.label) if ts.tag.dbpedia_fields is not None else ts.tag.label})
+
+ if match_tag:
+ contenus[ts.datasheet_id]['score'] += 2*max_tag_order - ts.order
+
+ if contentlist is None:
+ contenus = sorted(contenus.values(),key=lambda e: -e['score'])
+ else:
+ contenus = contenus.values()
+
+ #tagqs = tagqs.annotate(nb=Count('datasheet')).order_by('-nb')[:tag_count]
+ tagqs = tagqs.annotate(nb=Count('datasheet')).order_by('-nb').only('id','label')[:tag_count]
+ #.select_related('dbpedia_fields')
+ # hack to add only necessary fields in the group by
+ # contournement bug https://code.djangoproject.com/ticket/17144
+ tagqs.query.clear_select_fields()
+ tagqs.query.add_fields(['id','label'], False)
+ tagqs.query.set_group_by()
+
+ tagqslist = list(tagqs)
+
+ dbpediafields = dict([(df.tag_id, df) for df in DbpediaFields.objects.filter(tag__in = tagqslist)])
+
+ if lang not in no_translate_langs:
+ transqs = DbpediaFieldsTranslation.objects.filter(master__in = dbpediafields.values(), language_code = lang)
+ translations = dict([(trans.master_id,trans.label) for trans in transqs])
+
+ tags = [{'id': tag.id, 'label': tag.label, 'score': tag.nb, 'translated_label': translations.get(dbpediafields[tag.id].id, tag.label) if tag.id in dbpediafields else tag.label} for tag in tagqslist]
+
+ countryqs = countryqs.annotate(nb=Count('includes__tag__taggedsheet'))
+ countries = dict([(country.dbpedia_uri, country.nb) for country in countryqs])
+
+ discqslist = list(discqs.annotate(nb=Count('taggedsheet')).order_by('-nb')[:10])
+
+ if lang not in no_translate_langs:
+ transqs = DbpediaFieldsTranslation.objects.filter(master__in = [tag.dbpedia_fields for tag in discqslist], language_code = lang)
+ translations = dict([(trans.master_id,trans.label) for trans in transqs])
+
+ disciplines = [{'label':tag.label,'score':tag.nb, 'translated_label': translations.get(tag.dbpedia_fields.id, tag.label) if tag.dbpedia_fields is not None else tag.label} for tag in discqslist]
+
+ years = {}
+ yearqs = yearqs.annotate(nb=Count('tag__taggedsheet'))
+ for ty in yearqs:
+ for year in range(ty.start_year, ty.end_year):
+ years[year] = ty.nb + (years[year] if year in years else 0)
+
+ yearchange = []
+ for year in sorted(years.keys()):
+ score = years[year]
+ if year < 2011:
+ if (year-1 not in years and score != 0) or (year-1 in years and years[year-1] != score):
+ yearchange.append({'year': year, 'score': score})
+ if year+1 not in years and year != -1 and score != 0:
+ yearchange.append({'year': year+1, 'score': 0})
+
+ tag_translations = {}
+ for t in itertools.chain(labeltranslations,disciplines,tags):
+ tag_translations[t['label']] = t['translated_label']
+ for c in contenus:
+ for t in c['tags']:
+ tag_translations[t['label']] = t['translated_label']
+
+ output = {'count': cont_count, 'contents': contenus, 'tags':tags, 'sparkline':yearchange, 'countries':countries, 'disciplines':disciplines, 'tagtranslations': tag_translations}
+ outputstr = json.dumps(output)
+ cache.set(cache_key, outputstr)
+
+ return HttpResponse(content=outputstr, mimetype='application/json')
+
+def subtree(tree):
+ MAX_TAG_ORDER = 16
+ label = tree['label']
+ sub = tree.get('contents',[])
+
+ datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = MAX_TAG_ORDER).annotate(tagorder=Min('taggedsheet__order')).select_related('organisation').distinct()
+
+ contents = [{ 'description': ds.description, 'title': ds.title, 'url': ds.url, 'score': int((MAX_TAG_ORDER - ds.tagorder)/2), 'id': ds.id, 'hda_id': ds.hda_id, 'organization': ds.organisation.name, 'organization_url': ds.organisation.website } for ds in datasheets]
+
+ contents = sorted(contents, key=lambda e: -e['score'])
+
+ res = { 'label': label }
+
+ if len(contents):
+ res['contents'] = contents
+
+ if len(sub):
+ subcats = [subtree(st) for st in sub]
+ subcats = [sc for sc in subcats if len(sc.get('contents',[])) or len(sc.get('themes',[]))]
+ res['themes'] = subcats
+
+ return res
+
+def filltree(request):
+
+ tree = request.GET.get('tree','{}')
+
+ treeobj = json.loads(tree)
+
+ res = subtree(treeobj)
+
+ return HttpResponse(content=json.dumps(res), mimetype='application/json')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/views/pages.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+from django.shortcuts import render_to_response, redirect
+from django.template import RequestContext
+from hdabo.models import Datasheet, TaggedSheet
+import re
+import django.utils.simplejson as json
+
+def datasheet(request, hda_id=None):
+ MAX_TAG = 15
+ MAX_RELATED = 50
+
+ datasheet = Datasheet.objects.select_related("organisation").get(hda_id=hda_id)
+
+ domain = re.findall(r"^https?://(www\.)?([^/]+)",datasheet.url)
+ ordered_tags = TaggedSheet.objects.filter(datasheet=datasheet,order__lte=MAX_TAG).select_related("tag").order_by('order')
+ tags = [t.tag.id for t in ordered_tags]
+ tagorders = dict([(t.tag.id,t.order) for t in ordered_tags])
+ tsqs = TaggedSheet.objects.exclude(datasheet=datasheet).filter(order__lte=MAX_TAG,tag_id__in=tags)
+ dsscores = {}
+ addtoscore = 2*MAX_TAG
+
+ for ts in tsqs:
+ a_order = tagorders[ts.tag_id]
+ b_order = ts.order
+ score = addtoscore - a_order - b_order
+ dsscore = dsscores.get(ts.datasheet_id,0)
+ dsscores[ts.datasheet_id] = dsscore + score
+ relatedqs = Datasheet.objects.filter(id__in=dsscores.keys()).select_related("organisation")
+ relatedds = [{
+ 'id': ds.id,
+ 'hda_id': ds.hda_id,
+ 'title': ds.title,
+ 'description': ds.description,
+ 'organisation_name': ds.organisation.name,
+ 'organisation_url': ds.organisation.website,
+ 'score': dsscores.get(ds.id,0),
+ } for ds in relatedqs]
+ relatedds = sorted(relatedds, key=lambda ds: -ds['score'])[:MAX_RELATED]
+
+ for ds in relatedds:
+ otqs = TaggedSheet.objects.filter(datasheet_id=ds['id'],order__lte=MAX_TAG).select_related("tag").order_by('order')
+ ds['ordered_tags'] = [{
+ 'id': t.tag.id,
+ 'label': t.tag.label,
+ 'order': t.order,
+ 'common' : (t.tag.id in tags)
+ } for t in otqs]
+
+ return render_to_response(
+ "notice.html",
+ {
+ 'datasheet':datasheet,
+ 'domain': domain[0][1] if domain else "",
+ 'ordered_tags': ordered_tags,
+ 'related': relatedds,
+ },
+ context_instance=RequestContext(request)
+ )
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/manage.py Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hdabo.settings")
+
+ from django.core.management import execute_from_command_line
+
+ execute_from_command_line(sys.argv)
--- a/virtualenv/res/lib/lib_create_env.py Fri Nov 16 18:12:05 2012 +0100
+++ b/virtualenv/res/lib/lib_create_env.py Tue Jun 17 10:25:33 2014 +0200
@@ -17,20 +17,22 @@
URLS = {
#'': {'setup': '', 'url':'', 'local':''},
'DISTRIBUTE': {'setup': 'distribute', 'url':'http://pypi.python.org/packages/source/d/distribute/distribute-0.6.24.tar.gz', 'local':"distribute-0.6.24.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
- 'DJANGO': {'setup': 'django', 'url': 'http://www.djangoproject.com/download/1.4.2/tarball/', 'local':"Django-1.4.2.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
- 'DJANGO-EXTENSIONS': { 'setup': 'django-extensions', 'url':'https://github.com/django-extensions/django-extensions/tarball/0.8', 'local':"django-extensions-0.8.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'DJANGO': {'setup': 'django', 'url': 'http://www.djangoproject.com/download/1.6.5/tarball/', 'local':"Django-1.6.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'DJANGO-EXTENSIONS': { 'setup': 'django-extensions', 'url':'https://github.com/django-extensions/django-extensions/tarball/1.3.7', 'local':"django-extensions-1.3.7.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'HTTPLIB2': { 'setup': 'python-httplib2', 'url':'http://code.google.com/p/httplib2/downloads/detail?name=httplib2-0.7.4.tar.gz&can=2&q=', 'local':"httplib2-0.7.4.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
- 'SOUTH': { 'setup': 'South', 'url':'http://www.aeracode.org/releases/south/south-0.7.5.tar.gz', 'local':"south-0.7.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'SOUTH': { 'setup': 'South', 'url':'http://www.aeracode.org/releases/south/south-0.8.4.tar.gz', 'local':"south-0.8.4.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'PYCRYPTO': {'setup': 'pycrypto', 'url':'https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz', 'local':'pycrypto-2.6.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'SSH': {'setup': 'ssh', 'url':'http://pypi.python.org/packages/source/s/ssh/ssh-1.7.14.tar.gz#md5=4cdd0549ef4699bd67b96264d3b21427', 'local':'ssh-1.7.14.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'FABRIC': {'setup': 'fabric', 'url':'https://github.com/fabric/fabric/tarball/1.4.2', 'local':'fabric-1.4.2.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'MERCURIAL': {'setup': 'mercurial', 'url':'http://mercurial.selenic.com/release/mercurial-2.2.3.tar.gz', 'local':'mercurial-2.2.3.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
- 'HAYSTACK': {'setup': 'django-haystack', 'url': 'https://github.com/toastdriven/django-haystack/tarball/master', 'local': 'django-haystack-v2.0.0.tar.gz', 'install':{'method':'pip', 'option_str': None, 'dict_extra_env': None}},
- 'WHOOSH': {'setup': 'whoosh', 'url':'https://bitbucket.org/mchaput/whoosh/get/tip.tar.gz', 'local':'whoosh-2.5.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'HAYSTACK': {'setup': 'django-haystack', 'url': 'https://github.com/toastdriven/django-haystack/archive/v2.1.0.tar.gz', 'local': 'django-haystack-2.1.0.tar.gz', 'install':{'method':'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'WHOOSH': {'setup': 'whoosh', 'url':'https://pypi.python.org/packages/source/W/Whoosh/Whoosh-2.5.7.tar.gz', 'local':'whoosh-2.5.7.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}},
'WIKITOOLS' : { 'setup': 'wikitools', 'url': 'wikitools.tar.bz2', 'local': 'wikitools.tar.bz2', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'ISODATE' : {'setup': 'isodate', 'url': 'http://pypi.python.org/packages/source/i/isodate/isodate-0.4.8.tar.gz', 'local': 'isodate-0.4.8.tar.gz', 'install' : {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'RDFLIB' : { 'setup': 'rdflib', 'url': 'http://rdflib.googlecode.com/files/rdflib-3.2.0.tar.gz', 'local': 'rdflib-3.2.0.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'SPARQLWRAPPER' : { 'setup': 'SPARQLWrapper', 'url': 'http://downloads.sourceforge.net/project/sparql-wrapper/sparql-wrapper-python/1.5.0/SPARQLWrapper-1.5.0.tar.gz', 'local' : 'SPARQLWrapper-1.5.0.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'REQUESTS' : { 'setup': 'requests', 'url': 'https://github.com/kennethreitz/requests/archive/v2.3.0.tar.gz', 'local' : 'requests-2.3.0.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'PYELASTICSEARCH' : { 'setup': 'pyelasticsearch', 'url': 'https://github.com/rhec/pyelasticsearch/archive/0.6.1.tar.gz', 'local' : 'pyelasticsearch-0.6.1.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
}
if system_str == 'Windows':
@@ -50,7 +52,7 @@
})
else:
if system_str == "Darwin":
- lxml_options = {'STATIC_DEPS': 'true', 'LIBXML2_VERSION': '2.8.0', 'LIBXSLT_VERSION': '1.1.26', 'LIBICONV_VERSION': '1.14'}
+ lxml_options = {'STATIC_DEPS': 'true', 'LIBXML2_VERSION': '2.9.1', 'LIBXSLT_VERSION': '1.1.28', 'LIBICONV_VERSION': '1.14'}
lxml_method = 'easy_install'
mysql_method = 'install_mysql'
else:
@@ -59,9 +61,9 @@
mysql_method = 'pip'
URLS.update({
- 'PSYCOPG2': {'setup': 'psycopg2','url': 'http://www.psycopg.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.5.tar.gz', 'local':"psycopg2-2.4.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'PSYCOPG2': {'setup': 'psycopg2','url': 'https://pypi.python.org/packages/source/p/psycopg2/psycopg2-2.5.3.tar.gz', 'local':"psycopg2-2.5.3.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
'PIL': {'setup': 'pil', 'url': 'http://effbot.org/downloads/Imaging-1.1.7.tar.gz', 'local':"Imaging-1.1.7.tar.gz", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
- 'LXML': {'setup': 'lxml', 'url':"lxml-2.3.4.tar.bz2", 'local':"lxml-2.3.4.tar.bz2", 'install': {'method': lxml_method, 'option_str': None, 'dict_extra_env': lxml_options}},
+ 'LXML': {'setup': 'lxml', 'url':"lxml-3.2.1.tar.bz2", 'local':"lxml-3.2.1.tar.bz2", 'install': {'method': lxml_method, 'option_str': None, 'dict_extra_env': lxml_options}},
'PYYAML' : { 'setup': 'PyYAML', 'url': 'http://pyyaml.org/download/pyyaml/PyYAML-3.09.tar.gz', 'local': 'PyYAML-3.09.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
})
Binary file virtualenv/res/src/Django-1.6.5.tar.gz has changed
Binary file virtualenv/res/src/django-extensions-1.3.7.tar.gz has changed
Binary file virtualenv/res/src/django-haystack-2.1.0.tar.gz has changed
Binary file virtualenv/res/src/lxml-3.2.1.tar.bz2 has changed
Binary file virtualenv/res/src/psycopg2-2.5.3.tar.gz has changed
Binary file virtualenv/res/src/pyelasticsearch-0.6.1.tar.gz has changed
Binary file virtualenv/res/src/requests-2.3.0.tar.gz has changed
Binary file virtualenv/res/src/south-0.8.4.tar.gz has changed
Binary file virtualenv/res/src/whoosh-2.5.7.tar.gz has changed
--- a/virtualenv/web/res/res_create_env.py Fri Nov 16 18:12:05 2012 +0100
+++ b/virtualenv/web/res/res_create_env.py Tue Jun 17 10:25:33 2014 +0200
@@ -7,7 +7,7 @@
INSTALLS = [ #(key,method, option_str, dict_extra_env)
'LXML',
'PSYCOPG2',
- 'PIL',
+ #'PIL',
'DJANGO',
'DJANGO-EXTENSIONS',
'SOUTH',
@@ -19,6 +19,8 @@
'RDFLIB',
'SPARQLWRAPPER',
'PYYAML',
+ 'REQUESTS',
+ 'PYELASTICSEARCH',
]
if system_str == 'Windows':
--- a/web/hdabo/.htaccess.mod_python.tmpl Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-SetHandler python-program
-PythonHandler ldt.core.handlers.modpython
-SetEnv DJANGO_SETTINGS_MODULE ldtplatform.settings
-PythonInterpreter platform
-PythonOption django.root /~wakimd/platform/ldtplatform
-PythonOption virtualenv.activate_path /iridata/users/wakimd/Env/Efculture/bin/activate_this.py
-PythonDebug on
-PythonPath "['/iridata/users/wakimd/Env/Efculture/lib/python2.6/sites-packages'] + sys.path"
-Header set Pragma "no-cache"
-Header set Cache-Control "no-cache"
-Header set Expires "-1"
--- a/web/hdabo/.htaccess.mod_wsgi.tmpl Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-
-SetEnv DJANGO_SETTINGS_MODULE hdabo.settings
-SetEnv PROJECT_PATH /Users/ymh/dev/workspace/hdabo/web
-SetEnv PYTHON_PATH /Users/ymh/dev/workspace/hdabo/virtualenv/web/env/hdabo/lib/python2.6/site-packages:/Applications/Dev/eclipse/plugins/org.python.pydev.debug_2.2.0.2011062419/pysrc/
-SetEnv PYDEV_DEBUG False
-
-Options ExecCGI FollowSymLinks
-SetHandler wsgi-script
-
-#if defined in global definition
-#defined with WSGIDaemonProcess
-#WSGIProcessGroup platform
-
-RewriteEngine On
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^(.*)$ /~ymh/hdabo/hdabo/modwsgi.wsgi/$1 [QSA,PT,L]
-
-Header set Pragma "no-cache"
-Header set Cache-Control "no-cache"
-Header set Expires "-1"
--- a/web/hdabo/__init__.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-VERSION = (2, 13, 0, "final", 0)
-
-
-def get_version():
- version = '%s.%s' % (VERSION[0], VERSION[1])
- if VERSION[2]:
- version = '%s.%s' % (version, VERSION[2])
- if VERSION[3:] == ('alpha', 0):
- version = '%s pre-alpha' % version
- else:
- if VERSION[3] != 'final':
- version = '%s %s %s' % (version, VERSION[3], VERSION[4])
- return version
-
-
-__version__ = get_version()
--- a/web/hdabo/admin.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-from django.contrib import admin
-from hdabo.models import (Author, Datasheet, DocumentFormat, Domain, Organisation,
- Tag, TagCategory, TaggedSheet, TimePeriod)
-
-
-admin.site.register(Author)
-admin.site.register(Datasheet)
-admin.site.register(DocumentFormat)
-admin.site.register(Domain)
-admin.site.register(Organisation)
-admin.site.register(Tag)
-admin.site.register(TagCategory)
-admin.site.register(TaggedSheet)
-admin.site.register(TimePeriod)
-
-
--- a/web/hdabo/config.py.tmpl Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-import os
-
-BASE_DIR = os.path.dirname(os.path.abspath(__file__)).rstrip("/")+"/"
-BASE_URL = '/~ymh/hdabo/'
-WEB_URL = 'http://localhost'
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = os.path.abspath(BASE_DIR + "../static/media/")
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = BASE_URL + "static/media/"
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = os.path.abspath(BASE_DIR + "../static/site/")
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = BASE_URL + "static/site/"
-
-# Additional locations of static files
-STATICFILES_DIRS = (
- # Put strings here, like "/home/html/static" or "C:/www/django/static".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
-)
-
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': 'hdabo', # Or path to database file if using sqlite3.
- 'USER': 'iri', # Not used with sqlite3.
- 'PASSWORD': 'iri', # Not used with sqlite3.
- 'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '5432', # Set to empty string for default. Not used with sqlite3.
- }
-}
-
-HAYSTACK_SEARCH_ENGINE = 'whoosh'
-HAYSTACK_WHOOSH_PATH = os.path.abspath(BASE_DIR + "../index/").rstrip("/")+"/"
-
--- a/web/hdabo/context_processors.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-import hdabo
-
-def version(request):
- return { 'VERSION': hdabo.get_version() }
-
--- a/web/hdabo/django_wsgi.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-import os
-
-import django.core.handlers.wsgi
-
-application = django.core.handlers.wsgi.WSGIHandler()
-
-if os.environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
- import pydevd #@UnresolvedImport
- pydevd.settrace(suspend=False)
Binary file web/hdabo/fixtures/datasheet_10.yaml.bz2 has changed
Binary file web/hdabo/fixtures/datasheet_347.yaml.bz2 has changed
Binary file web/hdabo/fixtures/datasheet_all.yaml.bz2 has changed
Binary file web/hdabo/fixtures/initial_data.yaml.bz2 has changed
--- a/web/hdabo/forms.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-# -*- coding: utf-8 -*-
-from django import forms
-from django.db.models.query import QuerySet
-
-
-class SortedMultipleChoiceField(forms.ModelMultipleChoiceField):
- def clean(self, value):
- queryset = super(SortedMultipleChoiceField, self).clean(value)
- if value is None or not isinstance(queryset, QuerySet):
- return queryset
- object_list = dict((
- (unicode(key), value)
- for key, value in queryset.in_bulk(value).iteritems()))
- return [object_list[unicode(pk)] for pk in value]
--- a/web/hdabo/manage.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-#!/usr/bin/env python
-from django.core.management import execute_manager
-import imp
-import settings
-try:
- imp.find_module('settings') # Assumed to be in the same directory.
-except ImportError:
- import sys
- sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
- sys.exit(1)
-
-
-if __name__ == "__main__":
- execute_manager(settings)
--- a/web/hdabo/management/commands/clean_tags.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jun 20, 2012
-
-@author: ymh
-'''
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from django.db import transaction,connection
-from django.db.models import Count
-from hdabo.models import Tag
-from hdabo.utils import show_progress
-from optparse import make_option
-import math
-import sys
-
-
-class Command(NoArgsCommand):
- '''
- remove orphan tags and merge duplicates (the key is the dbpedia uri)
- '''
-
-
- def handle_noargs(self, **options):
- '''
- do the work
- '''
-
- # merge duplicate tags
- cursor = connection.cursor()
- cursor.execute("select label, dbpedia_uri from hdabo_tag group by label,dbpedia_uri having count(label) > 1")
-
- for label,_ in cursor:
- qs = Tag.objects.filter(label=label).annotate(num_ds=Count('datasheet')).order_by('-num_ds')
- ref_tag = None
- for t in qs:
- print("label : %d : %s, num_ds: %d"%(t.id,t.label, t.num_ds))
- if ref_tag is None:
- ref_tag = t
- else:
- for ts in t.taggedsheet_set.all():
- pass
- print("changing tag %d to %d" %(ts.tag.id, ref_tag.id) )
- ts.tag = ref_tag
- ts.save()
-
- # remove ophans tags
-
- orphans_tags = Tag.objects.annotate(num_ds=Count('datasheet')).filter(num_ds=0)
-
- print("nb Orphans : %d" % orphans_tags.count())
-
- #delete
- orphans_tags.delete()
-
-
\ No newline at end of file
--- a/web/hdabo/management/commands/diff_csv.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on May 25, 2011
-
-@author: ymh
-'''
-#Auteur,Chemin,Comment,Controle,Datcre,Datmaj,Desc,Domaine,Format,ID,Insee,Org,Org_Home,OrgID,Periode1,Periode2,Periode3,Satut,Sousdom,Tag,Theme2,Theme3,Titre,Url,Vignette,Ville
-#"Auteur","Chemin","Comment","Controle","Datcre","Datmaj","Desc","Domaine","Format","ID","Insee","Org","Org_Home","OrgID","Periode1","Periode2","Periode3","Satut","Sousdom","Tag","Theme2","Theme3","Titre","Url","Vignette","Ville",
-
-from django.core.management.base import BaseCommand, CommandError
-from django.db import transaction
-from hdabo.models import Datasheet
-from optparse import make_option
-import csv
-import math
-import sys
-
-class Command(BaseCommand):
- '''
- Command to diff datasheets content from csv content
- '''
- args = '<path_to_csv_file path_to_csv_file ...>'
- options = '[--do-delete] [--encoding] [--delimiter] [--dialect]'
- help = """Import of a csv file for hdabo
-Options:
- --do-delete : ignore existing datasheets
- --encoding : files encoding. default to latin-1
- --delimiter : scv delimiter
- --dialect : csv dialect
- --fieldnames : csv columns
- """
-
- option_list = BaseCommand.option_list + (
- make_option('--encoding',
- action='store',
- type='string',
- dest='encoding',
- default="latin-1",
- help='fix the file encoding. default to latin-1'),
- make_option('--delimiter',
- action='store',
- type='string',
- dest='delimiter',
- default=";",
- help='csv file delimiter'),
- make_option('--dialect',
- action='store',
- type='string',
- dest='dialect',
- default="excel",
- help='csv dialect'),
- make_option('--fieldnames',
- action='store',
- type='string',
- dest='fieldnames',
- default=None,
- help='fields list (comma separated)'),
- make_option('--do-delete',
- action='store_true',
- dest='do_delete',
- default=False,
- help='delete datasheets'),
-
- )
-
- def show_progress(self, current_line, total_line, width):
-
- percent = (float(current_line) / float(total_line)) * 100.0
-
- marks = math.floor(width * (percent / 100.0))
- spaces = math.floor(width - marks)
-
- loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
-
- sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
- if percent >= 100:
- sys.stdout.write("\n")
- sys.stdout.flush()
-
-
-
- def handle(self, *args, **options):
-
- if len(args) == 0:
- raise CommandError("Gives at lat one csv file to import")
-
- self.encoding = options.get('encoding', "latin-1")
- self.do_delete = options.get('do_delete', False)
- fieldnames = options.get('fieldnames', None)
-
- for csv_path in args:
- print "Processing %s " % (csv_path)
- with open(csv_path, 'rU') as csv_file:
-
- # get the number of lines if necessary
- for i, l in enumerate(csv_file): #@UnusedVariable
- pass
- total_line = i + 1
- if fieldnames:
- total_line = total_line + 1
- csv_file.seek(0)
-
- delimiter = options.get('delimiter', ";")
- if delimiter == "TAB" or delimiter == "\\t":
- delimiter = '\t'
-
- dr_kwargs = {'delimiter':delimiter}
- if fieldnames is not None:
- dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
- dialect = options.get('dialect', "excel")
- if dialect is not None:
- dr_kwargs['dialect'] = dialect
-
- reader = csv.DictReader(csv_file, **dr_kwargs)
-
- ids = []
-
- for row in reader:
- line_num = reader.line_num if fieldnames is None else reader.line_num + 1
- self.show_progress(line_num, total_line, 60)
- def safe_decode(val, encoding):
- if val:
- return val.decode(encoding)
- else:
- return val
-
- row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
-
- ids.append(row['ID'])
-
- qs = Datasheet.objects.exclude(hda_id__in = ids).order_by("hda_id")
-
- qs_count = qs.count()
-
- if qs_count == 0:
- print("No datasheet to delete : exit")
- return
-
- print("The following datasheets are in the database and not in the csv file")
- for i,ds in enumerate(qs):
- print("%*d- %4s : %s" % (len(str(qs_count+1)), i+1, ds.hda_id, ds.title.strip() if ds.title is not None else ""))
-
-
- if self.do_delete:
- print("deleting datasheets")
- qs.delete()
-
--- a/web/hdabo/management/commands/import_csv.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,267 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on May 25, 2011
-
-@author: ymh
-'''
-#Auteur,Chemin,Comment,Controle,Datcre,Datmaj,Desc,Domaine,Format,ID,Insee,Org,Org_Home,OrgID,Periode1,Periode2,Periode3,Satut,Sousdom,Tag,Theme2,Theme3,Titre,Url,Vignette,Ville
-#"Auteur","Chemin","Comment","Controle","Datcre","Datmaj","Desc","Domaine","Format","ID","Insee","Org","Org_Home","OrgID","Periode1","Periode2","Periode3","Satut","Sousdom","Tag","Theme2","Theme3","Titre","Url","Vignette","Ville",
-
-from django.core.management.base import BaseCommand, CommandError
-from django.db import transaction
-from hdabo.models import (Author, Datasheet, DocumentFormat, Domain, Organisation,
- Tag, TaggedSheet, TimePeriod, Location)
-from hdabo.wp_utils import normalize_tag
-from optparse import make_option
-import csv
-import datetime
-import math
-import sys
-
-class Command(BaseCommand):
- '''
- Command to import csvfile
- '''
- args = '<path_to_csv_file path_to_csv_file ...>'
- options = '[--ignore-existing] [--lines] [--encoding]'
- help = """Import of a csv file for hdabo
-Options:
- --ignore-existing : ignore existing datasheets
- --lines : max number of lines to load (for each file). 0 means all.
- --encoding : files encoding. default to latin-1"""
-
- option_list = BaseCommand.option_list + (
- make_option('--encoding',
- action='store',
- type='string',
- dest='encoding',
- default="latin-1",
- help='fix the file encoding. default to latin-1'),
- make_option('--delimiter',
- action='store',
- type='string',
- dest='delimiter',
- default=";",
- help='csv file delimiter'),
- make_option('--dialect',
- action='store',
- type='string',
- dest='dialect',
- default="excel",
- help='csv dialect'),
- make_option('--fieldnames',
- action='store',
- type='string',
- dest='fieldnames',
- default=None,
- help='fields list (comma separated)'),
- make_option('--lines',
- action='store',
- type='int',
- dest='lines',
- default=0,
- help='Number of lines to read. 0 means all.'),
- make_option('--ignore-existing',
- action='store_true',
- dest='ignore_existing',
- default=False,
- help='force insertion'),
-
- )
-
- def show_progress(self, current_line, total_line, width):
-
- percent = (float(current_line) / float(total_line)) * 100.0
-
- marks = math.floor(width * (percent / 100.0))
- spaces = math.floor(width - marks)
-
- loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
-
- sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
- if percent >= 100:
- sys.stdout.write("\n")
- sys.stdout.flush()
-
-
- def create_domain_period(self, row_value, klass, school_period):
- res_list = []
- if not row_value:
- return res_list
- for label_str in [dstr.strip() for dstr in row_value.split('\x0b')]:
- if label_str:
- res_obj, created = klass.objects.get_or_create(label=label_str, school_period=school_period, defaults={"label":label_str, "school_period":school_period}) #@UnusedVariable
- res_list.append(res_obj)
- return res_list
-
- def create_datasheet(self, row):
-
- if self.ignore_existing and Datasheet.objects.filter(hda_id=row[u"ID"]).count() > 0:
- return
-
- author_str = row[u'Auteur']
- if author_str:
- author_array = author_str.split(" ")
- if len(author_array) == 0:
- firstname = ""
- lastname = ""
- elif len(author_array) == 1:
- firstname = ""
- lastname = author_array[0]
- elif len(author_array) == 2:
- firstname = author_array[0]
- lastname = author_array[1]
-
- author, created = Author.objects.get_or_create(hda_id=author_str, defaults={"firstname":firstname, "lastname":lastname}) #@UnusedVariable
- else:
- author = None
-
- org_str = row[u"Org"]
- if org_str:
- url_str = row[u'Org_Home']
- if url_str is not None:
- url_str = url_str.strip()
- org, created = Organisation.objects.get_or_create(hda_id=org_str, defaults={"name":org_str, "website" : url_str}) #@UnusedVariable
- else:
- org = None
-
- town_str = row[u"Ville"]
- if town_str:
- insee_str = row[u'Insee'].strip() if row[u'Insee'] else row[u'Insee']
- if len(insee_str) > 5:
- insee_str = ""
- loc, created = Location.objects.get_or_create(insee=insee_str, defaults={"name": town_str, "insee": insee_str}) #@UnusedVariable
- else:
- loc = None
-
- format_str = row[u"Format"]
- if format_str:
- format, created = DocumentFormat.objects.get_or_create(label=format_str, defaults={"label": format_str}) #@UnusedVariable
- else:
- format = None
-
- domains = self.create_domain_period(row[u"Domaine"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Global'])
-
- primary_periods = self.create_domain_period(row[u"Periode1"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Primaire'])
- college_periods = self.create_domain_period(row[u"Periode2"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Collège'])
- highschool_periods = self.create_domain_period(row[u"Periode3"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Lycée'])
-
- primary_themes = self.create_domain_period(row[u"Sousdom"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Primaire'])
- college_themes = self.create_domain_period(row[u"Theme2"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Collège'])
- highschool_themes = self.create_domain_period(row[u"Theme3"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Lycée'])
-
- url = row[u"Url"]
- if url is not None:
- url = url.strip()
-
- datasheet = Datasheet.objects.create(
- hda_id=row[u"ID"],
- author=author,
- organisation=org,
- title=row[u"Titre"],
- description=row[u"Desc"],
- url=url,
- town=loc,
- format=format,
- original_creation_date=datetime.datetime.strptime(row[u"Datcre"], "%d/%m/%Y").date(),
- original_modification_date=datetime.datetime.strptime(row[u"Datmaj"], "%d/%m/%Y").date(),
- validated=False
- )
-
- datasheet.save()
-
- datasheet.set_domains(domains)
- datasheet.set_primary_periods(primary_periods)
- datasheet.set_college_periods(college_periods)
- datasheet.set_highschool_periods(highschool_periods)
- datasheet.set_primary_themes(primary_themes)
- datasheet.set_college_themes(college_themes)
- datasheet.set_highschool_themes(highschool_themes)
-
-
- if row[u'Tag']:
- for i, tag in enumerate([t.strip() for t in row[u'Tag'].split(u";")]):
- if len(tag) == 0:
- continue
- tag_label = normalize_tag(tag)
- tag_obj = None
- for t in Tag.objects.filter(label__iexact=tag_label):
- if tag_obj is None or t.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
- tag_obj = t
- if tag_obj.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
- break
-
- if tag_obj is None:
- tag_obj = Tag(label=tag_label, original_label=tag)
- tag_obj.save()
-
- tagged_ds = TaggedSheet(datasheet=datasheet, tag=tag_obj, original_order=i + 1, order=i + 1)
- tagged_ds.save()
-
-
- def handle(self, *args, **options):
-
- if len(args) == 0:
- raise CommandError("Gives at lat one csv file to import")
-
- self.encoding = options.get('encoding', "latin-1")
- lines = options.get('lines', 0)
- self.ignore_existing = options.get('ignore_existing', False)
- fieldnames = options.get('fieldnames', None)
-
- transaction.commit_unless_managed()
- transaction.enter_transaction_management()
- transaction.managed(True)
-
- try:
- for csv_path in args:
- try:
- print "Processing %s " % (csv_path)
- with open(csv_path, 'rU') as csv_file:
-
- # get the number of lines if necessary
- if not lines:
- for i, l in enumerate(csv_file): #@UnusedVariable
- pass
- total_line = i + 1
- if fieldnames:
- total_line = total_line + 1
- csv_file.seek(0)
- else:
- total_line = lines + 1
-
- delimiter = options.get('delimiter', ";")
- if delimiter == "TAB" or delimiter == "\\t":
- delimiter = '\t'
-
- dr_kwargs = {'delimiter':delimiter}
- if fieldnames is not None:
- dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
- dialect = options.get('dialect', "excel")
- if dialect is not None:
- dr_kwargs['dialect'] = dialect
-
- reader = csv.DictReader(csv_file, **dr_kwargs)
-
- for j, row in enumerate(reader):
- if lines and j >= lines:
- break
- line_num = reader.line_num if fieldnames is None else reader.line_num + 1
- self.show_progress(line_num, total_line, 60)
- def safe_decode(val, encoding):
- if val:
- return val.decode(encoding)
- else:
- return val
-
- row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
- self.create_datasheet(row)
-
- transaction.commit()
- except Exception:
- transaction.rollback()
- raise
- finally:
- print('')
- finally:
- transaction.leave_transaction_management()
--- a/web/hdabo/management/commands/import_tag_popularity.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jun 17, 2011
-
-@author: ymh
-
-command to import tag popularity
-
-'''
-
-from django.core.management.base import BaseCommand, CommandError
-from hdabo.models import Tag
-from hdabo.utils import normalize
-from optparse import make_option
-import csv
-import math
-import sys
-
-
-class Command(BaseCommand):
- '''
- Command to import csvfile
- '''
- args = '<path_to_csv_file path_to_csv_file ...>'
- options = '[--ignore-existing] [--lines] [--encoding]'
- help = """Import of a tag popularity file for hdabo
-Options:
- --ignore-existing : ignore existing datasheets
- --lines : max number of lines to load (for each file). 0 means all.
- --encoding : files encoding. default to latin-1"""
-
- option_list = BaseCommand.option_list + (
- make_option('--encoding',
- action='store',
- type='string',
- dest='encoding',
- default="latin-1",
- help='fix the file encoding. default to latin-1'),
- make_option('--delimiter',
- action='store',
- type='string',
- dest='delimiter',
- default=";",
- help='csv file delimiter'),
- make_option('--dialect',
- action='store',
- type='string',
- dest='dialect',
- default="excel",
- help='csv dialect'),
- make_option('--fieldnames',
- action='store',
- type='string',
- dest='fieldnames',
- default="label,popularity",
- help='fields list (comma separated)'),
- make_option('--lines',
- action='store',
- type='int',
- dest='lines',
- default=0,
- help='Number of lines to read. 0 means all.'),
- make_option('--preserve',
- action='store_true',
- dest='preserve',
- default=False,
- help='preserve'),
-
-
- )
-
- def show_progress(self, current_line, total_line, width):
-
- percent = (float(current_line) / float(total_line)) * 100.0
-
- marks = math.floor(width * (percent / 100.0))
- spaces = math.floor(width - marks)
-
- loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
-
- sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
- if percent >= 100:
- sys.stdout.write("\n")
- sys.stdout.flush()
-
- def handle(self, *args, **options):
-
- if len(args) == 0:
- raise CommandError("Give one csv file to import")
- elif len(args) > 1:
- raise CommandError("Only one file can be imported")
-
- self.encoding = options.get('encoding', "latin-1")
- lines = options.get('lines', 0)
- fieldnames = options.get('fieldnames', "label,popularity")
-
- csv_path = args[0]
-
- print("Processing %s " % (csv_path))
-
- with open(csv_path, 'rU') as csv_file:
- # get the number of lines if necessary
- if not lines:
- for i, l in enumerate(csv_file): #@UnusedVariable
- pass
- total_line = i + 1
- if fieldnames:
- total_line = total_line + 1
- csv_file.seek(0)
- else:
- total_line = lines + 1
-
- delimiter = options.get('delimiter', ";")
- if delimiter == "TAB" or delimiter == "\\t":
- delimiter = '\t'
- dr_kwargs = {'delimiter':delimiter}
- if fieldnames is not None:
- dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
- dialect = options.get('dialect', "excel")
- if dialect is not None:
- dr_kwargs['dialect'] = dialect
-
- if not options.get('preserve',False):
- Tag.objects.update(popularity=0)
-
- reader = csv.DictReader(csv_file, **dr_kwargs)
-
- for j, row in enumerate(reader):
- if lines and j >= lines:
- break
- line_num = reader.line_num if fieldnames is None else reader.line_num + 1
- self.show_progress(line_num, total_line, 60)
- def safe_decode(val, encoding):
- if val:
- return val.decode(encoding)
- else:
- return val
-
- row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
-
- label = normalize(row['label'].strip())
- popularity_str = row['popularity']
-
- if not label or not popularity_str:
- continue
-
-
- for tag in Tag.objects.filter(normalized_label=label):
- tag.popularity = tag.popularity + int(row['popularity'])
- tag.save()
--- a/web/hdabo/management/commands/order_tags.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-'''
-Created on Jun 7, 2011
-
-@author: ymh
-'''
-
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from django.db import transaction
-from hdabo.models import Datasheet
-from hdabo.wp_utils import reorder_datasheet_tags
-from hdabo.utils import show_progress
-from optparse import make_option
-import math
-import sys
-
-
-class Command(NoArgsCommand):
- '''
- Command to calculate the order of tags based on indexation
- recalculate all tags. Will ask for confirmation
- '''
-
- args = ''
- options = '-f : force '
- help = "calculate the order of tags based on indexation recalculate all tags. Will ask for confirmation"
-
- option_list = NoArgsCommand.option_list + (
- make_option('-f', '--force',
- action='store_true',
- dest='force',
- default=False,
- help='force reordering of all datasheets'),
- make_option('--noinput',
- action='store_true',
- dest='no_input',
- default=False,
- help='no input'),
- )
-
-
- def handle_noargs(self, **options):
-
- self.style = no_style()
-
- interactive = options.get('interactive', True) and not options.get('no_input', False)
- force = options.get('force', True)
-
- if interactive:
- confirm = raw_input("""You have requested to recalculate the index order of all the tags.
-This will process all the tags in %s datasheets. Are you sure you want to do this ?
- Type 'yes' to continue, or 'no' to cancel: """ % ("all" if force else "not validated"))
- else:
- confirm = 'yes'
-
- if confirm != "yes":
- print "Tag reordering cancelled"
- return
-
- if force:
- queryset = Datasheet.objects.all()
- else:
- queryset = Datasheet.objects.filter(validated=False, manual_order=False)
- total = queryset.count()
-
- transaction.commit_unless_managed()
- transaction.enter_transaction_management()
- transaction.managed(True)
-
- try:
- for i, ds in enumerate(queryset):
- show_progress(i + 1, total, ds.title, 60)
- reorder_datasheet_tags(ds)
- transaction.commit()
- except:
- transaction.rollback()
- raise
- finally:
- transaction.leave_transaction_management()
-
-
--- a/web/hdabo/management/commands/query_wikipedia.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jun 7, 2011
-
-@author: ymh
-'''
-
-from django.conf import settings
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdabo.models import Tag
-from hdabo.wp_utils import process_tag
-from optparse import make_option
-from wikitools import wiki
-import math
-import sys
-
-
-
-class Command(NoArgsCommand):
- '''
- query and update wikipedia for tag title.
- '''
- options = ''
- help = """query and update wikipedia for tag title."""
-
- option_list = NoArgsCommand.option_list + (
- make_option('--force',
- action='store_true',
- dest='force',
- default=False,
- help='force all tags to be updated, not only those not yet processed'),
- make_option('--random',
- action='store_true',
- dest='random',
- default=False,
- help='randomize query on tags'),
- make_option('--site',
- action='store',
- type='string',
- dest='site_url',
- default="http://fr.wikipedia.org/w/api.php",
- help='the url for the wikipedia site'),
- make_option('--limit',
- action='store',
- type='int',
- dest='limit',
- default= -1,
- help='number of tag to process'),
- make_option('--start',
- action='store',
- type='int',
- dest='start',
- default=0,
- help='number of tag to ignore'),
- )
-
- def __is_homonymie(self, page_dict):
- for cat in page_dict.get(u"categories", []):
- if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
- return True
- return False
-
- def show_progress(self, current_line, total_line, label, width):
-
- percent = (float(current_line) / float(total_line)) * 100.0
-
- marks = math.floor(width * (percent / 100.0))
- spaces = math.floor(width - marks)
-
- loader = u'[' + (u'=' * int(marks)) + (u' ' * int(spaces)) + u']'
-
- sys.stdout.write(u"%s %d%% %d/%d - %r\r" % (loader, percent, current_line - 1, total_line - 1, label[:50].rjust(50))) #takes the header into account
- if percent >= 100:
- sys.stdout.write("\n")
- sys.stdout.flush()
-
- def handle_noargs(self, **options):
-
- self.style = no_style()
-
- interactive = options.get('interactive', True)
-
- verbosity = int(options.get('verbosity', '1'))
-
- force = options.get('force', False)
-
- limit = options.get("limit", -1)
- start = options.get("start", 0)
-
- site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
-
- random = options.get('random', False)
-
- if verbosity > 2:
- print "option passed : " + repr(options)
-
- if force and interactive:
- confirm = raw_input("""You have requested to query and replace the wikipedia information for all datasheets.
-Are you sure you want to do this ?
- Type 'yes' to continue, or 'no' to cancel: """)
- else:
- confirm = 'yes'
-
- if confirm != "yes":
- print "wikipedia query cancelled"
- return
-
- if force:
- queryset = Tag.objects.all()
- else:
- queryset = Tag.objects.filter(url_status=None)
-
- if random:
- queryset = queryset.order_by("?")
- else:
- queryset = queryset.order_by("label")
-
- if limit >= 0:
- queryset = queryset[start:limit]
- else:
- queryset = queryset[start:]
-
-
- if verbosity > 2 :
- print "Tag Query is %s" % (queryset.query)
-
- site = wiki.Wiki(site_url) #@UndefinedVariable
-
-
- count = queryset.count()
- if verbosity > 1:
- print "Processing %d tags" % (count)
-
-
-
- for i, tag in enumerate(queryset):
-
- if verbosity > 1:
- print "processing tag %s (%d/%d)" % (tag.label, i + 1, count)
- else:
- self.show_progress(i + 1, count, tag.label, 60)
-
- process_tag(site, tag, verbosity)
-
-
--- a/web/hdabo/management/utils.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 2, 2012
-
-@author: ymh
-'''
-
-import cStringIO
-import csv
-import codecs
-
-class UnicodeWriter:
- """
- A CSV writer which will write rows to CSV file "f",
- which is encoded in the given encoding.
- """
-
- def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
- # Redirect output to a queue
- self.queue = cStringIO.StringIO()
- self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
- self.stream = f
- self.encoder = codecs.getincrementalencoder(encoding)()
-
- def writerow(self, row):
- self.writer.writerow([unicode(s).encode("utf-8") for s in row])
- # Fetch UTF-8 output from the queue ...
- data = self.queue.getvalue()
- data = data.decode("utf-8")
- # ... and reencode it into the target encoding
- data = self.encoder.encode(data)
- # write to the target stream
- self.stream.write(data)
- # empty queue
- self.queue.truncate(0)
-
- def writerows(self, rows):
- for row in rows:
- self.writerow(row)
--- a/web/hdabo/migrations/0001_initial.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-#@PydevCodeAnalysisIgnore
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'Organisation'
- db.create_table('hdabo_organisation', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
- ('location', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
- ('website', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
- ))
- db.send_create_signal('hdabo', ['Organisation'])
-
- # Adding model 'Author'
- db.create_table('hdabo_author', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
- ('lastname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
- ('firstname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
- ))
- db.send_create_signal('hdabo', ['Author'])
-
- # Adding model 'TimePeriod'
- db.create_table('hdabo_timeperiod', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('label', self.gf('django.db.models.fields.CharField')(max_length=512)),
- ('school_period', self.gf('django.db.models.fields.IntegerField')()),
- ))
- db.send_create_signal('hdabo', ['TimePeriod'])
-
- # Adding unique constraint on 'TimePeriod', fields ['label', 'school_period']
- db.create_unique('hdabo_timeperiod', ['label', 'school_period'])
-
- # Adding model 'Domain'
- db.create_table('hdabo_domain', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('label', self.gf('django.db.models.fields.CharField')(max_length=512)),
- ('school_period', self.gf('django.db.models.fields.IntegerField')()),
- ))
- db.send_create_signal('hdabo', ['Domain'])
-
- # Adding unique constraint on 'Domain', fields ['label', 'school_period']
- db.create_unique('hdabo_domain', ['label', 'school_period'])
-
- # Adding model 'DocumentFormat'
- db.create_table('hdabo_documentformat', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
- ))
- db.send_create_signal('hdabo', ['DocumentFormat'])
-
- # Adding model 'TagCategory'
- db.create_table('hdabo_tagcategory', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
- ))
- db.send_create_signal('hdabo', ['TagCategory'])
-
- # Adding model 'Tag'
- db.create_table('hdabo_tag', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('label', self.gf('django.db.models.fields.CharField')(max_length=1024, db_index=True)),
- ('normalized_label', self.gf('django.db.models.fields.CharField')(max_length=1024, db_index=True)),
- ('original_label', self.gf('django.db.models.fields.CharField')(max_length=1024)),
- ('alias', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
- ('category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TagCategory'], null=True, blank=True)),
- ('wikipedia_url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
- ('wikipedia_pageid', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
- ('url_status', self.gf('django.db.models.fields.IntegerField')(default=None, null=True, blank=True)),
- ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
- ('popularity', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
- ))
- db.send_create_signal('hdabo', ['Tag'])
-
- # Adding unique constraint on 'Tag', fields ['label', 'original_label', 'url_status']
- db.create_unique('hdabo_tag', ['label', 'original_label', 'url_status'])
-
- # Adding model 'Location'
- db.create_table('hdabo_location', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
- ('insee', self.gf('django.db.models.fields.CharField')(unique=True, max_length=5)),
- ))
- db.send_create_signal('hdabo', ['Location'])
-
- # Adding model 'Datasheet'
- db.create_table('hdabo_datasheet', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
- ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Author'], null=True, blank=True)),
- ('organisation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Organisation'])),
- ('title', self.gf('django.db.models.fields.CharField')(max_length=2048)),
- ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ('url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
- ('town', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Location'], null=True, blank=True)),
- ('format', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.DocumentFormat'], null=True, blank=True)),
- ('original_creation_date', self.gf('django.db.models.fields.DateField')()),
- ('original_modification_date', self.gf('django.db.models.fields.DateField')()),
- ('modification_datetime', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
- ('validation_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
- ('validated', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
- ('validator', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)),
- ('manual_order', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
- ))
- db.send_create_signal('hdabo', ['Datasheet'])
-
- # Adding model 'TaggedSheet'
- db.create_table('hdabo_taggedsheet', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
- ('tag', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Tag'])),
- ('original_order', self.gf('django.db.models.fields.IntegerField')(default=0)),
- ('order', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
- ('index_note', self.gf('django.db.models.fields.FloatField')(default=0.0, db_index=True)),
- ('wikipedia_revision_id', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
- ))
- db.send_create_signal('hdabo', ['TaggedSheet'])
-
- # Adding model 'Datasheet_domains'
- db.create_table('hdabo_datasheet_domains', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
- ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
- ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
- ))
- db.send_create_signal('hdabo', ['Datasheet_domains'])
-
- # Adding model 'Datasheet_highschool_periods'
- db.create_table('hdabo_datasheet_highschool_periods', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
- ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
- ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
- ))
- db.send_create_signal('hdabo', ['Datasheet_highschool_periods'])
-
- # Adding model 'Datasheet_highschool_themes'
- db.create_table('hdabo_datasheet_highschool_themes', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
- ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
- ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
- ))
- db.send_create_signal('hdabo', ['Datasheet_highschool_themes'])
-
- # Adding model 'Datasheet_college_periods'
- db.create_table('hdabo_datasheet_college_periods', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
- ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
- ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
- ))
- db.send_create_signal('hdabo', ['Datasheet_college_periods'])
-
- # Adding model 'Datasheet_college_themes'
- db.create_table('hdabo_datasheet_college_themes', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
- ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
- ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
- ))
- db.send_create_signal('hdabo', ['Datasheet_college_themes'])
-
- # Adding model 'Datasheet_primary_periods'
- db.create_table('hdabo_datasheet_primary_periods', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
- ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
- ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
- ))
- db.send_create_signal('hdabo', ['Datasheet_primary_periods'])
-
- # Adding model 'Datasheet_primary_themes'
- db.create_table('hdabo_datasheet_primary_themes', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
- ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
- ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
- ))
- db.send_create_signal('hdabo', ['Datasheet_primary_themes'])
-
-
- def backwards(self, orm):
-
- # Removing unique constraint on 'Tag', fields ['label', 'original_label', 'url_status']
- db.delete_unique('hdabo_tag', ['label', 'original_label', 'url_status'])
-
- # Removing unique constraint on 'Domain', fields ['label', 'school_period']
- db.delete_unique('hdabo_domain', ['label', 'school_period'])
-
- # Removing unique constraint on 'TimePeriod', fields ['label', 'school_period']
- db.delete_unique('hdabo_timeperiod', ['label', 'school_period'])
-
- # Deleting model 'Organisation'
- db.delete_table('hdabo_organisation')
-
- # Deleting model 'Author'
- db.delete_table('hdabo_author')
-
- # Deleting model 'TimePeriod'
- db.delete_table('hdabo_timeperiod')
-
- # Deleting model 'Domain'
- db.delete_table('hdabo_domain')
-
- # Deleting model 'DocumentFormat'
- db.delete_table('hdabo_documentformat')
-
- # Deleting model 'TagCategory'
- db.delete_table('hdabo_tagcategory')
-
- # Deleting model 'Tag'
- db.delete_table('hdabo_tag')
-
- # Deleting model 'Location'
- db.delete_table('hdabo_location')
-
- # Deleting model 'Datasheet'
- db.delete_table('hdabo_datasheet')
-
- # Deleting model 'TaggedSheet'
- db.delete_table('hdabo_taggedsheet')
-
- # Deleting model 'Datasheet_domains'
- db.delete_table('hdabo_datasheet_domains')
-
- # Deleting model 'Datasheet_highschool_periods'
- db.delete_table('hdabo_datasheet_highschool_periods')
-
- # Deleting model 'Datasheet_highschool_themes'
- db.delete_table('hdabo_datasheet_highschool_themes')
-
- # Deleting model 'Datasheet_college_periods'
- db.delete_table('hdabo_datasheet_college_periods')
-
- # Deleting model 'Datasheet_college_themes'
- db.delete_table('hdabo_datasheet_college_themes')
-
- # Deleting model 'Datasheet_primary_periods'
- db.delete_table('hdabo_datasheet_primary_periods')
-
- # Deleting model 'Datasheet_primary_themes'
- db.delete_table('hdabo_datasheet_primary_themes')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- }
- }
-
- complete_apps = ['hdabo']
--- a/web/hdabo/migrations/0002_backport_hdabo_sf.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,231 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding field 'Tag.alternative_label'
- db.add_column('hdabo_tag', 'alternative_label', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True), keep_default=False) #@UndefinedVariable
-
- # Adding field 'Tag.created_at'
- db.add_column('hdabo_tag', 'created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime.utcnow, blank=True), keep_default=False) #@UndefinedVariable
-
- # Adding field 'Tag.alternative_wikipedia_url'
- db.add_column('hdabo_tag', 'alternative_wikipedia_url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True), keep_default=False) #@UndefinedVariable
-
- # Adding field 'Tag.alternative_wikipedia_pageid'
- db.add_column('hdabo_tag', 'alternative_wikipedia_pageid', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True), keep_default=False) #@UndefinedVariable
-
- # Adding field 'TaggedSheet.created_at'
- db.add_column('hdabo_taggedsheet', 'created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime.utcnow, blank=True), keep_default=False) #@UndefinedVariable
-
-
- def backwards(self, orm):
-
- # Deleting field 'Tag.alternative_label'
- db.delete_column('hdabo_tag', 'alternative_label') #@UndefinedVariable
-
- # Deleting field 'Tag.created_at'
- db.delete_column('hdabo_tag', 'created_at') #@UndefinedVariable
-
- # Deleting field 'Tag.alternative_wikipedia_url'
- db.delete_column('hdabo_tag', 'alternative_wikipedia_url') #@UndefinedVariable
-
- # Deleting field 'Tag.alternative_wikipedia_pageid'
- db.delete_column('hdabo_tag', 'alternative_wikipedia_pageid') #@UndefinedVariable
-
- # Deleting field 'TaggedSheet.created_at'
- db.delete_column('hdabo_taggedsheet', 'created_at') #@UndefinedVariable
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- }
- }
-
- complete_apps = ['hdabo']
--- a/web/hdabo/migrations/0003_update_redirection.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,221 +0,0 @@
-# encoding: utf-8
-from south.v2 import DataMigration
-from hdabo import utils, wp_utils
-import sys
-from wikitools import wiki
-
-class Migration(DataMigration):
-
- def forwards(self, orm):
- queryset = orm.Tag.objects.filter(url_status=1, alternative_label=None)
- queryset_count = queryset.count()
-
- sys.stdout.write("Processing %d tags\n" % (queryset_count))
- sys.stdout.flush()
- site = wiki.Wiki("http://fr.wikipedia.org/w/api.php") #@UndefinedVariable
-
-
- for i,tag in enumerate(queryset):
- utils.show_progress(i+1, queryset_count, tag.label, 50)
- wp_res = wp_utils.query_wikipedia_title(site, pageid=tag.wikipedia_pageid)
- tag.alternative_label = wp_res['alternative_label']
- tag.alternative_wikipedia_url = wp_res['alternative_wikipedia_url']
- tag.alternative_wikipedia_pageid = wp_res['alternative_pageid']
- tag.save()
-
- sys.stdout.write("\n")
- sys.stdout.flush()
-
-
- def backwards(self, orm):
- pass
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- }
- }
-
- complete_apps = ['hdabo']
--- a/web/hdabo/migrations/0004_index_tag.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,238 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding index on 'Tag', fields ['wikipedia_pageid']
- db.create_index('hdabo_tag', ['wikipedia_pageid'])
-
- # Adding index on 'Tag', fields ['wikipedia_url']
- db.create_index('hdabo_tag', ['wikipedia_url'])
-
- # Adding index on 'Tag', fields ['alternative_wikipedia_url']
- db.create_index('hdabo_tag', ['alternative_wikipedia_url'])
-
- # Adding index on 'Tag', fields ['url_status']
- db.create_index('hdabo_tag', ['url_status'])
-
- # Adding index on 'Tag', fields ['dbpedia_uri']
- db.create_index('hdabo_tag', ['dbpedia_uri'])
-
- # Adding index on 'Tag', fields ['alternative_wikipedia_pageid']
- db.create_index('hdabo_tag', ['alternative_wikipedia_pageid'])
-
-
- def backwards(self, orm):
-
- # Removing index on 'Tag', fields ['alternative_wikipedia_pageid']
- db.delete_index('hdabo_tag', ['alternative_wikipedia_pageid'])
-
- # Removing index on 'Tag', fields ['dbpedia_uri']
- db.delete_index('hdabo_tag', ['dbpedia_uri'])
-
- # Removing index on 'Tag', fields ['url_status']
- db.delete_index('hdabo_tag', ['url_status'])
-
- # Removing index on 'Tag', fields ['alternative_wikipedia_url']
- db.delete_index('hdabo_tag', ['alternative_wikipedia_url'])
-
- # Removing index on 'Tag', fields ['wikipedia_url']
- db.delete_index('hdabo_tag', ['wikipedia_url'])
-
- # Removing index on 'Tag', fields ['wikipedia_pageid']
- db.delete_index('hdabo_tag', ['wikipedia_pageid'])
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- }
- }
-
- complete_apps = ['hdabo']
--- a/web/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,208 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'Datasheet.organisation'
- db.alter_column('hdabo_datasheet', 'organisation_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Organisation'], null=True))
-
-
- def backwards(self, orm):
-
- # User chose to not deal with backwards NULL issues for 'Datasheet.organisation'
- raise RuntimeError("Cannot reverse this migration. 'Datasheet.organisation' and its values cannot be restored.")
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 6, 21, 18, 18, 22, 503161)'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 6, 21, 18, 18, 22, 503032)'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- }
- }
-
- complete_apps = ['hdabo']
--- a/web/hdabo/models.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,404 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.conf import settings
-from django.contrib.auth.models import User
-from django.db import models
-from hdabo.utils import Property, normalize
-import datetime
-
-
-
-class SortedModelManager(models.Manager):
- use_for_related_fields = True
- def get_query_set(self):
- qs = super(SortedModelManager, self).get_query_set()
- if getattr(self, 'through', None) is not None and getattr(self.through, 'Meta', None) is not None and getattr(self.through.Meta, 'ordering', None) is not None:
- qs = qs.order_by(*[self.through._meta.db_table + "." + f for f in self.through.Meta.ordering])
- return qs
-
-
-class Organisation(models.Model):
- hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
- name = models.CharField(max_length=512, unique=False, blank=False, null=False)
- location = models.CharField(max_length=512, unique=False, blank=True, null=True)
- website = models.CharField(max_length=2048, unique=False, blank=True, null=True)
-
-class Author(models.Model):
- hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
- lastname = models.CharField(max_length=512, unique=False, blank=True, null=True)
- firstname = models.CharField(max_length=512, unique=False, blank=True, null=True)
-
-class TimePeriod(models.Model):
- TIME_PERIOD_CHOICES = (
- (1, u'Primaire'),
- (2, u'Collège'),
- (3, u'Lycée'),
- )
- TIME_PERIOD_DICT = {
- u'Primaire': 1,
- u'Collège': 2,
- u'Lycée': 3,
- }
- label = models.CharField(max_length=512, unique=False, blank=False, null=False)
- school_period = models.IntegerField(choices=TIME_PERIOD_CHOICES)
-
- objects = SortedModelManager()
-
- class Meta:
- unique_together = ("label", "school_period")
-
- def __unicode__(self):
- return unicode(self.label)
-
-class Domain(models.Model):
- DOMAIN_PERIOD_CHOICES = (
- (0, u'Global'),
- (1, u'Primaire'),
- (2, u'Collège'),
- (3, u'Lycée'),
- )
- DOMAIN_PERIOD_DICT = {
- u'Global': 0,
- u'Primaire': 1,
- u'Collège': 2,
- u'Lycée': 3,
- }
- label = models.CharField(max_length=512, unique=False, blank=False, null=False)
- school_period = models.IntegerField(choices=DOMAIN_PERIOD_CHOICES)
-
- objects = SortedModelManager()
-
- class Meta:
- unique_together = ("label", "school_period")
-
- def __unicode__(self):
- return unicode(self.label)
-
-
-class DocumentFormat(models.Model):
- label = models.CharField(max_length=512, unique=True, blank=False, null=False)
-
- def __unicode__(self):
- return unicode(self.label)
-
-class TagCategory(models.Model):
- label = models.CharField(max_length=512, unique=True, blank=False, null=False)
-
- def __unicode__(self):
- return unicode(self.label)
-
- class Meta:
- verbose_name_plural = "TagCategories"
-
-class Tag(models.Model):
- TAG_URL_STATUS_CHOICES = (
- (0, "null_result"),
- (1, "redirection"),
- (2, "homonyme"),
- (3, "match"),
- (4, "unsematized"),
- )
-
- TAG_URL_STATUS_DICT = {
- "null_result":0,
- "redirection":1,
- "homonyme":2,
- "match":3,
- "unsemantized":4,
- }
-
- label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
- alternative_label = models.CharField(max_length=1024, unique=False, blank=True, null=True)
- normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False)
- created_at = models.DateTimeField(auto_now_add=True)
- original_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, editable=False)
- alias = models.CharField(max_length=1024, unique=False, blank=True, null=True)
- category = models.ForeignKey(TagCategory, null=True, blank=True)
- wikipedia_url = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=True)
- wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
- alternative_wikipedia_url = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=True)
- alternative_wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
- url_status = models.IntegerField(choices=TAG_URL_STATUS_CHOICES, blank=True, null=True, default=None, db_index=True)
- dbpedia_uri = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=True)
- popularity = models.IntegerField(blank=False, null=False, default=0, db_index=True)
-
- @Property
- def url_status_text(): #@NoSelf
- def fget(self):
- return self.TAG_URL_STATUS_CHOICES[self.url_status][1]
-
- return locals()
-
- def save(self, *args, **kwargs):
- self.normalized_label = normalize(self.label)
- super(Tag, self).save(*args, **kwargs)
-
- class Meta:
- unique_together = (('label', 'original_label', 'url_status'),)
-
-class Location(models.Model):
- name = models.CharField(max_length=512, unique=False, blank=False, null=False)
- insee = models.CharField(max_length=5, unique=True, blank=False, null=False)
-
- def __unicode__(self):
- return unicode("%s : %s" % (self.name, self.insee))
-
-
-def generate_m2m_setter(m2m_field_name):
-
- def set_m2m_field(self, list):
-
- m2m_manager = getattr(self, m2m_field_name)
- m2m_manager.clear()
-
- through_klass = set_m2m_field.cache.get('through_klass', None)
- if through_klass is None:
- field = getattr(self.__class__, m2m_field_name)
- through_klass = field.through
- set_m2m_field.cache['through_klass'] = through_klass
- for f in through_klass._meta.fields:
- if isinstance(f, models.ForeignKey) and f.name != "datasheet":
- set_m2m_field.cache['target_obj_field_name'] = f.name
- break
- target_obj_field_name = set_m2m_field.cache['target_obj_field_name']
-
- for i, obj in enumerate(list):
- kwargs = {
- 'datasheet': self,
- 'sort_value' : i,
- target_obj_field_name: obj
- }
- new_rel = through_klass(**kwargs)
- new_rel.save()
- set_m2m_field.cache = {}
-
- return set_m2m_field
-
-
-class Datasheet(models.Model):
- hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
- author = models.ForeignKey(Author, null=True, blank=True, serialize=False)
- organisation = models.ForeignKey(Organisation, serialize=False, null=True)
- title = models.CharField(max_length=2048, unique=False, blank=False, null=False, serialize=False)
- description = models.TextField(blank=True, null=True, serialize=False)
- url = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, serialize=False)
- domains = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Global']}, related_name="datasheets", through="Datasheet_domains", serialize=False)
- primary_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Primaire']}, related_name="primary_periods_datasheets", through="Datasheet_primary_periods", serialize=False)
- college_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Collège']}, related_name="college_periods_datasheets", through="Datasheet_college_periods", serialize=False)
- highschool_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Lycée']}, related_name="highschool_periods_datasheets", through="Datasheet_highschool_periods", serialize=False)
- primary_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Primaire']}, related_name="primary_themes_datasheets", through="Datasheet_primary_themes", serialize=False)
- college_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Collège']}, related_name="college_themes_datasheets", through="Datasheet_college_themes", serialize=False)
- highschool_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Lycée']}, related_name="highschool_themes_datasheets", through="Datasheet_highschool_themes", serialize=False)
- town = models.ForeignKey(Location, null=True, blank=True, serialize=False)
- format = models.ForeignKey(DocumentFormat, null=True, blank=True, serialize=False)
- original_creation_date = models.DateField(serialize=False)
- original_modification_date = models.DateField(serialize=False)
- modification_datetime = models.DateTimeField(auto_now=True, serialize=False)
- validation_date = models.DateTimeField(null=True, blank=True, serialize=False)
- validated = models.BooleanField(default=False, db_index=True)
- validator = models.ForeignKey(User, null=True, blank=True, serialize=False)
- manual_order = models.BooleanField(default=False, db_index=True, serialize=False)
- tags = models.ManyToManyField(Tag, through='TaggedSheet', serialize=False)
-
- def natural_key(self):
- return self.hda_id
-
- def validate(self, user):
- self.validation_date = datetime.datetime.now()
- self.validated = True
- self.validator = user
- self.save()
-
- def unvalidate(self):
- self.validation_date = datetime.datetime.min
- self.validated = False
- self.validator = None
- self.save()
-
-
- set_domains = generate_m2m_setter("domains")
-
- @Property
- def domains_list(): #@NoSelf
- def fget(self):
- return [d.label for d in self.domains.all()]
-
- return locals()
-
- @Property
- def domains_text(): #@NoSelf
- def fget(self):
- return "; ".join(self.domains_list)
-
- return locals()
-
-
- set_primary_periods = generate_m2m_setter("primary_periods")
-
- @Property
- def primary_periods_list(): #@NoSelf
- def fget(self):
- return [d.label for d in self.primary_periods.all()]
-
- return locals()
-
-
- @Property
- def primary_periods_text(): #@NoSelf
- def fget(self):
- return "; ".join(self.primary_periods_list)
-
- return locals()
-
- set_college_periods = generate_m2m_setter("college_periods")
-
- @Property
- def college_periods_list(): #@NoSelf
- def fget(self):
- return [d.label for d in self.college_periods.all()]
-
- return locals()
-
- @Property
- def college_periods_text(): #@NoSelf
- def fget(self):
- return "; ".join(self.college_periods_list)
-
- return locals()
-
- set_highschool_periods = generate_m2m_setter("highschool_periods")
-
- @Property
- def highschool_periods_list(): #@NoSelf
- def fget(self):
- return [d.label for d in self.highschool_periods.all()]
-
- return locals()
-
- @Property
- def highschool_periods_text(): #@NoSelf
- def fget(self):
- return "; ".join(self.highschool_periods_list)
-
- return locals()
-
- set_primary_themes = generate_m2m_setter("primary_themes")
-
- @Property
- def primary_themes_list(): #@NoSelf
- def fget(self):
- return [d.label for d in self.primary_themes.all()]
-
- return locals()
-
-
- @Property
- def primary_themes_text(): #@NoSelf
- def fget(self):
- return "; ".join(self.primary_themes_list)
-
- return locals()
-
- set_college_themes = generate_m2m_setter("college_themes")
-
- @Property
- def college_themes_list(): #@NoSelf
- def fget(self):
- return [d.label for d in self.college_themes.all()]
-
- return locals()
-
- @Property
- def college_themes_text(): #@NoSelf
- def fget(self):
- return "; ".join(self.college_themes_list)
-
- return locals()
-
- set_highschool_themes = generate_m2m_setter("highschool_themes")
-
- @Property
- def highschool_themes_list(): #@NoSelf
- def fget(self):
- return [d.label for d in self.highschool_themes.all()]
-
- return locals()
-
- @Property
- def highschool_themes_text(): #@NoSelf
- def fget(self):
- return "; ".join(self.highschool_themes_list)
-
- return locals()
-
- @Property
- def town_text(): #@NoSelf
- def fget(self):
- return self.town.name if self.town else ""
-
- return locals()
-
- @Property
- def tags_text(): #@NoSelf
- def fget(self):
- return "; ".join([t.label for t in self.tags.all()])
-
- return locals()
-
- @models.permalink
- def get_absolute_url(self):
- return ('display_datasheet', (), {
- 'ds_id': self.hda_id
- })
-
-
-class TaggedSheet(models.Model):
- datasheet = models.ForeignKey(Datasheet)
- tag = models.ForeignKey(Tag)
- created_at = models.DateTimeField(auto_now_add=True)
- original_order = models.IntegerField(null=False, blank=False, default=0)
- order = models.IntegerField(null=False, blank=False, default=0, db_index=True)
- index_note = models.FloatField(null=False, blank=False, default=0.0, db_index=True)
- wikipedia_revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
-
- @Property
- def wikipedia_verion_permalink(): #@NoSelf
- def fget(self):
- return settings.WIKIPEDIA_VERSION_PERMALINK_TEMPLATE % (unicode(self.wikipedia_revision_id))
-
- return locals()
-
-
-class SortedDatasheetLink(models.Model):
- datasheet = models.ForeignKey(Datasheet, db_index=True, null=False, blank=False)
- sort_value = models.IntegerField(null=False, blank=False)
-
- class Meta:
- abstract = True
- ordering = ['sort_value']
-
-
-class Datasheet_domains(SortedDatasheetLink):
- domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
-
-class Datasheet_highschool_periods(SortedDatasheetLink):
- timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
-
-class Datasheet_highschool_themes(SortedDatasheetLink):
- domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
-
-class Datasheet_college_periods(SortedDatasheetLink):
- timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
-
-class Datasheet_college_themes(SortedDatasheetLink):
- domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
-
-class Datasheet_primary_periods(SortedDatasheetLink):
- timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
-
-class Datasheet_primary_themes(SortedDatasheetLink):
- domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
-
-
-
-
\ No newline at end of file
--- a/web/hdabo/modwsgi.wsgi Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-import os
-import sys
-import site
-
-
-
-def application(environ, start_response):
-
- global g_env_set
-
- if 'g_env_set' not in globals() or not g_env_set:
- os.environ['DJANGO_SETTINGS_MODULE'] = environ['DJANGO_SETTINGS_MODULE']
-
- prev_sys_path = list(sys.path)
-
- sys.path.append(environ['PROJECT_PATH'])
- for path in environ.get('PYTHON_PATH', "").split(os.pathsep):
- if path:
- site.addsitedir(path) #@UndefinedVariable
-
- new_sys_path = []
- for item in list(sys.path):
- if item not in prev_sys_path and item not in new_sys_path:
- new_sys_path.append(item)
- sys.path.remove(item)
- sys.path[:0] = new_sys_path
- g_env_set = True
-
- import django.core.handlers.wsgi
-
- _application = django.core.handlers.wsgi.WSGIHandler()
-
- if environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
- import pydevd #@UnresolvedImport
- pydevd.settrace(suspend=False)
-
- return _application(environ, start_response)
-
--- a/web/hdabo/search/french_whoosh_backend.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,209 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-
-Adaptation of Haystack' Swoosh backend with french snowball stemming
-
-Created on May 31, 2011
-
-@author: ymh
-'''
-
-from django.conf import settings
-from django.db.models.loading import get_model
-from haystack.backends.whoosh_backend import (
- SearchBackend as WhooshSearchBackend, SearchQuery as WhooshSearchQuery)
-from haystack.constants import ID, DJANGO_CT, DJANGO_ID
-from haystack.exceptions import SearchBackendError
-from haystack.models import SearchResult
-from whoosh.analysis import (default_pattern, stem, RegexTokenizer,
- LowercaseFilter, StopFilter, PyStemmerFilter)
-from whoosh.fields import (ID as WHOOSH_ID, Schema, IDLIST, TEXT, KEYWORD,
- NUMERIC, BOOLEAN, DATETIME, NGRAM, NGRAMWORDS)
-
-BACKEND_NAME = 'french_whoosh'
-
-STOP_WORDS = [ u"a", u"afin", u"ai", u"ainsi", u"après", u"attendu", u"au",
-u"aujourd", u"auquel", u"aussi", u"autre", u"autres", u"aux", u"auxquelles",
-u"auxquels", u"avait", u"avant", u"avec", u"avoir", u"c", u"car", u"ce",
-u"ceci", u"cela", u"celle", u"celles", u"celui", u"cependant", u"certain",
-u"certaine", u"certaines", u"certains", u"ces", u"cet", u"cette", u"ceux",
-u"chez", u"ci", u"combien", u"comme", u"comment", u"concernant", u"contre",
-u"d", u"dans", u"je", u"de", u"jusqu", u"debout", u"jusque", u"dedans", u"l",
-u"dehors", u"la", u"delà", u"laquelle", u"depuis", u"le", u"derrière",
-u"lequel", u"des", u"les", u"desquelles", u"lesquelles", u"desquels",
-u"lesquels", u"dessous", u"leur", u"dessus", u"leurs", u"devant", u"lorsque",
-u"devers", u"lui", u"devra", u"là", u"divers", u"ma", u"diverse", u"mais",
-u"diverses", u"malgré", u"doit", u"me", u"donc", u"merci", u"dont", u"mes",
-u"du", u"mien", u"duquel", u"mienne", u"durant", u"miennes", u"dès", u"miens",
-u"elle", u"moi", u"elles", u"moins", u"en", u"mon", u"entre", u"moyennant",
-u"environ", u"même", u"est", u"mêmes", u"et", u"n", u"etc", u"ne", u"etre",
-u"ni", u"eux", u"non", u"excepté", u"nos", u"hormis", u"notre", u"hors",
-u"nous", u"hélas", u"néanmoins", u"hui", u"nôtre", u"il", u"nôtres", u"ils",
-u"on", u"j", u"out", u"ou", u"soit", u"outre", u"son", u"où", u"sont", u"par",
-u"sous", u"parmi", u"suivant", u"partant", u"sur", u"pas", u"ta", u"passé",
-u"te", u"pendant", u"tes", u"plein", u"tien", u"plus", u"tienne", u"plusieurs",
-u"tiennes", u"pour", u"tiens", u"pourquoi", u"toi", u"proche", u"ton", u"près",
-u"tous", u"puisque", u"tout", u"qu", u"toute", u"quand", u"toutes", u"que",
-u"tu", u"quel", u"un", u"quelle", u"une", u"quelles", u"va", u"quels", u"vers",
-u"qui", u"voici", u"quoi", u"voilà", u"quoique", u"vos", u"revoici", u"votre",
-u"revoilà", u"vous", u"s", u"vu", u"sa", u"vôtre", u"sans", u"vôtres",
-u"sauf", u"y", u"se", u"à", u"selon", u"ça", u"seront", u"ès", u"ses",
-u"été", u"si", u"être", u"sien", u"ô", u"sienne", u"siennes", u"siens",
-u"sinon", u"soi"]
-
-def FrenchStemmingAnalyzer(expression=default_pattern, stoplist=STOP_WORDS,
- minsize=2, maxsize=None, gaps=False, stemfn=stem,
- ignore=None, cachesize=50000):
- """Composes a RegexTokenizer with a lower case filter, an optional stop
- filter, and a stemming filter.
-
- >>> ana = StemmingAnalyzer()
- >>> [token.text for token in ana(u"Testing is testing and testing")]
- [u"test", u"test", u"test"]
-
- :param expression: The regular expression pattern to use to extract tokens.
- :param stoplist: A list of stop words. Set this to None to disable
- the stop word filter.
- :param minsize: Words smaller than this are removed from the stream.
- :param maxsize: Words longer that this are removed from the stream.
- :param gaps: If True, the tokenizer *splits* on the expression, rather
- than matching on the expression.
- :param ignore: a set of words to not stem.
- :param cachesize: the maximum number of stemmed words to cache. The larger
- this number, the faster stemming will be but the more memory it will
- use.
- """
-
- ret = RegexTokenizer(expression=expression, gaps=gaps)
- chain = ret | LowercaseFilter()
- if stoplist is not None:
- chain = chain | StopFilter(stoplist=stoplist, minsize=minsize,
- maxsize=maxsize)
- return chain | PyStemmerFilter(lang="french", ignore=ignore, cachesize=cachesize)
-FrenchStemmingAnalyzer.__inittypes__ = dict(expression=unicode, gaps=bool,
- stoplist=list, minsize=int, maxsize=int)
-
-
-class SearchBackend(WhooshSearchBackend):
- '''
- Adaptation of Haystack' Swoosh backend with french snowball stemming
- '''
-
- def build_schema(self, fields):
- schema_fields = {
- ID: WHOOSH_ID(stored=True, unique=True),
- DJANGO_CT: WHOOSH_ID(stored=True),
- DJANGO_ID: WHOOSH_ID(stored=True),
- }
- # Grab the number of keys that are hard-coded into Haystack.
- # We'll use this to (possibly) fail slightly more gracefully later.
- initial_key_count = len(schema_fields)
- content_field_name = ''
-
- for field_name, field_class in fields.items(): #@UnusedVariable
- if field_class.is_multivalued:
- if field_class.indexed is False:
- schema_fields[field_class.index_fieldname] = IDLIST(stored=True, field_boost=field_class.boost)
- else:
- schema_fields[field_class.index_fieldname] = KEYWORD(stored=True, commas=True, scorable=True, field_boost=field_class.boost)
- elif field_class.field_type in ['date', 'datetime']:
- schema_fields[field_class.index_fieldname] = DATETIME(stored=field_class.stored)
- elif field_class.field_type == 'integer':
- schema_fields[field_class.index_fieldname] = NUMERIC(stored=field_class.stored, type=int, field_boost=field_class.boost)
- elif field_class.field_type == 'float':
- schema_fields[field_class.index_fieldname] = NUMERIC(stored=field_class.stored, type=float, field_boost=field_class.boost)
- elif field_class.field_type == 'boolean':
- # Field boost isn't supported on BOOLEAN as of 1.8.2.
- schema_fields[field_class.index_fieldname] = BOOLEAN(stored=field_class.stored)
- elif field_class.field_type == 'ngram':
- schema_fields[field_class.index_fieldname] = NGRAM(minsize=3, maxsize=15, stored=field_class.stored, field_boost=field_class.boost)
- elif field_class.field_type == 'edge_ngram':
- schema_fields[field_class.index_fieldname] = NGRAMWORDS(minsize=2, maxsize=15, stored=field_class.stored, field_boost=field_class.boost)
- else:
- schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=FrenchStemmingAnalyzer(), field_boost=field_class.boost)
-
- if field_class.document is True:
- content_field_name = field_class.index_fieldname
-
- # Fail more gracefully than relying on the backend to die if no fields
- # are found.
- if len(schema_fields) <= initial_key_count:
- raise SearchBackendError("No fields were found in any search_indexes. Please correct this before attempting to search.")
-
- return (content_field_name, Schema(**schema_fields))
-
- def _process_results(self, raw_page, highlight=False, query_string='', spelling_query=None, result_class=None):
- if not self.site:
- from haystack import site
- else:
- site = self.site
-
- results = []
-
- # It's important to grab the hits first before slicing. Otherwise, this
- # can cause pagination failures.
- hits = len(raw_page)
-
- if result_class is None:
- result_class = SearchResult
-
- facets = {}
- spelling_suggestion = None
- indexed_models = site.get_indexed_models()
-
- for doc_offset, raw_result in enumerate(raw_page):
- score = raw_page.score(doc_offset) or 0
- app_label, model_name = raw_result[DJANGO_CT].split('.')
- additional_fields = {}
- model = get_model(app_label, model_name)
-
- if model and model in indexed_models:
- for key, value in raw_result.items():
- index = site.get_index(model)
- string_key = str(key)
-
- if string_key in index.fields and hasattr(index.fields[string_key], 'convert'):
- # Special-cased due to the nature of KEYWORD fields.
- if index.fields[string_key].is_multivalued:
- if value is None or len(value) is 0:
- additional_fields[string_key] = []
- else:
- additional_fields[string_key] = value.split(',')
- else:
- additional_fields[string_key] = index.fields[string_key].convert(value)
- else:
- additional_fields[string_key] = self._to_python(value)
-
- del(additional_fields[DJANGO_CT])
- del(additional_fields[DJANGO_ID])
-
- if highlight:
- from whoosh.highlight import highlight, ContextFragmenter, UppercaseFormatter
- sa = FrenchStemmingAnalyzer()
- terms = [term.replace('*', '') for term in query_string.split()]
-
- additional_fields['highlighted'] = {
- self.content_field_name: [highlight(additional_fields.get(self.content_field_name), terms, sa, ContextFragmenter(terms), UppercaseFormatter())],
- }
-
- result = result_class(app_label, model_name, raw_result[DJANGO_ID], score, searchsite=self.site, **additional_fields)
- results.append(result)
- else:
- hits -= 1
-
- if getattr(settings, 'HAYSTACK_INCLUDE_SPELLING', False):
- if spelling_query:
- spelling_suggestion = self.create_spelling_suggestion(spelling_query)
- else:
- spelling_suggestion = self.create_spelling_suggestion(query_string)
-
- return {
- 'results': results,
- 'hits': hits,
- 'facets': facets,
- 'spelling_suggestion': spelling_suggestion,
- }
-
-class SearchQuery(WhooshSearchQuery):
- pass
-
--- a/web/hdabo/search/sites.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-'''
-Created on May 27, 2011
-
-@author: ymh
-'''
-import haystack
-haystack.autodiscover()
--- a/web/hdabo/search_indexes.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-'''
-Created on May 30, 2011
-
-@author: ymh
-'''
-
-from haystack import site
-from haystack.indexes import SearchIndex, CharField
-from hdabo.models import Datasheet
-
-class DatasheetIndex(SearchIndex):
- '''
- The search index for the datasheet
- '''
- text = CharField(document=True, use_template=True)
- hda_id = CharField(model_attr='hda_id', indexed=True, stored=True)
- title = CharField(model_attr='title', indexed=True, stored=True, boost=2.0)
- description = CharField(model_attr='description', indexed=True, stored=True, boost=1.0)
-
-
-site.register(Datasheet, DatasheetIndex)
--- a/web/hdabo/settings.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-# Django settings for hdabo project.
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
- # ('Your Name', 'your_email@example.com'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': '', # Or path to database file if using sqlite3.
- 'USER': '', # Not used with sqlite3.
- 'PASSWORD': '', # Not used with sqlite3.
- 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- }
-}
-
-# Local time zone for this installation. Choices can be found here:
-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
-# although not all choices may be available on all operating systems.
-# On Unix systems, a value of None will cause Django to use the same
-# timezone as the operating system.
-# If running in a Windows environment this must be set to the same as your
-# system time zone.
-TIME_ZONE = 'America/Chicago'
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'en-us'
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale
-USE_L10N = True
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = ''
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = ''
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = ''
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = '/static/site'
-
-# Additional locations of static files
-STATICFILES_DIRS = (
- # Put strings here, like "/home/html/static" or "C:/www/django/static".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
-)
-
-# List of finder classes that know how to find static files in
-# various locations.
-STATICFILES_FINDERS = (
- 'django.contrib.staticfiles.finders.FileSystemFinder',
- 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = '1anp2v#36%z(pahi5ytghik&-eg8t96)&$t)b%i=7@%=)u$pyn'
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
-# 'django.template.loaders.eggs.Loader',
-)
-
-# List of processors used by RequestContext to populate the context.
-# Each one should be a callable that takes the request object as its
-# only parameter and returns a dictionary to add to the context.
-TEMPLATE_CONTEXT_PROCESSORS = (
- 'django.contrib.auth.context_processors.auth',
- 'django.core.context_processors.debug',
- 'django.core.context_processors.i18n',
- 'django.core.context_processors.media',
- 'django.core.context_processors.static',
- 'django.contrib.messages.context_processors.messages',
- 'hdabo.context_processors.version',
-)
-
-MIDDLEWARE_CLASSES = (
- 'django.middleware.common.CommonMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
-)
-
-ROOT_URLCONF = 'hdabo.urls'
-
-TEMPLATE_DIRS = (
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
-)
-
-INSTALLED_APPS = (
- 'south',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'django.contrib.admin',
- 'django_extensions',
- 'haystack',
- 'hdabo',
-)
-
-# A sample logging configuration. The only tangible logging
-# performed by this configuration is to send an email to
-# the site admins on every HTTP 500 error.
-# See http://docs.djangoproject.com/en/dev/topics/logging for
-# more details on how to customize your logging configuration.
-LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': False,
- 'handlers': {
- 'mail_admins': {
- 'level': 'ERROR',
- 'class': 'django.utils.log.AdminEmailHandler'
- }
- },
- 'loggers': {
- 'django.request': {
- 'handlers': ['mail_admins'],
- 'level': 'ERROR',
- 'propagate': True,
- },
- }
-}
-
-HAYSTACK_SITECONF = 'hdabo.search.sites'
-
-WIKIPEDIA_API_URL = "http://fr.wikipedia.org/w/api.php"
-WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s"
-DBPEDIA_URI_TEMPLATE = "http://dbpedia.org/resource/%s"
-
-SEARCH_STAR_CHARACTER = "*"
-PAGINATION_DEFAULT_NB_BY_PAGE = 50
-
-from hdabo.config import * #@UnusedWildImport
-
-if 'LOGIN_REDIRECT_URL' not in locals():
- LOGIN_REDIRECT_URL = BASE_URL + "hdabo"
-if 'LOGIN_URL' not in locals():
- LOGIN_URL = BASE_URL + "hdabo/accounts/login"
-
--- a/web/hdabo/static/hdabo/css/nyroModal.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-.nyroModalBg {
- position: fixed;
- overflow: hidden;
- top: 0;
- left: 0;
- height: 100%;
- width: 100%;
- background: #000;
- opacity: 0.7;
-}
-.nmReposition {
- position: absolute;
-}
-.nyroModalCloseButton {
- top: -13px;
- right: -13px;
- width: 12px;
- height: 12px;
- text-indent: -9999em;
- background: url(../img/close_nm.gif);
-}
-.nyroModalTitle {
- top: -26px;
- left: 0;
- margin: 0;
- font-size: 1.1em;
- color: #ddd;
-}
-.nyroModalCont {
- position: absolute;
- border: 4px solid #777;
- margin: 25px;
- background: #fff;
-}
-.nyroModalCont iframe {
- width: 600px;
- height: 400px;
-}
-.nyroModalError {
- border: 4px solid red;
- color: red;
- width: 250px;
- height: 250px;
-}
-.nyroModalError div {
- min-width: 0;
- min-height: 0;
- padding: 10px;
-}
-.nyroModalLink, .nyroModalDom, .nyroModalForm, .nyroModalFormFile {
- position: relative;
- padding: 10px;
- min-height: 250px;
- min-width: 250px;
- max-width: 1000px;
-}
-.nyroModalImage, .nyroModalSwf, .nyroModalIframe, .nyroModalIframeForm {
- position: relative;
- overflow: hidden;
-}
-.nyroModalHidden {
- left: -9999em;
- top: -9999em;
-}
-.nyroModalLoad {
- position: absolute;
- width: 100px;
- height: 100px;
- background: #fff url(../img/ajax-loader-43x43.gif) no-repeat center;
- padding: 0;
-}
-.nyroModalPrev, .nyroModalNext {
- outline: none;
- position: absolute;
- top: 0;
- height: 60%;
- width: 150px;
- min-height: 50px;
- max-height: 300px;
- cursor: pointer;
- text-indent: -9999em;
- background: transparent url('data:image/gif;base64,AAAA') left 20% no-repeat;
-}
-.nyroModalImage .nyroModalPrev, .nyroModalImage .nyroModalNext {
- height: 100%;
- width: 40%;
- max-height: none;
-}
-.nyroModalPrev {
- left: 0;
-}
-.nyroModalPrev:hover {
- background-image: url(../img/prev.gif);
-}
-.nyroModalNext {
- right: 0;
- background-position: right 20%;
-}
-.nyroModalNext:hover {
- background-position: right 20%;
- background-image: url(../img/next.gif);
-}
\ No newline at end of file
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_222222_256x240.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_2e83ff_256x240.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_454545_256x240.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_888888_256x240.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_cd0a0a_256x240.png has changed
--- a/web/hdabo/static/hdabo/css/smoothness/jquery-ui-1.8.13.custom.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,578 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Arial,Verdana,sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,Verdana,sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
-.ui-widget-content a { color: #222222; }
-.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
-.ui-widget-header a { color: #222222; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Resizable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;
- /* http://bugs.jqueryui.com/ticket/7233
- - Resizable: resizable handles fail to work in IE if transparent and content overlaps
- */
- background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=);
-}
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.13
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
- list-style:none;
- padding: 2px;
- margin: 0;
- display:block;
- float: left;
-}
-.ui-menu .ui-menu {
- margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
- margin:0;
- padding: 0;
- zoom: 1;
- float: left;
- clear: left;
- width: 100%;
-}
-.ui-menu .ui-menu-item a {
- text-decoration:none;
- display:block;
- padding:.2em .4em;
- line-height:1.5;
- zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
- font-weight: normal;
- margin: -1px;
-}
-/*
- * jQuery UI Button 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4; }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*
- * jQuery UI Datepicker 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
- display: none; /*sorry for IE5*/
- display/**/: block; /*sorry for IE5*/
- position: absolute; /*must have*/
- z-index: -1; /*must have*/
- filter: mask(); /*must have*/
- top: -4px; /*must have*/
- left: -4px; /*must have*/
- width: 200px; /*must have*/
- height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
--- a/web/hdabo/static/hdabo/css/style.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,419 +0,0 @@
-@charset "UTF-8";
-
-body {
-
- font-family: Arial, Helvetica, sans serif;
- font-size: 12px;
- color: #4F5155;
- margin: 5px;
- padding: 0px;
- min-width:750px;
- text-align: justify;
-}
-body p {
- margin: 2px;
-}
-
-a img,a:link img, a:active img, a:visited img, a:hover img {
- border:0px;
-}
-
-
-a:link
-{
- color: #50a4a3;
- text-decoration: none;
- font-family: Arial, Helvetica, sans-serif;
- /*font-weight: bold;*/
-}
-
-a:hover
-{
- color: #50a4a3;
- text-decoration: none;
- font-family: Arial, Helvetica, sans-serif;
- /*border-bottom-width: 1px;
- border-bottom-style: dashed;
- border-bottom-color: #2c8084;
- font-weight: bold;*/
-}
-a:visited {
- color: #50a4a3;
- font-family: Arial, Helvetica, sans-serif;
- /*font-weight: bold;*/
-}
-
-.hda_blue{
- /*color: #97fefd;*/
- color: #86e6e5;
-}
-
-
-#header
-{
- padding: .2em;
- border-bottom: 1px solid gray;
- border-left: 1px solid gray;
-}
-
-#header a
-{
- text-decoration: none;
-}
-
-
-#header_left
-{
- padding: 0px;
- max-width: 8em;
- font-size: 30px;
- font-weight : bold;
- text-align: left;
- text-transform: uppercase;
-}
-
-#header_left p
-{
- margin: 0px;
-}
-
-
-#header_left a:hover, #header_left a:visited, #header_left a:link, #header_left a:active, #header_left a:focus
-{
- color: #4F5155;
- text-decoration: none;
-}
-
-
-#header_right
-{
- text-align: right;
-}
-
-#header_right a:link
-{
- text-decoration: none;
- color: white;
-}
-
-#header_right a:hover
-{
- text-decoration: none;
- color: white;
-}
-
-#header_right a:visited {
- text-decoration: none;
- color: white;
-}
-
-
-#footer
-{
- clear: both;
- margin: 0;
- padding: .5em;
- /*background-color: #ddd;*/
- border-top: 1px solid gray;
-}
-
-.version
-{
- text-align: right;
- color: white;
- font-size:9px;
-}
-
-.version:hover
-{
- color: #2c8084;
- text-decoration: none;
- font-weight: bold;
- border-bottom-width: 0px;
- border-bottom-style: none;
-}
-
-.small
-{
- font-size:9px;
-}
-
-.footer_img
-{
- float: left;
-}
-
-.footer_img img
-{
- padding-left: 10px;
- padding-right: 10px;
-}
-
-.footer_img a
-{
- color: white;
-}
-
-.footer_img a:link
-{
- color: white;
-}
-
-.footer_img a:hover
-{
- color: white;
-}
-
-.footer_img a:visited
-{
- color: white;
-}
-
-
-#home_links
-{
- line-height: 150%
-}
-
-#search_form_div {
- text-align: center;
- padding: 10px;
- margin: 10px 10px;
- margin-bottom: 30px;
- background-color:#ececec;
- border: 1px solid #7E7E7E
-}
-
-#search_form ul {
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-
-#search_form ul li {
- display: inline;
-}
-
-#toolbar {
- margin-top: 2px;
- margin-bottom: 2px;
- border-bottom: 2px solid #707070;
- padding-top : 0px;
- padding-bottom : 0px;
-}
-#toolbar ul{
- padding-left : 0px;
- padding-right : 0px;
- padding-top : 0px;
- padding-bottom : 0px;
- margin-left : 0px;
- margin-right : 0px;
- margin-top: 5px;
- margin-bottom: 5px;
-}
-#toolbar ul li{
- display: inline;
- padding-left : 10px;
- padding-right : 10px;
- padding-top : 0px;
- padding-bottom : 0px;
-}
-
-#inner_content {
- padding: 5px 0px 50px 0px;
-}
-
-#loginstate {
- text-align: right;
-}
-
-.projectscontentstitle {
- color: #949494;
- font-family: Verdana;
- font-weight: lighter;
- font-size: 2.0em;
- font-style: normal;
- text-align: left;
-}
-
-
-#loginstate a, #loginstate a:hover, #loginstate a:visited, #loginstate a:link, #loginstate a:active {
- color:#0063DC;
- margin-right:4px;
- text-decoration:none;
-}
-
-#loginstate a:hover{
- text-decoration: underline;
-}
-
-#loginstate ul {
- margin:0;
- padding:0;
- float: left;
-}
-#loginstate li{
- display: inline;
- padding:0;
- margin:0;
-}
-#loginstate #user{
- color: #000000;
- font-weight: bold;
- margin-right:4px;
-}
-#loginstate ul .usertool a,
-#loginstate ul .usertool a:link,
-#loginstate ul .usertool a:visited {
- color:#0063DC;
- text-decoration:none;
-}
-
-#loginstate ul .usertool a:hover {
- color:#0063DC;
- text-decoration:underline;
-}
-
-.errorlist
-{
- color: red;
- font-size:12px;
-}
-
-tr.hdabooddline {
- background: #d8d8d8;
- /*background: #d6d7f6;*/
-}
-tr.hdaboevenline {
- background: white;
- /*background: #e6e6e6;*/
-}
-tr.hdabooddline:hover, tr.hdaboevenline:hover {
- background: lightblue;
- /*background: #e6e6e6;*/
-}
-
-tr.hdabosimpleoddline {
- background: #e4e4e4;
- /*background: #d6d7f6;*/
-}
-tr.hdabosimpleevenline {
- background: white;
- /*background: #e6e6e6;*/
-}
-
-#count_nav_top,
-#count_nav_bottom {
- text-align: right;
-}
-#count_nav_bottom p,
-#count_nav_top p {
- font-size: 12px;
- font-weight : bold;
-}
-
-#tag_table {
- width: 100%;
- border-spacing: 0px;
-}
-#tag_table td, th {
- /*border: thin solid #6495ed;*/
- padding: 3px;
-}
-.updown_td {
- width: 12px;
-}
-
-.sheet_title {
- font-size: 14px;
-}
-
-.complete_sheet {
- margin-left: 5px;
- margin-right: 5px;
-}
-.left_sheet {
- width: 38%;
- float: left;
-}
-.left_sheet p {
- margin-bottom: 5px;
-}
-.right_sheet {
- width: 60%;
- /*margin-left: 5px;*/
- float: right;
-}
-
-.large_25 {
- width: 25px;
-}
-.text_centered {
- text-align: center;
-}
-.hand_cursor, .reset_wp_info, .remove_wp_link, .remove_tag_from_list {
- cursor: pointer;
-}
-.updown_td {
- cursor: n-resize;
-}
-
-tr.dragged_row td {
- color: yellow;
- background-color: black;
-}
-
-#all_tags_table {
- min-width: 600px;
- border-spacing: 0px;
-}
-#all_tags_table td, th {
- /*border: thin solid #6495ed;*/
- padding: 3px;
-}
-
-/* styles for the 4 types of STATUS*/
-.null_result {
- color: #000000;
-}
-.redirection {
- color: #0000ff;
- font-weight: bold;
- font-style: italic;
-}
-.homonyme {
- color: #000000;
- font-weight: bold;
-}
-.match {
- color: #0000ff;
- font-weight: bold;
-}
-
-#tags_actions span {
- margin-left: 5px;
-}
-
-#loginform_div {
- margin-left: 10px;
-}
-
-#login_fields_list, #submitcontent-buttons-login {
- margin: 10px 0px;
-}
-
-#search_results {
- margin-left: 10px;
-}
-
-.result_counter {
- color: #C6C6C6;
-}
-
-#search_prev_next {
- margin-top: 20px;
-}
-
-#page_number {
- text-align: right;
-}
\ No newline at end of file
Binary file web/hdabo/static/hdabo/img/arrow_green_right.png has changed
Binary file web/hdabo/static/hdabo/img/arrow_right.png has changed
Binary file web/hdabo/static/hdabo/img/arrow_up_down.png has changed
Binary file web/hdabo/static/hdabo/img/clock_arrow.png has changed
Binary file web/hdabo/static/hdabo/img/favicon.ico has changed
Binary file web/hdabo/static/hdabo/img/indicator.gif has changed
Binary file web/hdabo/static/hdabo/img/logo_IRI_footer.png has changed
Binary file web/hdabo/static/hdabo/img/red_cross.png has changed
Binary file web/hdabo/static/hdabo/img/sort-asc.png has changed
Binary file web/hdabo/static/hdabo/img/sort-desc.png has changed
Binary file web/hdabo/static/hdabo/img/sort-descending.png has changed
Binary file web/hdabo/static/hdabo/img/tag_remove.png has changed
Binary file web/hdabo/static/hdabo/img/wikipedia_search.png has changed
--- a/web/hdabo/static/hdabo/js/hdabo.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,366 +0,0 @@
-// -*- coding: utf-8 -*-
-function init_tags_events()
-{
- // Tag simple operations : activate/unactivate wp link, reset wp info, remove wp link, remove tag from list
- $(".reset_wp_info").click(function(e){
- if(confirm("Confirmez-vous le rétablissement du label original de ce tag ?")){
- update_tag(this);
- }
- });
- $(".remove_wp_link").click(function(e){
- if(confirm("Confirmez-vous le suppression du lien Wikipédia pour le tag \"" + $(this).attr('alt') + "\" ?")){
- update_tag(this);
- }
- });
- $(".remove_tag_from_list").click(function(){
- if(confirm("Confirmez-vous la suppression du tag \"" + $(this).attr('alt') + "\" de la liste courante ?")){
- update_tag(this);
- }
- });
-
- // Wikipedia search management (autocompletion and save changes)
- $.editable.addInputType('autocomplete', {
- element : $.editable.types.text.element,
- plugin : function(settings, original) {
- $('input', this).autocomplete(settings.autocomplete);
- }
- });
- $(".wikipediatag").editable(modify_tag_url, {
- indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
- type : "autocomplete",
- tooltip : "Cliquer pour éditer...",
- onblur : "submit",
- submitdata: {
- csrfmiddlewaretoken:global_csrf_token,
- datasheet_id:$('#datasheet_id').val(),
- num_page:$('#num_page').val(),
- nb_by_page:$('#nb_by_page').val(),
- sort:$('#sort').val(),
- searched:$('#searched_str').val()
- },
- callback : function(value, settings) {
- $('#tag_table_container').html(value);
- init_tags_events();
- },
- onerror: function(settings, original, jqXHR) {
- resp = $.parseJSON(jqXHR.responseText);
- alert(resp.message);
- original.reset();
- },
- autocomplete : {
- source: function( request, response ) {
- $.ajax({
- url: "http://fr.wikipedia.org/w/api.php",
- dataType: "jsonp",
- data: {
- action: "opensearch",
- limit: "20",
- namespace: "0",
- format: "json",
- search: request.term
- },
- success: function( data ) {
- response( $.map( data[1], function( item ) {
- return {
- label: item,
- value: item
- }
- }));
- }
- });
- },
- minLength: 2,
- open: function() {
- $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
- },
- close: function() {
- $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
- }
- }
- });
-
- // Update alias management
- $(".tag_alias").editable(update_tag_alias_url, {
- indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
- type : "text",
- placeholder:"",
- tooltip : "Cliquer pour éditer...",
- onblur : "submit",
- submitdata: {
- csrfmiddlewaretoken:global_csrf_token,
- datasheet_id:$('#datasheet_id').val(),
- num_page:$('#num_page').val(),
- nb_by_page:$('#nb_by_page').val(),
- sort:$('#sort').val(),
- searched:$('#searched_str').val()
- },
- callback : function(value, settings) {
- $('#tag_table_container').html(value);
- init_tags_events();
- }
- });
-
- // Tag categories management
- $(".tag_category").editable(update_tag_category_url, {
- indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
- type : "select",
- data : categories_list,
- placeholder:"",
- tooltip : "Cliquer pour éditer...",
- onblur : "submit",
- submitdata: {
- csrfmiddlewaretoken:global_csrf_token,
- datasheet_id:$('#datasheet_id').val(),
- num_page:$('#num_page').val(),
- nb_by_page:$('#nb_by_page').val(),
- sort:$('#sort').val(),
- searched:$('#searched_str').val()
- },
- callback : function(value, settings) {
- $('#tag_table_container').html(value);
- init_tags_events();
- }
- });
-
- // Tag table drag and drop
- $("#tag_table").tableDnD({
- onDragClass: "dragged_row",
- onDrop: function(table, row){
- old_order = row.id;
- $($(row).children()[1]).html("<img src='"+static_url+"hdabo/img/indicator.gif'/>");
- rows = table.tBodies[0].rows;
- nb_rows = rows.length;
- for(var i=1; i<nb_rows; i++){
- if(rows[i].id==old_order){
- new_order = i; // No need to +1 because rows[0] are headers
- $.ajax({
- url: tag_up_down_url,
- type: 'POST',
- data: {csrfmiddlewaretoken:global_csrf_token,
- datasheet_id:$('#datasheet_id').val(),
- new_order:new_order,
- old_order:old_order
- },
- // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
- //dataType: 'json',
- success: function(msg, textStatus, XMLHttpRequest) {
- $('#tag_table_container').html(msg);
- init_tags_events();
- }
- });
- }
- }
- },
- dragHandle: "updown_td"
- });
-}
-
-function init_datasheet_events()
-{
- var select_done = false;
- // Wikipedia search management (new tag)
- $("#wp_search").autocomplete({
- source: function( request, response ) {
- $.ajax({
- url: "http://fr.wikipedia.org/w/api.php",
- dataType: "jsonp",
- data: {
- action: "opensearch",
- limit: "20",
- namespace: "0",
- format: "json",
- search: request.term
- },
- success: function( data ) {
- response( $.map( data[1], function( item ) {
- return {
- label: item,
- value: item
- }
- }));
- }
- });
- },
- select: function(event, ui) {
- // Since the event still did not update wp_search's val, we force it.
- $("#wp_search").val(ui.item.label);
- select_done = true;
- $("#ok_search").click();
- },
- minLength: 2,
- open: function() {
- $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
- },
- close: function() {
- $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
- }
- });
- $('#wp_search').keyup(function(e){
- if((e.keyCode==13) && ($("#wp_search").val()!="") && (select_done==false)){
- add_tag($("#wp_search").val());
- }
- select_done = false;
- });
- $("#ok_search").click(function(){
- if($("#wp_search").val()!=""){
- add_tag($("#wp_search").val());
- }
- });
- $("#tags_sort").click(function(e){
- e.preventDefault();
- if(confirm("Confirmez-vous le tri des tags ?")) {
- reorder_tags();
- }
- });
- // Validate sheet management : the radiobutton name has is "'gr_validated' + datasheet.hda_id"
- $("#validated").click(function(e){
- e.preventDefault();
- // We count the number of tags. It has to be between 5 and 25
- var nb_tags = $('#tag_table tr').length - 1;
- if(nb_tags<5 || nb_tags>25){
- alert("Cette fiche n'est pas validable : elle doit contenir entre 5 et 25 tags.");
- }
- else{
- if(confirm("Confirmez-vous la validation de cette fiche ? Elle contient " + nb_tags + " tags.")){
- window.location = validate_datasheet_url + "/" + $('#datasheet_id').val() + "/true";
- }
- }
- });
- $("#not_validated").click(function(e){
- e.preventDefault();
- if(confirm("Confirmez-vous l'invalidation de cette fiche ?")){
- window.location = validate_datasheet_url + "/" + $('#datasheet_id').val() + "/false";
- }
- });
-}
-
-function update_tag(btn)
-{
- new_checked = false;
- if ($(btn).is(".remove_tag_from_list")) {
- var url = remove_tag_from_list_url;
- var id_tag = $(btn).attr('id');
- }
- else if ($(btn).is(".reset_wp_info")) {
- var url = reset_wp_info_url;
- var id_tag = $(btn).html();
- $(btn).html("<img src='"+static_url+"hdabo/img/indicator.gif'>");
- }
- else if ($(btn).is(".remove_wp_link")) {
- var url = remove_wp_link_url;
- var id_tag = $(btn).attr('id');
- }
-
- // 2 cases :
- // - ordered tag for one datasheet : $('#datasheet_id') is not null
- // - all tags list : $('#datasheet_id') is null and $('#num_page') and $('#nb_by_page') are not null
- $.ajax({
- url: url,
- type: 'POST',
- data: {csrfmiddlewaretoken:global_csrf_token,
- datasheet_id:$('#datasheet_id').val(),
- num_page:$('#num_page').val(),
- nb_by_page:$('#nb_by_page').val(),
- sort:$('#sort').val(),
- searched:$('#searched_str').val(),
- tag_id:id_tag,
- activated:new_checked
- },
- // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
- //dataType: 'json',
- success: function(msg, textStatus, XMLHttpRequest) {
- $('#tag_table_container').html(msg);
- init_tags_events();
- },
- error: function(jqXHR, textStatus, errorThrown) {
- resp = $.parseJSON(jqXHR.responseText);
- alert(resp.message);
- $(btn).html(id_tag);
- }
- });
-}
-
-function tag_up_down(arrow)
-{
- if ($(arrow).is(".up")) {
- mv = "u";
- } else {
- mv = "d";
- }
- var url = tag_up_down_url;
- var id_tag = $(arrow).attr('id');
- // This indicates the position (from 0) of the tag in the list. NB : it is different from the TagSheet.order in the database.
- var pos_tag = $(arrow).attr('pos');
- $.ajax({
- url: url,
- type: 'POST',
- data: {csrfmiddlewaretoken:global_csrf_token,
- datasheet_id:$('#datasheet_id').val(),
- tag_id:id_tag,
- move:mv,
- tag_pos:pos_tag
- },
- // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
- //dataType: 'json',
- success: function(msg, textStatus, XMLHttpRequest) {
- $('#tag_table_container').html(msg);
- init_tags_events();
- }
- });
-}
-
-function add_tag(tag_label)
-{
- $("#ok_search").html("<img src='"+static_url+"hdabo/img/indicator.gif'>");
- var url = add_tag_url;
- $.ajax({
- url: url,
- type: 'POST',
- data: {csrfmiddlewaretoken:global_csrf_token,
- datasheet_id:$('#datasheet_id').val(),
- value:tag_label
- },
- // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
- //dataType: 'json',
- success: function(msg, textStatus, XMLHttpRequest) {
- $('#tag_table_container').html(msg);
- init_tags_events();
- // And scroll to the bottom
- $("html").animate({ scrollTop: $(document).height() }, 500);
- },
- error: function(jqXHR, textStatus, errorThrown) {
- resp = $.parseJSON(jqXHR.responseText);
- alert(resp.message);
- },
- complete: function(){
- // We empty the input and hide the ok button
- $("#wp_search").val("");
- $("#ok_search").html("<b>OK</b>");
- }
- });
-}
-
-function reorder_tags() {
- $('#tags_sort').attr("disabled", "disabled");
- var tag_sort_old_src = $("#tags_sort").attr("src");
- $("#tags_sort").attr("src",static_url+"hdabo/img/indicator.gif");
- $.ajax({
- url: reorder_tag_datasheet_url,
- type: 'POST',
- data: {
- csrfmiddlewaretoken:global_csrf_token,
- datasheet_id:$('#datasheet_id').val()
- },
- success: function(msg, textStatus, XMLHttpRequest) {
- $('#tag_table_container').html(msg);
- init_tags_events();
- // And scroll to the bottom
- $("html").animate({ scrollTop: $(document).height() }, 500);
- },
- complete: function(){
- $("#tags_sort").attr("src",tag_sort_old_src);
- $('#tags_sort').removeAttr("disabled");
- }
- });
-}
-
--- a/web/hdabo/static/hdabo/js/jquery-ui.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,784 +0,0 @@
-/*!
- * jQuery UI 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
-b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
-"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
-function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
-outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
-return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
-0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
-e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
-this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
-widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- * jquery.ui.widget.js
- */
-(function(b){var d=false;b(document).mousedown(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"?b(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
-this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
-!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
-false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper=
-this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
-this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);
-this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=
-d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",
-a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
-a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a=
-{left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&
-d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=
-this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions=
-{width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+
-d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!="hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),
-10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-
-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&
-d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
-this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;
-if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1];h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=this.originalPageX+Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<
-g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");
-this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.13"});
-d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=
-0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=
-c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,
-true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=
-0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=
-a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");
-if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=
-f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);
-else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,
-a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,
-o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;
-if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=
-c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&
-c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});
-d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.mouse.js
- * jquery.ui.draggable.js
- */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.13"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
-d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
-var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
-false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
-this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
-{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
-if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=
-false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);
-c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,
-d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=
-a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=
-this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||
-c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-
-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,
-arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,
-element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.13"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};
-if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),
-p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,
-c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),
-g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),
-10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,
-top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;
-g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:
-0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));
-if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&
-!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost==
-"string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;
-var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,
-10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.13"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
-"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
-!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
-return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
-b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
-a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
-e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
-c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
-this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
-toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
-var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
-_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
-if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
-this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
-this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
-this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
-this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
-d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
-0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
-a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
-this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
-""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
-this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
-{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
-document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
-10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
-this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
-var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
-this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
-f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
-this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
-a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.13"})})(jQuery);
-;/*
- * jQuery UI Accordion 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
-a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
-if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
-function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
-this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
-b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
-a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
-c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
-if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
-if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
-e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
-e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
-"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.13",
-animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
-f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
-paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.position.js
- */
-(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=
-false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
-a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
-this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
-a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
-d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
-b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
-this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
-b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
-d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
-"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
-(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
-this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
-this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Button 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,f=a([]);if(c)f=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return f};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
-i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
-function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(f)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")}).bind("click.button",function(e){c.disabled&&e.stopImmediatePropagation()});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",
-function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var e=b.element[0];h(e).not(e).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",
-function(){if(c.disabled)return false;a(this).addClass("ui-state-active");g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(e){if(c.disabled)return false;if(e.keyCode==a.ui.keyCode.SPACE||e.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===
-a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){var b=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(c);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(c);
-if(!this.buttonElement.length)this.buttonElement=b.find(c)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());
-this.hasTitle||this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
-true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){if(this.options.text)e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){e.push(f?"ui-button-icons-only":
-"ui-button-icon-only");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},
-destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.button.js
- * jquery.ui.draggable.js
- * jquery.ui.mouse.js
- * jquery.ui.position.js
- * jquery.ui.resizable.js
- */
-(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
-position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
-b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
-h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
-e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
-a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
-b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=
-1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
-f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
-function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
-handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
-originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",
-f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):
-[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);
-if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
-e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
-this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
-b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.13",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
-create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
-height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
-b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
-function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=a.values&&a.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(a.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(a.range){if(a.range===true){if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(a.range==="min"||a.range==="max"?" ui-slider-range-"+a.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-this.handles=c.add(d(e.join("")).appendTo(b.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
-g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!b.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");i=b._start(g,l);if(i===false)return}break}m=b.options.step;i=b.options.values&&b.options.values.length?
-(h=b.values(l)):(h=b.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=b._trimAlignValue(i+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(i-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===b._valueMax())return;h=b._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===b._valueMin())return;h=b._trimAlignValue(i-
-m);break}b._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(g,k);b._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
-return this},_mouseCapture:function(b){var a=this.options,c,f,e,j,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(a.range===true&&this.values(1)===a.min){g+=1;e=d(this.handles[g])}if(this._start(b,g)===false)return false;
-this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();a=e.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-e.width()/2,top:b.pageY-a.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(b){var a=
-this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;if(this.orientation==="horizontal"){a=
-this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);
-c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var f;if(this.options.values&&this.options.values.length){f=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>f||a===1&&c<f))c=f;if(c!==this.values(a)){f=this.values();f[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:f});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],value:c});
-b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
-this._trimAlignValue(b);this._refreshValue();this._change(null,0)}else return this._value()},values:function(b,a){var c,f,e;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):
-this.value();else return this._values()},_setOption:function(b,a){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
-return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
-_refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate);
-if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
-1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.13"})})(jQuery);
-;/*
- * jQuery UI Tabs 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
-e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
-d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
-(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
-this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
-if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
-this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
-g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
-function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
-this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
--1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
-d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
-d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
-e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
-j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
-if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
-this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
-load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
-"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
-url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.13"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
-a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-;/*
- * jQuery UI Datepicker 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- * jquery.ui.core.js
- */
-(function(d,B){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a",
-"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
-d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},
-_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,
-b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
-function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);
-if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);
-return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);
-if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
-this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/
-2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,
-"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=
-false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=
-true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
-for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
-this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==B&&f.minDate===B)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==B&&f.maxDate===B)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=
-this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();
-c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
-"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,
--7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();
-a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==B?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);
-d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=
-null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=
-null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],
-top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");
-c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
-a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},
-_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-
-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=
-null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
-_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
-0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=
-false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=
-d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);
-else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
-a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,
-g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var C=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&C?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,C,K){p=d.map(o(p)?K:C,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=
-x[1];if(b.substr(s,w.length).toLowerCase()==w.toLowerCase()){E=x[0];s+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(A))throw"Unexpected literal at position "+s;s++},s=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else r();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=
-new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else k=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=
-c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,
-h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;
-case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+
-1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==B?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,
-f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,
-c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=
-parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;
-a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
-a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
-new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
-n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,
-g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&
-a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+z+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
-z+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){for(var O=
-"",G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&x==0?c?
-f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var D=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}y+=D+"</tr></thead><tbody>";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
-D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<D;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&q<k||o&&q>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(q.getTime()==P.getTime()&&g==a.selectedMonth&&
-a._keyEvent||E.getTime()==q.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!C?"":" "+I[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||C)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+z+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(F&&!C?" ":L?'<span class="ui-state-default">'+q.getDate()+
-"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
-"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+
-a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?
-r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=
-(h||!(j&&l)?" ":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,
-"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,
-b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!=
-"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));
-return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&
-arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.13"})})(jQuery);
-;/*
- * jQuery UI Effects 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */
-jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
-d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easding:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
-f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
-[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.13",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
-0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
-c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,
-a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);
-a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%",
-"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*
-((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=
-e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=
-e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
-h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*
-h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,
-e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;/*
- * jQuery UI Effects Blind 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
-g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Bounce 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
-3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
-b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Clip 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
-c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Drop 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
-"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Explode 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
-0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
-e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
-;/*
- * jQuery UI Effects Fade 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Fold 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
-10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Highlight 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Pulsate 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
-a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Scale 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
-b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
-1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
-p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
-if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
-a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
-child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
-n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Shake 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
-(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Slide 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
-var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Transfer 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
-b.dequeue()})})}})(jQuery);
-;
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.jeditable.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,546 +0,0 @@
-/*
- * Jeditable - jQuery in place edit plugin
- *
- * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul
- *
- * Licensed under the MIT license:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Project home:
- * http://www.appelsiini.net/projects/jeditable
- *
- * Based on editable by Dylan Verheul <dylan_at_dyve.net>:
- * http://www.dyve.net/jquery/?editable
- *
- */
-
-/**
- * Version 1.7.2-dev
- *
- * ** means there is basic unit tests for this parameter.
- *
- * @name Jeditable
- * @type jQuery
- * @param String target (POST) URL or function to send edited content to **
- * @param Hash options additional options
- * @param String options[method] method to use to send edited content (POST or PUT) **
- * @param Function options[callback] Function to run after submitting edited content **
- * @param String options[name] POST parameter name of edited content
- * @param String options[id] POST parameter name of edited div id
- * @param Hash options[submitdata] Extra parameters to send when submitting edited content.
- * @param String options[type] text, textarea or select (or any 3rd party input type) **
- * @param Integer options[rows] number of rows if using textarea **
- * @param Integer options[cols] number of columns if using textarea **
- * @param Mixed options[height] 'auto', 'none' or height in pixels **
- * @param Mixed options[width] 'auto', 'none' or width in pixels **
- * @param String options[loadurl] URL to fetch input content before editing **
- * @param String options[loadtype] Request type for load url. Should be GET or POST.
- * @param String options[loadtext] Text to display while loading external content.
- * @param Mixed options[loaddata] Extra parameters to pass when fetching content before editing.
- * @param Mixed options[data] Or content given as paramameter. String or function.**
- * @param String options[indicator] indicator html to show when saving
- * @param String options[tooltip] optional tooltip text via title attribute **
- * @param String options[event] jQuery event such as 'click' of 'dblclick' **
- * @param String options[submit] submit button value, empty means no button **
- * @param String options[cancel] cancel button value, empty means no button **
- * @param String options[cssclass] CSS class to apply to input form. 'inherit' to copy from parent. **
- * @param String options[style] Style to apply to input form 'inherit' to copy from parent. **
- * @param String options[select] true or false, when true text is highlighted ??
- * @param String options[placeholder] Placeholder text or html to insert when element is empty. **
- * @param String options[onblur] 'cancel', 'submit', 'ignore' or function ??
- *
- * @param Function options[onsubmit] function(settings, original) { ... } called before submit
- * @param Function options[onreset] function(settings, original) { ... } called before reset
- * @param Function options[onerror] function(settings, original, xhr) { ... } called on error
- *
- * @param Hash options[ajaxoptions] jQuery Ajax options. See docs.jquery.com.
- *
- */
-
-(function($) {
-
- $.fn.editable = function(target, options) {
-
- if ('disable' == target) {
- $(this).data('disabled.editable', true);
- return;
- }
- if ('enable' == target) {
- $(this).data('disabled.editable', false);
- return;
- }
- if ('destroy' == target) {
- $(this)
- .unbind($(this).data('event.editable'))
- .removeData('disabled.editable')
- .removeData('event.editable');
- return;
- }
-
- var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options);
-
- /* setup some functions */
- var plugin = $.editable.types[settings.type].plugin || function() { };
- var submit = $.editable.types[settings.type].submit || function() { };
- var buttons = $.editable.types[settings.type].buttons
- || $.editable.types['defaults'].buttons;
- var content = $.editable.types[settings.type].content
- || $.editable.types['defaults'].content;
- var element = $.editable.types[settings.type].element
- || $.editable.types['defaults'].element;
- var reset = $.editable.types[settings.type].reset
- || $.editable.types['defaults'].reset;
- var callback = settings.callback || function() { };
- var onedit = settings.onedit || function() { };
- var onsubmit = settings.onsubmit || function() { };
- var onreset = settings.onreset || function() { };
- var onerror = settings.onerror || reset;
-
- /* Show tooltip. */
- if (settings.tooltip) {
- $(this).attr('title', settings.tooltip);
- }
-
- settings.autowidth = 'auto' == settings.width;
- settings.autoheight = 'auto' == settings.height;
-
- return this.each(function() {
-
- /* Save this to self because this changes when scope changes. */
- var self = this;
-
- /* Inlined block elements lose their width and height after first edit. */
- /* Save them for later use as workaround. */
- var savedwidth = $(self).width();
- var savedheight = $(self).height();
-
- /* Save so it can be later used by $.editable('destroy') */
- $(this).data('event.editable', settings.event);
-
- /* If element is empty add something clickable (if requested) */
- if (!$.trim($(this).html())) {
- $(this).html(settings.placeholder);
- }
-
- $(this).bind(settings.event, function(e) {
-
- /* Abort if element is disabled. */
- if (true === $(this).data('disabled.editable')) {
- return;
- }
-
- /* Prevent throwing an exeption if edit field is clicked again. */
- if (self.editing) {
- return;
- }
-
- /* Abort if onedit hook returns false. */
- if (false === onedit.apply(this, [settings, self])) {
- return;
- }
-
- /* Prevent default action and bubbling. */
- e.preventDefault();
- e.stopPropagation();
-
- /* Remove tooltip. */
- if (settings.tooltip) {
- $(self).removeAttr('title');
- }
-
- /* Figure out how wide and tall we are, saved width and height. */
- /* Workaround for http://dev.jquery.com/ticket/2190 */
- if (0 == $(self).width()) {
- settings.width = savedwidth;
- settings.height = savedheight;
- } else {
- if (settings.width != 'none') {
- settings.width =
- settings.autowidth ? $(self).width() : settings.width;
- }
- if (settings.height != 'none') {
- settings.height =
- settings.autoheight ? $(self).height() : settings.height;
- }
- }
-
- /* Remove placeholder text, replace is here because of IE. */
- if ($(this).html().toLowerCase().replace(/(;|"|\/)/g, '') ==
- settings.placeholder.toLowerCase().replace(/(;|"|\/)/g, '')) {
- $(this).html('');
- }
-
- self.editing = true;
- self.revert = $(self).html();
- $(self).html('');
-
- /* Create the form object. */
- var form = $('<form />');
-
- /* Apply css or style or both. */
- if (settings.cssclass) {
- if ('inherit' == settings.cssclass) {
- form.attr('class', $(self).attr('class'));
- } else {
- form.attr('class', settings.cssclass);
- }
- }
-
- if (settings.style) {
- if ('inherit' == settings.style) {
- form.attr('style', $(self).attr('style'));
- /* IE needs the second line or display wont be inherited. */
- form.css('display', $(self).css('display'));
- } else {
- form.attr('style', settings.style);
- }
- }
-
- /* Add main input element to form and store it in input. */
- var input = element.apply(form, [settings, self]);
-
- /* Set input content via POST, GET, given data or existing value. */
- var input_content;
-
- if (settings.loadurl) {
- var t = setTimeout(function() {
- input.disabled = true;
- content.apply(form, [settings.loadtext, settings, self]);
- }, 100);
-
- var loaddata = {};
- loaddata[settings.id] = self.id;
- if ($.isFunction(settings.loaddata)) {
- $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings]));
- } else {
- $.extend(loaddata, settings.loaddata);
- }
- $.ajax({
- type : settings.loadtype,
- url : settings.loadurl,
- data : loaddata,
- async : false,
- success: function(result) {
- window.clearTimeout(t);
- input_content = result;
- input.disabled = false;
- }
- });
- } else if (settings.data) {
- input_content = settings.data;
- if ($.isFunction(settings.data)) {
- input_content = settings.data.apply(self, [self.revert, settings]);
- }
- } else {
- input_content = self.revert;
- }
- content.apply(form, [input_content, settings, self]);
-
- input.attr('name', settings.name);
-
- /* Add buttons to the form. */
- buttons.apply(form, [settings, self]);
-
- /* Add created form to self. */
- $(self).append(form);
-
- /* Attach 3rd party plugin if requested. */
- plugin.apply(form, [settings, self]);
-
- /* Focus to first visible form element. */
- $(':input:visible:enabled:first', form).focus();
-
- /* Highlight input contents when requested. */
- if (settings.select) {
- input.select();
- }
-
- /* discard changes if pressing esc */
- input.keydown(function(e) {
- if (e.keyCode == 27) {
- e.preventDefault();
- reset.apply(form, [settings, self]);
- }
- });
-
- /* Discard, submit or nothing with changes when clicking outside. */
- /* Do nothing is usable when navigating with tab. */
- var t;
- if ('cancel' == settings.onblur) {
- input.blur(function(e) {
- /* Prevent canceling if submit was clicked. */
- t = setTimeout(function() {
- reset.apply(form, [settings, self]);
- }, 500);
- });
- } else if ('submit' == settings.onblur) {
- input.blur(function(e) {
- /* Prevent double submit if submit was clicked. */
- t = setTimeout(function() {
- form.submit();
- }, 200);
- });
- } else if ($.isFunction(settings.onblur)) {
- input.blur(function(e) {
- settings.onblur.apply(self, [input.val(), settings]);
- });
- } else {
- input.blur(function(e) {
- /* TODO: maybe something here */
- });
- }
-
- form.submit(function(e) {
-
- if (t) {
- clearTimeout(t);
- }
-
- /* Do no submit. */
- e.preventDefault();
-
- /* Call before submit hook. */
- /* If it returns false abort submitting. */
- if (false !== onsubmit.apply(form, [settings, self])) {
- /* Custom inputs call before submit hook. */
- /* If it returns false abort submitting. */
- if (false !== submit.apply(form, [settings, self])) {
-
- /* Check if given target is function */
- if ($.isFunction(settings.target)) {
- var str = settings.target.apply(self, [input.val(), settings]);
- $(self).html(str);
- self.editing = false;
- callback.apply(self, [self.innerHTML, settings]);
- /* TODO: this is not dry */
- if (!$.trim($(self).html())) {
- $(self).html(settings.placeholder);
- }
- } else {
- /* Add edited content and id of edited element to POST. */
- var submitdata = {};
- submitdata[settings.name] = input.val();
- submitdata[settings.id] = self.id;
- /* Add extra data to be POST:ed. */
- if ($.isFunction(settings.submitdata)) {
- $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings]));
- } else {
- $.extend(submitdata, settings.submitdata);
- }
-
- /* Quick and dirty PUT support. */
- if ('PUT' == settings.method) {
- submitdata['_method'] = 'put';
- }
-
- /* Show the saving indicator. */
- $(self).html(settings.indicator);
-
- /* Defaults for ajaxoptions. */
- var ajaxoptions = {
- type : 'POST',
- data : submitdata,
- dataType: 'html',
- url : settings.target,
- success : function(result, status) {
- if (ajaxoptions.dataType == 'html') {
- $(self).html(result);
- }
- self.editing = false;
- callback.apply(self, [result, settings]);
- if (!$.trim($(self).html())) {
- $(self).html(settings.placeholder);
- }
- },
- error : function(xhr, status, error) {
- onerror.apply(form, [settings, self, xhr]);
- }
- };
-
- /* Override with what is given in settings.ajaxoptions. */
- $.extend(ajaxoptions, settings.ajaxoptions);
- $.ajax(ajaxoptions);
-
- }
- }
- }
-
- /* Show tooltip again. */
- $(self).attr('title', settings.tooltip);
-
- return false;
- });
- });
-
- /* Privileged methods */
- this.reset = function(form) {
- /* Prevent calling reset twice when blurring. */
- if (this.editing) {
- /* Before reset hook, if it returns false abort reseting. */
- if (false !== onreset.apply(form, [settings, self])) {
- $(self).html(self.revert);
- self.editing = false;
- if (!$.trim($(self).html())) {
- $(self).html(settings.placeholder);
- }
- /* Show tooltip again. */
- if (settings.tooltip) {
- $(self).attr('title', settings.tooltip);
- }
- }
- }
- };
- });
-
- };
-
-
- $.editable = {
- types: {
- defaults: {
- element : function(settings, original) {
- var input = $('<input type="hidden"></input>');
- $(this).append(input);
- return(input);
- },
- content : function(string, settings, original) {
- $(':input:first', this).val(string);
- },
- reset : function(settings, original) {
- original.reset(this);
- },
- buttons : function(settings, original) {
- var form = this;
- if (settings.submit) {
- /* If given html string use that. */
- if (settings.submit.match(/>$/)) {
- var submit = $(settings.submit).click(function() {
- if (submit.attr("type") != "submit") {
- form.submit();
- }
- });
- /* Otherwise use button with given string as text. */
- } else {
- var submit = $('<button type="submit" />');
- submit.html(settings.submit);
- }
- $(this).append(submit);
- }
- if (settings.cancel) {
- /* If given html string use that. */
- if (settings.cancel.match(/>$/)) {
- var cancel = $(settings.cancel);
- /* otherwise use button with given string as text */
- } else {
- var cancel = $('<button type="cancel" />');
- cancel.html(settings.cancel);
- }
- $(this).append(cancel);
-
- $(cancel).click(function(event) {
- if ($.isFunction($.editable.types[settings.type].reset)) {
- var reset = $.editable.types[settings.type].reset;
- } else {
- var reset = $.editable.types['defaults'].reset;
- }
- reset.apply(form, [settings, original]);
- return false;
- });
- }
- }
- },
- text: {
- element : function(settings, original) {
- var input = $('<input />');
- if (settings.width != 'none') { input.attr('width', settings.width); }
- if (settings.height != 'none') { input.attr('height', settings.height); }
- /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */
- //input[0].setAttribute('autocomplete','off');
- input.attr('autocomplete','off');
- $(this).append(input);
- return(input);
- }
- },
- textarea: {
- element : function(settings, original) {
- var textarea = $('<textarea />');
- if (settings.rows) {
- textarea.attr('rows', settings.rows);
- } else if (settings.height != "none") {
- textarea.height(settings.height);
- }
- if (settings.cols) {
- textarea.attr('cols', settings.cols);
- } else if (settings.width != "none") {
- textarea.width(settings.width);
- }
- $(this).append(textarea);
- return(textarea);
- }
- },
- select: {
- element : function(settings, original) {
- var select = $('<select />');
- $(this).append(select);
- return(select);
- },
- content : function(data, settings, original) {
- /* If it is string assume it is json. */
- if (String == data.constructor) {
- eval ('var json = ' + data);
- } else {
- /* Otherwise assume it is a hash already. */
- var json = data;
- }
- for (var key in json) {
- if (!json.hasOwnProperty(key)) {
- continue;
- }
- if ('selected' == key) {
- continue;
- }
- var option = $('<option />').val(key).append(json[key]);
- $('select', this).append(option);
- }
- /* Loop option again to set selected. IE needed this... */
- $('select', this).children().each(function() {
- if ($(this).val() == json['selected'] ||
- $(this).text() == $.trim(original.revert)) {
- $(this).attr('selected', 'selected');
- }
- });
- /* Submit on change if no submit button defined. */
- if (!settings.submit) {
- var form = this;
- $('select', this).change(function() {
- form.submit();
- });
- }
- }
- }
- },
-
- /* Add new input type */
- addInputType: function(name, input) {
- $.editable.types[name] = input;
- }
- };
-
- /* Publicly accessible defaults. */
- $.fn.editable.defaults = {
- name : 'value',
- id : 'id',
- type : 'text',
- width : 'auto',
- height : 'auto',
- event : 'click.editable',
- onblur : 'cancel',
- loadtype : 'GET',
- loadtext : 'Loading...',
- placeholder: 'Click to edit',
- loaddata : {},
- submitdata : {},
- ajaxoptions: {}
- };
-
-})(jQuery);
--- a/web/hdabo/static/hdabo/js/jquery.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8865 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon May 2 13:50:00 2011 -0400
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
- navigator = window.navigator,
- location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // A simple way to check for HTML strings or ID strings
- // (both of which we optimize for)
- quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
- // Check if a string has a non-whitespace character in it
- rnotwhite = /\S/,
-
- // Used for trimming whitespace
- trimLeft = /^\s+/,
- trimRight = /\s+$/,
-
- // Check for digits
- rdigit = /\d/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
- // Useragent RegExp
- rwebkit = /(webkit)[ \/]([\w.]+)/,
- ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
- rmsie = /(msie) ([\w.]+)/,
- rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
- // Keep a UserAgent string for use with jQuery.browser
- userAgent = navigator.userAgent,
-
- // For matching the engine and version of the browser
- browserMatch,
-
- // The deferred used on DOM ready
- readyList,
-
- // The ready event handler
- DOMContentLoaded,
-
- // Save a reference to some core methods
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- push = Array.prototype.push,
- slice = Array.prototype.slice,
- trim = String.prototype.trim,
- indexOf = Array.prototype.indexOf,
-
- // [[Class]] -> type pairs
- class2type = {};
-
-jQuery.fn = jQuery.prototype = {
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem, ret, doc;
-
- // Handle $(""), $(null), or $(undefined)
- if ( !selector ) {
- return this;
- }
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
- }
-
- // The body element only exists once, optimize finding it
- if ( selector === "body" && !context && document.body ) {
- this.context = document;
- this[0] = document.body;
- this.selector = selector;
- this.length = 1;
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- // Are we dealing with HTML string or an ID?
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = quickExpr.exec( selector );
- }
-
- // Verify a match, and that no context was specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
- doc = (context ? context.ownerDocument || context : document);
-
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- ret = rsingleTag.exec( selector );
-
- if ( ret ) {
- if ( jQuery.isPlainObject( context ) ) {
- selector = [ document.createElement( ret[1] ) ];
- jQuery.fn.attr.call( selector, context, true );
-
- } else {
- selector = [ doc.createElement( ret[1] ) ];
- }
-
- } else {
- ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
- selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
- }
-
- return jQuery.merge( this, selector );
-
- // HANDLE: $("#id")
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return (context || rootjQuery).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if (selector.selector !== undefined) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.6",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return slice.call( this, 0 );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
- // Build a new jQuery matched element set
- var ret = this.constructor();
-
- if ( jQuery.isArray( elems ) ) {
- push.apply( ret, elems );
-
- } else {
- jQuery.merge( ret, elems );
- }
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" ) {
- ret.selector = this.selector + (this.selector ? " " : "") + selector;
- } else if ( name ) {
- ret.selector = this.selector + "." + name + "(" + selector + ")";
- }
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Attach the listeners
- jQuery.bindReady();
-
- // Add the callback
- readyList.done( fn );
-
- return this;
- },
-
- eq: function( i ) {
- return i === -1 ?
- this.slice( i ) :
- this.slice( i, +i + 1 );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ),
- "slice", slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
- // Either a released hold or an DOMready/load event and not yet ready
- if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger( "ready" ).unbind( "ready" );
- }
- }
- },
-
- bindReady: function() {
- if ( readyList ) {
- return;
- }
-
- readyList = jQuery._Deferred();
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", jQuery.ready, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", jQuery.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e) {}
-
- if ( document.documentElement.doScroll && toplevel ) {
- doScrollCheck();
- }
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- // A crude way of determining if an object is a window
- isWindow: function( obj ) {
- return obj && typeof obj === "object" && "setInterval" in obj;
- },
-
- isNaN: function( obj ) {
- return obj == null || !rdigit.test( obj ) || isNaN( obj );
- },
-
- type: function( obj ) {
- return obj == null ?
- String( obj ) :
- class2type[ toString.call(obj) ] || "object";
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- for ( var name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw msg;
- },
-
- parseJSON: function( data ) {
- if ( typeof data !== "string" || !data ) {
- return null;
- }
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return (new Function( "return " + data ))();
-
- }
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- // (xml & tmp used internally)
- parseXML: function( data , xml , tmp ) {
-
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
-
- tmp = xml.documentElement;
-
- if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
- jQuery.error( "Invalid XML: " + data );
- }
-
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && rnotwhite.test( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
- },
-
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0,
- length = object.length,
- isObj = length === undefined || jQuery.isFunction( object );
-
- if ( args ) {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.apply( object[ name ], args ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.apply( object[ i++ ], args ) === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
- break;
- }
- }
- }
- }
-
- return object;
- },
-
- // Use native String.trim function wherever possible
- trim: trim ?
- function( text ) {
- return text == null ?
- "" :
- trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
- },
-
- // results is for internal usage only
- makeArray: function( array, results ) {
- var ret = results || [];
-
- if ( array != null ) {
- // The window, strings (and functions) also have 'length'
- // The extra typeof function check is to prevent crashes
- // in Safari 2 (See: #3039)
- // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
- var type = jQuery.type( array );
-
- if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
- push.call( ret, array );
- } else {
- jQuery.merge( ret, array );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, array ) {
-
- if ( indexOf ) {
- return indexOf.call( array, elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var i = first.length,
- j = 0;
-
- if ( typeof second.length === "number" ) {
- for ( var l = second.length; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var ret = [], retVal;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value, key, ret = [],
- i = 0,
- length = elems.length,
- // jquery objects are treated as arrays
- isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( key in elems ) {
- value = callback( elems[ key ], key, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return ret.concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- if ( typeof context === "string" ) {
- var tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- var args = slice.call( arguments, 2 ),
- proxy = function() {
- return fn.apply( context, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Mutifunctional method to get and set values to a collection
- // The value/s can be optionally by executed if its a function
- access: function( elems, key, value, exec, fn, pass ) {
- var length = elems.length;
-
- // Setting many attributes
- if ( typeof key === "object" ) {
- for ( var k in key ) {
- jQuery.access( elems, k, key[k], exec, fn, value );
- }
- return elems;
- }
-
- // Setting one attribute
- if ( value !== undefined ) {
- // Optionally, function values get executed if exec is true
- exec = !pass && exec && jQuery.isFunction(value);
-
- for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
- }
-
- return elems;
- }
-
- // Getting an attribute
- return length ? fn( elems[0], key ) : undefined;
- },
-
- now: function() {
- return (new Date()).getTime();
- },
-
- // Use of jQuery.browser is frowned upon.
- // More details: http://docs.jquery.com/Utilities/jQuery.browser
- uaMatch: function( ua ) {
- ua = ua.toLowerCase();
-
- var match = rwebkit.exec( ua ) ||
- ropera.exec( ua ) ||
- rmsie.exec( ua ) ||
- ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
- [];
-
- return { browser: match[1] || "", version: match[2] || "0" };
- },
-
- sub: function() {
- function jQuerySub( selector, context ) {
- return new jQuerySub.fn.init( selector, context );
- }
- jQuery.extend( true, jQuerySub, this );
- jQuerySub.superclass = this;
- jQuerySub.fn = jQuerySub.prototype = this();
- jQuerySub.fn.constructor = jQuerySub;
- jQuerySub.sub = this.sub;
- jQuerySub.fn.init = function init( selector, context ) {
- if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
- context = jQuerySub( context );
- }
-
- return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
- };
- jQuerySub.fn.init.prototype = jQuerySub.fn;
- var rootjQuerySub = jQuerySub(document);
- return jQuerySub;
- },
-
- browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
- jQuery.browser[ browserMatch.browser ] = true;
- jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
- jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
- trimLeft = /^[\s\xA0]+/;
- trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
- DOMContentLoaded = function() {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- jQuery.ready();
- };
-
-} else if ( document.attachEvent ) {
- DOMContentLoaded = function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- jQuery.ready();
- }
- };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
- if ( jQuery.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch(e) {
- setTimeout( doScrollCheck, 1 );
- return;
- }
-
- // and execute any waiting functions
- jQuery.ready();
-}
-
-// Expose jQuery to the global object
-return jQuery;
-
-})();
-
-
-var // Promise methods
- promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
- // Static reference to slice
- sliceDeferred = [].slice;
-
-jQuery.extend({
- // Create a simple deferred (one callbacks list)
- _Deferred: function() {
- var // callbacks list
- callbacks = [],
- // stored [ context , args ]
- fired,
- // to avoid firing when already doing so
- firing,
- // flag to know if the deferred has been cancelled
- cancelled,
- // the deferred itself
- deferred = {
-
- // done( f1, f2, ...)
- done: function() {
- if ( !cancelled ) {
- var args = arguments,
- i,
- length,
- elem,
- type,
- _fired;
- if ( fired ) {
- _fired = fired;
- fired = 0;
- }
- for ( i = 0, length = args.length; i < length; i++ ) {
- elem = args[ i ];
- type = jQuery.type( elem );
- if ( type === "array" ) {
- deferred.done.apply( deferred, elem );
- } else if ( type === "function" ) {
- callbacks.push( elem );
- }
- }
- if ( _fired ) {
- deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
- }
- }
- return this;
- },
-
- // resolve with given context and args
- resolveWith: function( context, args ) {
- if ( !cancelled && !fired && !firing ) {
- // make sure args are available (#8421)
- args = args || [];
- firing = 1;
- try {
- while( callbacks[ 0 ] ) {
- callbacks.shift().apply( context, args );
- }
- }
- finally {
- fired = [ context, args ];
- firing = 0;
- }
- }
- return this;
- },
-
- // resolve with this as context and given arguments
- resolve: function() {
- deferred.resolveWith( this, arguments );
- return this;
- },
-
- // Has this deferred been resolved?
- isResolved: function() {
- return !!( firing || fired );
- },
-
- // Cancel
- cancel: function() {
- cancelled = 1;
- callbacks = [];
- return this;
- }
- };
-
- return deferred;
- },
-
- // Full fledged deferred (two callbacks list)
- Deferred: function( func ) {
- var deferred = jQuery._Deferred(),
- failDeferred = jQuery._Deferred(),
- promise;
- // Add errorDeferred methods, then and promise
- jQuery.extend( deferred, {
- then: function( doneCallbacks, failCallbacks ) {
- deferred.done( doneCallbacks ).fail( failCallbacks );
- return this;
- },
- always: function() {
- return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
- },
- fail: failDeferred.done,
- rejectWith: failDeferred.resolveWith,
- reject: failDeferred.resolve,
- isRejected: failDeferred.isResolved,
- pipe: function( fnDone, fnFail ) {
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( {
- done: [ fnDone, "resolve" ],
- fail: [ fnFail, "reject" ]
- }, function( handler, data ) {
- var fn = data[ 0 ],
- action = data[ 1 ],
- returned;
- if ( jQuery.isFunction( fn ) ) {
- deferred[ handler ](function() {
- returned = fn.apply( this, arguments );
- if ( jQuery.isFunction( returned.promise ) ) {
- returned.promise().then( newDefer.resolve, newDefer.reject );
- } else {
- newDefer[ action ]( returned );
- }
- });
- } else {
- deferred[ handler ]( newDefer[ action ] );
- }
- });
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- if ( obj == null ) {
- if ( promise ) {
- return promise;
- }
- promise = obj = {};
- }
- var i = promiseMethods.length;
- while( i-- ) {
- obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
- }
- return obj;
- }
- });
- // Make sure only one callback list will be used
- deferred.done( failDeferred.cancel ).fail( deferred.cancel );
- // Unexpose cancel
- delete deferred.cancel;
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
- return deferred;
- },
-
- // Deferred helper
- when: function( firstParam ) {
- var args = arguments,
- i = 0,
- length = args.length,
- count = length,
- deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
- firstParam :
- jQuery.Deferred();
- function resolveFunc( i ) {
- return function( value ) {
- args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- if ( !( --count ) ) {
- // Strange bug in FF4:
- // Values changed onto the arguments object sometimes end up as undefined values
- // outside the $.when method. Cloning the object into a fresh array solves the issue
- deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
- }
- };
- }
- if ( length > 1 ) {
- for( ; i < length; i++ ) {
- if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
- args[ i ].promise().then( resolveFunc(i), deferred.reject );
- } else {
- --count;
- }
- }
- if ( !count ) {
- deferred.resolveWith( deferred, args );
- }
- } else if ( deferred !== firstParam ) {
- deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
- }
- return deferred.promise();
- }
-});
-
-
-
-jQuery.support = (function() {
-
- var div = document.createElement( "div" ),
- all,
- a,
- select,
- opt,
- input,
- marginDiv,
- support,
- fragment,
- body,
- bodyStyle,
- tds,
- events,
- eventName,
- i,
- isSupported;
-
- // Preliminary tests
- div.setAttribute("className", "t");
- div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
- all = div.getElementsByTagName( "*" );
- a = div.getElementsByTagName( "a" )[ 0 ];
-
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return {};
- }
-
- // First batch of supports tests
- select = document.createElement( "select" );
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName( "input" )[ 0 ];
-
- support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName( "tbody" ).length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName( "link" ).length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- style: /top/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.55$/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: ( input.value === "on" ),
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: opt.selected,
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- getSetAttribute: div.className !== "t",
-
- // Will be defined later
- submitBubbles: true,
- changeBubbles: true,
- focusinBubbles: false,
- deleteExpando: true,
- noCloneEvent: true,
- inlineBlockNeedsLayout: false,
- shrinkWrapBlocks: false,
- reliableMarginRight: true
- };
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
- div.attachEvent( "onclick", function click() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- support.noCloneEvent = false;
- div.detachEvent( "onclick", click );
- });
- div.cloneNode( true ).fireEvent( "onclick" );
- }
-
- // Check if a radio maintains it's value
- // after being appended to the DOM
- input = document.createElement("input");
- input.value = "t";
- input.setAttribute("type", "radio");
- support.radioValue = input.value === "t";
-
- input.setAttribute("checked", "checked");
- div.appendChild( input );
- fragment = document.createDocumentFragment();
- fragment.appendChild( div.firstChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- div.innerHTML = "";
-
- // Figure out if the W3C box model works as expected
- div.style.width = div.style.paddingLeft = "1px";
-
- // We use our own, invisible, body
- body = document.createElement( "body" );
- bodyStyle = {
- visibility: "hidden",
- width: 0,
- height: 0,
- border: 0,
- margin: 0,
- // Set background to avoid IE crashes when removing (#9028)
- background: "none"
- };
- for ( i in bodyStyle ) {
- body.style[ i ] = bodyStyle[ i ];
- }
- body.appendChild( div );
- document.documentElement.appendChild( body );
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- support.boxModel = div.offsetWidth === 2;
-
- if ( "zoom" in div.style ) {
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- // (IE < 8 does this)
- div.style.display = "inline";
- div.style.zoom = 1;
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
- // Check if elements with layout shrink-wrap their children
- // (IE 6 does this)
- div.style.display = "";
- div.innerHTML = "<div style='width:4px;'></div>";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
- }
-
- div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName( "td" );
-
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- // (only IE 8 fails this test)
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Check if empty table cells still have offsetWidth/Height
- // (IE < 8 fail this test)
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
- div.innerHTML = "";
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. For more
- // info see bug #3333
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- if ( document.defaultView && document.defaultView.getComputedStyle ) {
- marginDiv = document.createElement( "div" );
- marginDiv.style.width = "0";
- marginDiv.style.marginRight = "0";
- div.appendChild( marginDiv );
- support.reliableMarginRight =
- ( parseInt( document.defaultView.getComputedStyle( marginDiv, null ).marginRight, 10 ) || 0 ) === 0;
- }
-
- // Remove the body element we added
- body.innerHTML = "";
- document.documentElement.removeChild( body );
-
- // Technique from Juriy Zaytsev
- // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
- // We only care about the case where non-standard event systems
- // are used, namely in IE. Short-circuiting here helps us to
- // avoid an eval call (in setAttribute) which can cause CSP
- // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
- if ( div.attachEvent ) {
- for( i in {
- submit: 1,
- change: 1,
- focusin: 1
- } ) {
- eventName = "on" + i;
- isSupported = ( eventName in div );
- if ( !isSupported ) {
- div.setAttribute( eventName, "return;" );
- isSupported = ( typeof div[ eventName ] === "function" );
- }
- support[ i + "Bubbles" ] = isSupported;
- }
- }
-
- return support;
-})();
-
-// Keep track of boxModel
-jQuery.boxModel = jQuery.support.boxModel;
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
- rmultiDash = /([a-z])([A-Z])/g;
-
-jQuery.extend({
- cache: {},
-
- // Please use with caution
- uuid: 0,
-
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
- "applet": true
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- elem[ jQuery.expando ] = id = ++jQuery.uuid;
- } else {
- id = jQuery.expando;
- }
- }
-
- if ( !cache[ id ] ) {
- cache[ id ] = {};
-
- // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
- // metadata on plain JS objects when the object is serialized using
- // JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
- } else {
- cache[ id ] = jQuery.extend(cache[ id ], name);
- }
- }
-
- thisCache = cache[ id ];
-
- // Internal jQuery data is stored in a separate object inside the object's data
- // cache in order to avoid key collisions between internal data and user-defined
- // data
- if ( pvt ) {
- if ( !thisCache[ internalKey ] ) {
- thisCache[ internalKey ] = {};
- }
-
- thisCache = thisCache[ internalKey ];
- }
-
- if ( data !== undefined ) {
- thisCache[ name ] = data;
- }
-
- // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
- // not attempt to inspect the internal events object using jQuery.data, as this
- // internal data object is undocumented and subject to change.
- if ( name === "events" && !thisCache[name] ) {
- return thisCache[ internalKey ] && thisCache[ internalKey ].events;
- }
-
- return getByName ? thisCache[ name ] : thisCache;
- },
-
- removeData: function( elem, name, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var internalKey = jQuery.expando, isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
-
- // See jQuery.data for more information
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
- var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
-
- if ( thisCache ) {
- delete thisCache[ name ];
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( !isEmptyDataObject(thisCache) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( pvt ) {
- delete cache[ id ][ internalKey ];
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject(cache[ id ]) ) {
- return;
- }
- }
-
- var internalCache = cache[ id ][ internalKey ];
-
- // Browsers that fail expando deletion also refuse to delete expandos on
- // the window, but it will allow it on all other JS objects; other browsers
- // don't care
- if ( jQuery.support.deleteExpando || cache != window ) {
- delete cache[ id ];
- } else {
- cache[ id ] = null;
- }
-
- // We destroyed the entire user cache at once because it's faster than
- // iterating through each key, but we need to continue to persist internal
- // data if it existed
- if ( internalCache ) {
- cache[ id ] = {};
- // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
- // metadata on plain JS objects when the object is serialized using
- // JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
-
- cache[ id ][ internalKey ] = internalCache;
-
- // Otherwise, we need to eliminate the expando on the node to avoid
- // false lookups in the cache for entries that no longer exist
- } else if ( isNode ) {
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( jQuery.support.deleteExpando ) {
- delete elem[ jQuery.expando ];
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- } else {
- elem[ jQuery.expando ] = null;
- }
- }
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return jQuery.data( elem, name, data, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- if ( elem.nodeName ) {
- var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- if ( match ) {
- return !(match === true || elem.getAttribute("classid") !== match);
- }
- }
-
- return true;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var data = null;
-
- if ( typeof key === "undefined" ) {
- if ( this.length ) {
- data = jQuery.data( this[0] );
-
- if ( this[0].nodeType === 1 ) {
- var attr = this[0].attributes, name;
- for ( var i = 0, l = attr.length; i < l; i++ ) {
- name = attr[i].name;
-
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.substring(5) );
-
- dataAttr( this[0], name, data[ name ] );
- }
- }
- }
- }
-
- return data;
-
- } else if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- var parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if ( value === undefined ) {
- data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
- // Try to fetch any internally stored data first
- if ( data === undefined && this.length ) {
- data = jQuery.data( this[0], key );
- data = dataAttr( this[0], key, data );
- }
-
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
-
- } else {
- return this.each(function() {
- var $this = jQuery( this ),
- args = [ parts[0], value ];
-
- $this.triggerHandler( "setData" + parts[1] + "!", args );
- jQuery.data( this, key, value );
- $this.triggerHandler( "changeData" + parts[1] + "!", args );
- });
- }
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
- name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- !jQuery.isNaN( data ) ? parseFloat( data ) :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
-// property to be considered empty objects; this property always exists in
-// order to make sure JSON.stringify does not expose internal metadata
-function isEmptyDataObject( obj ) {
- for ( var name in obj ) {
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
- var deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- defer = jQuery.data( elem, deferDataKey, undefined, true );
- if ( defer &&
- ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
- ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
- // Give room for hard-coded callbacks to fire first
- // and eventually mark/queue something else on the element
- setTimeout( function() {
- if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
- !jQuery.data( elem, markDataKey, undefined, true ) ) {
- jQuery.removeData( elem, deferDataKey, true );
- defer.resolve();
- }
- }, 0 );
- }
-}
-
-jQuery.extend({
-
- _mark: function( elem, type ) {
- if ( elem ) {
- type = (type || "fx") + "mark";
- jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
- }
- },
-
- _unmark: function( force, elem, type ) {
- if ( force !== true ) {
- type = elem;
- elem = force;
- force = false;
- }
- if ( elem ) {
- type = type || "fx";
- var key = type + "mark",
- count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
- if ( count ) {
- jQuery.data( elem, key, count, true );
- } else {
- jQuery.removeData( elem, key, true );
- handleQueueMarkDefer( elem, type, "mark" );
- }
- }
- },
-
- queue: function( elem, type, data ) {
- if ( elem ) {
- type = (type || "fx") + "queue";
- var q = jQuery.data( elem, type, undefined, true );
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery.data( elem, type, jQuery.makeArray(data), true );
- } else {
- q.push( data );
- }
- }
- return q || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- fn = queue.shift(),
- defer;
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- }
-
- if ( fn ) {
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift("inprogress");
- }
-
- fn.call(elem, function() {
- jQuery.dequeue(elem, type);
- });
- }
-
- if ( !queue.length ) {
- jQuery.removeData( elem, type + "queue", true );
- handleQueueMarkDefer( elem, type, "queue" );
- }
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- }
-
- if ( data === undefined ) {
- return jQuery.queue( this[0], type );
- }
- return this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
- type = type || "fx";
-
- return this.queue( type, function() {
- var elem = this;
- setTimeout(function() {
- jQuery.dequeue( elem, type );
- }, time );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, object ) {
- if ( typeof type !== "string" ) {
- object = type;
- type = undefined;
- }
- type = type || "fx";
- var defer = jQuery.Deferred(),
- elements = this,
- i = elements.length,
- count = 1,
- deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark";
- function resolve() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- }
- while( i-- ) {
- if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
- ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
- jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
- jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
- count++;
- tmp.done( resolve );
- }
- }
- resolve();
- return defer.promise();
- }
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
- rspace = /\s+/,
- rreturn = /\r/g,
- rtype = /^(?:button|input)$/i,
- rfocusable = /^(?:button|input|object|select|textarea)$/i,
- rclickable = /^a(?:rea)?$/i,
- rspecial = /^(?:data-|aria-)/,
- rinvalidChar = /\:/,
- formHook;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.attr );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.prop );
- },
-
- removeProp: function( name ) {
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.addClass( value.call(this, i, self.attr("class") || "") );
- });
- }
-
- if ( value && typeof value === "string" ) {
- var classNames = (value || "").split( rspace );
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- var elem = this[i];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className ) {
- elem.className = value;
-
- } else {
- var className = " " + elem.className + " ",
- setClass = elem.className;
-
- for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
- setClass += " " + classNames[c];
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.removeClass( value.call(this, i, self.attr("class")) );
- });
- }
-
- if ( (value && typeof value === "string") || value === undefined ) {
- var classNames = (value || "").split( rspace );
-
- for ( var i = 0, l = this.length; i < l; i++ ) {
- var elem = this[i];
-
- if ( elem.nodeType === 1 && elem.className ) {
- if ( value ) {
- var className = (" " + elem.className + " ").replace(rclass, " ");
- for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
- className = className.replace(" " + classNames[c] + " ", " ");
- }
- elem.className = jQuery.trim( className );
-
- } else {
- elem.className = "";
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ";
- for ( var i = 0, l = this.length; i < l; i++ ) {
- if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var hooks, ret,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- return (elem.value || "").replace(rreturn, "");
- }
-
- return undefined;
- }
-
- var isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var self = jQuery(this), val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, self.val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || ("set" in hooks && hooks.set( this, val, "value" ) === undefined) ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type === "select-one";
-
- // Nothing was selected
- if ( index < 0 ) {
- return null;
- }
-
- // Loop through all the selected options
- for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
- var option = options[ i ];
-
- // Don't return options that are disabled or in a disabled optgroup
- if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
- (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
- if ( one && !values.length && options.length ) {
- return jQuery( options[ index ] ).val();
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var values = jQuery.makeArray( value );
-
- jQuery(elem).find("option").each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- attrFn: {
- val: true,
- css: true,
- html: true,
- text: true,
- data: true,
- width: true,
- height: true,
- offset: true
- },
-
- attrFix: {
- // Always normalize to ensure hook usage
- tabindex: "tabIndex",
- readonly: "readOnly"
- },
-
- attr: function( elem, name, value, pass ) {
- var nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return undefined;
- }
-
- if ( pass && name in jQuery.attrFn ) {
- return jQuery( elem )[ name ]( value );
- }
-
- var ret, hooks,
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // Normalize the name if needed
- name = notxml && jQuery.attrFix[ name ] || name;
-
- // Get the appropriate hook, or the formHook
- // if getSetAttribute is not supported and we have form objects in IE6/7
- hooks = jQuery.attrHooks[ name ] ||
- ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ?
- formHook :
- undefined );
-
- if ( value !== undefined ) {
-
- if ( value === null || (value === false && !rspecial.test( name )) ) {
- jQuery.removeAttr( elem, name );
- return undefined;
-
- } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
-
- // Set boolean attributes to the same name
- if ( value === true && !rspecial.test( name ) ) {
- value = name;
- }
-
- elem.setAttribute( name, "" + value );
- return value;
- }
-
- } else {
-
- if ( hooks && "get" in hooks && notxml ) {
- return hooks.get( elem, name );
-
- } else {
-
- ret = elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret === null ?
- undefined :
- ret;
- }
- }
- },
-
- removeAttr: function( elem, name ) {
- if ( elem.nodeType === 1 ) {
- name = jQuery.attrFix[ name ] || name;
-
- if ( jQuery.support.getSetAttribute ) {
- // Use removeAttribute in browsers that support it
- elem.removeAttribute( name );
- } else {
- jQuery.attr( elem, name, "" );
- elem.removeAttributeNode( elem.getAttributeNode( name ) );
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to it's default in case type is set after value
- // This is for element creation
- var val = elem.getAttribute("value");
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- },
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- var attributeNode = elem.getAttributeNode("tabIndex");
-
- return attributeNode && attributeNode.specified ?
- parseInt( attributeNode.value, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
- }
- },
-
- propFix: {},
-
- prop: function( elem, name, value ) {
- var nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return undefined;
- }
-
- var ret, hooks,
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // Try to normalize/fix the name
- name = notxml && 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;
-
- } else {
- return (elem[ name ] = value);
- }
-
- } else {
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
- return ret;
-
- } else {
- return elem[ name ];
- }
- }
- },
-
- propHooks: {}
-});
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !jQuery.support.getSetAttribute ) {
- jQuery.attrFix = jQuery.extend( jQuery.attrFix, {
- "for": "htmlFor",
- "class": "className",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- cellpadding: "cellPadding",
- rowspan: "rowSpan",
- colspan: "colSpan",
- usemap: "useMap",
- frameborder: "frameBorder"
- });
-
- // Use this for any attribute on a form in IE6/7
- formHook = jQuery.attrHooks.name = jQuery.attrHooks.value = jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret;
- if ( name === "value" && !jQuery.nodeName( elem, "button" ) ) {
- return elem.getAttribute( name );
- }
- ret = elem.getAttributeNode( name );
- // Return undefined if not specified instead of empty string
- return ret && ret.specified ?
- ret.nodeValue :
- undefined;
- },
- set: function( elem, value, name ) {
- // Check form objects in IE (multiple bugs related)
- // Only use nodeValue if the attribute node exists on the form
- var ret = elem.getAttributeNode( name );
- if ( ret ) {
- ret.nodeValue = value;
- return value;
- }
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- });
- });
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
- jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- get: function( elem ) {
- var ret = elem.getAttribute( name, 2 );
- return ret === null ? undefined : ret;
- }
- });
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Normalize to lowercase since IE uppercases css property names
- return elem.style.cssText.toLowerCase() || undefined;
- },
- set: function( elem, value ) {
- return (elem.style.cssText = "" + value);
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- }
- });
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- get: function( elem ) {
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
- };
- });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
- }
- }
- });
-});
-
-
-
-
-var hasOwn = Object.prototype.hasOwnProperty,
- rnamespaces = /\.(.*)$/,
- rformElems = /^(?:textarea|input|select)$/i,
- rperiod = /\./g,
- rspaces = / /g,
- rescape = /[^\w\s.|`]/g,
- fcleanup = function( nm ) {
- return nm.replace(rescape, "\\$&");
- };
-
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
- // Bind an event to an element
- // Original by Dean Edwards
- add: function( elem, types, handler, data ) {
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- if ( handler === false ) {
- handler = returnFalse;
- } else if ( !handler ) {
- // Fixes bug #7229. Fix recommended by jdalton
- return;
- }
-
- var handleObjIn, handleObj;
-
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- }
-
- // Make sure that the function being executed has a unique ID
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure
- var elemData = jQuery._data( elem );
-
- // If no elemData is found then we must be trying to bind to one of the
- // banned noData elements
- if ( !elemData ) {
- return;
- }
-
- var events = elemData.events,
- eventHandle = elemData.handle;
-
- if ( !events ) {
- elemData.events = events = {};
- }
-
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.handle.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- }
-
- // Add elem as a property of the handle function
- // This is to prevent a memory leak with non-native events in IE.
- eventHandle.elem = elem;
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = types.split(" ");
-
- var type, i = 0, namespaces;
-
- while ( (type = types[ i++ ]) ) {
- handleObj = handleObjIn ?
- jQuery.extend({}, handleObjIn) :
- { handler: handler, data: data };
-
- // Namespaced event handlers
- if ( type.indexOf(".") > -1 ) {
- namespaces = type.split(".");
- type = namespaces.shift();
- handleObj.namespace = namespaces.slice(0).sort().join(".");
-
- } else {
- namespaces = [];
- handleObj.namespace = "";
- }
-
- handleObj.type = type;
- if ( !handleObj.guid ) {
- handleObj.guid = handler.guid;
- }
-
- // Get the current list of functions bound to this event
- var handlers = events[ type ],
- special = jQuery.event.special[ type ] || {};
-
- // Init the event handler queue
- if ( !handlers ) {
- handlers = events[ type ] = [];
-
- // Check for a special event handler
- // Only use addEventListener/attachEvent if the special
- // events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add the function to the element's handler list
- handlers.push( handleObj );
-
- // Keep track of which events have been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, pos ) {
- // don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- if ( handler === false ) {
- handler = returnFalse;
- }
-
- var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
- events = elemData && elemData.events;
-
- if ( !elemData || !events ) {
- return;
- }
-
- // types is actually an event object here
- if ( types && types.type ) {
- handler = types.handler;
- types = types.type;
- }
-
- // Unbind all events for the element
- if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
- types = types || "";
-
- for ( type in events ) {
- jQuery.event.remove( elem, type + types );
- }
-
- return;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).unbind("mouseover mouseout", fn);
- types = types.split(" ");
-
- while ( (type = types[ i++ ]) ) {
- origType = type;
- handleObj = null;
- all = type.indexOf(".") < 0;
- namespaces = [];
-
- if ( !all ) {
- // Namespaced event handlers
- namespaces = type.split(".");
- type = namespaces.shift();
-
- namespace = new RegExp("(^|\\.)" +
- jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- eventType = events[ type ];
-
- if ( !eventType ) {
- continue;
- }
-
- if ( !handler ) {
- for ( j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( all || namespace.test( handleObj.namespace ) ) {
- jQuery.event.remove( elem, origType, handleObj.handler, j );
- eventType.splice( j--, 1 );
- }
- }
-
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
-
- for ( j = pos || 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( handler.guid === handleObj.guid ) {
- // remove the given handler for the given type
- if ( all || namespace.test( handleObj.namespace ) ) {
- if ( pos == null ) {
- eventType.splice( j--, 1 );
- }
-
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
-
- if ( pos != null ) {
- break;
- }
- }
- }
-
- // remove generic event handler if no more handlers exist
- if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- ret = null;
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- var handle = elemData.handle;
- if ( handle ) {
- handle.elem = null;
- }
-
- delete elemData.events;
- delete elemData.handle;
-
- if ( jQuery.isEmptyObject( elemData ) ) {
- jQuery.removeData( elem, undefined, true );
- }
- }
- },
-
- // Events that are safe to short-circuit if no handlers are attached.
- // Native DOM events should not be added, they may have inline handlers.
- customEvent: {
- "getData": true,
- "setData": true,
- "changeData": true
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- // Event object or event type
- var type = event.type || event,
- namespaces = [],
- exclusive;
-
- if ( type.indexOf("!") >= 0 ) {
- // Exclusive events trigger only for the exact event (no namespaces)
- type = type.slice(0, -1);
- exclusive = true;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
-
- if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
- // No jQuery handlers for this event type, and it can't have inline handlers
- return;
- }
-
- // Caller can pass in an Event, Object, or just an event type string
- event = typeof event === "object" ?
- // jQuery.Event object
- event[ jQuery.expando ] ? event :
- // Object literal
- new jQuery.Event( type, event ) :
- // Just the event type (string)
- new jQuery.Event( type );
-
- event.type = type;
- event.exclusive = exclusive;
- event.namespace = namespaces.join(".");
- event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
-
- // triggerHandler() and global events don't bubble or run the default action
- if ( onlyHandlers || !elem ) {
- event.preventDefault();
- event.stopPropagation();
- }
-
- // Handle a global trigger
- if ( !elem ) {
- // TODO: Stop taunting the data cache; remove global events and always attach to document
- jQuery.each( jQuery.cache, function() {
- // internalKey variable is just used to make it easier to find
- // and potentially change this stuff later; currently it just
- // points to jQuery.expando
- var internalKey = jQuery.expando,
- internalCache = this[ internalKey ];
- if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
- jQuery.event.trigger( event, data, internalCache.handle.elem );
- }
- });
- return;
- }
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- event.target = elem;
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data ? jQuery.makeArray( data ) : [];
- data.unshift( event );
-
- var cur = elem,
- // IE doesn't like method names with a colon (#3533, #8272)
- ontype = type.indexOf(":") < 0 ? "on" + type : "";
-
- // Fire event on the current element, then bubble up the DOM tree
- do {
- var handle = jQuery._data( cur, "handle" );
-
- event.currentTarget = cur;
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Trigger an inline bound script
- if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
- event.result = false;
- event.preventDefault();
- }
-
- // Bubble up to document, then to window
- cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
- } while ( cur && !event.isPropagationStopped() );
-
- // If nobody prevented the default action, do it now
- if ( !event.isDefaultPrevented() ) {
- var old,
- special = jQuery.event.special[ type ] || {};
-
- if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
- !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction)() check here because IE6/7 fails that test.
- // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
- try {
- if ( ontype && elem[ type ] ) {
- // Don't re-trigger an onFOO event when we call its FOO() method
- old = elem[ ontype ];
-
- if ( old ) {
- elem[ ontype ] = null;
- }
-
- jQuery.event.triggered = type;
- elem[ type ]();
- }
- } catch ( ieError ) {}
-
- if ( old ) {
- elem[ ontype ] = old;
- }
-
- jQuery.event.triggered = undefined;
- }
- }
-
- return event.result;
- },
-
- handle: function( event ) {
- event = jQuery.event.fix( event || window.event );
- // Snapshot the handlers list since a called handler may add/remove events.
- var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
- run_all = !event.exclusive && !event.namespace,
- args = Array.prototype.slice.call( arguments, 0 );
-
- // Use the fix-ed Event rather than the (read-only) native event
- args[0] = event;
- event.currentTarget = this;
-
- for ( var j = 0, l = handlers.length; j < l; j++ ) {
- var handleObj = handlers[ j ];
-
- // Triggered event must 1) be non-exclusive and have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event.
- if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
- // Pass in a reference to the handler function itself
- // So that we can later remove it
- event.handler = handleObj.handler;
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- var ret = handleObj.handler.apply( this, args );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
-
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
- }
- }
- return event.result;
- },
-
- props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // store a copy of the original event object
- // and "clone" to set read-only properties
- var originalEvent = event;
- event = jQuery.Event( originalEvent );
-
- for ( var i = this.props.length, prop; i; ) {
- prop = this.props[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary
- if ( !event.target ) {
- // Fixes #1925 where srcElement might not be defined either
- event.target = event.srcElement || document;
- }
-
- // check if target is a textnode (safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && event.fromElement ) {
- event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
- }
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && event.clientX != null ) {
- var eventDocument = event.target.ownerDocument || document,
- doc = eventDocument.documentElement,
- body = eventDocument.body;
-
- event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
- event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
- }
-
- // Add which for key events
- if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
- event.which = event.charCode != null ? event.charCode : event.keyCode;
- }
-
- // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
- if ( !event.metaKey && event.ctrlKey ) {
- event.metaKey = event.ctrlKey;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && event.button !== undefined ) {
- event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
- }
-
- return event;
- },
-
- // Deprecated, use jQuery.guid instead
- guid: 1E8,
-
- // Deprecated, use jQuery.proxy instead
- proxy: jQuery.proxy,
-
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: jQuery.bindReady,
- teardown: jQuery.noop
- },
-
- live: {
- add: function( handleObj ) {
- jQuery.event.add( this,
- liveConvert( handleObj.origType, handleObj.selector ),
- jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
- },
-
- remove: function( handleObj ) {
- jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
- }
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( jQuery.isWindow( this ) ) {
- this.onbeforeunload = eventHandle;
- }
- },
-
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- if ( elem.detachEvent ) {
- elem.detachEvent( "on" + type, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !this.preventDefault ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // timeStamp is buggy for some events on Firefox(#3843)
- // So we won't rely on the native value
- this.timeStamp = jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // otherwise set the returnValue property of the original event to false (IE)
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-var withinElement = function( event ) {
- // Check if mouse(over|out) are still within the same parent element
- var parent = event.relatedTarget;
-
- // Firefox sometimes assigns relatedTarget a XUL element
- // which we cannot access the parentNode property of
- try {
-
- // Chrome does something similar, the parentNode property
- // can be accessed but is null.
- if ( parent && parent !== document && !parent.parentNode ) {
- return;
- }
- // Traverse up the tree
- while ( parent && parent !== this ) {
- parent = parent.parentNode;
- }
-
- if ( parent !== this ) {
- // set the correct event type
- event.type = event.data;
-
- // handle event if we actually just moused on to a non sub-element
- jQuery.event.handle.apply( this, arguments );
- }
-
- // assuming we've left the element since we most likely mousedover a xul element
- } catch(e) { }
-},
-
-// In case of event delegation, we only need to rename the event.type,
-// liveHandler will take care of the rest.
-delegate = function( event ) {
- event.type = event.data;
- jQuery.event.handle.apply( this, arguments );
-};
-
-// Create mouseenter and mouseleave events
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- setup: function( data ) {
- jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
- },
- teardown: function( data ) {
- jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
- }
- };
-});
-
-// submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function( data, namespaces ) {
- if ( !jQuery.nodeName( this, "form" ) ) {
- jQuery.event.add(this, "click.specialSubmit", function( e ) {
- var elem = e.target,
- type = elem.type;
-
- if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
- trigger( "submit", this, arguments );
- }
- });
-
- jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
- var elem = e.target,
- type = elem.type;
-
- if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
- trigger( "submit", this, arguments );
- }
- });
-
- } else {
- return false;
- }
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialSubmit" );
- }
- };
-
-}
-
-// change delegation, happens here so we have bind.
-if ( !jQuery.support.changeBubbles ) {
-
- var changeFilters,
-
- getVal = function( elem ) {
- var type = elem.type, val = elem.value;
-
- if ( type === "radio" || type === "checkbox" ) {
- val = elem.checked;
-
- } else if ( type === "select-multiple" ) {
- val = elem.selectedIndex > -1 ?
- jQuery.map( elem.options, function( elem ) {
- return elem.selected;
- }).join("-") :
- "";
-
- } else if ( jQuery.nodeName( elem, "select" ) ) {
- val = elem.selectedIndex;
- }
-
- return val;
- },
-
- testChange = function testChange( e ) {
- var elem = e.target, data, val;
-
- if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
- return;
- }
-
- data = jQuery._data( elem, "_change_data" );
- val = getVal(elem);
-
- // the current data will be also retrieved by beforeactivate
- if ( e.type !== "focusout" || elem.type !== "radio" ) {
- jQuery._data( elem, "_change_data", val );
- }
-
- if ( data === undefined || val === data ) {
- return;
- }
-
- if ( data != null || val ) {
- e.type = "change";
- e.liveFired = undefined;
- jQuery.event.trigger( e, arguments[1], elem );
- }
- };
-
- jQuery.event.special.change = {
- filters: {
- focusout: testChange,
-
- beforedeactivate: testChange,
-
- click: function( e ) {
- var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
- if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
- testChange.call( this, e );
- }
- },
-
- // Change has to be called before submit
- // Keydown will be called before keypress, which is used in submit-event delegation
- keydown: function( e ) {
- var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
- if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
- (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
- type === "select-multiple" ) {
- testChange.call( this, e );
- }
- },
-
- // Beforeactivate happens also before the previous element is blurred
- // with this event you can't trigger a change event, but you can store
- // information
- beforeactivate: function( e ) {
- var elem = e.target;
- jQuery._data( elem, "_change_data", getVal(elem) );
- }
- },
-
- setup: function( data, namespaces ) {
- if ( this.type === "file" ) {
- return false;
- }
-
- for ( var type in changeFilters ) {
- jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
- }
-
- return rformElems.test( this.nodeName );
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialChange" );
-
- return rformElems.test( this.nodeName );
- }
- };
-
- changeFilters = jQuery.event.special.change.filters;
-
- // Handle when the input is .focus()'d
- changeFilters.focus = changeFilters.beforeactivate;
-}
-
-function trigger( type, elem, args ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- // Don't pass args or remember liveFired; they apply to the donor event.
- var event = jQuery.extend( {}, args[ 0 ] );
- event.type = type;
- event.originalEvent = {};
- event.liveFired = undefined;
- jQuery.event.handle.call( elem, event );
- if ( event.isDefaultPrevented() ) {
- args[ 0 ].preventDefault();
- }
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0;
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
-
- function handler( donor ) {
- // Donor event is always a native one; fix it and switch its type.
- // Let focusin/out handler cancel the donor focus/blur event.
- var e = jQuery.event.fix( donor );
- e.type = fix;
- e.originalEvent = {};
- jQuery.event.trigger( e, null, e.target );
- if ( e.isDefaultPrevented() ) {
- donor.preventDefault();
- }
- }
- });
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
- jQuery.fn[ name ] = function( type, data, fn ) {
- var handler;
-
- // Handle object literals
- if ( typeof type === "object" ) {
- for ( var key in type ) {
- this[ name ](key, data, type[key], fn);
- }
- return this;
- }
-
- if ( arguments.length === 2 || data === false ) {
- fn = data;
- data = undefined;
- }
-
- if ( name === "one" ) {
- handler = function( event ) {
- jQuery( this ).unbind( event, handler );
- return fn.apply( this, arguments );
- };
- handler.guid = fn.guid || jQuery.guid++;
- } else {
- handler = fn;
- }
-
- if ( type === "unload" && name !== "one" ) {
- this.one( type, data, fn );
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.add( this[i], type, handler, data );
- }
- }
-
- return this;
- };
-});
-
-jQuery.fn.extend({
- unbind: function( type, fn ) {
- // Handle object literals
- if ( typeof type === "object" && !type.preventDefault ) {
- for ( var key in type ) {
- this.unbind(key, type[key]);
- }
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.remove( this[i], type, fn );
- }
- }
-
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.live( types, data, fn, selector );
- },
-
- undelegate: function( selector, types, fn ) {
- if ( arguments.length === 0 ) {
- return this.unbind( "live" );
-
- } else {
- return this.die( types, null, fn, selector );
- }
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
-
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- return jQuery.event.trigger( type, data, this[0], true );
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments,
- guid = fn.guid || jQuery.guid++,
- i = 0,
- toggler = function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- };
-
- // link all the functions, so any of them can unbind this click handler
- toggler.guid = guid;
- while ( i < args.length ) {
- args[ i++ ].guid = guid;
- }
-
- return this.click( toggler );
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-var liveMap = {
- focus: "focusin",
- blur: "focusout",
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-};
-
-jQuery.each(["live", "die"], function( i, name ) {
- jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
- var type, i = 0, match, namespaces, preType,
- selector = origSelector || this.selector,
- context = origSelector ? this : jQuery( this.context );
-
- if ( typeof types === "object" && !types.preventDefault ) {
- for ( var key in types ) {
- context[ name ]( key, data, types[key], selector );
- }
-
- return this;
- }
-
- if ( name === "die" && !types &&
- origSelector && origSelector.charAt(0) === "." ) {
-
- context.unbind( origSelector );
-
- return this;
- }
-
- if ( data === false || jQuery.isFunction( data ) ) {
- fn = data || returnFalse;
- data = undefined;
- }
-
- types = (types || "").split(" ");
-
- while ( (type = types[ i++ ]) != null ) {
- match = rnamespaces.exec( type );
- namespaces = "";
-
- if ( match ) {
- namespaces = match[0];
- type = type.replace( rnamespaces, "" );
- }
-
- if ( type === "hover" ) {
- types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
- continue;
- }
-
- preType = type;
-
- if ( liveMap[ type ] ) {
- types.push( liveMap[ type ] + namespaces );
- type = type + namespaces;
-
- } else {
- type = (liveMap[ type ] || type) + namespaces;
- }
-
- if ( name === "live" ) {
- // bind live handler
- for ( var j = 0, l = context.length; j < l; j++ ) {
- jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
- { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
- }
-
- } else {
- // unbind live handler
- context.unbind( "live." + liveConvert( type, selector ), fn );
- }
- }
-
- return this;
- };
-});
-
-function liveHandler( event ) {
- var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
- elems = [],
- selectors = [],
- events = jQuery._data( this, "events" );
-
- // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
- if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
- return;
- }
-
- if ( event.namespace ) {
- namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- event.liveFired = this;
-
- var live = events.live.slice(0);
-
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
- selectors.push( handleObj.selector );
-
- } else {
- live.splice( j--, 1 );
- }
- }
-
- match = jQuery( event.target ).closest( selectors, event.currentTarget );
-
- for ( i = 0, l = match.length; i < l; i++ ) {
- close = match[i];
-
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
- elem = close.elem;
- related = null;
-
- // Those two events require additional checking
- if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
- event.type = handleObj.preType;
- related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
-
- // Make sure not to accidentally match a child element with the same selector
- if ( related && jQuery.contains( elem, related ) ) {
- related = elem;
- }
- }
-
- if ( !related || related !== elem ) {
- elems.push({ elem: elem, handleObj: handleObj, level: close.level });
- }
- }
- }
- }
-
- for ( i = 0, l = elems.length; i < l; i++ ) {
- match = elems[i];
-
- if ( maxLevel && match.level > maxLevel ) {
- break;
- }
-
- event.currentTarget = match.elem;
- event.data = match.handleObj.data;
- event.handleObj = match.handleObj;
-
- ret = match.handleObj.origHandler.apply( match.elem, arguments );
-
- if ( ret === false || event.isPropagationStopped() ) {
- maxLevel = match.level;
-
- if ( ret === false ) {
- stop = false;
- }
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
- }
- }
-
- return stop;
-}
-
-function liveConvert( type, selector ) {
- return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
-}
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- if ( fn == null ) {
- fn = data;
- data = null;
- }
-
- return arguments.length > 0 ?
- this.bind( name, data, fn ) :
- this.trigger( name );
- };
-
- if ( jQuery.attrFn ) {
- jQuery.attrFn[ name ] = true;
- }
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true,
- rBackslash = /\\/g,
- rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function() {
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
- results = results || [];
- context = context || document;
-
- var origContext = context;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var m, set, checkSet, extra, ret, cur, pop, i,
- prune = true,
- contextXML = Sizzle.isXML( context ),
- parts = [],
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- do {
- chunker.exec( "" );
- m = chunker.exec( soFar );
-
- if ( m ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
- } while ( m );
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context );
-
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set );
- }
- }
-
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
- ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ?
- Sizzle.filter( ret.expr, ret.set )[0] :
- ret.set[0];
- }
-
- if ( context ) {
- ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
- set = ret.expr ?
- Sizzle.filter( ret.expr, ret.set ) :
- ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray( set );
-
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- cur = parts.pop();
- pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
-
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
-
- } else if ( context && context.nodeType === 1 ) {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
-
- } else {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
-
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[ i - 1 ] ) {
- results.splice( i--, 1 );
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function( expr, set ) {
- return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
- return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
- var set;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var match,
- type = Expr.order[i];
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice( 1, 1 );
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace( rBackslash, "" );
- set = Expr.find[ type ]( match, context, isXML );
-
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( "*" ) :
- [];
- }
-
- return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
- var match, anyFound,
- old = expr,
- result = [],
- curLoop = set,
- isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- var found, item,
- filter = Expr.filter[ type ],
- left = match[1];
-
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
-
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
-
- } else {
- curLoop[i] = false;
- }
-
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
-
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw "Syntax error, unrecognized expression: " + msg;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
-
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
-
- leftMatch: {},
-
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
-
- attrHandle: {
- href: function( elem ) {
- return elem.getAttribute( "href" );
- },
- type: function( elem ) {
- return elem.getAttribute( "type" );
- }
- },
-
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !rNonWord.test( part ),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
-
- ">": function( checkSet, part ) {
- var elem,
- isPartStr = typeof part === "string",
- i = 0,
- l = checkSet.length;
-
- if ( isPartStr && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
-
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
-
- } else {
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
-
- "": function(checkSet, part, isXML){
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
- },
-
- "~": function( checkSet, part, isXML ) {
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
- }
- },
-
- find: {
- ID: function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- },
-
- NAME: function( match, context ) {
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [],
- results = context.getElementsByName( match[1] );
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
-
- TAG: function( match, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( match[1] );
- }
- }
- },
- preFilter: {
- CLASS: function( match, curLoop, inplace, result, not, isXML ) {
- match = " " + match[1].replace( rBackslash, "" ) + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
-
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
-
- ID: function( match ) {
- return match[1].replace( rBackslash, "" );
- },
-
- TAG: function( match, curLoop ) {
- return match[1].replace( rBackslash, "" ).toLowerCase();
- },
-
- CHILD: function( match ) {
- if ( match[1] === "nth" ) {
- if ( !match[2] ) {
- Sizzle.error( match[0] );
- }
-
- match[2] = match[2].replace(/^\+|\s*/g, '');
-
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
- else if ( match[2] ) {
- Sizzle.error( match[0] );
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
-
- ATTR: function( match, curLoop, inplace, result, not, isXML ) {
- var name = match[1] = match[1].replace( rBackslash, "" );
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- // Handle if an un-quoted value was used
- match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
-
- PSEUDO: function( match, curLoop, inplace, result, not ) {
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
-
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
-
- return false;
- }
-
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
-
- POS: function( match ) {
- match.unshift( true );
-
- return match;
- }
- },
-
- filters: {
- enabled: function( elem ) {
- return elem.disabled === false && elem.type !== "hidden";
- },
-
- disabled: function( elem ) {
- return elem.disabled === true;
- },
-
- checked: function( elem ) {
- return elem.checked === true;
- },
-
- selected: function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- parent: function( elem ) {
- return !!elem.firstChild;
- },
-
- empty: function( elem ) {
- return !elem.firstChild;
- },
-
- has: function( elem, i, match ) {
- return !!Sizzle( match[3], elem ).length;
- },
-
- header: function( elem ) {
- return (/h\d/i).test( elem.nodeName );
- },
-
- text: function( elem ) {
- var attr = elem.getAttribute( "type" ), type = elem.type;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
- },
-
- radio: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
- },
-
- checkbox: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
- },
-
- file: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
- },
-
- password: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
- },
-
- submit: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "submit" === elem.type;
- },
-
- image: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
- },
-
- reset: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "reset" === elem.type;
- },
-
- button: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && "button" === elem.type || name === "button";
- },
-
- input: function( elem ) {
- return (/input|select|textarea|button/i).test( elem.nodeName );
- },
-
- focus: function( elem ) {
- return elem === elem.ownerDocument.activeElement;
- }
- },
- setFilters: {
- first: function( elem, i ) {
- return i === 0;
- },
-
- last: function( elem, i, match, array ) {
- return i === array.length - 1;
- },
-
- even: function( elem, i ) {
- return i % 2 === 0;
- },
-
- odd: function( elem, i ) {
- return i % 2 === 1;
- },
-
- lt: function( elem, i, match ) {
- return i < match[3] - 0;
- },
-
- gt: function( elem, i, match ) {
- return i > match[3] - 0;
- },
-
- nth: function( elem, i, match ) {
- return match[3] - 0 === i;
- },
-
- eq: function( elem, i, match ) {
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function( elem, match, i, array ) {
- var name = match[1],
- filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
-
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var j = 0, l = not.length; j < l; j++ ) {
- if ( not[j] === elem ) {
- return false;
- }
- }
-
- return true;
-
- } else {
- Sizzle.error( name );
- }
- },
-
- CHILD: function( elem, match ) {
- var type = match[1],
- node = elem;
-
- switch ( type ) {
- case "only":
- case "first":
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- if ( type === "first" ) {
- return true;
- }
-
- node = elem;
-
- case "last":
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- return true;
-
- case "nth":
- var first = match[2],
- last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
-
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
-
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
-
- if ( first === 0 ) {
- return diff === 0;
-
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
-
- ID: function( elem, match ) {
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
-
- TAG: function( elem, match ) {
- return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
- },
-
- CLASS: function( elem, match ) {
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
-
- ATTR: function( elem, match ) {
- var name = match[1],
- result = Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
-
- POS: function( elem, match, i, array ) {
- var name = match[2],
- filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS,
- fescape = function(all, num){
- return "\\" + (num - 0 + 1);
- };
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
- makeArray = function( array, results ) {
- var i = 0,
- ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
-
- } else {
- if ( typeof array.length === "number" ) {
- for ( var l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
-
- } else {
- for ( ; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- return a.compareDocumentPosition(b) & 4 ? -1 : 1;
- };
-
-} else {
- sortOrder = function( a, b ) {
- var al, bl,
- ap = [],
- bp = [],
- aup = a.parentNode,
- bup = b.parentNode,
- cur = aup;
-
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // If the nodes are siblings (or identical) we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
-
- // If no parents were found then the nodes are disconnected
- } else if ( !aup ) {
- return -1;
-
- } else if ( !bup ) {
- return 1;
- }
-
- // Otherwise they're somewhere else in the tree so we need
- // to build up a full list of the parentNodes for comparison
- while ( cur ) {
- ap.unshift( cur );
- cur = cur.parentNode;
- }
-
- cur = bup;
-
- while ( cur ) {
- bp.unshift( cur );
- cur = cur.parentNode;
- }
-
- al = ap.length;
- bl = bp.length;
-
- // Start walking down the tree looking for a discrepancy
- for ( var i = 0; i < al && i < bl; i++ ) {
- if ( ap[i] !== bp[i] ) {
- return siblingCheck( ap[i], bp[i] );
- }
- }
-
- // We ended someplace up the tree so do a sibling check
- return i === al ?
- siblingCheck( a, bp[i], -1 ) :
- siblingCheck( ap[i], b, 1 );
- };
-
- siblingCheck = function( a, b, ret ) {
- if ( a === b ) {
- return ret;
- }
-
- var cur = a.nextSibling;
-
- while ( cur ) {
- if ( cur === b ) {
- return -1;
- }
-
- cur = cur.nextSibling;
- }
-
- return 1;
- };
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-Sizzle.getText = function( elems ) {
- var ret = "", elem;
-
- for ( var i = 0; elems[i]; i++ ) {
- elem = elems[i];
-
- // Get the text from text nodes and CDATA nodes
- if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
- ret += elem.nodeValue;
-
- // Traverse everything else, except comment nodes
- } else if ( elem.nodeType !== 8 ) {
- ret += Sizzle.getText( elem.childNodes );
- }
- }
-
- return ret;
-};
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date()).getTime(),
- root = document.documentElement;
-
- form.innerHTML = "<a name='" + id + "'/>";
-
- // Inject it into the root element, check its status, and remove it quickly
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
-
- return m ?
- m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
- [m] :
- undefined :
- [];
- }
- };
-
- Expr.filter.ID = function( elem, match ) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
-
- // release memory in IE
- root = form = null;
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function( match, context ) {
- var results = context.getElementsByTagName( match[1] );
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "<a href='#'></a>";
-
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
-
- Expr.attrHandle.href = function( elem ) {
- return elem.getAttribute( "href", 2 );
- };
- }
-
- // release memory in IE
- div = null;
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle,
- div = document.createElement("div"),
- id = "__sizzle__";
-
- div.innerHTML = "<p class='TEST'></p>";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function( query, context, extra, seed ) {
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && !Sizzle.isXML(context) ) {
- // See if we find a selector to speed up
- var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
- if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
- // Speed-up: Sizzle("TAG")
- if ( match[1] ) {
- return makeArray( context.getElementsByTagName( query ), extra );
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
- return makeArray( context.getElementsByClassName( match[2] ), extra );
- }
- }
-
- if ( context.nodeType === 9 ) {
- // Speed-up: Sizzle("body")
- // The body element only exists once, optimize finding it
- if ( query === "body" && context.body ) {
- return makeArray( [ context.body ], extra );
-
- // Speed-up: Sizzle("#ID")
- } else if ( match && match[3] ) {
- var elem = context.getElementById( match[3] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id === match[3] ) {
- return makeArray( [ elem ], extra );
- }
-
- } else {
- return makeArray( [], extra );
- }
- }
-
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(qsaError) {}
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var oldContext = context,
- old = context.getAttribute( "id" ),
- nid = old || id,
- hasParent = context.parentNode,
- relativeHierarchySelector = /^\s*[+~]/.test( query );
-
- if ( !old ) {
- context.setAttribute( "id", nid );
- } else {
- nid = nid.replace( /'/g, "\\$&" );
- }
- if ( relativeHierarchySelector && hasParent ) {
- context = context.parentNode;
- }
-
- try {
- if ( !relativeHierarchySelector || hasParent ) {
- return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
- }
-
- } catch(pseudoError) {
- } finally {
- if ( !old ) {
- oldContext.removeAttribute( "id" );
- }
- }
- }
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- // release memory in IE
- div = null;
- })();
-}
-
-(function(){
- var html = document.documentElement,
- matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
- if ( matches ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9 fails this)
- var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
- pseudoWorks = false;
-
- try {
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( document.documentElement, "[test!='']:sizzle" );
-
- } catch( pseudoError ) {
- pseudoWorks = true;
- }
-
- Sizzle.matchesSelector = function( node, expr ) {
- // Make sure that attribute selectors are quoted
- expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
- if ( !Sizzle.isXML( node ) ) {
- try {
- if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
- var ret = matches.call( node, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || !disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9, so check for that
- node.document && node.document.nodeType !== 11 ) {
- return ret;
- }
- }
- } catch(e) {}
- }
-
- return Sizzle(expr, null, null, [node]).length > 0;
- };
- }
-})();
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function( match, context, isXML ) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- // release memory in IE
- div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-if ( document.documentElement.contains ) {
- Sizzle.contains = function( a, b ) {
- return a !== b && (a.contains ? a.contains(b) : true);
- };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
- Sizzle.contains = function( a, b ) {
- return !!(a.compareDocumentPosition(b) & 16);
- };
-
-} else {
- Sizzle.contains = function() {
- return false;
- };
-}
-
-Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context ) {
- var match,
- tmpSet = [],
- later = "",
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prevUntil|prevAll)/,
- // Note: This RegExp should be improved, or likely pulled from Sizzle
- rmultiselector = /,/,
- isSimple = /^.[^:#\[\.,]*$/,
- slice = Array.prototype.slice,
- POS = jQuery.expr.match.POS,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var self = this,
- i, l;
-
- if ( typeof selector !== "string" ) {
- return jQuery( selector ).filter(function() {
- for ( i = 0, l = self.length; i < l; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- });
- }
-
- var ret = this.pushStack( "", "find", selector ),
- length, n, r;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( n = length; n < ret.length; n++ ) {
- for ( r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var targets = jQuery( target );
- return this.filter(function() {
- for ( var i = 0, l = targets.length; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && ( typeof selector === "string" ?
- jQuery.filter( selector, this ).length > 0 :
- this.filter( selector ).length > 0 );
- },
-
- closest: function( selectors, context ) {
- var ret = [], i, l, cur = this[0];
-
- // Array
- if ( jQuery.isArray( selectors ) ) {
- var match, selector,
- matches = {},
- level = 1;
-
- if ( cur && selectors.length ) {
- for ( i = 0, l = selectors.length; i < l; i++ ) {
- selector = selectors[i];
-
- if ( !matches[ selector ] ) {
- matches[ selector ] = POS.test( selector ) ?
- jQuery( selector, context || this.context ) :
- selector;
- }
- }
-
- while ( cur && cur.ownerDocument && cur !== context ) {
- for ( selector in matches ) {
- match = matches[ selector ];
-
- if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
- ret.push({ selector: selector, elem: cur, level: level });
- }
- }
-
- cur = cur.parentNode;
- level++;
- }
- }
-
- return ret;
- }
-
- // String
- var pos = POS.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- cur = this[i];
-
- while ( cur ) {
- if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
- ret.push( cur );
- break;
-
- } else {
- cur = cur.parentNode;
- if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
- break;
- }
- }
- }
- }
-
- ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
- return this.pushStack( ret, "closest", selectors );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
- if ( !elem || typeof elem === "string" ) {
- return jQuery.inArray( this[0],
- // If it receives a string, the selector is used
- // If it receives nothing, the siblings are used
- elem ? jQuery( elem ) : this.parent().children() );
- }
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return jQuery.nth( elem, 2, "nextSibling" );
- },
- prev: function( elem ) {
- return jQuery.nth( elem, 2, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( elem.parentNode.firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.makeArray( elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until ),
- // The variable 'args' was introduced in
- // https://github.com/jquery/jquery/commit/52a0238
- // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
- // http://code.google.com/p/v8/issues/detail?id=1050
- args = slice.call(arguments);
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
- if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, args.join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 ?
- jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
- jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- nth: function( cur, result, dir, elem ) {
- result = result || 1;
- var num = 0;
-
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
-
- return cur;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
- // Can't pass null or undefined to indexOf in Firefox 4
- // Set to 0 to skip string check
- qualifier = qualifier || 0;
-
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- var retVal = !!qualifier.call( elem, i, elem );
- return retVal === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return (elem === qualifier) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
- });
-}
-
-
-
-
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnocache = /<(?:script|object|embed|option|style)/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /\/(java|ecma)script/i,
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- area: [ 1, "<map>", "</map>" ],
- _default: [ 0, "", "" ]
- };
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
- wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
- text: function( text ) {
- if ( jQuery.isFunction(text) ) {
- return this.each(function(i) {
- var self = jQuery( this );
-
- self.text( text.call(this, i, self.text()) );
- });
- }
-
- if ( typeof text !== "object" && text !== undefined ) {
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
- }
-
- return jQuery.text( this );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var 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.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- 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 ) {
- return this.each(function() {
- jQuery( this ).wrapAll( html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this );
- });
- } else if ( arguments.length ) {
- var set = jQuery(arguments[0]);
- set.push.apply( set, this.toArray() );
- return this.pushStack( set, "before", arguments );
- }
- },
-
- after: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- } else if ( arguments.length ) {
- var set = this.pushStack( this, "after", arguments );
- set.push.apply( set, jQuery(arguments[0]).toArray() );
- return set;
- }
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- jQuery.cleanData( [ elem ] );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- 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 ) {
- if ( value === undefined ) {
- return this[0] && this[0].nodeType === 1 ?
- this[0].innerHTML.replace(rinlinejQuery, "") :
- null;
-
- // See if we can take a shortcut and just use innerHTML
- } else if ( typeof value === "string" && !rnocache.test( value ) &&
- (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
- !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
- value = value.replace(rxhtmlTag, "<$1></$2>");
-
- try {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( this[i].nodeType === 1 ) {
- jQuery.cleanData( this[i].getElementsByTagName("*") );
- this[i].innerHTML = value;
- }
- }
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {
- this.empty().append( value );
- }
-
- } else if ( jQuery.isFunction( value ) ) {
- this.each(function(i){
- var self = jQuery( this );
-
- self.html( value.call(this, i, self.html()) );
- });
-
- } else {
- this.empty().append( value );
- }
-
- return this;
- },
-
- replaceWith: function( value ) {
- if ( this[0] && this[0].parentNode ) {
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this), old = self.html();
- self.replaceWith( value.call( this, i, old ) );
- });
- }
-
- if ( typeof value !== "string" ) {
- value = jQuery( value ).detach();
- }
-
- return this.each(function() {
- var next = this.nextSibling,
- parent = this.parentNode;
-
- jQuery( this ).remove();
-
- if ( next ) {
- jQuery(next).before( value );
- } else {
- jQuery(parent).append( value );
- }
- });
- } else {
- return this.length ?
- this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
- this;
- }
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
- var results, first, fragment, parent,
- value = args[0],
- scripts = [];
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
- return this.each(function() {
- jQuery(this).domManip( args, table, callback, true );
- });
- }
-
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- args[0] = value.call(this, i, table ? self.html() : undefined);
- self.domManip( args, table, callback );
- });
- }
-
- if ( this[0] ) {
- parent = value && value.parentNode;
-
- // If we're in a fragment, just use that instead of building a new one
- if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
- results = { fragment: parent };
-
- } else {
- results = jQuery.buildFragment( args, this, scripts );
- }
-
- fragment = results.fragment;
-
- if ( fragment.childNodes.length === 1 ) {
- first = fragment = fragment.firstChild;
- } else {
- first = fragment.firstChild;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
-
- for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
- callback.call(
- table ?
- root(this[i], first) :
- this[i],
- // Make sure that we do not leak memory by inadvertently discarding
- // the original fragment (which might have attached data) instead of
- // using it; in addition, use the original fragment object for the last
- // item instead of first because it can end up being emptied incorrectly
- // in certain situations (Bug #8070).
- // Fragments from the fragment cache must always be cloned and never used
- // in place.
- results.cacheable || (l > 1 && i < lastIndex) ?
- jQuery.clone( fragment, true, true ) :
- fragment
- );
- }
- }
-
- if ( scripts.length ) {
- jQuery.each( scripts, evalScript );
- }
- }
-
- return this;
- }
-});
-
-function root( elem, cur ) {
- return jQuery.nodeName(elem, "table") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var internalKey = jQuery.expando,
- oldData = jQuery.data( src ),
- curData = jQuery.data( dest, oldData );
-
- // Switch to use the internal data object, if it exists, for the next
- // stage of data copying
- if ( (oldData = oldData[ internalKey ]) ) {
- var events = oldData.events;
- curData = curData[ internalKey ] = jQuery.extend({}, oldData);
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( var type in events ) {
- for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
- }
- }
- }
- }
-}
-
-function cloneFixAttributes( src, dest ) {
- var nodeName;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // clearAttributes removes the attributes, which we don't want,
- // but also removes the attachEvent events, which we *do* want
- if ( dest.clearAttributes ) {
- dest.clearAttributes();
- }
-
- // mergeAttributes, in contrast, only merges back on the
- // original attributes, not the events
- if ( dest.mergeAttributes ) {
- dest.mergeAttributes( src );
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 fail to clone children inside object elements that use
- // the proprietary classid attribute value (rather than the type
- // attribute) to identify the type of content to display
- if ( nodeName === "object" ) {
- dest.outerHTML = src.outerHTML;
-
- } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
- if ( src.checked ) {
- dest.defaultChecked = dest.checked = src.checked;
- }
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-
- // Event data gets referenced instead of copied if the expando
- // gets copied too
- dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
- var fragment, cacheable, cacheresults,
- doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
-
- // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
- // Cloning options loses the selected state, so don't cache them
- // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
- // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
- if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
- args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
-
- cacheable = true;
-
- cacheresults = jQuery.fragments[ args[0] ];
- if ( cacheresults && cacheresults !== 1 ) {
- fragment = cacheresults;
- }
- }
-
- if ( !fragment ) {
- fragment = doc.createDocumentFragment();
- jQuery.clean( args, doc, fragment, scripts );
- }
-
- if ( cacheable ) {
- jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
- }
-
- return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var ret = [],
- insert = jQuery( selector ),
- parent = this.length === 1 && this[0].parentNode;
-
- if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
- insert[ original ]( this[0] );
- return this;
-
- } else {
- for ( var i = 0, l = insert.length; i < l; i++ ) {
- var elems = (i > 0 ? this.clone(true) : this).get();
- jQuery( insert[i] )[ original ]( elems );
- ret = ret.concat( elems );
- }
-
- return this.pushStack( ret, name, insert.selector );
- }
- };
-});
-
-function getAll( elem ) {
- if ( "getElementsByTagName" in elem ) {
- return elem.getElementsByTagName( "*" );
-
- } else if ( "querySelectorAll" in elem ) {
- return elem.querySelectorAll( "*" );
-
- } else {
- return [];
- }
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( elem.type === "checkbox" || elem.type === "radio" ) {
- elem.defaultChecked = elem.checked;
- }
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- fixDefaultChecked( elem );
- } else if ( elem.getElementsByTagName ) {
- jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var clone = elem.cloneNode(true),
- srcElements,
- destElements,
- i;
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
- // IE copies events bound via attachEvent when using cloneNode.
- // Calling detachEvent on the clone will also remove the events
- // from the original. In order to get around this, we use some
- // proprietary methods to clear the events. Thanks to MooTools
- // guys for this hotness.
-
- cloneFixAttributes( elem, clone );
-
- // Using Sizzle here is crazy slow, so we use getElementsByTagName
- // instead
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- // Weird iteration because IE will replace the length property
- // with an element if you are cloning the body and one of the
- // elements on the page has a name or id of "length"
- for ( i = 0; srcElements[i]; ++i ) {
- cloneFixAttributes( srcElements[i], destElements[i] );
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- cloneCopyEvent( elem, clone );
-
- if ( deepDataAndEvents ) {
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- for ( i = 0; srcElements[i]; ++i ) {
- cloneCopyEvent( srcElements[i], destElements[i] );
- }
- }
- }
-
- // Return the cloned set
- return clone;
- },
-
- clean: function( elems, context, fragment, scripts ) {
- var checkScriptType;
-
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" ) {
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
- }
-
- var ret = [];
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( typeof elem === "number" ) {
- elem += "";
- }
-
- if ( !elem ) {
- continue;
- }
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- if ( !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
- } else {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
- // Trim whitespace, otherwise indexOf won't work as expected
- var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
- wrap = wrapMap[ tag ] || wrapMap._default,
- depth = wrap[0],
- div = context.createElement("div");
-
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = rtbody.test(elem),
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
-
- for ( var j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
- }
-
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
- }
-
- elem = div.childNodes;
- }
- }
-
- // Resets defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- var len;
- if ( !jQuery.support.appendChecked ) {
- if ( elem[0] && typeof (len = elem.length) === "number" ) {
- for ( i = 0; i < len; i++ ) {
- findInputs( elem[i] );
- }
- } else {
- findInputs( elem );
- }
- }
-
- if ( elem.nodeType ) {
- ret.push( elem );
- } else {
- ret = jQuery.merge( ret, elem );
- }
- }
-
- if ( fragment ) {
- checkScriptType = function( elem ) {
- return !elem.type || rscriptType.test( elem.type );
- };
- for ( i = 0; ret[i]; i++ ) {
- if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
- scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
- } else {
- if ( ret[i].nodeType === 1 ) {
- var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
- ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
- }
- fragment.appendChild( ret[i] );
- }
- }
- }
-
- return ret;
- },
-
- cleanData: function( elems ) {
- var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
- deleteExpando = jQuery.support.deleteExpando;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- continue;
- }
-
- id = elem[ jQuery.expando ];
-
- if ( id ) {
- data = cache[ id ] && cache[ id ][ internalKey ];
-
- if ( data && data.events ) {
- for ( var type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
-
- // Null the DOM reference to avoid IE6/7/8 leak (#7054)
- if ( data.handle ) {
- data.handle.elem = null;
- }
- }
-
- if ( deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- delete cache[ id ];
- }
- }
- }
-});
-
-function evalScript( i, elem ) {
- if ( elem.src ) {
- jQuery.ajax({
- url: elem.src,
- async: false,
- dataType: "script"
- });
- } else {
- jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity=([^)]*)/,
- rdashAlpha = /-([a-z])/ig,
- // fixed for IE9, see #8346
- rupper = /([A-Z]|^ms)/g,
- rnumpx = /^-?\d+(?:px)?$/i,
- rnum = /^-?\d/,
- rrelNum = /^[+\-]=/,
- rrelNumFilter = /[^+\-\.\de]+/g,
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssWidth = [ "Left", "Right" ],
- cssHeight = [ "Top", "Bottom" ],
- curCSS,
-
- getComputedStyle,
- currentStyle,
-
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn.css = function( name, value ) {
- // Setting 'undefined' is a no-op
- if ( arguments.length === 2 && value === undefined ) {
- return this;
- }
-
- return jQuery.access( this, name, value, true, function( elem, name, value ) {
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- });
-};
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity", "opacity" );
- return ret === "" ? "1" : ret;
-
- } else {
- return elem.style.opacity;
- }
- }
- }
- },
-
- // Exclude the following css properties to add px
- cssNumber: {
- "zIndex": true,
- "fontWeight": true,
- "opacity": true,
- "zoom": true,
- "lineHeight": true,
- "widows": true,
- "orphans": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, origName = jQuery.camelCase( name ),
- style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
- name = jQuery.cssProps[ origName ] || origName;
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( type === "number" && isNaN( value ) || value == null ) {
- return;
- }
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && rrelNum.test( value ) ) {
- value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra ) {
- var ret, hooks;
-
- // Make sure that we're working with the right name
- name = jQuery.camelCase( name );
- hooks = jQuery.cssHooks[ name ];
- name = jQuery.cssProps[ name ] || name;
-
- // cssFloat needs a special treatment
- if ( name === "cssFloat" ) {
- name = "float";
- }
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
- return ret;
-
- // Otherwise, if a way to get the computed value exists, use that
- } else if ( curCSS ) {
- return curCSS( elem, name );
- }
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {};
-
- // Remember the old values, and insert the new ones
- for ( var name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- callback.call( elem );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
- },
-
- camelCase: function( string ) {
- return string.replace( rdashAlpha, fcamelCase );
- }
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- var val;
-
- if ( computed ) {
- if ( elem.offsetWidth !== 0 ) {
- val = getWH( elem, name, extra );
-
- } else {
- jQuery.swap( elem, cssShow, function() {
- val = getWH( elem, name, extra );
- });
- }
-
- if ( val <= 0 ) {
- val = curCSS( elem, name, name );
-
- if ( val === "0px" && currentStyle ) {
- val = currentStyle( elem, name, name );
- }
-
- if ( val != null ) {
- // Should return "auto" instead of 0, use 0 for
- // temporary backwards-compat
- return val === "" || val === "auto" ? "0px" : val;
- }
- }
-
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
-
- // Should return "auto" instead of 0, use 0 for
- // temporary backwards-compat
- return val === "" || val === "auto" ? "0px" : val;
- }
-
- return typeof val === "string" ? val : val + "px";
- }
- },
-
- set: function( elem, value ) {
- if ( rnumpx.test( value ) ) {
- // ignore negative width and height values #1599
- value = parseFloat(value);
-
- if ( value >= 0 ) {
- return value + "px";
- }
-
- } else {
- return value;
- }
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( parseFloat( RegExp.$1 ) / 100 ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle;
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // Set the alpha filter to set the opacity
- var opacity = jQuery.isNaN( value ) ?
- "" :
- "alpha(opacity=" + value * 100 + ")",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery(function() {
- // This hook cannot be added until DOM ready because the support test
- // for it is not run until after DOM ready
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- var ret;
- jQuery.swap( elem, { "display": "inline-block" }, function() {
- if ( computed ) {
- ret = curCSS( elem, "margin-right", "marginRight" );
- } else {
- ret = elem.style.marginRight;
- }
- });
- return ret;
- }
- };
- }
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
- getComputedStyle = function( elem, name ) {
- var ret, defaultView, computedStyle;
-
- name = name.replace( rupper, "-$1" ).toLowerCase();
-
- if ( !(defaultView = elem.ownerDocument.defaultView) ) {
- return undefined;
- }
-
- if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
- ret = computedStyle.getPropertyValue( name );
- if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
- ret = jQuery.style( elem, name );
- }
- }
-
- return ret;
- };
-}
-
-if ( document.documentElement.currentStyle ) {
- currentStyle = function( elem, name ) {
- var left,
- ret = elem.currentStyle && elem.currentStyle[ name ],
- rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
- style = elem.style;
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
- // Remember the original values
- left = style.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- elem.runtimeStyle.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : (ret || 0);
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
- var which = name === "width" ? cssWidth : cssHeight,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
-
- if ( extra === "border" ) {
- return val;
- }
-
- jQuery.each( which, function() {
- if ( !extra ) {
- val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
- }
-
- if ( extra === "margin" ) {
- val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
-
- } else {
- val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
- }
- });
-
- return val;
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- var width = elem.offsetWidth,
- height = elem.offsetHeight;
-
- return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rhash = /#.*$/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rquery = /\?/,
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
- rselectTextarea = /^(?:select|textarea)/i,
- rspacesAjax = /\s+/,
- rts = /([?&])_=[^&]*/,
- rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Document location
- ajaxLocation,
-
- // Document location segments
- ajaxLocParts;
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- if ( jQuery.isFunction( func ) ) {
- var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
- i = 0,
- length = dataTypes.length,
- dataType,
- list,
- placeBefore;
-
- // For each dataType in the dataTypeExpression
- for(; i < length; i++ ) {
- dataType = dataTypes[ i ];
- // We control if we're asked to add before
- // any existing element
- placeBefore = /^\+/.test( dataType );
- if ( placeBefore ) {
- dataType = dataType.substr( 1 ) || "*";
- }
- list = structure[ dataType ] = structure[ dataType ] || [];
- // then we add to the structure accordingly
- list[ placeBefore ? "unshift" : "push" ]( func );
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
- dataType /* internal */, inspected /* internal */ ) {
-
- dataType = dataType || options.dataTypes[ 0 ];
- inspected = inspected || {};
-
- inspected[ dataType ] = true;
-
- var list = structure[ dataType ],
- i = 0,
- length = list ? list.length : 0,
- executeOnly = ( structure === prefilters ),
- selection;
-
- for(; i < length && ( executeOnly || !selection ); i++ ) {
- selection = list[ i ]( options, originalOptions, jqXHR );
- // If we got redirected to another dataType
- // we try there if executing only and not done already
- if ( typeof selection === "string" ) {
- if ( !executeOnly || inspected[ selection ] ) {
- selection = undefined;
- } else {
- options.dataTypes.unshift( selection );
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, selection, inspected );
- }
- }
- }
- // If we're only executing or nothing was selected
- // we try the catchall dataType if not done already
- if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, "*", inspected );
- }
- // unnecessary when only executing (prefilters)
- // but it'll be ignored by the caller in that case
- return selection;
-}
-
-jQuery.fn.extend({
- load: function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
-
- // Don't do a request if no elements are being requested
- } else if ( !this.length ) {
- return this;
- }
-
- var off = url.indexOf( " " );
- if ( off >= 0 ) {
- var selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // Default to a GET request
- var type = "GET";
-
- // If the second parameter was provided
- if ( params ) {
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( typeof params === "object" ) {
- params = jQuery.param( params, jQuery.ajaxSettings.traditional );
- type = "POST";
- }
- }
-
- var self = this;
-
- // Request the remote document
- jQuery.ajax({
- url: url,
- type: type,
- dataType: "html",
- data: params,
- // Complete callback (responseText is used internally)
- complete: function( jqXHR, status, responseText ) {
- // Store the response as specified by the jqXHR object
- responseText = jqXHR.responseText;
- // If successful, inject the HTML into all the matched elements
- if ( jqXHR.isResolved() ) {
- // #4825: Get the actual response in case
- // a dataFilter is present in ajaxSettings
- jqXHR.done(function( r ) {
- responseText = r;
- });
- // See if a selector was specified
- self.html( selector ?
- // Create a dummy div to hold the results
- jQuery("<div>")
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append(responseText.replace(rscript, ""))
-
- // Locate the specified elements
- .find(selector) :
-
- // If not, just inject the full result
- responseText );
- }
-
- if ( callback ) {
- self.each( callback, [ responseText, status, jqXHR ] );
- }
- }
- });
-
- return this;
- },
-
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
-
- serializeArray: function() {
- return this.map(function(){
- return this.elements ? jQuery.makeArray( this.elements ) : this;
- })
- .filter(function(){
- return this.name && !this.disabled &&
- ( this.checked || rselectTextarea.test( this.nodeName ) ||
- rinput.test( this.type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val, i ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
- jQuery.fn[ o ] = function( f ){
- return this.bind( o, f );
- };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- type: method,
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- };
-});
-
-jQuery.extend({
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function ( target, settings ) {
- if ( !settings ) {
- // Only one parameter, we extend ajaxSettings
- settings = target;
- target = jQuery.extend( true, jQuery.ajaxSettings, settings );
- } else {
- // target was provided, we extend into it
- jQuery.extend( true, target, jQuery.ajaxSettings, settings );
- }
- // Flatten fields we don't want deep extended
- for( var field in { context: 1, url: 1 } ) {
- if ( field in settings ) {
- target[ field ] = settings[ field ];
- } else if( field in jQuery.ajaxSettings ) {
- target[ field ] = jQuery.ajaxSettings[ field ];
- }
- }
- return target;
- },
-
- ajaxSettings: {
- url: ajaxLocation,
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- type: "GET",
- contentType: "application/x-www-form-urlencoded",
- processData: true,
- async: true,
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- xml: "application/xml, text/xml",
- html: "text/html",
- text: "text/plain",
- json: "application/json, text/javascript",
- "*": "*/*"
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText"
- },
-
- // List of data converters
- // 1) key format is "source_type destination_type" (a single space in-between)
- // 2) the catchall symbol "*" can be used for source_type
- converters: {
-
- // Convert anything to text
- "* text": window.String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- }
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events
- // It's the callbackContext if one was provided in the options
- // and if it's a DOM node or a jQuery collection
- globalEventContext = callbackContext !== s &&
- ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
- jQuery( callbackContext ) : jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery._Deferred(),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // ifModified key
- ifModifiedKey,
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // Response headers
- responseHeadersString,
- responseHeaders,
- // transport
- transport,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // The jqXHR state
- state = 0,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Fake xhr
- jqXHR = {
-
- readyState: 0,
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( !state ) {
- var lname = name.toLowerCase();
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match === undefined ? null : match;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- statusText = statusText || "abort";
- if ( transport ) {
- transport.abort( statusText );
- }
- done( 0, statusText );
- return this;
- }
- };
-
- // Callback for when everything is done
- // It is defined here because jslint complains if it is declared
- // at the end of the function (which would be more logical and readable)
- function done( status, statusText, responses, headers ) {
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status ? 4 : 0;
-
- var isSuccess,
- success,
- error,
- response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
- lastModified,
- etag;
-
- // If successful, handle type chaining
- if ( status >= 200 && status < 300 || status === 304 ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
-
- if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
- jQuery.lastModified[ ifModifiedKey ] = lastModified;
- }
- if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
- jQuery.etag[ ifModifiedKey ] = etag;
- }
- }
-
- // If not modified
- if ( status === 304 ) {
-
- statusText = "notmodified";
- isSuccess = true;
-
- // If we have data
- } else {
-
- try {
- success = ajaxConvert( s, response );
- statusText = "success";
- isSuccess = true;
- } catch(e) {
- // We have a parsererror
- statusText = "parsererror";
- error = e;
- }
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if( !statusText || status ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = statusText;
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- // Attach deferreds
- deferred.promise( jqXHR );
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
- jqXHR.complete = completeDeferred.done;
-
- // Status-dependent callbacks
- jqXHR.statusCode = function( map ) {
- if ( map ) {
- var tmp;
- if ( state < 2 ) {
- for( tmp in map ) {
- statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
- }
- } else {
- tmp = map[ jqXHR.status ];
- jqXHR.then( tmp, tmp );
- }
- }
- return this;
- };
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // We also use the url parameter if available
- s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
- // Determine if a cross-domain request is in order
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefiler, stop there
- if ( state === 2 ) {
- return false;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
- }
-
- // Get ifModifiedKey before adding the anti-cache parameter
- ifModifiedKey = s.url;
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
-
- var ts = jQuery.now(),
- // try replacing _= if it is there
- ret = s.url.replace( rts, "$1_=" + ts );
-
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- ifModifiedKey = ifModifiedKey || s.url;
- if ( jQuery.lastModified[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
- }
- if ( jQuery.etag[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
- }
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already
- jqXHR.abort();
- return false;
-
- }
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout( function(){
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch (e) {
- // Propagate exception as error if not done
- if ( status < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- jQuery.error( e );
- }
- }
- }
-
- return jqXHR;
- },
-
- // Serialize an array of form elements or a set of
- // key/values into a query string
- param: function( a, traditional ) {
- var s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : value;
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( var prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
- }
-});
-
-function buildParams( prefix, obj, traditional, add ) {
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // If array item is non-scalar (array or object), encode its
- // numeric index to resolve deserialization ambiguity issues.
- // Note that rack (as of 1.0.0) can't currently deserialize
- // nested arrays properly, and attempting to do so may cause
- // a server error. Possible fixes are to modify rack's
- // deserialization algorithm or to provide an option or flag
- // to force array serialization to be shallow.
- buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && obj != null && typeof obj === "object" ) {
- // Serialize object item.
- for ( var name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var contents = s.contents,
- dataTypes = s.dataTypes,
- responseFields = s.responseFields,
- ct,
- type,
- finalDataType,
- firstDataType;
-
- // Fill responseXXX fields
- for( type in responseFields ) {
- if ( type in responses ) {
- jqXHR[ responseFields[type] ] = responses[ type ];
- }
- }
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
- // Apply the dataFilter if provided
- if ( s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- var dataTypes = s.dataTypes,
- converters = {},
- i,
- key,
- length = dataTypes.length,
- tmp,
- // Current and previous dataTypes
- current = dataTypes[ 0 ],
- prev,
- // Conversion expression
- conversion,
- // Conversion function
- conv,
- // Conversion functions (transitive conversion)
- conv1,
- conv2;
-
- // For each dataType in the chain
- for( i = 1; i < length; i++ ) {
-
- // Create converters map
- // with lowercased keys
- if ( i === 1 ) {
- for( key in s.converters ) {
- if( typeof key === "string" ) {
- converters[ key.toLowerCase() ] = s.converters[ key ];
- }
- }
- }
-
- // Get the dataTypes
- prev = current;
- current = dataTypes[ i ];
-
- // If current is auto dataType, update it to prev
- if( current === "*" ) {
- current = prev;
- // If no auto and dataTypes are actually different
- } else if ( prev !== "*" && prev !== current ) {
-
- // Get the converter
- conversion = prev + " " + current;
- conv = converters[ conversion ] || converters[ "* " + current ];
-
- // If there is no direct converter, search transitively
- if ( !conv ) {
- conv2 = undefined;
- for( conv1 in converters ) {
- tmp = conv1.split( " " );
- if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
- conv2 = converters[ tmp[1] + " " + current ];
- if ( conv2 ) {
- conv1 = converters[ conv1 ];
- if ( conv1 === true ) {
- conv = conv2;
- } else if ( conv2 === true ) {
- conv = conv1;
- }
- break;
- }
- }
- }
- }
- // If we found no converter, dispatch an error
- if ( !( conv || conv2 ) ) {
- jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
- }
- // If found converter is not an equivalence
- if ( conv !== true ) {
- // Convert with 1 or 2 converters accordingly
- response = conv ? conv( response ) : conv2( conv1(response) );
- }
- }
- }
- return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
- jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- return jQuery.expando + "_" + ( jsc++ );
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
- ( typeof s.data === "string" );
-
- if ( s.dataTypes[ 0 ] === "jsonp" ||
- s.jsonp !== false && ( jsre.test( s.url ) ||
- inspectData && jsre.test( s.data ) ) ) {
-
- var responseContainer,
- jsonpCallback = s.jsonpCallback =
- jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
- previous = window[ jsonpCallback ],
- url = s.url,
- data = s.data,
- replace = "$1" + jsonpCallback + "$2";
-
- if ( s.jsonp !== false ) {
- url = url.replace( jsre, replace );
- if ( s.url === url ) {
- if ( inspectData ) {
- data = data.replace( jsre, replace );
- }
- if ( s.data === data ) {
- // Add callback manually
- url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
- }
- }
- }
-
- s.url = url;
- s.data = data;
-
- // Install callback
- window[ jsonpCallback ] = function( response ) {
- responseContainer = [ response ];
- };
-
- // Clean-up function
- jqXHR.always(function() {
- // Set callback back to previous value
- window[ jsonpCallback ] = previous;
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( previous ) ) {
- window[ jsonpCallback ]( responseContainer[ 0 ] );
- }
- });
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( jsonpCallback + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /javascript|ecmascript/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement( "script" );
-
- script.async = "async";
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
-
- // Dereference the script
- script = undefined;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( 0, 1 );
- }
- }
- };
- }
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject ? function() {
- // Abort all pending requests
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( 0, 1 );
- }
- } : false,
- xhrId = 0,
- xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
- jQuery.extend( jQuery.support, {
- ajax: !!xhr,
- cors: !!xhr && ( "withCredentials" in xhr )
- });
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var xhr = s.xhr(),
- handle,
- i;
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( _ ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
-
- var status,
- statusText,
- responseHeaders,
- responses,
- xml;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occured
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
- responses = {};
- xml = xhr.responseXML;
-
- // Construct response list
- if ( xml && xml.documentElement /* #4958 */ ) {
- responses.xml = xml;
- }
- responses.text = xhr.responseText;
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- // if we're in sync mode or it's in cache
- // and has been retrieved directly (IE6 & IE7)
- // we need to manually fire the callback
- if ( !s.async || xhr.readyState === 4 ) {
- callback();
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback(0,1);
- }
- }
- };
- }
- });
-}
-
-
-
-
-var elemdisplay = {},
- iframe, iframeDoc,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
- timerId,
- fxAttrs = [
- // height animations
- [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
- // width animations
- [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
- // opacity animations
- [ "opacity" ]
- ],
- fxNow,
- requestAnimationFrame = window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame;
-
-jQuery.fn.extend({
- show: function( speed, easing, callback ) {
- var elem, display;
-
- if ( speed || speed === 0 ) {
- return this.animate( genFx("show", 3), speed, easing, callback);
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- elem = this[i];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
- display = elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
- jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- elem = this[i];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- if ( display === "" || display === "none" ) {
- elem.style.display = jQuery._data(elem, "olddisplay") || "";
- }
- }
- }
-
- return this;
- }
- },
-
- hide: function( speed, easing, callback ) {
- if ( speed || speed === 0 ) {
- return this.animate( genFx("hide", 3), speed, easing, callback);
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- if ( this[i].style ) {
- var display = jQuery.css( this[i], "display" );
-
- if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
- jQuery._data( this[i], "olddisplay", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- if ( this[i].style ) {
- this[i].style.display = "none";
- }
- }
-
- return this;
- }
- },
-
- // Save the old toggle function
- _toggle: jQuery.fn.toggle,
-
- toggle: function( fn, fn2, callback ) {
- var bool = typeof fn === "boolean";
-
- if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
- this._toggle.apply( this, arguments );
-
- } else if ( fn == null || bool ) {
- this.each(function() {
- var state = bool ? fn : jQuery(this).is(":hidden");
- jQuery(this)[ state ? "show" : "hide" ]();
- });
-
- } else {
- this.animate(genFx("toggle", 3), fn, fn2, callback);
- }
-
- return this;
- },
-
- fadeTo: function( speed, to, easing, callback ) {
- return this.filter(":hidden").css("opacity", 0).show().end()
- .animate({opacity: to}, speed, easing, callback);
- },
-
- animate: function( prop, speed, easing, callback ) {
- var optall = jQuery.speed(speed, easing, callback);
-
- if ( jQuery.isEmptyObject( prop ) ) {
- return this.each( optall.complete, [ false ] );
- }
-
- return this[ optall.queue === false ? "each" : "queue" ](function() {
- // XXX 'this' does not always have a nodeName when running the
- // test suite
-
- if ( optall.queue === false ) {
- jQuery._mark( this );
- }
-
- var opt = jQuery.extend({}, optall),
- isElement = this.nodeType === 1,
- hidden = isElement && jQuery(this).is(":hidden"),
- name, val, p,
- display, e,
- parts, start, end, unit;
-
- // will store per property easing and be used to determine when an animation is complete
- opt.animatedProperties = {};
-
- for ( p in prop ) {
-
- // property name normalization
- name = jQuery.camelCase( p );
- if ( p !== name ) {
- prop[ name ] = prop[ p ];
- delete prop[ p ];
- }
-
- val = prop[name];
-
- if ( val === "hide" && hidden || val === "show" && !hidden ) {
- return opt.complete.call(this);
- }
-
- if ( isElement && ( name === "height" || name === "width" ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height
- // animated
- if ( jQuery.css( this, "display" ) === "inline" &&
- jQuery.css( this, "float" ) === "none" ) {
- if ( !jQuery.support.inlineBlockNeedsLayout ) {
- this.style.display = "inline-block";
-
- } else {
- display = defaultDisplay(this.nodeName);
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( display === "inline" ) {
- this.style.display = "inline-block";
-
- } else {
- this.style.display = "inline";
- this.style.zoom = 1;
- }
- }
- }
- }
-
- // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
- opt.animatedProperties[name] = jQuery.isArray( val ) ?
- val[1]:
- opt.specialEasing && opt.specialEasing[name] || opt.easing || 'swing';
- }
-
- if ( opt.overflow != null ) {
- this.style.overflow = "hidden";
- }
-
- for ( p in prop ) {
- e = new jQuery.fx( this, opt, p );
-
- val = prop[p];
-
- if ( rfxtypes.test(val) ) {
- e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
-
- } else {
- parts = rfxnum.exec(val);
- start = e.cur();
-
- if ( parts ) {
- end = parseFloat( parts[2] );
- unit = parts[3] || ( jQuery.cssNumber[ name ] ? "" : "px" );
-
- // We need to compute starting value
- if ( unit !== "px" ) {
- jQuery.style( this, p, (end || 1) + unit);
- start = ((end || 1) / e.cur()) * start;
- jQuery.style( this, p, start + unit);
- }
-
- // If a +=/-= token was provided, we're doing a relative animation
- if ( parts[1] ) {
- end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
- }
-
- e.custom( start, end, unit );
-
- } else {
- e.custom( start, val, "" );
- }
- }
- }
-
- // For JS strict compliance
- return true;
- });
- },
-
- stop: function( clearQueue, gotoEnd ) {
- if ( clearQueue ) {
- this.queue([]);
- }
-
- this.each(function() {
- var timers = jQuery.timers,
- i = timers.length;
- // clear marker counters if we know they won't be
- if ( !gotoEnd ) {
- jQuery._unmark( true, this );
- }
- // go in reverse order so anything added to the queue during the loop is ignored
- while ( i-- ) {
- if ( timers[i].elem === this ) {
- if (gotoEnd) {
- // force the next step to be the last
- timers[i](true);
- }
-
- timers.splice(i, 1);
- }
- }
- });
-
- // start the next in the queue if the last step wasn't forced
- if ( !gotoEnd ) {
- this.dequeue();
- }
-
- return this;
- }
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout( clearFxNow, 0 );
- return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
- fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
- var obj = {};
-
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
- obj[ this ] = type;
- });
-
- return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show", 1),
- slideUp: genFx("hide", 1),
- slideToggle: genFx("toggle", 1),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.extend({
- speed: function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
-
- // Queueing
- opt.old = opt.complete;
- opt.complete = function( noUnmark ) {
- if ( opt.queue !== false ) {
- jQuery.dequeue( this );
- } else if ( noUnmark !== false ) {
- jQuery._unmark( this );
- }
-
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
- };
-
- return opt;
- },
-
- easing: {
- linear: function( p, n, firstNum, diff ) {
- return firstNum + diff * p;
- },
- swing: function( p, n, firstNum, diff ) {
- return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
- }
- },
-
- timers: [],
-
- fx: function( elem, options, prop ) {
- this.options = options;
- this.elem = elem;
- this.prop = prop;
-
- options.orig = options.orig || {};
- }
-
-});
-
-jQuery.fx.prototype = {
- // Simple function for setting a style value
- update: function() {
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
- },
-
- // Get the current size
- cur: function() {
- if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
- return this.elem[ this.prop ];
- }
-
- var parsed,
- r = jQuery.css( this.elem, this.prop );
- // Empty strings, null, undefined and "auto" are converted to 0,
- // complex values such as "rotate(1rad)" are returned as is,
- // simple values such as "10px" are parsed to Float.
- return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
- },
-
- // Start an animation from one number to another
- custom: function( from, to, unit ) {
- var self = this,
- fx = jQuery.fx,
- raf;
-
- this.startTime = fxNow || createFxNow();
- this.start = from;
- this.end = to;
- this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
- this.now = this.start;
- this.pos = this.state = 0;
-
- function t( gotoEnd ) {
- return self.step(gotoEnd);
- }
-
- t.elem = this.elem;
-
- if ( t() && jQuery.timers.push(t) && !timerId ) {
- // Use requestAnimationFrame instead of setInterval if available
- if ( requestAnimationFrame ) {
- timerId = 1;
- raf = function() {
- // When timerId gets set to null at any point, this stops
- if ( timerId ) {
- requestAnimationFrame( raf );
- fx.tick();
- }
- };
- requestAnimationFrame( raf );
- } else {
- timerId = setInterval( fx.tick, fx.interval );
- }
- }
- },
-
- // Simple 'show' function
- show: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
- this.options.show = true;
-
- // Begin the animation
- // Make sure that we start at a small width/height to avoid any
- // flash of content
- this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
-
- // Start by showing the element
- jQuery( this.elem ).show();
- },
-
- // Simple 'hide' function
- hide: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
- this.options.hide = true;
-
- // Begin the animation
- this.custom(this.cur(), 0);
- },
-
- // Each step of an animation
- step: function( gotoEnd ) {
- var t = fxNow || createFxNow(),
- done = true,
- elem = this.elem,
- options = this.options,
- i, n;
-
- if ( gotoEnd || t >= options.duration + this.startTime ) {
- this.now = this.end;
- this.pos = this.state = 1;
- this.update();
-
- options.animatedProperties[ this.prop ] = true;
-
- for ( i in options.animatedProperties ) {
- if ( options.animatedProperties[i] !== true ) {
- done = false;
- }
- }
-
- if ( done ) {
- // Reset the overflow
- if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
- jQuery.each( [ "", "X", "Y" ], function (index, value) {
- elem.style[ "overflow" + value ] = options.overflow[index];
- });
- }
-
- // Hide the element if the "hide" operation was done
- if ( options.hide ) {
- jQuery(elem).hide();
- }
-
- // Reset the properties, if the item has been hidden or shown
- if ( options.hide || options.show ) {
- for ( var p in options.animatedProperties ) {
- jQuery.style( elem, p, options.orig[p] );
- }
- }
-
- // Execute the complete function
- options.complete.call( elem );
- }
-
- return false;
-
- } else {
- // classical easing cannot be used with an Infinity duration
- if ( options.duration == Infinity ) {
- this.now = t;
- } else {
- n = t - this.startTime;
-
- this.state = n / options.duration;
- // Perform the easing function, defaults to swing
- this.pos = jQuery.easing[options.animatedProperties[this.prop]](this.state, n, 0, 1, options.duration);
- this.now = this.start + ((this.end - this.start) * this.pos);
- }
- // Perform the next step of the animation
- this.update();
- }
-
- return true;
- }
-};
-
-jQuery.extend( jQuery.fx, {
- tick: function() {
- var timers = jQuery.timers,
- i = timers.length;
- while ( i-- ) {
- if ( !timers[i]() ) {
- timers.splice(i, 1);
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- },
-
- interval: 13,
-
- stop: function() {
- clearInterval( timerId );
- timerId = null;
- },
-
- speeds: {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
- },
-
- step: {
- opacity: function( fx ) {
- jQuery.style( fx.elem, "opacity", fx.now );
- },
-
- _default: function( fx ) {
- if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
- fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
- } else {
- fx.elem[ fx.prop ] = fx.now;
- }
- }
- }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
- if ( !elemdisplay[ nodeName ] ) {
-
- var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
- display = elem.css( "display" );
-
- elem.remove();
-
- // If the simple way fails,
- // get element's real default display by attaching it to a temp iframe
- if ( display === "none" || display === "" ) {
- // No iframe to use yet, so create it
- if ( !iframe ) {
- iframe = document.createElement( "iframe" );
- iframe.frameBorder = iframe.width = iframe.height = 0;
- }
-
- document.body.appendChild( iframe );
-
- // Create a cacheable copy of the iframe document on first call.
- // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
- // document to it, Webkit & Firefox won't allow reusing the iframe document
- if ( !iframeDoc || !iframe.createElement ) {
- iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
- iframeDoc.write( "<!doctype><html><body></body></html>" );
- }
-
- elem = iframeDoc.createElement( nodeName );
-
- iframeDoc.body.appendChild( elem );
-
- display = jQuery.css( elem, "display" );
-
- document.body.removeChild( iframe );
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
- rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
- jQuery.fn.offset = function( options ) {
- var elem = this[0], box;
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- try {
- box = elem.getBoundingClientRect();
- } catch(e) {}
-
- var doc = elem.ownerDocument,
- docElem = doc.documentElement;
-
- // Make sure we're not dealing with a disconnected DOM node
- if ( !box || !jQuery.contains( docElem, elem ) ) {
- return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
- }
-
- var body = doc.body,
- win = getWindow(doc),
- clientTop = docElem.clientTop || body.clientTop || 0,
- clientLeft = docElem.clientLeft || body.clientLeft || 0,
- scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
- scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
- top = box.top + scrollTop - clientTop,
- left = box.left + scrollLeft - clientLeft;
-
- return { top: top, left: left };
- };
-
-} else {
- jQuery.fn.offset = function( options ) {
- var elem = this[0];
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- jQuery.offset.initialize();
-
- var computedStyle,
- offsetParent = elem.offsetParent,
- prevOffsetParent = elem,
- doc = elem.ownerDocument,
- docElem = doc.documentElement,
- body = doc.body,
- defaultView = doc.defaultView,
- prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
- top = elem.offsetTop,
- left = elem.offsetLeft;
-
- while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
- break;
- }
-
- computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
- top -= elem.scrollTop;
- left -= elem.scrollLeft;
-
- if ( elem === offsetParent ) {
- top += elem.offsetTop;
- left += elem.offsetLeft;
-
- if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevOffsetParent = offsetParent;
- offsetParent = elem.offsetParent;
- }
-
- if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevComputedStyle = computedStyle;
- }
-
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
- top += body.offsetTop;
- left += body.offsetLeft;
- }
-
- if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
- top += Math.max( docElem.scrollTop, body.scrollTop );
- left += Math.max( docElem.scrollLeft, body.scrollLeft );
- }
-
- return { top: top, left: left };
- };
-}
-
-jQuery.offset = {
- initialize: function() {
- var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
- html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-
- jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
-
- container.innerHTML = html;
- body.insertBefore( container, body.firstChild );
- innerDiv = container.firstChild;
- checkDiv = innerDiv.firstChild;
- td = innerDiv.nextSibling.firstChild.firstChild;
-
- this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
- this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
-
- checkDiv.style.position = "fixed";
- checkDiv.style.top = "20px";
-
- // safari subtracts parent border width here which is 5px
- this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
- checkDiv.style.position = checkDiv.style.top = "";
-
- innerDiv.style.overflow = "hidden";
- innerDiv.style.position = "relative";
-
- this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
-
- this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
-
- body.removeChild( container );
- jQuery.offset.initialize = jQuery.noop;
- },
-
- bodyOffset: function( body ) {
- var top = body.offsetTop,
- left = body.offsetLeft;
-
- jQuery.offset.initialize();
-
- if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
- top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
- left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
- }
-
- return { top: top, left: left };
- },
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if (options.top != null) {
- props.top = (options.top - curOffset.top) + curTop;
- }
- if (options.left != null) {
- props.left = (options.left - curOffset.left) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
- position: function() {
- if ( !this[0] ) {
- return null;
- }
-
- var elem = this[0],
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
- offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
- parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.body;
- while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
- var method = "scroll" + name;
-
- jQuery.fn[ method ] = function( val ) {
- var elem, win;
-
- if ( val === undefined ) {
- elem = this[ 0 ];
-
- if ( !elem ) {
- return null;
- }
-
- win = getWindow( elem );
-
- // Return the scroll offset
- return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
- jQuery.support.boxModel && win.document.documentElement[ method ] ||
- win.document.body[ method ] :
- elem[ method ];
- }
-
- // Set the scroll offset
- return this.each(function() {
- win = getWindow( this );
-
- if ( win ) {
- win.scrollTo(
- !i ? val : jQuery( win ).scrollLeft(),
- i ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- this[ method ] = val;
- }
- });
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-
-
-
-// Create innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
- var type = name.toLowerCase();
-
- // innerHeight and innerWidth
- jQuery.fn["inner" + name] = function() {
- return this[0] ?
- parseFloat( jQuery.css( this[0], type, "padding" ) ) :
- null;
- };
-
- // outerHeight and outerWidth
- jQuery.fn["outer" + name] = function( margin ) {
- return this[0] ?
- parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
- null;
- };
-
- jQuery.fn[ type ] = function( size ) {
- // Get window width or height
- var elem = this[0];
- if ( !elem ) {
- return size == null ? null : this;
- }
-
- if ( jQuery.isFunction( size ) ) {
- return this.each(function( i ) {
- var self = jQuery( this );
- self[ type ]( size.call( this, i, self[ type ]() ) );
- });
- }
-
- if ( jQuery.isWindow( elem ) ) {
- // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
- // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
- var docElemProp = elem.document.documentElement[ "client" + name ];
- return elem.document.compatMode === "CSS1Compat" && docElemProp ||
- elem.document.body[ "client" + name ] || docElemProp;
-
- // Get document width or height
- } else if ( elem.nodeType === 9 ) {
- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
- return Math.max(
- elem.documentElement["client" + name],
- elem.body["scroll" + name], elem.documentElement["scroll" + name],
- elem.body["offset" + name], elem.documentElement["offset" + name]
- );
-
- // Get or set width or height on the element
- } else if ( size === undefined ) {
- var orig = jQuery.css( elem, type ),
- ret = parseFloat( orig );
-
- return jQuery.isNaN( ret ) ? orig : ret;
-
- // Set the width or height on the element (default to pixels if value is unitless)
- } else {
- return this.css( type, typeof size === "string" ? size : size + "px" );
- }
- };
-
-});
-
-
-window.jQuery = window.$ = jQuery;
-})(window);
--- a/web/hdabo/static/hdabo/js/jquery.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon May 2 13:50:00 2011 -0400
- */
-(function(a,b){function cw(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function ct(a){if(!ch[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ci||(ci=c.createElement("iframe"),ci.frameBorder=ci.width=ci.height=0),c.body.appendChild(ci);if(!cj||!ci.createElement)cj=(ci.contentWindow||ci.contentDocument).document,cj.write("<!doctype><html><body></body></html>");b=cj.createElement(a),cj.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ci)}ch[a]=d}return ch[a]}function cs(a,b){var c={};f.each(cn.concat.apply([],cn.slice(0,b)),function(){c[this]=a});return c}function cr(){co=b}function cq(){setTimeout(cr,0);return co=f.now()}function cg(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cf(){try{return new a.XMLHttpRequest}catch(b){}}function b_(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function b$(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bZ(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):bZ(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bZ(a+"["+e+"]",b[e],c,d);else d(a,b)}function bY(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bY(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bY(a,c,d,e,"*",g));return l}function bX(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?bv:bw,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){name="data-"+c.replace(j,"$1-$2").toLowerCase(),d=a.getAttribute(name);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(e){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(c,d){d&&d instanceof e&&!(d instanceof a)&&(d=a(d));return e.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b,d,e,f,g,h,i,j,k,l,m,n,o,p,q;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",b=a.getElementsByTagName("*"),d=a.getElementsByTagName("a")[0];if(!b||!b.length||!d)return{};e=c.createElement("select"),f=e.appendChild(c.createElement("option")),g=a.getElementsByTagName("input")[0],i={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.55$/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:g.value==="on",optSelected:f.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},g.checked=!0,i.noCloneChecked=g.cloneNode(!0).checked,e.disabled=!0,i.optDisabled=!f.disabled;try{delete a.test}catch(r){i.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function click(){i.noCloneEvent=!1,a.detachEvent("onclick",click)}),a.cloneNode(!0).fireEvent("onclick")),g=c.createElement("input"),g.value="t",g.setAttribute("type","radio"),i.radioValue=g.value==="t",g.setAttribute("checked","checked"),a.appendChild(g),j=c.createDocumentFragment(),j.appendChild(a.firstChild),i.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",k=c.createElement("body"),l={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(p in l)k.style[p]=l[p];k.appendChild(a),c.documentElement.appendChild(k),i.appendChecked=g.checked,i.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,i.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",i.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",m=a.getElementsByTagName("td"),q=m[0].offsetHeight===0,m[0].style.display="",m[1].style.display="none",i.reliableHiddenOffsets=q&&m[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(h=c.createElement("div"),h.style.width="0",h.style.marginRight="0",a.appendChild(h),i.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(h,null).marginRight,10)||0)===0),k.innerHTML="",c.documentElement.removeChild(k);if(a.attachEvent)for(p in{submit:1,change:1,focusin:1})o="on"+p,q=o in a,q||(a.setAttribute(o,"return;"),q=typeof a[o]=="function"),i[p+"Bubbles"]=q;return i}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[c]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function l(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark";while(g--)if(tmp=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,tmp.done(l);l();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:data-|aria-)/,u=/\:/,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||"set"in c&&c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b=a.selectedIndex,c=[],d=a.options,e=a.type==="select-one";if(b<0)return null;for(var g=e?b:0,h=e?b+1:d.length;g<h;g++){var i=d[g];if(i.selected&&(f.support.optDisabled?!i.disabled:i.getAttribute("disabled")===null)&&(!i.parentNode.disabled||!f.nodeName(i.parentNode,"optgroup"))){value=f(i).val();if(e)return value;c.push(value)}}if(e&&!c.length&&d.length)return f(d[b]).val();return c},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex",readonly:"readOnly"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c]||(v&&(f.nodeName(a,"form")||u.test(c))?v:b);if(d!==b){if(d===null||d===!1&&!t.test(c)){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;d===!0&&!t.test(c)&&(d=c),a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.getAttribute("value");a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),f.support.getSetAttribute||(f.attrFix=f.extend(f.attrFix,{"for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}),v=f.attrHooks.name=f.attrHooks.value=f.valHooks.button={get:function(a,c){var d;if(c==="value"&&!f.nodeName(a,"button"))return a.getAttribute(c);d=a.getAttributeNode(c);return d&&d.specified?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=Object.prototype.hasOwnProperty,x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,f.event.handle.apply(this,arguments))}catch(d){}},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function J(a){var c=a.target,d,e;if(!!y.test(c.nodeName)&&!c.readOnly){d=f._data(c,"_change_data"),e=I(c),(a.type!=="focusout"||c.type!=="radio")&&f._data(c,"_change_data",e);if(d===b||e===d)return;if(d!=null||e)a.type="change",a.liveFired=b,f.event.trigger(a,arguments[1],c)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){return a.nodeName.toLowerCase()==="input"&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!be[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[];for(var i=0,j;(j=a[i])!=null;i++){typeof j=="number"&&(j+="");if(!j)continue;if(typeof j=="string")if(!ba.test(j))j=b.createTextNode(j);else{j=j.replace(Z,"<$1></$2>");var k=($.exec(j)||["",""])[1].toLowerCase(),l=be[k]||be._default,m=l[0],n=b.createElement("div");n.innerHTML=l[1]+j+l[2];while(m--)n=n.lastChild;if(!f.support.tbody){var o=_.test(j),p=k==="table"&&!o?n.firstChild&&n.firstChild.childNodes:l[1]==="<table>"&&!o?n.childNodes:[];for(var q=p.length-1;q>=0;--q)f.nodeName(p[q],"tbody")&&!p[q].childNodes.length&&p[q].parentNode.removeChild(p[q])}!f.support.leadingWhitespace&&Y.test(j)&&n.insertBefore(b.createTextNode(Y.exec(j)[0]),n.firstChild),j=n.childNodes}var r;if(!f.support.appendChecked)if(j[0]&&typeof (r=j.length)=="number")for(i=0;i<r;i++)bk(j[i]);else bk(j);j.nodeType?h.push(j):h=f.merge(h,j)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(i=0;h[i];i++)if(e&&f.nodeName(h[i],"script")&&(!h[i].type||h[i].type.toLowerCase()==="text/javascript"))e.push(h[i].parentNode?h[i].parentNode.removeChild(h[i]):h[i]);else{if(h[i].nodeType===1){var s=f.grep(h[i].getElementsByTagName("script"),g);h.splice.apply(h,[i+1,0].concat(s))}d.appendChild(h[i])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/-([a-z])/ig,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz,bA=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bo,bA)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bB(a,b,d):f.swap(a,bu,function(){e=bB(a,b,d)});if(e<=0){e=bx(a,b,b),e==="0px"&&bz&&(e=bz(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV;try{bU=e.href}catch(bW){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bX(bS),ajaxTransport:bX(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?b$(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b_(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bY(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bY(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bZ(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var ca=f.now(),cb=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+ca++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cb.test(b.url)||e&&cb.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cb,l),b.url===j&&(e&&(k=k.replace(cb,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cc=a.ActiveXObject?function(){for(var a in ce)ce[a](0,1)}:!1,cd=0,ce;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cf()||cg()}:cf,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cc&&delete ce[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cd,cc&&(ce||(ce={},f(a).unload(cc)),ce[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ch={},ci,cj,ck=/^(?:toggle|show|hide)$/,cl=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cm,cn=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],co,cp=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cs("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",ct(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cs("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cs("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g];if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=ct(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block")),b.animatedProperties[g]=f.isArray(h)?h[1]:b.specialEasing&&b.specialEasing[g]||b.easing||"swing"}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],ck.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cl.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[g]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cs("show",1),slideUp:cs("hide",1),slideToggle:cs("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=co||cq(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cm&&(cp?(cm=1,g=function(){cm&&(cp(g),e.tick())},cp(g)):cm=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=co||cq(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a=f.timers,b=a.length;while(b--)a[b]()||a.splice(b,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cm),cm=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cu=/^t(?:able|d|h)$/i,cv=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cw(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cu.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cv.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cv.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cw(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cw(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.nyroModal-ie6.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-/*
- * nyroModal v2.alpha
- * for IE6
- *
- */
-jQuery(function($,undefined){var $b=$('body'),$w=$(window),$h=$('html'),shown=0,zIndex=100;function isFullScreen(){return screen.height==$w.height()+58;};$b.append('<style type="text/css">'+'.nyroModalCloseButton{font-size: 1px}'+'.nyroModalLink .nyroModalPrev, .nyroModalDom .nyroModalPrev, .nyroModalForm .nyroModalPrev, .nyroModalFormFile .nyroModalPrev {left: -10px}'+'</style>');$.nmObj({_reposition:function(){var elts=this.elts.cont.find('.nmReposition');if(elts.length){var outer=this.getInternal()._getOuter($b),fs=isFullScreen();var space={top:-(fs?outer.h.border/2:0),left:-(fs?outer.w.border/2:0)};elts.each(function(){var me=$(this),offset=me.offset();me.css({top:offset.top-space.top,left:offset.left-space.left});});this.elts.cont.after(elts);}
-this.elts.cont.css('overflow','auto');}});$.nmInternal({_calculateFullSize:function(){var scrollHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),offsetHeight=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),scrollWidth=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),offsetWidth=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);this.fullSize={wW:$w.width(),wH:$w.height()};this.fullSize.h=scrollHeight<offsetHeight?$w.height():scrollHeight;this.fullSize.w=scrollWidth<offsetWidth?$w.width():scrollWidth;this.fullSize.viewW=Math.min(this.fullSize.w,this.fullSize.wW);this.fullSize.viewH=Math.min(this.fullSize.h,this.fullSize.wH);}});$.nmAnims({basic:{resize:function(nm,clb){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.css({width:nm.sizes.w,height:nm.sizes.h,top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2});clb();}},fade:{resize:function(nm,clb){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.animate({width:nm.sizes.w,height:nm.sizes.h,top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2},clb);}}});$.nmFilters({ie6:{is:function(){return true;},initElts:function(nm){nm.store.ie6=true;if(shown==0){$h.css({overflow:'hidden'});var w=$b.width(),h=$b.outerHeight(true)+'px';if($w.height()>=$b.outerHeight(true)){h=$w.height()+'px';}else
-w+=20;w+='px';$b.css({width:w,height:h,position:'static',overflow:'hidden'});}},beforeShowBg:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter($b);nm.elts.bg.css({position:'absolute',top:space.top,left:space.left,width:nm.getInternal().fullSize.viewW+200,height:nm.getInternal().fullSize.viewH+200});shown++;},afterHideBg:function(nm){if(nm.store.ie6){nm.store.ie6=false;shown--;}
-if(shown==0){$h.css({overflow:''});$b.css({width:'',height:'',position:'',overflow:''});}},size:function(nm){if(!nm._hasFilter('image')&&!nm._hasFilter('swf')){if(nm.sizes.h<250)nm.sizes.h=250;if(nm.sizes.w<250)nm.sizes.w=250;else if(nm.sizes.w>1000)nm.sizes.w=1000;}},close:function(nm){if(nm.store.ie6){nm.store.ie6=false;shown--;}},beforeShowLoad:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.load);nm.elts.load.css({'z-index':zIndex++,position:'absolute',top:space.top+(nm.getInternal().fullSize.viewH-nm.elts.load.height()-outer.h.margin)/2,left:space.left+(nm.getInternal().fullSize.viewW-nm.elts.load.width()-outer.w.margin)/2});},beforeShowCont:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.css({'z-index':zIndex++,position:'absolute',top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2});}}});});
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.nyroModal.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * nyroModal v2.0.0
- * Core
- *
- *
- * Included parts:
- * - anims.fade
- * - filters.title
- * - filters.gallery
- * - filters.link
- * - filters.dom
- * - filters.image
- * - filters.swf
- * - filters.form
- * - filters.formFile
- * - filters.iframe
- * - filters.iframeForm
- * - filters.embedly
- */
- jQuery(function($,undefined){var $w=$(window),$d=$(document),$b=$('body'),baseHref=$('base').attr('href'),_nmObj={filters:[],callbacks:{},loadFilter:undefined,modal:false,closeOnEscape:true,closeOnClick:true,useKeyHandler:false,showCloseButton:true,closeButton:'<a href="#" class="nyroModalClose nyroModalCloseButton nmReposition" title="close">Close</a>',stack:false,header:undefined,footer:undefined,galleryLoop:true,galleryCounts:true,ltr:true,imageRegex:'[^\.]\.(jpg|jpeg|png|tiff|gif|bmp)\s*$',selIndicator:'nyroModalSel',swf:{allowFullScreen:'true',allowscriptaccess:'always',wmode:'transparent'},store:{},errorMsg:'An error occured',elts:{all:undefined,bg:undefined,load:undefined,cont:undefined,hidden:undefined},sizes:{initW:undefined,initH:undefined,w:undefined,h:undefined,minW:undefined,minH:undefined,wMargin:undefined,hMargin:undefined},anim:{def:undefined,showBg:undefined,hideBg:undefined,showLoad:undefined,hideLoad:undefined,showCont:undefined,hideCont:undefined,showTrans:undefined,hideTrans:undefined,resize:undefined},_open:false,_bgReady:false,_opened:false,_loading:false,_animated:false,_transition:false,_nmOpener:undefined,_nbContentLoading:0,_scripts:'',_scriptsShown:'',saveObj:function(){this.opener.data('nmObj',this);},open:function(){this.getInternal()._pushStack(this.opener);this._opened=false;this._bgReady=false;this._open=true;this._initElts();this._load();this._nbContentLoading=0;this._callAnim('showBg',$.proxy(function(){this._bgReady=true;if(this._nmOpener){this._nmOpener._close();this._nmOpener._bgReady=false;this._nmOpener._loading=false;this._nmOpener._animated=false;this._nmOpener._opened=false;this._nmOpener._open=false;this._nmOpener.elts.cont=this._nmOpener.elts.hidden=this._nmOpener.elts.load=this._nmOpener.elts.bg=this._nmOpener.elts.all=undefined;this._nmOpener.saveObj();this._nmOpener=undefined;}this._contentLoading();},this));},resize:function(){this.sizes.w=this.sizes.initW;this.sizes.h=this.sizes.initH;this._unreposition();this.size();this._callAnim('resize',$.proxy(function(){this._reposition();},this));},size:function(){var maxHeight=this.getInternal().fullSize.viewH-this.sizes.hMargin,maxWidth=this.getInternal().fullSize.viewW-this.sizes.wMargin;if(this.sizes.minW&&this.sizes.minW>this.sizes.w)this.sizes.w=this.sizes.minW;if(this.sizes.minH&&this.sizes.minH>this.sizes.h)this.sizes.h=this.sizes.minH;if(this.sizes.h>maxHeight||this.sizes.w>maxWidth){this.sizes.h=Math.min(this.sizes.h,maxHeight);this.sizes.w=Math.min(this.sizes.w,maxWidth);}this._callFilters('size');},getForNewLinks:function(){var ret;if(this.stack){ret=$.extend(true,{},this);ret._nmOpener=undefined;ret.elts.all=undefined;}else{ret=$.extend({},this);ret._nmOpener=this;}ret.filters=[];ret.opener=undefined;ret._open=false;return ret;},keyHandle:function(e){this.keyEvent=e;this._callFilters('keyHandle');this.keyEvent=undefined;delete(this.keyEvent);},getInternal:function(){return _internal;},_close:function(){this.getInternal()._removeStack(this.opener);this._opened=false;this._open=false;this._callFilters('close');},close:function(){this._close();this._callFilters('beforeClose');var self=this;this._unreposition();self._callAnim('hideCont',function(){self._callAnim('hideLoad',function(){self._callAnim('hideBg',function(){self._callFilters('afterClose');self.elts.cont.remove();self.elts.hidden.remove();self.elts.load.remove();self.elts.bg.remove();self.elts.all.remove();self.elts.cont=self.elts.hidden=self.elts.load=self.elts.bg=self.elts.all=undefined;});});});},_initElts:function(){if(!this.stack&&this.getInternal().stack.length>1)this.elts=$(_internal.stack[_internal.stack.length-2]).data('nmObj').elts;if(!this.elts.all||this.elts.all.closest('body').length==0)this.elts.all=this.elts.bg=this.elts.cont=this.elts.hidden=this.elts.load=undefined;if(!this.elts.all)this.elts.all=$('<div />').appendTo(this.getInternal()._container);if(!this.elts.bg)this.elts.bg=$('<div />').hide().appendTo(this.elts.all);if(!this.elts.cont)this.elts.cont=$('<div />').hide().appendTo(this.elts.all);if(!this.elts.hidden)this.elts.hidden=$('<div />').hide().appendTo(this.elts.all);this.elts.hidden.empty();if(!this.elts.load)this.elts.load=$('<div />').hide().appendTo(this.elts.all);this._callFilters('initElts');},_error:function(){this._callFilters('error');},_setCont:function(html,selector){if(selector){var tmp=[],i=0;html=html .replace(/\r\n/gi,'nyroModalLN').replace(/<script(.|\s)*?\/script>/gi,function(x){tmp[i]=x;return '<pre class=nyroModalScript rel="'+(i++)+'"></pre>';});var cur=$('<div>'+html+'</div>').find(selector);if(cur.length){html=cur.html().replace(/<pre class="?nyroModalScript"? rel="?(.?)"?><\/pre>/gi,function(x,y,z){return tmp[y];}).replace(/nyroModalLN/gi,"\r\n");}else{this._error();return;}}this.elts.hidden .append(this._filterScripts(html)).prepend(this.header).append(this.footer).wrapInner('<div class="nyroModal'+ucfirst(this.loadFilter)+'" />');this.sizes.initW=this.sizes.w=this.elts.hidden.width();this.sizes.initH=this.sizes.h=this.elts.hidden.height();var outer=this.getInternal()._getOuter(this.elts.cont);this.sizes.hMargin=outer.h.total;this.sizes.wMargin=outer.w.total;this.size();this.loading=false;this._callFilters('filledContent');this._contentLoading();},_filterScripts:function(data){if(typeof data!='string')return data;this._scripts=[];this._scriptsShown=[];var start=0,stStart='<script',stEnd='</script>',endLn=stEnd.length,pos,pos2,tmp;while((pos=data.indexOf(stStart,start))>-1){pos2=data.indexOf(stEnd)+endLn;tmp=$(data.substring(pos,pos2));if(!tmp.attr('src')||tmp.attr('rel')=='forceLoad'){if(tmp.attr('rev')=='shown')this._scriptsShown.push(tmp.get(0));else this._scripts.push(tmp.get(0));}data=data.substring(0,pos)+data.substr(pos2);start=pos;}return data;},_hasFilter:function(filter){var ret=false;$.each(this.filters,function(i,f){ret=ret||f==filter;});return ret;},_delFilter:function(filter){this.filters=$.map(this.filters,function(v){if(v!=filter)return v;});},_callFilters:function(fct){this.getInternal()._debug(fct);var ret=[],self=this;$.each(this.filters,function(i,f){ret[f]=self._callFilter(f,fct);});if(this.callbacks[fct]&&$.isFunction(this.callbacks[fct]))this.callbacks[fct](this);return ret;},_callFilter:function(f,fct){if(_filters[f]&&_filters[f][fct]&&$.isFunction(_filters[f][fct]))return _filters[f][fct](this);return undefined;},_callAnim:function(fct,clb){this.getInternal()._debug(fct);this._callFilters('before'+ucfirst(fct));if(!this._animated){this._animated=true;if(!$.isFunction(clb))clb=$.noop;var set=this.anim[fct]||this.anim.def||'basic';if(!_animations[set]||!_animations[set][fct]||!$.isFunction(_animations[set][fct]))set='basic';_animations[set][fct](this,$.proxy(function(){this._animated=false;this._callFilters('after'+ucfirst(fct));clb();},this));}},_load:function(){this.getInternal()._debug('_load');if(!this.loading&&this.loadFilter){this.loading=true;this._callFilter(this.loadFilter,'load');}},_contentLoading:function(){if(!this._animated&&this._bgReady){if(!this._transition&&this.elts.cont.html().length>0)this._transition=true;this._nbContentLoading++;if(!this.loading){if(!this._opened){this._opened=true;if(this._transition){var fct=$.proxy(function(){this._writeContent();this._callFilters('beforeShowCont');this._callAnim('hideTrans',$.proxy(function(){this._transition=false;this.elts.cont.append(this._scriptsShown);this._reposition();this._callFilters('afterShowCont');},this));},this);if(this._nbContentLoading==1){this._unreposition();this._callAnim('showTrans',fct);}else{fct();}}else{this._callAnim('hideLoad',$.proxy(function(){this._writeContent();this._callAnim('showCont',$.proxy(function(){this.elts.cont.append(this._scriptsShown);this._reposition();},this));},this));}}}else if(this._nbContentLoading==1){var outer=this.getInternal()._getOuter(this.elts.load);this.elts.load .css({position:'fixed',top:(this.getInternal().fullSize.viewH-this.elts.load.height()-outer.h.margin)/2,left:(this.getInternal().fullSize.viewW-this.elts.load.width()-outer.w.margin)/2});if(this._transition){this._unreposition();this._callAnim('showTrans',$.proxy(function(){this._contentLoading();},this));}else{this._callAnim('showLoad',$.proxy(function(){this._contentLoading();},this));}}}},_writeContent:function(){this.elts.cont .empty().append(this.elts.hidden.contents()).append(this._scripts).append(this.showCloseButton?this.closeButton:'').css({position:'fixed',width:this.sizes.w,height:this.sizes.h,top:(this.getInternal().fullSize.viewH-this.sizes.h-this.sizes.hMargin)/2,left:(this.getInternal().fullSize.viewW-this.sizes.w-this.sizes.wMargin)/2});},_reposition:function(){var elts=this.elts.cont.find('.nmReposition');if(elts.length){var space=this.getInternal()._getSpaceReposition();elts.each(function(){var me=$(this),offset=me.offset();me.css({position:'fixed',top:offset.top-space.top,left:offset.left-space.left});});this.elts.cont.after(elts);}this.elts.cont.css('overflow','auto');},_unreposition:function(){this.elts.cont.css('overflow','');var elts=this.elts.all.find('.nmReposition');if(elts.length)this.elts.cont.append(elts.removeAttr('style'));}},_internal={firstInit:true,stack:[],fullSize:{w:0,h:0,wW:0,wH:0,viewW:0,viewH:0},nyroModal:function(opts,fullObj){if(_internal.firstInit){_internal._container=$('<div />').appendTo($b);$w.smartresize($.proxy(_internal._resize,_internal));$d.bind('keydown.nyroModal',$.proxy(_internal._keyHandler,_internal));_internal._calculateFullSize();_internal.firstInit=false;}return this.nmInit(opts,fullObj).each(function(){_internal._init($(this).data('nmObj'));});},nmInit:function(opts,fullObj){return this.each(function(){var me=$(this);if(fullObj)me.data('nmObj',$.extend(true,{opener:me},opts));else me.data('nmObj',me.data('nmObj')?$.extend(true,me.data('nmObj'),opts):$.extend(true,{opener:me},_nmObj,opts));});},nmCall:function(){return this.trigger('nyroModal');},nmManual:function(url,opts){$('<a />',{href:url}).nyroModal(opts).trigger('nyroModal');},nmObj:function(opts){$.extend(true,_nmObj,opts);},nmInternal:function(opts){$.extend(true,_internal,opts);},nmAnims:function(opts){$.extend(true,_animations,opts);},nmFilters:function(opts){$.extend(true,_filters,opts);},nmTop:function(){if(_internal.stack.length)return $(_internal.stack[_internal.stack.length-1]).data('nmObj');return undefined;},_debug:function(msg){if(window.console&&window.console.log)window.console.log(msg);},_container:undefined,_init:function(nm){nm.filters=[];$.each(_filters,function(f,obj){if($.isFunction(obj.is)&&obj.is(nm)){nm.filters.push(f);}});nm._callFilters('init');nm.opener .unbind('nyroModal.nyroModal nmClose.nyroModal nmResize.nyroModal').bind({'nyroModal.nyroModal':function(e){nm.open();return false;},'nmClose.nyroModal':function(){nm.close();return false;},'nmResize.nyroModal':function(){nm.resize();return false;}});},_scrollWidth:(function(){var scrollbarWidth;if($.browser.msie){var $textarea1=$('<textarea cols="10" rows="2"></textarea>').css({position:'absolute',top:-1000,left:-1000}).appendTo($b),$textarea2=$('<textarea cols="10" rows="2" style="overflow: hidden;"></textarea>').css({position:'absolute',top:-1000,left:-1000}).appendTo($b);scrollbarWidth=$textarea1.width()-$textarea2.width();$textarea1.add($textarea2).remove();}else{var $div=$('<div />').css({width:100,height:100,overflow:'auto',position:'absolute',top:-1000,left:-1000}).prependTo($b).append('<div />').find('div').css({width:'100%',height:200});scrollbarWidth=100-$div.width();$div.parent().remove();}return scrollbarWidth;})(),_selNyroModal:function(obj){return $(obj).data('nmObj')?true:false;},_selNyroModalOpen:function(obj){var me=$(obj);return me.data('nmObj')?me.data('nmObj')._open:false;},_keyHandler:function(e){var nmTop=$.nmTop();if(nmTop&&nmTop.useKeyHandler){return nmTop.keyHandle(e);}},_pushStack:function(obj){this.stack=$.map(this.stack,function(elA){if(elA!=obj.get(0))return elA;});this.stack.push(obj.get(0));},_removeStack:function(obj){this.stack=$.map(this.stack,function(elA){if(elA!=obj.get(0))return elA;});},_resize:function(){var opens=$(':nmOpen').each(function(){$(this).data('nmObj')._unreposition();});this._calculateFullSize();opens.trigger('nmResize');},_calculateFullSize:function(){this.fullSize={w:$d.width(),h:$d.height(),wW:$w.width(),wH:$w.height()};this.fullSize.viewW=Math.min(this.fullSize.w,this.fullSize.wW);this.fullSize.viewH=Math.min(this.fullSize.h,this.fullSize.wH);},_getCurCSS:function(elm,name){var ret=parseInt($.curCSS(elm,name,true));return isNaN(ret)?0:ret;},_getOuter:function(elm){elm=elm.get(0);var ret={h:{margin:this._getCurCSS(elm,'marginTop')+this._getCurCSS(elm,'marginBottom'),border:this._getCurCSS(elm,'borderTopWidth')+this._getCurCSS(elm,'borderBottomWidth'),padding:this._getCurCSS(elm,'paddingTop')+this._getCurCSS(elm,'paddingBottom')},w:{margin:this._getCurCSS(elm,'marginLeft')+this._getCurCSS(elm,'marginRight'),border:this._getCurCSS(elm,'borderLeftWidth')+this._getCurCSS(elm,'borderRightWidth'),padding:this._getCurCSS(elm,'paddingLeft')+this._getCurCSS(elm,'paddingRight')}};ret.h.outer=ret.h.margin+ret.h.border;ret.w.outer=ret.w.margin+ret.w.border;ret.h.inner=ret.h.padding+ret.h.border;ret.w.inner=ret.w.padding+ret.w.border;ret.h.total=ret.h.outer+ret.h.padding;ret.w.total=ret.w.outer+ret.w.padding;return ret;},_getSpaceReposition:function(){var outer=this._getOuter($b),ie7=$.browser.msie&&$.browser.version<8&&!(screen.height<=$w.height()+23);return{top:$w.scrollTop()-(!ie7?outer.h.border/2:0),left:$w.scrollLeft()-(!ie7?outer.w.border/2:0)};},_getHash:function(url){if(typeof url=='string'){var hashPos=url.indexOf('#');if(hashPos>-1)return url.substring(hashPos);}return '';},_extractUrl:function(url){var ret={url:undefined,sel:undefined};if(url){var hash=this._getHash(url),hashLoc=this._getHash(window.location.href),curLoc=window.location.href.substring(0,window.location.href.length-hashLoc.length),req=url.substring(0,url.length-hash.length);ret.sel=hash;if(req!=curLoc&&req!=baseHref)ret.url=req;}return ret;}},_animations={basic:{showBg:function(nm,clb){nm.elts.bg.css({opacity:0.7}).show();clb();},hideBg:function(nm,clb){nm.elts.bg.hide();clb();},showLoad:function(nm,clb){nm.elts.load.show();clb();},hideLoad:function(nm,clb){nm.elts.load.hide();clb();},showCont:function(nm,clb){nm.elts.cont.show();clb();},hideCont:function(nm,clb){nm.elts.cont.hide();clb();},showTrans:function(nm,clb){nm.elts.cont.hide();nm.elts.load.show();clb();},hideTrans:function(nm,clb){nm.elts.cont.show();nm.elts.load.hide();clb();},resize:function(nm,clb){nm.elts.cont.css({width:nm.sizes.w,height:nm.sizes.h,top:(nm.getInternal().fullSize.viewH-nm.sizes.h-nm.sizes.hMargin)/2,left:(nm.getInternal().fullSize.viewW-nm.sizes.w-nm.sizes.wMargin)/2});clb();}}},_filters={basic:{is:function(nm){return true;},init:function(nm){if(nm.opener.attr('rev')=='modal')nm.modal=true;if(nm.modal)nm.closeOnEscape=nm.closeOnClick=nm.showCloseButton=false;if(nm.closeOnEscape)nm.useKeyHandler=true;},initElts:function(nm){nm.elts.bg.addClass('nyroModalBg');if(nm.closeOnClick)nm.elts.bg.unbind('click.nyroModal').bind('click.nyroModal',function(e){e.preventDefault();nm.close();});nm.elts.cont.addClass('nyroModalCont');nm.elts.hidden.addClass('nyroModalCont nyroModalHidden');nm.elts.load.addClass('nyroModalCont nyroModalLoad');},error:function(nm){nm.elts.hidden.addClass('nyroModalError');nm.elts.cont.addClass('nyroModalError');nm._setCont(nm.errorMsg);},beforeShowCont:function(nm){nm.elts.cont .find('.nyroModal').nyroModal(nm.getForNewLinks(),true).end().find('.nyroModalClose').bind('click.nyroModal',function(e){e.preventDefault();nm.close();});},keyHandle:function(nm){if(nm.keyEvent.keyCode==27&&nm.closeOnEscape){nm.keyEvent.preventDefault();nm.close();}}},custom:{is:function(nm){return true;}}};$.fn.extend({nm:_internal.nyroModal,nyroModal:_internal.nyroModal,nmInit:_internal.nmInit,nmCall:_internal.nmCall});$.extend({nmManual:_internal.nmManual,nmObj:_internal.nmObj,nmInternal:_internal.nmInternal,nmAnims:_internal.nmAnims,nmFilters:_internal.nmFilters,nmTop:_internal.nmTop});$.expr[':'].nyroModal=$.expr[':'].nm=_internal._selNyroModal;$.expr[':'].nmOpen=_internal._selNyroModalOpen;});(function($,sr){var debounce=function(func,threshold,execAsap){var timeout;return function debounced(){var obj=this,args=arguments;function delayed(){if(!execAsap)func.apply(obj,args);timeout=null;};if(timeout)clearTimeout(timeout);else if(execAsap)func.apply(obj,args);timeout=setTimeout(delayed,threshold||100);};};jQuery.fn[sr]=function(fn){return fn?this.bind('resize',debounce(fn)):this.trigger(sr);};})(jQuery,'smartresize');function ucfirst(str){str+='';var f=str.charAt(0).toUpperCase();return f+str.substr(1);};
- jQuery(function($,undefined){$.nmAnims({fade:{showBg:function(nm,clb){nm.elts.bg.fadeTo(250,0.7,clb);},hideBg:function(nm,clb){nm.elts.bg.fadeOut(clb);},showLoad:function(nm,clb){nm.elts.load.fadeIn(clb);},hideLoad:function(nm,clb){nm.elts.load.fadeOut(clb);},showCont:function(nm,clb){nm.elts.cont.fadeIn(clb);},hideCont:function(nm,clb){nm.elts.cont.css('overflow','hidden').fadeOut(clb);},showTrans:function(nm,clb){nm.elts.load .css({position:nm.elts.cont.css('position'),top:nm.elts.cont.css('top'),left:nm.elts.cont.css('left'),width:nm.elts.cont.css('width'),height:nm.elts.cont.css('height'),marginTop:nm.elts.cont.css('marginTop'),marginLeft:nm.elts.cont.css('marginLeft')}).fadeIn(function(){nm.elts.cont.hide();clb();});},hideTrans:function(nm,clb){nm.elts.cont.css('visibility','hidden').show();nm.elts.load .css('position',nm.elts.cont.css('position')).animate({top:nm.elts.cont.css('top'),left:nm.elts.cont.css('left'),width:nm.elts.cont.css('width'),height:nm.elts.cont.css('height'),marginTop:nm.elts.cont.css('marginTop'),marginLeft:nm.elts.cont.css('marginLeft')},function(){nm.elts.cont.css('visibility','');nm.elts.load.fadeOut(clb);});},resize:function(nm,clb){nm.elts.cont.animate({width:nm.sizes.w,height:nm.sizes.h,top:(nm.getInternal().fullSize.viewH-nm.sizes.h-nm.sizes.hMargin)/2,left:(nm.getInternal().fullSize.viewW-nm.sizes.w-nm.sizes.wMargin)/2},clb);}}});$.nmObj({anim:{def:'fade'}});});;
- jQuery(function($,undefined){$.nmFilters({title:{is:function(nm){return nm.opener.is('[title]');},beforeShowCont:function(nm){var offset=nm.elts.cont.offset();nm.store.title=$('<h1 />',{text:nm.opener.attr('title')}).addClass('nyroModalTitle nmReposition');nm.elts.cont.prepend(nm.store.title);},close:function(nm){if(nm.store.title){nm.store.title.remove();nm.store.title=undefined;delete(nm.store.title);}}}});});;
- jQuery(function($,undefined){$.nmFilters({gallery:{is:function(nm){var ret=nm.opener.is('[rel]:not([rel=external], [rel=nofollow])');if(ret&&nm.galleryCounts&&!nm._hasFilter('title'))nm.filters.push('title');return ret;},init:function(nm){nm.useKeyHandler=true;},keyHandle:function(nm){if(!nm._animated&&nm._opened){if(nm.keyEvent.keyCode==39||nm.keyEvent.keyCode==40){nm.keyEvent.preventDefault();nm._callFilters('galleryNext');}else if(nm.keyEvent.keyCode==37||nm.keyEvent.keyCode==38){nm.keyEvent.preventDefault();nm._callFilters('galleryPrev');}}},initElts:function(nm){var rel=nm.opener.attr('rel'),indexSpace=rel.indexOf(' ');nm.store.gallery=indexSpace>0?rel.substr(0,indexSpace):rel;nm.store.galleryLinks=$('[href][rel="'+nm.store.gallery+'"], [href][rel^="'+nm.store.gallery+' "]');nm.store.galleryIndex=nm.store.galleryLinks.index(nm.opener);},beforeShowCont:function(nm){if(nm.galleryCounts&&nm.store.title&&nm.store.galleryLinks.length>1){var curTitle=nm.store.title.html();nm.store.title.html((curTitle.length?curTitle+' - ':'')+(nm.store.galleryIndex+1)+'/'+nm.store.galleryLinks.length);}},filledContent:function(nm){var link=this._getGalleryLink(nm,-1),append=nm.elts.hidden.find(' > div');if(link){$('<a />',{text:'previous',href:'#'}).addClass('nyroModalPrev').bind('click',function(e){e.preventDefault();nm._callFilters('galleryPrev');}).appendTo(append);}link=this._getGalleryLink(nm,1);if(link){$('<a />',{text:'next',href:'#'}).addClass('nyroModalNext').bind('click',function(e){e.preventDefault();nm._callFilters('galleryNext');}).appendTo(append);}},close:function(nm){nm.store.gallery=undefined;nm.store.galleryLinks=undefined;nm.store.galleryIndex=undefined;delete(nm.store.gallery);delete(nm.store.galleryLinks);delete(nm.store.galleryIndex);if(nm.elts.cont)nm.elts.cont.find('.nyroModalNext, .nyroModalPrev').remove();},galleryNext:function(nm){this._getGalleryLink(nm,1).nyroModal(nm.getForNewLinks(),true).click();},galleryPrev:function(nm){this._getGalleryLink(nm,-1).nyroModal(nm.getForNewLinks(),true).click();},_getGalleryLink:function(nm,dir){if(nm.store.gallery){if(!nm.ltr)dir *=-1;var index=nm.store.galleryIndex+dir;if(index>=0&&index<nm.store.galleryLinks.length)return nm.store.galleryLinks.eq(index);else if(nm.galleryLoop)return nm.store.galleryLinks.eq(index<0?nm.store.galleryLinks.length-1:0);}return undefined;}}});});;
- jQuery(function($,undefined){$.nmFilters({link:{is:function(nm){var ret=nm.opener.is('[href]');if(ret)nm.store.link=nm.getInternal()._extractUrl(nm.opener.attr('href'));return ret;},init:function(nm){nm.loadFilter='link';nm.opener.unbind('click.nyroModal').bind('click.nyroModal',function(e){e.preventDefault();nm.opener.trigger('nyroModal');});},load:function(nm){$.ajax({url:nm.store.link.url,data:nm.store.link.sel?[{name:nm.selIndicator,value:nm.store.link.sel.substring(1)}]:undefined,success:function(data){nm._setCont(data,nm.store.link.sel);},error:function(){nm._error();}});}}});});;
- jQuery(function($,undefined){$.nmFilters({dom:{is:function(nm){return nm._hasFilter('link')&&!nm.store.link.url&&nm.store.link.sel;},init:function(nm){nm.loadFilter='dom';},load:function(nm){nm.store.domEl=$(nm.store.link.sel);if(nm.store.domEl.length)nm._setCont(nm.store.domEl.contents());else nm._error();},close:function(nm){if(nm.store.domEl&&nm.elts.cont)nm.store.domEl.append(nm.elts.cont.find('.nyroModalDom').contents());}}});});;
- jQuery(function($,undefined){$.nmFilters({image:{is:function(nm){return(new RegExp(nm.imageRegex,'i')).test(nm.opener.attr('href'));},init:function(nm){nm.loadFilter='image';},load:function(nm){var url=nm.opener.attr('href');$('<img />').load(function(){nm.elts.cont.addClass('nyroModalImg');nm.elts.hidden.addClass('nyroModalImg');nm._setCont(this);}).error(function(){nm._error();}).attr('src',url);},size:function(nm){if(nm.sizes.w!=nm.sizes.initW||nm.sizes.h!=nm.sizes.initH){var ratio=Math.min(nm.sizes.w/nm.sizes.initW,nm.sizes.h/nm.sizes.initH);nm.sizes.w=nm.sizes.initW * ratio;nm.sizes.h=nm.sizes.initH * ratio;}var img=nm.loading?nm.elts.hidden.find('img'):nm.elts.cont.find('img');img.attr({width:nm.sizes.w,height:nm.sizes.h});},close:function(nm){if(nm.elts.cont){nm.elts.cont.removeClass('nyroModalImg');nm.elts.hidden.removeClass('nyroModalImg');}}}});});;
- jQuery(function($,undefined){$.nmFilters({swf:{is:function(nm){return nm._hasFilter('link')&&nm.opener.is('[href$=.swf]');},init:function(nm){nm.loadFilter='swf';},load:function(nm){var url=nm.store.link.url,cont='<div><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+nm.sizes.w+'" height="'+nm.sizes.h+'"><param name="movie" value="'+url+'"></param>',tmp='';$.each(nm.swf,function(name,val){cont+='<param name="'+name+'" value="'+val+'"></param>';tmp+=' '+name+'="'+val+'"';});cont+='<embed src="'+url+'" type="application/x-shockwave-flash" width="'+nm.sizes.w+'" height="'+nm.sizes.h+'"'+tmp+'></embed></object></div>';nm._setCont(cont);}}});});;
- jQuery(function($,undefined){$.nmFilters({form:{is:function(nm){var ret=nm.opener.is('form');if(ret)nm.store.form=nm.getInternal()._extractUrl(nm.opener.attr('action'));return ret;},init:function(nm){nm.loadFilter='form';nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){e.preventDefault();nm.opener.trigger('nyroModal');});},load:function(nm){var data=nm.opener.serializeArray();if(nm.store.form.sel)data.push({name:nm.selIndicator,value:nm.store.form.sel.substring(1)});$.ajax({url:nm.store.form.url,data:data,type:nm.opener.attr('method')?nm.opener.attr('method'):'get',success:function(data){nm._setCont(data,nm.store.form.sel);},error:function(){nm._error();}});}}});});;
- jQuery(function($,undefined){$.nmFilters({formFile:{is:function(nm){var ret=nm.opener.is('form[enctype="multipart/form-data"]');if(ret){nm._delFilter('form');if(!nm.store.form)nm.store.form=nm.getInternal()._extractUrl(nm.opener.attr('action'));}return ret;},init:function(nm){nm.loadFilter='formFile';nm.store.formFileLoading=false;nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){if(!nm.store.formFileIframe){e.preventDefault();nm.opener.trigger('nyroModal');}else{nm.store.formFileLoading=true;}});},initElts:function(nm){var inputSel;if(nm.store.form.sel)inputSel=$('<input />',{'type':'hidden',name:nm.selIndicator,value:nm.store.form.sel.substring(1)}).appendTo(nm.opener);function rmFormFileElts(){if(inputSel){inputSel.remove();inputSel=undefined;delete(inputSel);}nm.store.formFileIframe.attr('src','about:blank').remove();nm.store.formFileIframe=undefined;delete(nm.store.formFileIframe);}nm.store.formFileIframe=$('<iframe name="nyroModalFormFile" src="javascript:\'\';"></iframe>').hide().load(function(){if(nm.store.formFileLoading){nm.store.formFileLoading=false;var content=nm.store.formFileIframe .unbind('load error').contents().find('body').not('script[src]');if(content&&content.html()&&content.html().length){rmFormFileElts();nm._setCont(content.html(),nm.store.form.sel);}else{var nbTry=0;fct=function(){nbTry++;var content=nm.store.formFileIframe .unbind('load error').contents().find('body').not('script[src]');if(content&&content.html()&&content.html().length){nm._setCont(content.html(),nm.store.form.sel);rmFormFileElts();}else if(nbTry<5){setTimeout(fct,25);}else{rmFormFileElts();nm._error();}};setTimeout(fct,25);}}}).error(function(){rmIframe();nm._error();});nm.elts.all.append(nm.store.formFileIframe);nm.opener .attr('target','nyroModalFormFile').submit();},close:function(nm){nm.store.formFileLoading=false;if(nm.store.formFileIframe){nm.store.formFileIframe.remove();nm.store.formFileIframe=undefined;delete(nm.store.formFileIframe);}}}});});;
- jQuery(function($,undefined){$.nmFilters({iframe:{is:function(nm){var target=nm.opener.attr('target')||'',rel=nm.opener.attr('rel')||'',opener=nm.opener.get(0);return!nm._hasFilter('image')&&(target.toLowerCase()=='_blank'||rel.toLowerCase().indexOf('external')>-1||(opener.hostname&&opener.hostname.replace(/:\d*$/,'')!=window.location.hostname.replace(/:\d*$/,'')));},init:function(nm){nm.loadFilter='iframe';},load:function(nm){nm.store.iframe=$('<iframe src="javascript:\'\';"></iframe>');nm._setCont(nm.store.iframe);},afterShowCont:function(nm){nm.store.iframe.attr('src',nm.opener.attr('href'));},close:function(nm){if(nm.store.iframe){nm.store.iframe.remove();nm.store.iframe=undefined;delete(nm.store.iframe);}}}});});;
- jQuery(function($,undefined){$.nmFilters({iframeForm:{is:function(nm){var ret=nm._hasFilter('iframe')&&nm.opener.is('form');if(ret){nm._delFilter('iframe');nm._delFilter('form');}return ret;},init:function(nm){nm.loadFilter='iframeForm';nm.store.iframeFormLoading=false;nm.store.iframeFormOrgTarget=nm.opener.attr('target');nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){if(!nm.store.iframeFormIframe){e.preventDefault();nm.opener.trigger('nyroModal');}else{nm.store.iframeFormLoading=true;}});},load:function(nm){nm.store.iframeFormIframe=$('<iframe name="nyroModalIframeForm" src="javascript:\'\';"></iframe>');nm._setCont(nm.store.iframeFormIframe);},afterShowCont:function(nm){nm.opener .attr('target','nyroModalIframeForm').submit();},close:function(nm){nm.store.iframeFormOrgTarget?nm.opener.attr('target',nm.store.iframeFormOrgTarget):nm.opener.removeAttr('target');delete(nm.store.formFileLoading);delete(nm.store.iframeFormOrgTarget);if(nm.store.iframeFormIframe){nm.store.iframeFormIframe.remove();nm.store.iframeFormIframe=undefined;delete(nm.store.iframeFormIframe);}}}});});;
- jQuery(function($,undefined){$.nmFilters({embedly:{is:function(nm){var embedlyReg= /http:\/\/(.*youtube\.com\/watch.*|.*\.youtube\.com\/v\/.*|youtu\.be\/.*|.*\.youtube\.com\/user\/.*|.*\.youtube\.com\/.*#.*\/.*|m\.youtube\.com\/watch.*|m\.youtube\.com\/index.*|.*\.youtube\.com\/profile.*|.*justin\.tv\/.*|.*justin\.tv\/.*\/b\/.*|.*justin\.tv\/.*\/w\/.*|www\.ustream\.tv\/recorded\/.*|www\.ustream\.tv\/channel\/.*|www\.ustream\.tv\/.*|qik\.com\/video\/.*|qik\.com\/.*|qik\.ly\/.*|.*revision3\.com\/.*|.*\.dailymotion\.com\/video\/.*|.*\.dailymotion\.com\/.*\/video\/.*|www\.collegehumor\.com\/video:.*|.*twitvid\.com\/.*|www\.break\.com\/.*\/.*|vids\.myspace\.com\/index\.cfm\?fuseaction=vids\.individual&videoid.*|www\.myspace\.com\/index\.cfm\?fuseaction=.*&videoid.*|www\.metacafe\.com\/watch\/.*|www\.metacafe\.com\/w\/.*|blip\.tv\/file\/.*|.*\.blip\.tv\/file\/.*|video\.google\.com\/videoplay\?.*|.*revver\.com\/video\/.*|video\.yahoo\.com\/watch\/.*\/.*|video\.yahoo\.com\/network\/.*|.*viddler\.com\/explore\/.*\/videos\/.*|liveleak\.com\/view\?.*|www\.liveleak\.com\/view\?.*|animoto\.com\/play\/.*|dotsub\.com\/view\/.*|www\.overstream\.net\/view\.php\?oid=.*|www\.livestream\.com\/.*|www\.worldstarhiphop\.com\/videos\/video.*\.php\?v=.*|worldstarhiphop\.com\/videos\/video.*\.php\?v=.*|teachertube\.com\/viewVideo\.php.*|www\.teachertube\.com\/viewVideo\.php.*|www1\.teachertube\.com\/viewVideo\.php.*|www2\.teachertube\.com\/viewVideo\.php.*|bambuser\.com\/v\/.*|bambuser\.com\/channel\/.*|bambuser\.com\/channel\/.*\/broadcast\/.*|www\.schooltube\.com\/video\/.*\/.*|bigthink\.com\/ideas\/.*|bigthink\.com\/series\/.*|sendables\.jibjab\.com\/view\/.*|sendables\.jibjab\.com\/originals\/.*|www\.xtranormal\.com\/watch\/.*|dipdive\.com\/media\/.*|dipdive\.com\/member\/.*\/media\/.*|dipdive\.com\/v\/.*|.*\.dipdive\.com\/media\/.*|.*\.dipdive\.com\/v\/.*|.*yfrog\..*\/.*|tweetphoto\.com\/.*|www\.flickr\.com\/photos\/.*|flic\.kr\/.*|twitpic\.com\/.*|www\.twitpic\.com\/.*|twitpic\.com\/photos\/.*|www\.twitpic\.com\/photos\/.*|.*imgur\.com\/.*|.*\.posterous\.com\/.*|post\.ly\/.*|twitgoo\.com\/.*|i.*\.photobucket\.com\/albums\/.*|s.*\.photobucket\.com\/albums\/.*|phodroid\.com\/.*\/.*\/.*|www\.mobypicture\.com\/user\/.*\/view\/.*|moby\.to\/.*|xkcd\.com\/.*|www\.xkcd\.com\/.*|imgs\.xkcd\.com\/.*|www\.asofterworld\.com\/index\.php\?id=.*|www\.asofterworld\.com\/.*\.jpg|asofterworld\.com\/.*\.jpg|www\.qwantz\.com\/index\.php\?comic=.*|23hq\.com\/.*\/photo\/.*|www\.23hq\.com\/.*\/photo\/.*|.*dribbble\.com\/shots\/.*|drbl\.in\/.*|.*\.smugmug\.com\/.*|.*\.smugmug\.com\/.*#.*|emberapp\.com\/.*\/images\/.*|emberapp\.com\/.*\/images\/.*\/sizes\/.*|emberapp\.com\/.*\/collections\/.*\/.*|emberapp\.com\/.*\/categories\/.*\/.*\/.*|embr\.it\/.*|picasaweb\.google\.com.*\/.*\/.*#.*|picasaweb\.google\.com.*\/lh\/photo\/.*|picasaweb\.google\.com.*\/.*\/.*|dailybooth\.com\/.*\/.*|brizzly\.com\/pic\/.*|pics\.brizzly\.com\/.*\.jpg|img\.ly\/.*|www\.tinypic\.com\/view\.php.*|tinypic\.com\/view\.php.*|www\.tinypic\.com\/player\.php.*|tinypic\.com\/player\.php.*|www\.tinypic\.com\/r\/.*\/.*|tinypic\.com\/r\/.*\/.*|.*\.tinypic\.com\/.*\.jpg|.*\.tinypic\.com\/.*\.png|meadd\.com\/.*\/.*|meadd\.com\/.*|.*\.deviantart\.com\/art\/.*|.*\.deviantart\.com\/gallery\/.*|.*\.deviantart\.com\/#\/.*|fav\.me\/.*|.*\.deviantart\.com|.*\.deviantart\.com\/gallery|.*\.deviantart\.com\/.*\/.*\.jpg|.*\.deviantart\.com\/.*\/.*\.gif|.*\.deviantart\.net\/.*\/.*\.jpg|.*\.deviantart\.net\/.*\/.*\.gif|plixi\.com\/p\/.*|plixi\.com\/profile\/home\/.*|plixi\.com\/.*|www\.fotopedia\.com\/.*\/.*|fotopedia\.com\/.*\/.*|photozou\.jp\/photo\/show\/.*\/.*|photozou\.jp\/photo\/photo_only\/.*\/.*|instagr\.am\/p\/.*|skitch\.com\/.*\/.*\/.*|img\.skitch\.com\/.*|https:\/\/skitch\.com\/.*\/.*\/.*|https:\/\/img\.skitch\.com\/.*|share\.ovi\.com\/media\/.*\/.*|www\.questionablecontent\.net\/|questionablecontent\.net\/|www\.questionablecontent\.net\/view\.php.*|questionablecontent\.net\/view\.php.*|questionablecontent\.net\/comics\/.*\.png|www\.questionablecontent\.net\/comics\/.*\.png|picplz\.com\/user\/.*\/pic\/.*\/|twitrpix\.com\/.*|.*\.twitrpix\.com\/.*|www\.someecards\.com\/.*\/.*|someecards\.com\/.*\/.*|some\.ly\/.*|www\.some\.ly\/.*|pikchur\.com\/.*|achewood\.com\/.*|www\.achewood\.com\/.*|achewood\.com\/index\.php.*|www\.achewood\.com\/index\.php.*|www\.whitehouse\.gov\/photos-and-video\/video\/.*|www\.whitehouse\.gov\/video\/.*|wh\.gov\/photos-and-video\/video\/.*|wh\.gov\/video\/.*|www\.hulu\.com\/watch.*|www\.hulu\.com\/w\/.*|hulu\.com\/watch.*|hulu\.com\/w\/.*|.*crackle\.com\/c\/.*|www\.fancast\.com\/.*\/videos|www\.funnyordie\.com\/videos\/.*|www\.funnyordie\.com\/m\/.*|funnyordie\.com\/videos\/.*|funnyordie\.com\/m\/.*|www\.vimeo\.com\/groups\/.*\/videos\/.*|www\.vimeo\.com\/.*|vimeo\.com\/m\/#\/featured\/.*|vimeo\.com\/groups\/.*\/videos\/.*|vimeo\.com\/.*|vimeo\.com\/m\/#\/featured\/.*|www\.ted\.com\/talks\/.*\.html.*|www\.ted\.com\/talks\/lang\/.*\/.*\.html.*|www\.ted\.com\/index\.php\/talks\/.*\.html.*|www\.ted\.com\/index\.php\/talks\/lang\/.*\/.*\.html.*|.*nfb\.ca\/film\/.*|www\.thedailyshow\.com\/watch\/.*|www\.thedailyshow\.com\/full-episodes\/.*|www\.thedailyshow\.com\/collection\/.*\/.*\/.*|movies\.yahoo\.com\/movie\/.*\/video\/.*|movies\.yahoo\.com\/movie\/.*\/trailer|movies\.yahoo\.com\/movie\/.*\/video|www\.colbertnation\.com\/the-colbert-report-collections\/.*|www\.colbertnation\.com\/full-episodes\/.*|www\.colbertnation\.com\/the-colbert-report-videos\/.*|www\.comedycentral\.com\/videos\/index\.jhtml\?.*|www\.theonion\.com\/video\/.*|theonion\.com\/video\/.*|wordpress\.tv\/.*\/.*\/.*\/.*\/|www\.traileraddict\.com\/trailer\/.*|www\.traileraddict\.com\/clip\/.*|www\.traileraddict\.com\/poster\/.*|www\.escapistmagazine\.com\/videos\/.*|www\.trailerspy\.com\/trailer\/.*\/.*|www\.trailerspy\.com\/trailer\/.*|www\.trailerspy\.com\/view_video\.php.*|www\.atom\.com\/.*\/.*\/|fora\.tv\/.*\/.*\/.*\/.*|www\.spike\.com\/video\/.*|www\.gametrailers\.com\/video\/.*|gametrailers\.com\/video\/.*|www\.koldcast\.tv\/video\/.*|www\.koldcast\.tv\/#video:.*|techcrunch\.tv\/watch.*|techcrunch\.tv\/.*\/watch.*|mixergy\.com\/.*|video\.pbs\.org\/video\/.*|www\.zapiks\.com\/.*|tv\.digg\.com\/diggnation\/.*|tv\.digg\.com\/diggreel\/.*|tv\.digg\.com\/diggdialogg\/.*|www\.trutv\.com\/video\/.*|www\.nzonscreen\.com\/title\/.*|nzonscreen\.com\/title\/.*|app\.wistia\.com\/embed\/medias\/.*|https:\/\/app\.wistia\.com\/embed\/medias\/.*|www\.godtube\.com\/featured\/video\/.*|godtube\.com\/featured\/video\/.*|www\.godtube\.com\/watch\/.*|godtube\.com\/watch\/.*|www\.tangle\.com\/view_video.*|mediamatters\.org\/mmtv\/.*|www\.clikthrough\.com\/theater\/video\/.*|soundcloud\.com\/.*|soundcloud\.com\/.*\/.*|soundcloud\.com\/.*\/sets\/.*|soundcloud\.com\/groups\/.*|snd\.sc\/.*|www\.last\.fm\/music\/.*|www\.last\.fm\/music\/+videos\/.*|www\.last\.fm\/music\/+images\/.*|www\.last\.fm\/music\/.*\/_\/.*|www\.last\.fm\/music\/.*\/.*|www\.mixcloud\.com\/.*\/.*\/|www\.radionomy\.com\/.*\/radio\/.*|radionomy\.com\/.*\/radio\/.*|www\.entertonement\.com\/clips\/.*|www\.rdio\.com\/#\/artist\/.*\/album\/.*|www\.rdio\.com\/artist\/.*\/album\/.*|www\.zero-inch\.com\/.*|.*\.bandcamp\.com\/|.*\.bandcamp\.com\/track\/.*|.*\.bandcamp\.com\/album\/.*|freemusicarchive\.org\/music\/.*|www\.freemusicarchive\.org\/music\/.*|freemusicarchive\.org\/curator\/.*|www\.freemusicarchive\.org\/curator\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/templates\/story\/story\.php.*|huffduffer\.com\/.*\/.*|www\.audioboo\.fm\/boos\/.*|audioboo\.fm\/boos\/.*|boo\.fm\/b.*|www\.xiami\.com\/song\/.*|xiami\.com\/song\/.*|espn\.go\.com\/video\/clip.*|espn\.go\.com\/.*\/story.*|abcnews\.com\/.*\/video\/.*|abcnews\.com\/video\/playerIndex.*|washingtonpost\.com\/wp-dyn\/.*\/video\/.*\/.*\/.*\/.*|www\.washingtonpost\.com\/wp-dyn\/.*\/video\/.*\/.*\/.*\/.*|www\.boston\.com\/video.*|boston\.com\/video.*|www\.facebook\.com\/photo\.php.*|www\.facebook\.com\/video\/video\.php.*|www\.facebook\.com\/v\/.*|cnbc\.com\/id\/.*\?.*video.*|www\.cnbc\.com\/id\/.*\?.*video.*|cnbc\.com\/id\/.*\/play\/1\/video\/.*|www\.cnbc\.com\/id\/.*\/play\/1\/video\/.*|cbsnews\.com\/video\/watch\/.*|www\.google\.com\/buzz\/.*\/.*\/.*|www\.google\.com\/buzz\/.*|www\.google\.com\/profiles\/.*|google\.com\/buzz\/.*\/.*\/.*|google\.com\/buzz\/.*|google\.com\/profiles\/.*|www\.cnn\.com\/video\/.*|edition\.cnn\.com\/video\/.*|money\.cnn\.com\/video\/.*|today\.msnbc\.msn\.com\/id\/.*\/vp\/.*|www\.msnbc\.msn\.com\/id\/.*\/vp\/.*|www\.msnbc\.msn\.com\/id\/.*\/ns\/.*|today\.msnbc\.msn\.com\/id\/.*\/ns\/.*|multimedia\.foxsports\.com\/m\/video\/.*\/.*|msn\.foxsports\.com\/video.*|www\.globalpost\.com\/video\/.*|www\.globalpost\.com\/dispatch\/.*|.*amazon\..*\/gp\/product\/.*|.*amazon\..*\/.*\/dp\/.*|.*amazon\..*\/dp\/.*|.*amazon\..*\/o\/ASIN\/.*|.*amazon\..*\/gp\/offer-listing\/.*|.*amazon\..*\/.*\/ASIN\/.*|.*amazon\..*\/gp\/product\/images\/.*|www\.amzn\.com\/.*|amzn\.com\/.*|www\.shopstyle\.com\/browse.*|www\.shopstyle\.com\/action\/apiVisitRetailer.*|www\.shopstyle\.com\/action\/viewLook.*|gist\.github\.com\/.*|twitter\.com\/.*\/status\/.*|twitter\.com\/.*\/statuses\/.*|mobile\.twitter\.com\/.*\/status\/.*|mobile\.twitter\.com\/.*\/statuses\/.*|www\.crunchbase\.com\/.*\/.*|crunchbase\.com\/.*\/.*|www\.slideshare\.net\/.*\/.*|www\.slideshare\.net\/mobile\/.*\/.*|.*\.scribd\.com\/doc\/.*|screenr\.com\/.*|polldaddy\.com\/community\/poll\/.*|polldaddy\.com\/poll\/.*|answers\.polldaddy\.com\/poll\/.*|www\.5min\.com\/Video\/.*|www\.howcast\.com\/videos\/.*|www\.screencast\.com\/.*\/media\/.*|screencast\.com\/.*\/media\/.*|www\.screencast\.com\/t\/.*|screencast\.com\/t\/.*|issuu\.com\/.*\/docs\/.*|www\.kickstarter\.com\/projects\/.*\/.*|www\.scrapblog\.com\/viewer\/viewer\.aspx.*|ping\.fm\/p\/.*|chart\.ly\/.*|maps\.google\.com\/maps\?.*|maps\.google\.com\/\?.*|maps\.google\.com\/maps\/ms\?.*|.*\.craigslist\.org\/.*\/.*|my\.opera\.com\/.*\/albums\/show\.dml\?id=.*|my\.opera\.com\/.*\/albums\/showpic\.dml\?album=.*&picture=.*|tumblr\.com\/.*|.*\.tumblr\.com\/post\/.*|www\.polleverywhere\.com\/polls\/.*|www\.polleverywhere\.com\/multiple_choice_polls\/.*|www\.polleverywhere\.com\/free_text_polls\/.*|www\.quantcast\.com\/wd:.*|www\.quantcast\.com\/.*|siteanalytics\.compete\.com\/.*|statsheet\.com\/statplot\/charts\/.*\/.*\/.*\/.*|statsheet\.com\/statplot\/charts\/e\/.*|statsheet\.com\/.*\/teams\/.*\/.*|statsheet\.com\/tools\/chartlets\?chart=.*|.*\.status\.net\/notice\/.*|identi\.ca\/notice\/.*|brainbird\.net\/notice\/.*|shitmydadsays\.com\/notice\/.*|www\.studivz\.net\/Profile\/.*|www\.studivz\.net\/l\/.*|www\.studivz\.net\/Groups\/Overview\/.*|www\.studivz\.net\/Gadgets\/Info\/.*|www\.studivz\.net\/Gadgets\/Install\/.*|www\.studivz\.net\/.*|www\.meinvz\.net\/Profile\/.*|www\.meinvz\.net\/l\/.*|www\.meinvz\.net\/Groups\/Overview\/.*|www\.meinvz\.net\/Gadgets\/Info\/.*|www\.meinvz\.net\/Gadgets\/Install\/.*|www\.meinvz\.net\/.*|www\.schuelervz\.net\/Profile\/.*|www\.schuelervz\.net\/l\/.*|www\.schuelervz\.net\/Groups\/Overview\/.*|www\.schuelervz\.net\/Gadgets\/Info\/.*|www\.schuelervz\.net\/Gadgets\/Install\/.*|www\.schuelervz\.net\/.*|myloc\.me\/.*|pastebin\.com\/.*|pastie\.org\/.*|www\.pastie\.org\/.*|redux\.com\/stream\/item\/.*\/.*|redux\.com\/f\/.*\/.*|www\.redux\.com\/stream\/item\/.*\/.*|www\.redux\.com\/f\/.*\/.*|cl\.ly\/.*|cl\.ly\/.*\/content|speakerdeck\.com\/u\/.*\/p\/.*|www\.kiva\.org\/lend\/.*|www\.timetoast\.com\/timelines\/.*|storify\.com\/.*\/.*|.*meetup\.com\/.*|meetu\.ps\/.*|www\.dailymile\.com\/people\/.*\/entries\/.*|.*\.kinomap\.com\/.*|www\.metacdn\.com\/api\/users\/.*\/content\/.*|www\.metacdn\.com\/api\/users\/.*\/media\/.*|prezi\.com\/.*\/.*|.*\.uservoice\.com\/.*\/suggestions\/.*)/i;var ret=nm._hasFilter('link')&&nm.opener.attr('href')&&nm.opener.attr('href').match(embedlyReg)!==null;if(ret)nm._delFilter('iframe');return ret;},init:function(nm){nm.loadFilter='embedly';nm.store.embedly={};},load:function(nm){$.ajax({url:'http://api.embed.ly/1/oembed',dataType:'jsonp',data:'wmode=transparent&url='+nm.opener.attr('href'),success:function(data){if(data.type=='error')nm._error();else if(data.type=='photo'){nm.filters.push('image');$('<img />').load(function(){nm.elts.cont.addClass('nyroModalImg');nm.elts.hidden.addClass('nyroModalImg');nm._setCont(this);}).error(function(){nm._error();}).attr('src',data.url);}else{nm.store.embedly.w=data.width;nm.store.embedly.h=data.height;nm._setCont('<div>'+data.html+'</div>');}}});},size:function(nm){if(nm.store.embedly.w&&!nm.sizes.h){nm.sizes.w=nm.store.embedly.w;nm.sizes.h=nm.store.embedly.h;}}}});});;
--- a/web/hdabo/static/hdabo/js/jquery.qtip.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('"6t 6u";(j($){$(31).3x(j(){R i;$(2e).1J(\'3L 3E\',j(r){1V(i=0;i<$.18.g.O.Q;i++){R T=$.18.g.O[i];c(T&&T.V&&T.V.1b&&T.8.k.17!==\'29\'&&T.d.h.2r(\':28\')&&(T.8.k.1e.3E&&r.17===\'3E\'||T.8.k.1e.3L&&r.17===\'3L\')){T.2h(r,H)}}});$(31).1J(\'5j.g\',j(r){c($(r.s).5g(\'12.g\').Q===0){R h=$(\'.6w\'),T=h.g(\'T\');c(h.2r(\':28\')&&T&&T.V&&!T.V.23&&$(r.s).2m(T.d.s).Q>1){T.D(r)}}})});j 2D(w){c(!w){B p}A.x=5a(w).3l(/5x/i,\'1j\').5y(/M|25|1j/i)[0].2F();A.y=5a(w).3l(/5x/i,\'1j\').5y(/K|26|1j/i)[0].2F();A.1k={M:0,K:0};A.2y=(w.2H(0).6L(/^(t|b)/)>-1)?\'y\':\'x\';A.1w=j(){B(A.2y===\'y\')?A.y+A.x:A.x+A.y}}j 4t(w,o,G){R 1N={5B:[[0,0],[o,G],[o,0]],6a:[[0,0],[o,0],[0,G]],5K:[[0,G],[o,0],[o,G]],5N:[[0,0],[0,G],[o,G]],6y:[[0,G],[o/2,0],[o,G]],6v:[[0,0],[o,0],[o/2,G]],6i:[[0,0],[o,G/2],[0,G]],6J:[[o,0],[o,G],[0,G/2]]};1N.6M=1N.5B;1N.6z=1N.6a;1N.6x=1N.5K;1N.6C=1N.5N;B 1N[w]}j 4e(E){R 2j;c($(\'<1f />\').1q(0).1E){2j={3K:[E,E],40:[0,E],4I:[E,0],3P:[0,0]}}C c($.16.1d){2j={3K:[-2z,2z,0],40:[-2z,2z,-E],4I:[2z,5D,0],3P:[2z,5D,-E]}}B 2j}j 2G(e,4b){R 2U,i;2U=$.2p(H,{},e);1V(i 5R 2U){c(4b===H&&(/(f|1g)/i).1Y(i)){3z 2U[i]}C c(!4b&&(/(o|I|f|U|1g|4v)/i).1Y(i)){3z 2U[i]}}B 2U}j 4i(e){c(P e.f!==\'19\'){e.f={w:e.f}}c(P e.f.N!==\'19\'){e.f.N={o:e.f.N,G:e.f.N}}c(P e.I!==\'19\'){e.I={o:e.I}}c(P e.o!==\'19\'){e.o={2Z:e.o}}c(P e.o.1H===\'1w\'){e.o.1H=1A(e.o.1H.3l(/([0-9]+)/i,"$1"),10)}c(P e.o.2b===\'1w\'){e.o.2b=1A(e.o.2b.3l(/([0-9]+)/i,"$1"),10)}c(P e.f.N.x===\'2s\'){e.f.N.o=e.f.N.x;3z e.f.N.x}c(P e.f.N.y===\'2s\'){e.f.N.G=e.f.N.y;3z e.f.N.y}B e}j 4l(){R 7,i,3A,2v,1D,1P;7=A;3A=[H,{}];1V(i=0;i<3b.Q;i++){3A.5h(3b[i])}2v=[$.2p.4s($,3A)];6F(P 2v[0].21===\'1w\'){2v.5O(4i($.18.g.3c[2v[0].21]))}2v.5O(H,{1g:{h:\'g-\'+(3b[0].21||\'39\')}},$.18.g.3c.39);1D=$.2p.4s($,2v);1P=($.16.1d)?1:0;1D.f.N.o+=1P;1D.f.N.G+=1P;c(1D.f.N.o%2>0){1D.f.N.o+=1}c(1D.f.N.G%2>0){1D.f.N.G+=1}c(1D.f.w===H){c(7.8.k.w.h===\'1j\'&&7.8.k.w.s===\'1j\'){1D.f.w=p}C{1D.f.w=7.8.k.w.h}}B 1D}j 46(1f,X,E,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.3p(X[0],X[1],E,0,1u.6N*2,p);1n.5Y()}j 59(){R 7,i,o,E,J,X,1Q,N,4O,2k,3e,3i,4g,4q,4G;7=A;7.d.1t.1M(\'.g-3i, .g-3e\').3W();o=7.8.e.I.o;E=7.8.e.I.E;J=7.8.e.I.J||7.8.e.f.J;X=4e(E);1Q={};1V(i 5R X){1Q[i]=\'<12 1S="\'+i+\'" e="\'+((/6n/).1Y(i)?\'M\':\'25\')+\':0; \'+\'k:34; G:\'+E+\'1a; o:\'+E+\'1a; 2u:1F; 2S-G:0.1B; 2Y-N:1B">\';c($(\'<1f />\').1q(0).1E){1Q[i]+=\'<1f G="\'+E+\'" o="\'+E+\'" e="4Q-3o: K"></1f>\'}C c($.16.1d){N=E*2+3;1Q[i]+=\'<v:3p 6f="p" 3t="\'+J+\'" 6s="\'+X[i][0]+\'" 6r="\'+X[i][1]+\'" \'+\'e="o:\'+N+\'1a; G:\'+N+\'1a; 2q-K:\'+((/26/).1Y(i)?-2:-1)+\'1a; \'+\'2q-M:\'+((/6m/).1Y(i)?X[i][2]-3.5:-1)+\'1a; \'+\'4Q-3o:K; 2a:53-4E; 3I:1x(#2L#3R)"></v:3p>\'}1Q[i]+=\'</12>\'}4O=7.3d().o-(1u.1H(o,E)*2);2k=\'<12 1I="g-2k" e="G:\'+E+\'1a; o:\'+4O+\'1a; \'+\'2u:1F; 1s-J:\'+J+\'; 2S-G:0.1B; 2Y-N:1B;">\';3e=\'<12 1I="g-3e" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.3K+1Q.40+2k;7.d.1t.3B(3e);3i=\'<12 1I="g-3i" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.4I+1Q.3P+2k;7.d.1t.5s(3i);c($(\'<1f />\').1q(0).1E){7.d.1t.1M(\'1f\').1L(j(){4g=X[$(A).3O(\'[1S]:1R\').W(\'1S\')];46.S(7,$(A),4g,E,J)})}C c($.16.1d){7.d.h.5s(\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\')}4q=1u.1H(E,(E+(o-E)));4G=1u.1H(o-E,0);7.d.1y.F({I:\'6D 3q \'+J,6H:4G+\'1a \'+4q+\'1a\'})}j 4u(1f,X,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.6o(X[0][0],X[0][1]);1n.5Q(X[1][0],X[1][1]);1n.5Q(X[2][0],X[2][1]);1n.5Y()}j 42(w){R 7,1P,24,4n,4h,3Q;7=A;c(7.8.e.f.w===p||!7.d.f){B}c(!w){w=2T 2D(7.d.f.W(\'1S\'))}1P=24=($.16.1d)?1:0;7.d.f.F(w[w.2y],0);c(w.2y===\'y\'){c($.16.1d){c(1A($.16.2X.2H(0),10)===6){24=w.y===\'K\'?-3:1}C{24=w.y===\'K\'?1:2}}c(w.x===\'1j\'){7.d.f.F({M:\'50%\',6K:-(7.8.e.f.N.o/2)})}C c(w.x===\'M\'){7.d.f.F({M:7.8.e.I.E-1P})}C{7.d.f.F({25:7.8.e.I.E+1P})}c(w.y===\'K\'){7.d.f.F({K:-24})}C{7.d.f.F({26:24})}}C{c($.16.1d){24=(1A($.16.2X.2H(0),10)===6)?1:(w.x===\'M\'?1:2)}c(w.y===\'1j\'){7.d.f.F({K:\'50%\',49:-(7.8.e.f.N.G/2)})}C c(w.y===\'K\'){7.d.f.F({K:7.8.e.I.E-1P})}C{7.d.f.F({26:7.8.e.I.E+1P})}c(w.x===\'M\'){7.d.f.F({M:-24})}C{7.d.f.F({25:24})}}4n=\'2x-\'+w[w.2y];4h=7.8.e.f.N[w.2y===\'x\'?\'o\':\'G\'];7.d.h.F(\'2x\',0).F(4n,4h);c($.16.1d&&1A($.16.2X.2H(0),6)===6){3Q=1A(7.d.f.F(\'2q-K\'),10)||0;3Q+=1A(7.d.u.F(\'2q-K\'),10)||0;7.d.f.F({49:3Q})}}j 44(w){R 7,J,X,3J,2o,f;7=A;c(7.d.f!==1z){7.d.f.3W()}J=7.8.e.f.J||7.8.e.I.J;c(7.8.e.f.w===p){B}C c(!w){w=2T 2D(7.8.e.f.w)}X=4t(w.1w(),7.8.e.f.N.o,7.8.e.f.N.G);7.d.f=\'<12 1I="\'+7.8.e.1g.f+\'" 4k="4f" 1S="\'+w.1w()+\'" e="k:34; \'+\'G:\'+7.8.e.f.N.G+\'1a; o:\'+7.8.e.f.N.o+\'1a; \'+\'2q:0 6e; 2S-G:0.1B; 2Y-N:1B;"></12>\';7.d.h.3B(7.d.f);c($(\'<1f />\').1q(0).1E){f=\'<1f G="\'+7.8.e.f.N.G+\'" o="\'+7.8.e.f.N.o+\'"></1f>\'}C c($.16.1d){3J=7.8.e.f.N.o+\',\'+7.8.e.f.N.G;2o=\'m\'+X[0][0]+\',\'+X[0][1];2o+=\' l\'+X[1][0]+\',\'+X[1][1];2o+=\' \'+X[2][0]+\',\'+X[2][1];2o+=\' 6I\';f=\'<v:3M 3t="\'+J+\'" 6f="p" 6p="H" 2o="\'+2o+\'" 3J="\'+3J+\'" \'+\'e="o:\'+7.8.e.f.N.o+\'1a; G:\'+7.8.e.f.N.G+\'1a; \'+\'2S-G:0.1B; 2a:53-4E; 3I:1x(#2L#3R); \'+\'4Q-3o:\'+(w.y===\'K\'?\'26\':\'K\')+\'"></v:3M>\';f+=\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\';7.d.1y.F(\'k\',\'4y\')}7.d.f=7.d.h.1M(\'.\'+7.8.e.1g.f).6B(0);7.d.f.2l(f);c($(\'<1f />\').1q(0).1E){4u.S(7,7.d.f.1M(\'1f:1R\'),X,J)}c(w.y===\'K\'&&$.16.1d&&1A($.16.2X.2H(0),10)===6){7.d.f.F({49:-4})}42.S(7,w)}j 5b(){R 7=A;c(7.d.U!==1z){7.d.U.3W()}7.d.h.W(\'3r-6E\',\'g-\'+7.11+\'-U\');7.d.U=$(\'<12 11="g-\'+7.11+\'-U" 1I="\'+7.8.e.1g.U+\'"></12>\').F(2G(7.8.e.U,H)).F({2f:($.16.1d)?1:0}).58(7.d.1y);c(7.8.u.U.1m){7.5W.S(7,7.8.u.U.1m)}c(7.8.u.U.1i!==p&&P 7.8.u.U.1i===\'1w\'){7.d.1i=$(\'<a 1I="\'+7.8.e.1g.1i+\'" 5e="1i" e="6G:25; k: 4y"></a>\').F(2G(7.8.e.1i,H)).2l(7.8.u.U.1i).58(7.d.U).5d(j(r){c(!7.V.23){7.D(r)}})}}j 5l(){R 7,3h,2i,3u;7=A;3h=7.8.q.L.s;2i=7.8.D.L.s;c(7.8.D.3g){2i=2i.2m(7.d.h)}3u=[\'5d\',\'6h\',\'6k\',\'6j\',\'4C\',\'4x\',\'5j\',\'6l\',\'35\'];j 3v(r){c(7.V.23===H){B}2g(7.1G.1W);7.1G.1W=4M(j(){$(3u).1L(j(){2i.1O(A+\'.g-1W\');7.d.u.1O(A+\'.g-1W\')});7.D(r)},7.8.D.2V)}c(7.8.D.3g===H){7.d.h.1J(\'35.g\',j(){c(7.V.23===H){B}2g(7.1G.D)})}j 4S(r){c(7.V.23===H){B}c(7.8.D.L.r===\'1W\'){$(3u).1L(j(){2i.1J(A+\'.g-1W\',3v);7.d.u.1J(A+\'.g-1W\',3v)});3v()}2g(7.1G.q);2g(7.1G.D);c(7.8.q.2V>0){7.1G.q=4M(j(){7.q(r)},7.8.q.2V)}C{7.q(r)}}j 4P(r){c(7.V.23===H){B}c(7.8.D.3g===H&&(/1K(6q|6A)/i).1Y(7.8.D.L.r)&&$(r.70).5g(\'12.g[11^="g"]\').Q>0){r.7L();r.7K();2g(7.1G.D);B p}2g(7.1G.q);2g(7.1G.D);7.d.h.3S(H,H);7.1G.D=4M(j(){7.D(r)},7.8.D.2V)}c(7.8.k.s===\'1K\'&&7.8.k.17!==\'29\'){3h.1J(\'4C.g\',j(r){7.1v.1K={M:r.3Y,K:r.4c};c(7.V.23===p&&7.8.k.1e.1K===H&&7.8.k.17!==\'29\'&&7.d.h.F(\'2a\')!==\'3a\'){7.2h(r)}})}c((7.8.q.L.s.2m(7.8.D.L.s).Q===1&&7.8.q.L.r===7.8.D.L.r&&7.8.D.L.r!==\'1W\')||7.8.D.L.r===\'4R\'){7.1v.2I=0;3h.1J(7.8.q.L.r+\'.g\',j(r){c(7.1v.2I===0){4S(r)}C{4P(r)}})}C{3h.1J(7.8.q.L.r+\'.g\',4S);c(7.8.D.L.r!==\'1W\'){2i.1J(7.8.D.L.r+\'.g\',4P)}}c((/(3g|34)/).1Y(7.8.k.17)){7.d.h.1J(\'35.g\',7.2E)}}j 22(){R 7,2l,2t;7=A;2t=7.3d();2l=\'<7J 1I="g-22" 7I="0" 7M="-1" 4T="7N:p" \'+\'e="2a:4E; k:34; z-3s:-1; 5m:7R(2B=\\\'0\\\'); I: 1B 3q 4H; \'+\'G:\'+2t.G+\'1a; o:\'+2t.o+\'1a" />\';7.d.22=7.d.1t.3B(2l).2w(\'.g-22:1R\')}j 4w(){R 7,u,1x,Y,2A;7=A;7.5J.S(7);7.V.1b=2;7.d.h=\'<12 g="\'+7.11+\'" 11="g-\'+7.11+\'" 5e="h" \'+\'3r-7Q="g-\'+7.11+\'-u" 1I="g \'+(7.8.e.1g.h||7.8.e)+\'" \'+\'e="2a:3a; -7P-I-E:0; -7O-I-E:0; I-E:0; k:\'+7.8.k.17+\';"> \'+\' <12 1I="g-1t" e="k:4y; 2u:1F; 1m-3o:M;"> \'+\' <12 1I="g-1y" e="2u:1F;"> \'+\' <12 11="g-\'+7.11+\'-u" 1I="g-u \'+7.8.e.1g.u+\'"></12> \'+\'</12></12></12>\';7.d.h=$(7.d.h);7.d.h.5P(7.8.k.3U);7.d.h.Y(\'g\',{3k:0,O:[7]});7.d.1t=7.d.h.2w(\'12:1R\');7.d.1y=7.d.1t.2w(\'12:1R\');7.d.u=7.d.1y.2w(\'12:1R\').F(2G(7.8.e));c($.16.1d){7.d.1t.2m(7.d.u).F({2f:1})}c(7.8.D.L.r===\'4R\'){7.d.h.W(\'4R\',H)}c(P 7.8.e.o.2Z===\'2s\'){7.4d()}c($(\'<1f />\').1q(0).1E||$.16.1d){c(7.8.e.I.E>0){59.S(7)}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J})}c(7.8.e.f.w!==p){44.S(7)}}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J});7.8.e.I.E=0;7.8.e.f.w=p}c((P 7.8.u.1m===\'1w\'&&7.8.u.1m.Q>0)||(7.8.u.1m.4r&&7.8.u.1m.Q>0)){u=7.8.u.1m}C{u=\' \'}c(7.8.u.U.1m!==p){5b.S(7)}7.4A(u,p);5l.S(7);c(7.8.q.3x===H){7.q()}c(7.8.u.1x!==p){1x=7.8.u.1x;Y=7.8.u.Y;2A=7.8.u.2A||\'1q\';7.5Z(1x,Y,2A)}7.V.1b=H;7.5f.S(7)}j 56(s,8,11){R 7=A;7.11=11;7.8=8;7.V={4j:p,1b:p,23:p,3Z:p};7.d={s:s.5v(7.8.e.1g.s),h:1z,1t:1z,u:1z,1y:1z,U:1z,1i:1z,f:1z,22:1z};7.1v={W:p,1K:{},2I:0,2u:{M:p,K:p}};7.1G={};$.2p(7,7.8.T,{q:j(r){R 1c,1X;c(!7.V.1b){B p}c(7.d.h.F(\'2a\')!==\'3a\'){B 7}7.d.h.3S(H,p);1c=7.5n.S(7,r);c(1c===p){B 7}j 2M(){7.d.h.W(\'3r-1F\',H);c(7.8.k.17!==\'29\'){7.2E()}7.5q.S(7,r);c($.16.1d){R 4a=7.d.h.1q(0).e;4a.43(\'5m\');4a.43(\'2B\')}C{7.d.h.F({2B:\'\'})}}7.1v.2I=1;c(7.8.k.17!==\'29\'){7.2h(r,(7.8.q.Z.Q>0&&7.1b!==2))}c(P 7.8.q.1X===\'19\'){1X=$(7.8.q.1X)}C c(7.8.q.1X===H){1X=$(\'12.g\').5S(7.d.h)}c(1X){1X.1L(j(){c($(A).g(\'T\').V.1b===H){$(A).g(\'T\').D()}})}c(P 7.8.q.Z.17===\'j\'){7.8.q.Z.17.S(7.d.h,7.8.q.Z.Q);7.d.h.5u(j(){2M();$(A).5t()})}C{4N(7.8.q.Z.17.2F()){1Z\'3w\':7.d.h.7H(7.8.q.Z.Q,2M);1C;1Z\'5o\':7.d.h.7G(7.8.q.Z.Q,j(){2M();c(7.8.k.17!==\'29\'){7.2h(r,H)}});1C;1Z\'5p\':7.d.h.q(7.8.q.Z.Q,2M);1C;2L:7.d.h.q(1z,2M);1C}7.d.h.5v(7.8.e.1g.3T)}B 7},D:j(r){R 1c;c(!7.V.1b){B p}C c(7.d.h.F(\'2a\')===\'3a\'){B 7}2g(7.1G.q);7.d.h.3S(H,p);1c=7.5A.S(7,r);c(1c===p){B 7}j 2K(){7.d.h.W(\'3r-1F\',H);c($.16.1d){7.d.h.1q(0).e.43(\'2B\')}C{7.d.h.F({2B:\'\'})}7.4Z.S(7,r)}7.1v.2I=0;c(P 7.8.D.Z.17===\'j\'){7.8.D.Z.17.S(7.d.h,7.8.D.Z.Q);7.d.h.5u(j(){2K();$(A).5t()})}C{4N(7.8.D.Z.17.2F()){1Z\'3w\':7.d.h.7z(7.8.D.Z.Q,2K);1C;1Z\'5o\':7.d.h.7y(7.8.D.Z.Q,2K);1C;1Z\'5p\':7.d.h.D(7.8.D.Z.Q,2K);1C;2L:7.d.h.D(1z,2K);1C}7.d.h.7x(7.8.e.1g.3T)}B 7},2I:j(r,38){R 5r=/7w|2s/.1Y(P 38)?38:!7.d.h.2r(\':28\');7[5r?\'q\':\'D\'](r);B 7},2h:j(r,4o){c(!7.V.1b){B p}R 1U=8.k,s=$(1U.s),2Q=7.d.h.47(),2P=7.d.h.48(),1p,1l,k,1o=1U.w.h,2R=1U.w.s,1c,14,i,4L,27,45={M:j(){R 3j=$(2e).3D(),3n=$(2e).o()+$(2e).3D(),2J=1o.x===\'1j\'?2Q/2:2Q,2N=1o.x===\'1j\'?1p/2:1p,2O=(1o.x===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.x,3m=k.M+2Q,1h;c(3m>3n){1h=1k-2J-2N+2O;c(k.M+1h>3j||3j-(k.M+1h)<3m-3n){B{1e:1h,f:\'25\'}}}c(k.M<3j){1h=1k+2J+2N-2O;c(3m+1h<3n||3m+1h-3n<3j-k.M){B{1e:1h,f:\'M\'}}}B{1e:0,f:1o.x}},K:j(){R 30=$(2e).3G(),33=$(2e).G()+$(2e).3G(),2J=1o.y===\'1j\'?2P/2:2P,2N=1o.y===\'1j\'?1l/2:1l,2O=(1o.y===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.y,32=k.K+2P,1h;c(32>33){1h=1k-2J-2N+2O;c(k.K+1h>30||30-(k.K+1h)<32-33){B{1e:1h,f:\'26\'}}}c(k.K<30){1h=1k+2J+2N-2O;c(32+1h<33||32+1h-33<30-k.K){B{1e:1h,f:\'K\'}}}B{1e:0,f:1o.y}}};c(r&&8.k.s===\'1K\'){2R={x:\'M\',y:\'K\'};1p=1l=0;c(!r.3Y){k=7.1v.1K}C{k={K:r.4c,M:r.3Y}}}C{c(s[0]===31){1p=s.o();1l=s.G();k={K:0,M:0}}C c(s[0]===2e){1p=s.o();1l=s.G();k={K:s.3G(),M:s.3D()}}C c(s.2r(\'7A\')){14=7.8.k.s.W(\'14\').7B(\',\');1V(i=0;i<14.Q;i++){14[i]=1A(14[i],10)}4L=7.8.k.s.3O(\'7F\').W(\'21\');27=$(\'4U[7E="#\'+4L+\'"]:1R\').1k();k={M:1u.3H(27.M+14[0]),K:1u.3H(27.K+14[1])};4N(7.8.k.s.W(\'3M\').2F()){1Z\'7T\':1p=1u.4V(1u.5z(14[2]-14[0]));1l=1u.4V(1u.5z(14[3]-14[1]));1C;1Z\'7C\':1p=14[2]+1;1l=14[2]+1;1C;1Z\'7S\':1p=14[0];1l=14[1];1V(i=0;i<14.Q;i++){c(i%2===0){c(14[i]>1p){1p=14[i]}c(14[i]<14[0]){k.M=1u.3H(27.M+14[i])}}C{c(14[i]>1l){1l=14[i]}c(14[i]<14[1]){k.K=1u.3H(27.K+14[i])}}}1p=1p-(k.M-27.M);1l=1l-(k.K-27.K);1C}1p-=2;1l-=2}C{1p=s.47();1l=s.48();c(!7.d.h.2r(\':28\')){7.d.h.F({M:\'-81\'}).q()}c(!1U.1e.1k||7.d.h.4F()[0]===31.4X){k=s.1k()}C{k=s.k();k.K+=s.4F().3G();k.M+=s.4F().3D()}}k.M+=2R.x===\'25\'?1p:2R.x===\'1j\'?1p/2:0;k.K+=2R.y===\'26\'?1l:2R.y===\'1j\'?1l/2:0}k.M+=1U.1e.x+(1o.x===\'25\'?-2Q:1o.x===\'1j\'?-2Q/2:0);k.K+=1U.1e.y+(1o.y===\'26\'?-2P:1o.y===\'1j\'?-2P/2:0);c(7.8.e.I.E>0){c(1o.x===\'M\'){k.M-=7.8.e.I.E}C c(1o.x===\'25\'){k.M+=7.8.e.I.E}c(1o.y===\'K\'){k.K-=7.8.e.I.E}C c(1o.y===\'26\'){k.K+=7.8.e.I.E}}c(1U.1e.55){(j(){R 2W={x:0,y:0},2n={x:45.M(),y:45.K()},f=2T 2D(8.e.f.w);c(7.d.f&&f){c(2n.y.1e!==0){k.K+=2n.y.1e;f.y=2W.y=2n.y.f}c(2n.x.1e!==0){k.M+=2n.x.1e;f.x=2W.x=2n.x.f}7.1v.2u={M:2W.x===p,K:2W.y===p};c(7.d.f.W(\'1S\')!==f.1w()){44.S(7,f)}}}())}c(!7.d.22&&$.16.1d&&1A($.16.2X.2H(0),10)===6){22.S(7)}1c=7.57.S(7,r);c(1c===p){B 7}c(8.k.s!==\'1K\'&&4o===H){7.V.4j=H;7.d.h.3S().4o(k,7V,\'80\',j(){7.V.4j=p})}C{7.d.h.F(k)}7.5c.S(7,r);B 7},4d:j(1r){c(!7.V.1b||(1r&&P 1r!==\'2s\')){B p}R 1F=7.d.1y.7W().2m(7.d.f).2m(7.d.1i),2f=7.d.1t.2m(7.d.1y.2w()),h=7.d.h,1H=7.8.e.o.1H,2b=7.8.e.o.2b;c(!1r){c(P 7.8.e.o.2Z===\'2s\'){1r=7.8.e.o.2Z}C{7.d.h.F({o:\'6e\'});1F.D();h.o(1r);c($.16.1d){2f.F({2f:\'\'})}1r=7.3d().o;c(!7.8.e.o.2Z){1r=1u.2b(1u.1H(1r,2b),1H)}}}c(1r%2){1r+=1}7.d.h.o(1r);1F.q();c(7.8.e.I.E){7.d.h.1M(\'.g-2k\').1L(j(i){$(A).o(1r-(7.8.e.I.E*2))})}c($.16.1d){2f.F({2f:1});7.d.1t.o(1r);c(7.d.22){7.d.22.o(1r).G(7.3d.G)}}B 7},7Y:j(21){R f,2j,1n,w,X;c(!7.V.1b||P 21!==\'1w\'||!$.18.g.3c[21]){B p}7.8.e=4l.S(7,$.18.g.3c[21],7.8.4v.e);7.d.u.F(2G(7.8.e));c(7.8.u.U.1m!==p){7.d.U.F(2G(7.8.e.U,H))}7.d.1y.F({7U:7.8.e.I.J});c(7.8.e.f.w!==p){c($(\'<1f />\').1q(0).1E){f=7.d.h.1M(\'.g-f 1f:1R\');1n=f.1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=f.3O(\'12[1S]:1R\').W(\'1S\');X=4t(w,7.8.e.f.N.o,7.8.e.f.N.G);4u.S(7,f,X,7.8.e.f.J||7.8.e.I.J)}C c($.16.1d){f=7.d.h.1M(\'.g-f [5E="3M"]\');f.W(\'3t\',7.8.e.f.J||7.8.e.I.J)}}c(7.8.e.I.E>0){7.d.h.1M(\'.g-2k\').F({7X:7.8.e.I.J});c($(\'<1f />\').1q(0).1E){2j=4e(7.8.e.I.E);7.d.h.1M(\'.g-1t 1f\').1L(j(){1n=$(A).1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=$(A).3O(\'12[1S]:1R\').W(\'1S\');46.S(7,$(A),2j[w],7.8.e.I.E,7.8.e.I.J)})}C c($.16.1d){7.d.h.1M(\'.g-1t [5E="3p"]\').1L(j(){$(A).W(\'3t\',7.8.e.I.J)})}}B 7},4A:j(u,5F){R 36,37,4K;j 4J(){7.4d();c(5F!==p){c(7.8.k.17!==\'29\'){7.2h(7.d.h.2r(\':28\'),H)}c(7.8.e.f.w!==p){42.S(7)}}}c(!u){B p}36=7.54.S(7,u);c(P 36===\'1w\'){u=36}C c(36===p){B}c(7.V.1b){c($.16.1d){7.d.1y.2w().F({2f:\'7Z\'})}c(u.4r&&u.Q>0){u.5V(H).5P(7.d.u).q()}C{7.d.u.2l(u)}37=7.d.u.1M(\'4U[6O=p]\');c(37.Q>0){4K=0;37.1L(j(i){$(\'<4U 4T="\'+$(A).W(\'4T\')+\'" />\').7D(j(){c(++4K===37.Q){4J()}})})}C{4J()}}C{7.8.u.1m=u}7.4Y.S(7);B 7},5Z:j(1x,Y,2A){R 1c;j 4D(u){7.63.S(7);7.4A(u)}c(!7.V.1b){B p}1c=7.51.S(7);c(1c===p){B 7}c(2A===\'60\'){$.60(1x,Y,4D)}C{$.1q(1x,Y,4D)}B 7},5W:j(u){R 1c;c(!7.V.1b||!u){B p}1c=7.64.S(7);c(1c===p){B 7}c(7.d.1i){7.d.1i=7.d.1i.5V(H)}7.d.U.2l(u);c(7.d.1i){7.d.U.3B(7.d.1i)}7.65.S(7);B 7},2E:j(r){R 4B,3F,3y,1c;c(!7.V.1b||7.8.k.17===\'29\'){B p}4B=1A(7.d.h.F(\'z-3s\'),10);3F=7u+$(\'12.g[11^="g"]\').Q-1;c(!7.V.3Z&&4B!==3F){1c=7.5H.S(7,r);c(1c===p){B 7}$(\'12.g[11^="g"]\').5S(7.d.h).1L(j(){c($(A).g(\'T\').V.1b===H){3y=1A($(A).F(\'z-3s\'),10);c(P 3y===\'2s\'&&3y>-1){$(A).F({68:1A($(A).F(\'z-3s\'),10)-1})}$(A).g(\'T\').V.3Z=p}});7.d.h.F({68:3F});7.V.3Z=H;7.5C.S(7,r)}B 7},3X:j(38){7.V.23=38?H:p;B 7},3f:j(){R i,1c,O,4z=7.d.s.Y(\'4p\'+7.1v.W[0]);1c=7.61.S(7);c(1c===p){B 7}c(7.V.1b){7.8.q.L.s.1O(\'4C.g\',7.2h);7.8.q.L.s.1O(\'4x.g\',7.D);7.8.q.L.s.1O(7.8.q.L.r+\'.g\');7.8.D.L.s.1O(7.8.D.L.r+\'.g\');7.d.h.1O(7.8.D.L.r+\'.g\');7.d.h.1O(\'35.g\',7.2E);7.d.h.3W()}C{7.8.q.L.s.1O(7.8.q.L.r+\'.g-\'+7.11+\'-4m\')}c(P 7.d.s.Y(\'g\')===\'19\'){O=7.d.s.Y(\'g\').O;c(P O===\'19\'&&O.Q>0){1V(i=0;i<O.Q-1;i++){c(O[i].11===7.11){O.5X(i,1)}}}}$.18.g.O.5X(7.11,1);c(P O===\'19\'&&O.Q>0){7.d.s.Y(\'g\').3k=O.Q-1}C{7.d.s.73(\'g\')}c(4z){7.d.s.W(7.1v.W[0],4z)}7.62.S(7);B 7.d.s},72:j(){R q,1k;c(!7.V.1b){B p}q=(7.d.h.F(\'2a\')!==\'3a\')?p:H;c(q){7.d.h.F({3V:\'1F\'}).q()}1k=7.d.h.1k();c(q){7.d.h.F({3V:\'28\'}).D()}B 1k},3d:j(){R q,2t;c(!7.V.1b){B p}q=(!7.d.h.2r(\':28\'))?H:p;c(q){7.d.h.F({3V:\'1F\'}).q()}2t={G:7.d.h.48(),o:7.d.h.47()};c(q){7.d.h.F({3V:\'28\'}).D()}B 2t}})}$.18.g=j(8,41){R i,11,O,20,2c,1T,15,T;c(P 8===\'1w\'){c($(A).Y(\'g\')){c(8===\'T\'){B $(A).Y(\'g\').O[$(A).Y(\'g\').3k]}C c(8===\'O\'){B $(A).Y(\'g\').O}}C{B $(A)}}C{c(!8){8={}}c(P 8.u!==\'19\'||(8.u.4r&&8.u.Q>0)){8.u={1m:8.u}}c(P 8.u.U!==\'19\'){8.u.U={1m:8.u.U}}c(P 8.k!==\'19\'){8.k={w:8.k}}c(P 8.k.w!==\'19\'){8.k.w={s:8.k.w,h:8.k.w}}c(P 8.q!==\'19\'){8.q={L:8.q}}c(P 8.q.L!==\'19\'){8.q.L={r:8.q.L}}c(P 8.q.Z!==\'19\'){8.q.Z={17:8.q.Z}}c(P 8.D!==\'19\'){8.D={L:8.D}}c(P 8.D.L!==\'19\'){8.D.L={r:8.D.L}}c(P 8.D.Z!==\'19\'){8.D.Z={17:8.D.Z}}c(P 8.e!==\'19\'){8.e={21:8.e}}8.e=4i(8.e);20=$.2p(H,{},$.18.g.39,8);20.e=4l.S({8:20},20.e);20.4v=$.2p(H,{},8)}B $(A).1L(j(){R 7=$(A),u=p;c(P 8===\'1w\'){1T=8.2F();O=$(A).g(\'O\');c(P O===\'19\'){c(41===H&&1T===\'3f\'){1V(i=O.Q-1;i>-1;i--){c(\'19\'===P O[i]){O[i].3f()}}}C{c(41!==H){O=[$(A).g(\'T\')]}1V(i=0;i<O.Q;i++){c(1T===\'3f\'){O[i].3f()}C c(O[i].V.1b===H){c(1T===\'q\'){O[i].q()}C c(1T===\'D\'){O[i].D()}C c(1T===\'2E\'){O[i].2E()}C c(1T===\'3X\'){O[i].3X(H)}C c(1T===\'71\'){O[i].3X(p)}C c(1T===\'7v\'){O[i].2h()}}}}}}C{15=$.2p(H,{},20);15.D.Z.Q=20.D.Z.Q;15.q.Z.Q=20.q.Z.Q;c(15.k.3U===p){15.k.3U=$(31.4X)}c(15.k.s===p){15.k.s=$(A)}c(15.q.L.s===p){15.q.L.s=$(A)}c(15.D.L.s===p){15.D.L.s=$(A)}15.k.w.h=2T 2D(15.k.w.h);15.k.w.s=2T 2D(15.k.w.s);c(!15.u.1m.Q){$([\'U\',\'6b\']).1L(j(i,W){R 2C=7.W(W);c(2C&&2C.Q){u=[W,2C];7.Y(\'4p\'+W,2C).74(W);15.u.1m=2C.3l(/\\n/75,\'<78 />\');B p}})}11=$.18.g.O.Q;1V(i=0;i<11;i++){c(P $.18.g.O[i]===\'5i\'){11=i;1C}}2c=2T 56($(A),15,11);$.18.g.O[11]=2c;2c.1v.W=u;c(P $(A).Y(\'g\')===\'19\'&&$(A).Y(\'g\')){c(P $(A).W(\'g\')===\'5i\'){$(A).Y(\'g\').3k=$(A).Y(\'g\').O.Q}$(A).Y(\'g\').O.5h(2c)}C{$(A).Y(\'g\',{3k:0,O:[2c]})}c(15.u.5w===p&&15.q.L.r!==p&&15.q.3x!==H){15.q.L.s.1J(15.q.L.r+\'.g-\'+11+\'-4m\',{g:11},j(r){T=$.18.g.O[r.Y.g];T.8.q.L.s.1O(T.8.q.L.r+\'.g-\'+r.Y.g+\'-4m\');T.1v.1K={M:r.3Y,K:r.4c};4w.S(T);T.8.q.L.s.77(T.8.q.L.r)})}C{2c.1v.1K={M:15.q.L.s.1k().M,K:15.q.L.s.1k().K};4w.S(2c)}}})};$.18.g.O=[];$.18.g.18={W:$.18.W};$.18.W=j(W){R T=$(A).g(\'T\');B(3b.Q===1&&(/U|6b/i).1Y(W)&&T.V&&T.V.1b===H)?$(A).Y(\'4p\'+T.1v.W[0]):$.18.g.18.W.4s(A,3b)};$.18.g.39={u:{5w:p,1m:p,1x:p,Y:1z,U:{1m:p,1i:p}},k:{s:p,w:{s:\'3P\',h:\'3K\'},1e:{x:0,y:0,1K:H,55:p,3E:H,3L:H,1k:p},17:\'34\',3U:p},q:{L:{s:p,r:\'35\'},Z:{17:\'3w\',Q:5T},2V:76,1X:p,3x:p},D:{L:{s:p,r:\'4x\'},Z:{17:\'3w\',Q:5T},2V:0,3g:p},T:{5J:j(){},5f:j(){},57:j(){},5c:j(){},5n:j(){},5q:j(){},5A:j(){},4Z:j(){},54:j(){},4Y:j(){},51:j(){},63:j(){},64:j(){},65:j(){},61:j(){},62:j(){},5H:j(){},5C:j(){}}};$.18.g.3c={39:{1s:\'66\',J:\'#6Z\',2u:\'1F\',6Y:\'M\',o:{2b:0,1H:6S},2x:\'6R 6Q\',I:{o:1,E:0,J:\'#6P\'},f:{w:p,J:p,N:{o:13,G:13},2B:1},U:{1s:\'#6T\',6U:\'6X\',2x:\'6W 6V\'},1i:{79:\'7a\'},1g:{s:\'\',f:\'g-f\',U:\'g-U\',1i:\'g-1i\',u:\'g-u\',3T:\'g-3T\'}},5L:{I:{o:3,E:0,J:\'#7o\'},U:{1s:\'#7n\',J:\'#5M\'},1s:\'#7m\',J:\'#5M\',1g:{h:\'g-5L\'}},6d:{I:{o:3,E:0,J:\'#7p\'},U:{1s:\'#7q\',J:\'#6c\'},1s:\'66\',J:\'#6c\',1g:{h:\'g-6d\'}},69:{I:{o:3,E:0,J:\'#7t\'},U:{1s:\'#7s\',J:\'#67\'},1s:\'#7r\',J:\'#67\',1g:{h:\'g-69\'}},4H:{I:{o:3,E:0,J:\'#7l\'},U:{1s:\'#7k\',J:\'#6g\'},1s:\'#7e\',J:\'#6g\',1g:{h:\'g-4H\'}},52:{I:{o:3,E:0,J:\'#7d\'},U:{1s:\'#7c\',J:\'#4W\'},1s:\'#7b\',J:\'#4W\',1g:{h:\'g-52\'}},5k:{I:{o:3,E:0,J:\'#7f\'},U:{1s:\'#7g\',J:\'#7j\'},1s:\'#7i\',J:\'#7h\',1g:{h:\'g-5k\'}}}}(82));',62,499,'|||||||self|options||||if|elements|style|tip|qtip|tooltip||function|position||||width|false|show|event|target||content||corner||||this|return|else|hide|radius|css|height|true|border|color|top|when|left|size|interfaces|typeof|length|var|call|api|title|status|attr|coordinates|data|effect||id|div||coords|config|browser|type|fn|object|px|rendered|returned|msie|adjust|canvas|classes|adj|button|center|offset|targetHeight|text|context|my|targetWidth|get|newWidth|background|wrapper|Math|cache|string|url|contentWrapper|null|parseInt|1px|break|finalStyle|getContext|hidden|timers|max|class|bind|mouse|each|find|tips|unbind|ieAdjust|containers|first|rel|command|posOptions|for|inactive|solo|test|case|opts|name|bgiframe|disabled|positionAdjust|right|bottom|imagePos|visible|static|display|min|obj||window|zoom|clearTimeout|updatePosition|hideTarget|borders|betweenCorners|html|add|adapted|path|extend|margin|is|number|dimensions|overflow|styleExtend|children|padding|precedance|90|method|opacity|val|Corner|focus|toLowerCase|jQueryStyle|charAt|toggle|myOffset|afterHide|default|afterShow|atOffset|borderAdjust|elemHeight|elemWidth|at|line|new|styleObj|delay|adjusted|version|font|value|topEdge|document|pBottom|bottomEdge|absolute|mouseover|parsedContent|images|state|defaults|none|arguments|styles|getDimensions|borderTop|destroy|fixed|showTarget|borderBottom|leftEdge|current|replace|pRight|rightEdge|align|arc|solid|aria|index|fillcolor|inactiveEvents|inactiveMethod|fade|ready|elemIndex|delete|styleArray|prepend|image|scrollLeft|scroll|newIndex|scrollTop|floor|behavior|coordsize|topLeft|resize|shape|300|parent|bottomRight|newMargin|VML|stop|active|container|visiblity|remove|disable|pageX|focused|topRight|blanket|positionTip|removeAttribute|createTip|adapt|drawBorder|outerWidth|outerHeight|marginTop|ieStyle|sub|pageY|updateWidth|calculateBorders|ltr|borderCoord|paddingSize|sanitizeStyle|animated|dir|buildStyle|create|paddingCorner|animate|old|sideWidth|jquery|apply|calculateTip|drawTip|user|construct|mouseout|relative|oldattr|updateContent|curIndex|mousemove|setupContent|block|offsetParent|vertWidth|red|bottomLeft|afterLoad|loadedImages|mapName|setTimeout|switch|betweenWidth|hideMethod|vertical|unfocus|showMethod|src|img|ceil|58792E|body|onContentUpdate|onHide||beforeContentLoad|green|inline|beforeContentUpdate|screen|QTip|beforePositionUpdate|prependTo|createBorder|String|createTitle|onPositionUpdate|click|role|onRender|parents|push|undefined|mouseenter|blue|assignEvents|filter|beforeShow|slide|grow|onShow|condition|append|dequeue|queue|addClass|prerender|middle|match|abs|beforeHide|bottomright|onFocus|270|nodeName|reposition|fillStyle|beforeFocus|clearRect|beforeRender|topright|cream|A27D35|topleft|unshift|appendTo|lineTo|in|not|100|beginPath|clone|updateTitle|splice|fill|loadContent|post|beforeDestroy|onDestroy|onContentLoad|beforeTitleUpdate|onTitleUpdate|white|f3f3f3|zIndex|dark|bottomleft|alt|454545|light|auto|stroked|9C2F2F|dblclick|rightcenter|mouseup|mousedown|mouseleave|Right|Left|moveTo|filled|out|endangle|startangle|use|strict|bottomcenter|qtipSelector|leftbottom|topcenter|righttop|leave|eq|rightbottom|0px|labelledby|while|float|borderWidth|xe|leftcenter|marginLeft|search|lefttop|PI|complete|d3d3d3|9px|5px|250|e1e1e1|fontWeight|12px|7px|bold|textAlign|111|relatedTarget|enable|getPosition|removeData|removeAttr|gi|140|trigger|br|cursor|pointer|CDE6AC|b9db8c|A9DB66|F79992|ADD9ED|D0E9F5|4D9FBF|E5F6FE|5E99BD|f28279|CE6F6F|FBF7AA|F0DE7D|F9E98E|E2E2E2|f1f1f1|505050|404040|303030|15000|update|boolean|removeClass|slideUp|fadeOut|area|split|circle|load|usemap|map|slideDown|fadeIn|frameborder|iframe|preventDefault|stopPropagation|tabindex|javascript|webkit|moz|describedby|alpha|poly|rect|borderColor|200|siblings|backgroundColor|updateStyle|normal|swing|10000000em|jQuery'.split('|'),0,{}))
--- a/web/hdabo/static/hdabo/js/jquery.tablednd_0_5.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,382 +0,0 @@
-/**
- * TableDnD plug-in for JQuery, allows you to drag and drop table rows
- * You can set up various options to control how the system will work
- * Copyright (c) Denis Howlett <denish@isocra.com>
- * Licensed like jQuery, see http://docs.jquery.com/License.
- *
- * Configuration options:
- *
- * onDragStyle
- * This is the style that is assigned to the row during drag. There are limitations to the styles that can be
- * associated with a row (such as you can't assign a border--well you can, but it won't be
- * displayed). (So instead consider using onDragClass.) The CSS style to apply is specified as
- * a map (as used in the jQuery css(...) function).
- * onDropStyle
- * This is the style that is assigned to the row when it is dropped. As for onDragStyle, there are limitations
- * to what you can do. Also this replaces the original style, so again consider using onDragClass which
- * is simply added and then removed on drop.
- * onDragClass
- * This class is added for the duration of the drag and then removed when the row is dropped. It is more
- * flexible than using onDragStyle since it can be inherited by the row cells and other content. The default
- * is class is tDnD_whileDrag. So to use the default, simply customise this CSS class in your
- * stylesheet.
- * onDrop
- * Pass a function that will be called when the row is dropped. The function takes 2 parameters: the table
- * and the row that was dropped. You can work out the new order of the rows by using
- * table.rows.
- * onDragStart
- * Pass a function that will be called when the user starts dragging. The function takes 2 parameters: the
- * table and the row which the user has started to drag.
- * onAllowDrop
- * Pass a function that will be called as a row is over another row. If the function returns true, allow
- * dropping on that row, otherwise not. The function takes 2 parameters: the dragged row and the row under
- * the cursor. It returns a boolean: true allows the drop, false doesn't allow it.
- * scrollAmount
- * This is the number of pixels to scroll if the user moves the mouse cursor to the top or bottom of the
- * window. The page should automatically scroll up or down as appropriate (tested in IE6, IE7, Safari, FF2,
- * FF3 beta
- * dragHandle
- * This is the name of a class that you assign to one or more cells in each row that is draggable. If you
- * specify this class, then you are responsible for setting cursor: move in the CSS and only these cells
- * will have the drag behaviour. If you do not specify a dragHandle, then you get the old behaviour where
- * the whole row is draggable.
- *
- * Other ways to control behaviour:
- *
- * Add class="nodrop" to any rows for which you don't want to allow dropping, and class="nodrag" to any rows
- * that you don't want to be draggable.
- *
- * Inside the onDrop method you can also call $.tableDnD.serialize() this returns a string of the form
- * <tableID>[]=<rowID1>&<tableID>[]=<rowID2> so that you can send this back to the server. The table must have
- * an ID as must all the rows.
- *
- * Other methods:
- *
- * $("...").tableDnDUpdate()
- * Will update all the matching tables, that is it will reapply the mousedown method to the rows (or handle cells).
- * This is useful if you have updated the table rows using Ajax and you want to make the table draggable again.
- * The table maintains the original configuration (so you don't have to specify it again).
- *
- * $("...").tableDnDSerialize()
- * Will serialize and return the serialized string as above, but for each of the matching tables--so it can be
- * called from anywhere and isn't dependent on the currentTable being set up correctly before calling
- *
- * Known problems:
- * - Auto-scoll has some problems with IE7 (it scrolls even when it shouldn't), work-around: set scrollAmount to 0
- *
- * Version 0.2: 2008-02-20 First public version
- * Version 0.3: 2008-02-07 Added onDragStart option
- * Made the scroll amount configurable (default is 5 as before)
- * Version 0.4: 2008-03-15 Changed the noDrag/noDrop attributes to nodrag/nodrop classes
- * Added onAllowDrop to control dropping
- * Fixed a bug which meant that you couldn't set the scroll amount in both directions
- * Added serialize method
- * Version 0.5: 2008-05-16 Changed so that if you specify a dragHandle class it doesn't make the whole row
- * draggable
- * Improved the serialize method to use a default (and settable) regular expression.
- * Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table
- */
-jQuery.tableDnD = {
- /** Keep hold of the current table being dragged */
- currentTable : null,
- /** Keep hold of the current drag object if any */
- dragObject: null,
- /** The current mouse offset */
- mouseOffset: null,
- /** Remember the old value of Y so that we don't do too much processing */
- oldY: 0,
-
- /** Actually build the structure */
- build: function(options) {
- // Set up the defaults if any
-
- this.each(function() {
- // This is bound to each matching table, set up the defaults and override with user options
- this.tableDnDConfig = jQuery.extend({
- onDragStyle: null,
- onDropStyle: null,
- // Add in the default class for whileDragging
- onDragClass: "tDnD_whileDrag",
- onDrop: null,
- onDragStart: null,
- scrollAmount: 5,
- serializeRegexp: /[^\-]*$/, // The regular expression to use to trim row IDs
- serializeParamName: null, // If you want to specify another parameter name instead of the table ID
- dragHandle: null // If you give the name of a class here, then only Cells with this class will be draggable
- }, options || {});
- // Now make the rows draggable
- jQuery.tableDnD.makeDraggable(this);
- });
-
- // Now we need to capture the mouse up and mouse move event
- // We can use bind so that we don't interfere with other event handlers
- jQuery(document)
- .bind('mousemove', jQuery.tableDnD.mousemove)
- .bind('mouseup', jQuery.tableDnD.mouseup);
-
- // Don't break the chain
- return this;
- },
-
- /** This function makes all the rows on the table draggable apart from those marked as "NoDrag" */
- makeDraggable: function(table) {
- var config = table.tableDnDConfig;
- if (table.tableDnDConfig.dragHandle) {
- // We only need to add the event to the specified cells
- var cells = jQuery("td."+table.tableDnDConfig.dragHandle, table);
- cells.each(function() {
- // The cell is bound to "this"
- jQuery(this).mousedown(function(ev) {
- jQuery.tableDnD.dragObject = this.parentNode;
- jQuery.tableDnD.currentTable = table;
- jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
- if (config.onDragStart) {
- // Call the onDrop method if there is one
- config.onDragStart(table, this);
- }
- return false;
- });
- })
- } else {
- // For backwards compatibility, we add the event to the whole row
- var rows = jQuery("tr", table); // get all the rows as a wrapped set
- rows.each(function() {
- // Iterate through each row, the row is bound to "this"
- var row = jQuery(this);
- if (! row.hasClass("nodrag")) {
- row.mousedown(function(ev) {
- if (ev.target.tagName == "TD") {
- jQuery.tableDnD.dragObject = this;
- jQuery.tableDnD.currentTable = table;
- jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
- if (config.onDragStart) {
- // Call the onDrop method if there is one
- config.onDragStart(table, this);
- }
- return false;
- }
- }).css("cursor", "move"); // Store the tableDnD object
- }
- });
- }
- },
-
- updateTables: function() {
- this.each(function() {
- // this is now bound to each matching table
- if (this.tableDnDConfig) {
- jQuery.tableDnD.makeDraggable(this);
- }
- })
- },
-
- /** Get the mouse coordinates from the event (allowing for browser differences) */
- mouseCoords: function(ev){
- if(ev.pageX || ev.pageY){
- return {x:ev.pageX, y:ev.pageY};
- }
- return {
- x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
- y:ev.clientY + document.body.scrollTop - document.body.clientTop
- };
- },
-
- /** Given a target element and a mouse event, get the mouse offset from that element.
- To do this we need the element's position and the mouse position */
- getMouseOffset: function(target, ev) {
- ev = ev || window.event;
-
- var docPos = this.getPosition(target);
- var mousePos = this.mouseCoords(ev);
- return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
- },
-
- /** Get the position of an element by going up the DOM tree and adding up all the offsets */
- getPosition: function(e){
- var left = 0;
- var top = 0;
- /** Safari fix -- thanks to Luis Chato for this! */
- if (e.offsetHeight == 0) {
- /** Safari 2 doesn't correctly grab the offsetTop of a table row
- this is detailed here:
- http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/
- the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild.
- note that firefox will return a text node as a first child, so designing a more thorough
- solution may need to take that into account, for now this seems to work in firefox, safari, ie */
- e = e.firstChild; // a table cell
- }
-
- while (e.offsetParent){
- left += e.offsetLeft;
- top += e.offsetTop;
- e = e.offsetParent;
- }
-
- left += e.offsetLeft;
- top += e.offsetTop;
-
- return {x:left, y:top};
- },
-
- mousemove: function(ev) {
- if (jQuery.tableDnD.dragObject == null) {
- return;
- }
-
- var dragObj = jQuery(jQuery.tableDnD.dragObject);
- var config = jQuery.tableDnD.currentTable.tableDnDConfig;
- var mousePos = jQuery.tableDnD.mouseCoords(ev);
- var y = mousePos.y - jQuery.tableDnD.mouseOffset.y;
- //auto scroll the window
- var yOffset = window.pageYOffset;
- if (document.all) {
- // Windows version
- //yOffset=document.body.scrollTop;
- if (typeof document.compatMode != 'undefined' &&
- document.compatMode != 'BackCompat') {
- yOffset = document.documentElement.scrollTop;
- }
- else if (typeof document.body != 'undefined') {
- yOffset=document.body.scrollTop;
- }
-
- }
-
- if (mousePos.y-yOffset < config.scrollAmount) {
- window.scrollBy(0, -config.scrollAmount);
- } else {
- var windowHeight = window.innerHeight ? window.innerHeight
- : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
- if (windowHeight-(mousePos.y-yOffset) < config.scrollAmount) {
- window.scrollBy(0, config.scrollAmount);
- }
- }
-
-
- if (y != jQuery.tableDnD.oldY) {
- // work out if we're going up or down...
- var movingDown = y > jQuery.tableDnD.oldY;
- // update the old value
- jQuery.tableDnD.oldY = y;
- // update the style to show we're dragging
- if (config.onDragClass) {
- dragObj.addClass(config.onDragClass);
- } else {
- dragObj.css(config.onDragStyle);
- }
- // If we're over a row then move the dragged row to there so that the user sees the
- // effect dynamically
- var currentRow = jQuery.tableDnD.findDropTargetRow(dragObj, y);
- if (currentRow) {
- // TODO worry about what happens when there are multiple TBODIES
- if (movingDown && jQuery.tableDnD.dragObject != currentRow) {
- jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow.nextSibling);
- } else if (! movingDown && jQuery.tableDnD.dragObject != currentRow) {
- jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow);
- }
- }
- }
-
- return false;
- },
-
- /** We're only worried about the y position really, because we can only move rows up and down */
- findDropTargetRow: function(draggedRow, y) {
- var rows = jQuery.tableDnD.currentTable.rows;
- for (var i=0; i<rows.length; i++) {
- var row = rows[i];
- var rowY = this.getPosition(row).y;
- var rowHeight = parseInt(row.offsetHeight)/2;
- if (row.offsetHeight == 0) {
- rowY = this.getPosition(row.firstChild).y;
- rowHeight = parseInt(row.firstChild.offsetHeight)/2;
- }
- // Because we always have to insert before, we need to offset the height a bit
- if ((y > rowY - rowHeight) && (y < (rowY + rowHeight))) {
- // that's the row we're over
- // If it's the same as the current row, ignore it
- if (row == draggedRow) {return null;}
- var config = jQuery.tableDnD.currentTable.tableDnDConfig;
- if (config.onAllowDrop) {
- if (config.onAllowDrop(draggedRow, row)) {
- return row;
- } else {
- return null;
- }
- } else {
- // If a row has nodrop class, then don't allow dropping (inspired by John Tarr and Famic)
- var nodrop = jQuery(row).hasClass("nodrop");
- if (! nodrop) {
- return row;
- } else {
- return null;
- }
- }
- return row;
- }
- }
- return null;
- },
-
- mouseup: function(e) {
- if (jQuery.tableDnD.currentTable && jQuery.tableDnD.dragObject) {
- var droppedRow = jQuery.tableDnD.dragObject;
- var config = jQuery.tableDnD.currentTable.tableDnDConfig;
- // If we have a dragObject, then we need to release it,
- // The row will already have been moved to the right place so we just reset stuff
- if (config.onDragClass) {
- jQuery(droppedRow).removeClass(config.onDragClass);
- } else {
- jQuery(droppedRow).css(config.onDropStyle);
- }
- jQuery.tableDnD.dragObject = null;
- if (config.onDrop) {
- // Call the onDrop method if there is one
- config.onDrop(jQuery.tableDnD.currentTable, droppedRow);
- }
- jQuery.tableDnD.currentTable = null; // let go of the table too
- }
- },
-
- serialize: function() {
- if (jQuery.tableDnD.currentTable) {
- return jQuery.tableDnD.serializeTable(jQuery.tableDnD.currentTable);
- } else {
- return "Error: No Table id set, you need to set an id on your table and every row";
- }
- },
-
- serializeTable: function(table) {
- var result = "";
- var tableId = table.id;
- var rows = table.rows;
- for (var i=0; i<rows.length; i++) {
- if (result.length > 0) result += "&";
- var rowId = rows[i].id;
- if (rowId && rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) {
- rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0];
- }
-
- result += tableId + '[]=' + rowId;
- }
- return result;
- },
-
- serializeTables: function() {
- var result = "";
- this.each(function() {
- // this is now bound to each matching table
- result += jQuery.tableDnD.serializeTable(this);
- });
- return result;
- }
-
-}
-
-jQuery.fn.extend(
- {
- tableDnD : jQuery.tableDnD.build,
- tableDnDUpdate : jQuery.tableDnD.updateTables,
- tableDnDSerialize: jQuery.tableDnD.serializeTables
- }
-);
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.textchange.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-/*!
- * jQuery TextChange Plugin
- * http://www.zurb.com/playground/jquery-text-change-custom-event
- *
- * Copyright 2010, ZURB
- * Released under the MIT License
- */
- (function(a){a.event.special.textchange={setup:function(){a(this).data("lastValue",this.contentEditable==="true"?a(this).html():a(this).val());a(this).bind("keyup.textchange",a.event.special.textchange.handler);a(this).bind("cut.textchange paste.textchange input.textchange",a.event.special.textchange.delayedHandler)},teardown:function(){a(this).unbind(".textchange")},handler:function(){a.event.special.textchange.triggerIfChanged(a(this))},delayedHandler:function(){var b=a(this);setTimeout(function(){a.event.special.textchange.triggerIfChanged(b)},
- 25)},triggerIfChanged:function(b){var c=b[0].contentEditable==="true"?b.html():b.val();if(c!==b.data("lastValue")){b.trigger("textchange",b.data("lastValue"));b.data("lastValue",c)}}};a.event.special.hastext={setup:function(){a(this).bind("textchange",a.event.special.hastext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.hastext.handler)},handler:function(b,c){c===""&&c!==a(this).val()&&a(this).trigger("hastext")}};a.event.special.notext={setup:function(){a(this).bind("textchange",
- a.event.special.notext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.notext.handler)},handler:function(b,c){a(this).val()===""&&a(this).val()!==c&&a(this).trigger("notext")}}})(jQuery);
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.tools.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-/*
- * jQuery Tools 1.2.4 - The missing UI library for the Web
- *
- * [toolbox.flashembed, toolbox.history, toolbox.expose, toolbox.mousewheel, tabs, tabs.slideshow, tooltip, tooltip.slide, tooltip.dynamic, scrollable, scrollable.autoscroll, scrollable.navigator, overlay, overlay.apple, dateinput, rangeinput, validator]
- *
- * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
- *
- * http://flowplayer.org/tools/
- *
- * jquery.event.wheel.js - rev 1
- * Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
- * Liscensed under the MIT License (MIT-LICENSE.txt)
- * http://www.opensource.org/licenses/mit-license.php
- * Created: 2008-07-01 | Updated: 2008-07-14
- *
- * -----
- *
- * File generated: Wed Aug 18 09:10:10 GMT 2010
- */
-(function(){function f(a,b){if(b)for(var c in b)if(b.hasOwnProperty(c))a[c]=b[c];return a}function l(a,b){var c=[];for(var d in a)if(a.hasOwnProperty(d))c[d]=b(a[d]);return c}function m(a,b,c){if(e.isSupported(b.version))a.innerHTML=e.getHTML(b,c);else if(b.expressInstall&&e.isSupported([6,65]))a.innerHTML=e.getHTML(f(b,{src:b.expressInstall}),{MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title});else{if(!a.innerHTML.replace(/\s/g,"")){a.innerHTML="<h2>Flash version "+b.version+
-" or greater is required</h2><h3>"+(g[0]>0?"Your version is "+g:"You have no flash plugin installed")+"</h3>"+(a.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+k+"'>here</a></p>");if(a.tagName=="A")a.onclick=function(){location.href=k}}if(b.onFail){var d=b.onFail.call(this);if(typeof d=="string")a.innerHTML=d}}if(i)window[b.id]=document.getElementById(b.id);f(this,{getRoot:function(){return a},getOptions:function(){return b},getConf:function(){return c},
-getApi:function(){return a.firstChild}})}var i=document.all,k="http://www.adobe.com/go/getflashplayer",n=typeof jQuery=="function",o=/(\d+)[^\d]+(\d+)[^\d]*(\d*)/,j={width:"100%",height:"100%",id:"_"+(""+Math.random()).slice(9),allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:[3,0],onFail:null,expressInstall:null,w3c:false,cachebusting:false};window.attachEvent&&window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}});
-window.flashembed=function(a,b,c){if(typeof a=="string")a=document.getElementById(a.replace("#",""));if(a){if(typeof b=="string")b={src:b};return new m(a,f(f({},j),b),c)}};var e=f(window.flashembed,{conf:j,getVersion:function(){var a,b;try{b=navigator.plugins["Shockwave Flash"].description.slice(16)}catch(c){try{b=(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"))&&a.GetVariable("$version")}catch(d){try{b=(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"))&&a.GetVariable("$version")}catch(h){}}}return(b=
-o.exec(b))?[b[1],b[3]]:[0,0]},asString:function(a){if(a===null||a===undefined)return null;var b=typeof a;if(b=="object"&&a.push)b="array";switch(b){case "string":a=a.replace(new RegExp('(["\\\\])',"g"),"\\$1");a=a.replace(/^\s?(\d+\.?\d+)%/,"$1pct");return'"'+a+'"';case "array":return"["+l(a,function(d){return e.asString(d)}).join(",")+"]";case "function":return'"function()"';case "object":b=[];for(var c in a)a.hasOwnProperty(c)&&b.push('"'+c+'":'+e.asString(a[c]));return"{"+b.join(",")+"}"}return String(a).replace(/\s/g,
-" ").replace(/\'/g,'"')},getHTML:function(a,b){a=f({},a);var c='<object width="'+a.width+'" height="'+a.height+'" id="'+a.id+'" name="'+a.id+'"';if(a.cachebusting)a.src+=(a.src.indexOf("?")!=-1?"&":"?")+Math.random();c+=a.w3c||!i?' data="'+a.src+'" type="application/x-shockwave-flash"':' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';c+=">";if(a.w3c||i)c+='<param name="movie" value="'+a.src+'" />';a.width=a.height=a.id=a.w3c=a.src=null;a.onFail=a.version=a.expressInstall=null;for(var d in a)if(a[d])c+=
-'<param name="'+d+'" value="'+a[d]+'" />';a="";if(b){for(var h in b)if(b[h]){d=b[h];a+=h+"="+(/function|object/.test(typeof d)?e.asString(d):d)+"&"}a=a.slice(0,-1);c+='<param name="flashvars" value=\''+a+"' />"}c+="</object>";return c},isSupported:function(a){return g[0]>a[0]||g[0]==a[0]&&g[1]>=a[1]}}),g=e.getVersion();if(n){jQuery.tools=jQuery.tools||{version:"1.2.4"};jQuery.tools.flashembed={conf:j};jQuery.fn.flashembed=function(a,b){return this.each(function(){$(this).data("flashembed",flashembed(this,
-a,b))})}}})();
-(function(b){function h(c){if(c){var a=d.contentWindow.document;a.open().close();a.location.hash=c}}var g,d,f,i;b.tools=b.tools||{version:"1.2.4"};b.tools.history={init:function(c){if(!i){if(b.browser.msie&&b.browser.version<"8"){if(!d){d=b("<iframe/>").attr("src","javascript:false;").hide().get(0);b("body").append(d);setInterval(function(){var a=d.contentWindow.document;a=a.location.hash;g!==a&&b.event.trigger("hash",a)},100);h(location.hash||"#")}}else setInterval(function(){var a=location.hash;
-a!==g&&b.event.trigger("hash",a)},100);f=!f?c:f.add(c);c.click(function(a){var e=b(this).attr("href");d&&h(e);if(e.slice(0,1)!="#"){location.href="#"+e;return a.preventDefault()}});i=true}}};b(window).bind("hash",function(c,a){a?f.filter(function(){var e=b(this).attr("href");return e==a||e==a.replace("#","")}).trigger("history",[a]):f.eq(0).trigger("history",[a]);g=a;window.location.hash=g});b.fn.history=function(c){b.tools.history.init(this);return this.bind("history",c)}})(jQuery);
-(function(b){function k(){if(b.browser.msie){var a=b(document).height(),d=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a-d<20?d:a]}return[b(document).width(),b(document).height()]}function h(a){if(a)return a.call(b.mask)}b.tools=b.tools||{version:"1.2.4"};var l;l=b.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,startOpacity:0,color:"#fff",onLoad:null,
-onClose:null}};var c,i,e,g,j;b.mask={load:function(a,d){if(e)return this;if(typeof a=="string")a={color:a};a=a||g;g=a=b.extend(b.extend({},l.conf),a);c=b("#"+a.maskId);if(!c.length){c=b("<div/>").attr("id",a.maskId);b("body").append(c)}var m=k();c.css({position:"absolute",top:0,left:0,width:m[0],height:m[1],display:"none",opacity:a.startOpacity,zIndex:a.zIndex});a.color&&c.css("backgroundColor",a.color);if(h(a.onBeforeLoad)===false)return this;a.closeOnEsc&&b(document).bind("keydown.mask",function(f){f.keyCode==
-27&&b.mask.close(f)});a.closeOnClick&&c.bind("click.mask",function(f){b.mask.close(f)});b(window).bind("resize.mask",function(){b.mask.fit()});if(d&&d.length){j=d.eq(0).css("zIndex");b.each(d,function(){var f=b(this);/relative|absolute|fixed/i.test(f.css("position"))||f.css("position","relative")});i=d.css({zIndex:Math.max(a.zIndex+1,j=="auto"?0:j)})}c.css({display:"block"}).fadeTo(a.loadSpeed,a.opacity,function(){b.mask.fit();h(a.onLoad);e="full"});e=true;return this},close:function(){if(e){if(h(g.onBeforeClose)===
-false)return this;c.fadeOut(g.closeSpeed,function(){h(g.onClose);i&&i.css({zIndex:j});e=false});b(document).unbind("keydown.mask");c.unbind("click.mask");b(window).unbind("resize.mask")}return this},fit:function(){if(e){var a=k();c.css({width:a[0],height:a[1]})}},getMask:function(){return c},isLoaded:function(a){return a?e=="full":e},getConf:function(){return g},getExposed:function(){return i}};b.fn.mask=function(a){b.mask.load(a);return this};b.fn.expose=function(a){b.mask.load(a,this);return this}})(jQuery);
-(function(b){function c(a){switch(a.type){case "mousemove":return b.extend(a.data,{clientX:a.clientX,clientY:a.clientY,pageX:a.pageX,pageY:a.pageY});case "DOMMouseScroll":b.extend(a,a.data);a.delta=-a.detail/3;break;case "mousewheel":a.delta=a.wheelDelta/120;break}a.type="wheel";return b.event.handle.call(this,a,a.delta)}b.fn.mousewheel=function(a){return this[a?"bind":"trigger"]("wheel",a)};b.event.special.wheel={setup:function(){b.event.add(this,d,c,{})},teardown:function(){b.event.remove(this,
-d,c)}};var d=!b.browser.mozilla?"mousewheel":"DOMMouseScroll"+(b.browser.version<"1.9"?" mousemove":"")})(jQuery);
-(function(c){function p(d,b,a){var e=this,l=d.add(this),h=d.find(a.tabs),i=b.jquery?b:d.children(b),j;h.length||(h=d.children());i.length||(i=d.parent().find(b));i.length||(i=c(b));c.extend(this,{click:function(f,g){var k=h.eq(f);if(typeof f=="string"&&f.replace("#","")){k=h.filter("[href*="+f.replace("#","")+"]");f=Math.max(h.index(k),0)}if(a.rotate){var n=h.length-1;if(f<0)return e.click(n,g);if(f>n)return e.click(0,g)}if(!k.length){if(j>=0)return e;f=a.initialIndex;k=h.eq(f)}if(f===j)return e;
-g=g||c.Event();g.type="onBeforeClick";l.trigger(g,[f]);if(!g.isDefaultPrevented()){o[a.effect].call(e,f,function(){g.type="onClick";l.trigger(g,[f])});j=f;h.removeClass(a.current);k.addClass(a.current);return e}},getConf:function(){return a},getTabs:function(){return h},getPanes:function(){return i},getCurrentPane:function(){return i.eq(j)},getCurrentTab:function(){return h.eq(j)},getIndex:function(){return j},next:function(){return e.click(j+1)},prev:function(){return e.click(j-1)},destroy:function(){h.unbind(a.event).removeClass(a.current);
-i.find("a[href^=#]").unbind("click.T");return e}});c.each("onBeforeClick,onClick".split(","),function(f,g){c.isFunction(a[g])&&c(e).bind(g,a[g]);e[g]=function(k){k&&c(e).bind(g,k);return e}});if(a.history&&c.fn.history){c.tools.history.init(h);a.event="history"}h.each(function(f){c(this).bind(a.event,function(g){e.click(f,g);return g.preventDefault()})});i.find("a[href^=#]").bind("click.T",function(f){e.click(c(this).attr("href"),f)});if(location.hash&&a.tabs==="a"&&d.find(a.tabs+location.hash).length)e.click(location.hash);
-else if(a.initialIndex===0||a.initialIndex>0)e.click(a.initialIndex)}c.tools=c.tools||{version:"1.2.4"};c.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(d,b){o[d]=b}};var o={"default":function(d,b){this.getPanes().hide().eq(d).show();b.call()},fade:function(d,b){var a=this.getConf(),e=a.fadeOutSpeed,l=this.getPanes();e?l.fadeOut(e):l.hide();l.eq(d).fadeIn(a.fadeInSpeed,b)},slide:function(d,
-b){this.getPanes().slideUp(200);this.getPanes().eq(d).slideDown(400,b)},ajax:function(d,b){this.getPanes().eq(0).load(this.getTabs().eq(d).attr("href"),b)}},m;c.tools.tabs.addEffect("horizontal",function(d,b){m||(m=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){c(this).hide()});this.getPanes().eq(d).animate({width:m},function(){c(this).show();b.call()})});c.fn.tabs=function(d,b){var a=this.data("tabs");if(a){a.destroy();this.removeData("tabs")}if(c.isFunction(b))b=
-{onBeforeClick:b};b=c.extend({},c.tools.tabs.conf,b);this.each(function(){a=new p(c(this),d,b);c(this).data("tabs",a)});return b.api?a:this}})(jQuery);
-(function(d){function r(g,a){function p(f){var e=d(f);return e.length<2?e:g.parent().find(f)}var c=this,j=g.add(this),b=g.data("tabs"),h,m,k,n=false,o=p(a.next).click(function(){b.next()}),l=p(a.prev).click(function(){b.prev()});d.extend(c,{getTabs:function(){return b},getConf:function(){return a},play:function(){if(!h){var f=d.Event("onBeforePlay");j.trigger(f);if(f.isDefaultPrevented())return c;n=false;h=setInterval(b.next,a.interval);j.trigger("onPlay");b.next()}},pause:function(){if(!h&&!k)return c;
-var f=d.Event("onBeforePause");j.trigger(f);if(f.isDefaultPrevented())return c;h=clearInterval(h);k=clearInterval(k);j.trigger("onPause")},stop:function(){c.pause();n=true}});d.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(f,e){d.isFunction(a[e])&&c.bind(e,a[e]);c[e]=function(s){return c.bind(e,s)}});if(a.autopause){var t=b.getTabs().add(o).add(l).add(b.getPanes());t.hover(function(){c.pause();m=clearInterval(m)},function(){n||(m=setTimeout(c.play,a.interval))})}if(a.autoplay)k=
-setTimeout(c.play,a.interval);else c.stop();a.clickable&&b.getPanes().click(function(){b.next()});if(!b.getConf().rotate){var i=a.disabledClass;b.getIndex()||l.addClass(i);b.onBeforeClick(function(f,e){if(e){l.removeClass(i);e==b.getTabs().length-1?o.addClass(i):o.removeClass(i)}else l.addClass(i)})}}var q;q=d.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:false,autopause:true,interval:3E3,clickable:true,api:false}};d.fn.slideshow=function(g){var a=
-this.data("slideshow");if(a)return a;g=d.extend({},q.conf,g);this.each(function(){a=new r(d(this),g);d(this).data("slideshow",a)});return g.api?a:this}})(jQuery);
-(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function u(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=a.attr("data-tooltip"),r=n[b.effect],l,s=
-a.is(":input"),v=s&&a.is(":checkbox, :radio, select, :button, :submit"),t=a.attr("type"),k=b.events[t]||b.events[s?v?"widget":"input":"def"];if(!r)throw'Nonexistent effect "'+b.effect+'"';k=k.split(/,\s*/);if(k.length!=2)throw"Tooltip: bad events configuration for "+t;a.bind(k[0],function(d){clearTimeout(i);if(b.predelay)j=setTimeout(function(){c.show(d)},b.predelay);else c.show(d)}).bind(k[1],function(d){clearTimeout(j);if(b.delay)i=setTimeout(function(){c.hide(d)},b.delay);else c.hide(d)});if(m&&
-b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,{show:function(d){if(!e){if(q)e=f(q);else if(m)e=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",
-top:g.top,left:g.left});l=true;r[0].call(c,function(){d.type="onShow";l="full";h.trigger(d)});g=b.events.tooltip.split(/,\s*/);e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(k[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){l=false;n[b.effect][1].call(c,function(){d.type="onHide";
-h.trigger(d)});return c}},isShown:function(d){return d?l=="full":l},getConf:function(){return b},getTip:function(){return e},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.4"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,
-events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,
-a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new u(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
-(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
-b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
-(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
-g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
-a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);
-(function(e){function n(f,c){var a=e(c);return a.length<2?a:f.parent().find(c)}function t(f,c){var a=this,l=f.add(a),g=f.children(),k=0,m=c.vertical;j||(j=a);if(g.length>1)g=e(c.items,f);e.extend(a,{getConf:function(){return c},getIndex:function(){return k},getSize:function(){return a.getItems().size()},getNaviButtons:function(){return o.add(p)},getRoot:function(){return f},getItemWrap:function(){return g},getItems:function(){return g.children(c.item).not("."+c.clonedClass)},move:function(b,d){return a.seekTo(k+
-b,d)},next:function(b){return a.move(1,b)},prev:function(b){return a.move(-1,b)},begin:function(b){return a.seekTo(0,b)},end:function(b){return a.seekTo(a.getSize()-1,b)},focus:function(){return j=a},addItem:function(b){b=e(b);if(c.circular){g.children("."+c.clonedClass+":last").before(b);g.children("."+c.clonedClass+":first").replaceWith(b.clone().addClass(c.clonedClass))}else g.append(b);l.trigger("onAddItem",[b]);return a},seekTo:function(b,d,h){b.jquery||(b*=1);if(c.circular&&b===0&&k==-1&&d!==
-0)return a;if(!c.circular&&b<0||b>a.getSize()||b<-1)return a;var i=b;if(b.jquery)b=a.getItems().index(b);else i=a.getItems().eq(b);var q=e.Event("onBeforeSeek");if(!h){l.trigger(q,[b,d]);if(q.isDefaultPrevented()||!i.length)return a}i=m?{top:-i.position().top}:{left:-i.position().left};k=b;j=a;if(d===undefined)d=c.speed;g.animate(i,d,c.easing,h||function(){l.trigger("onSeek",[b])});return a}});e.each(["onBeforeSeek","onSeek","onAddItem"],function(b,d){e.isFunction(c[d])&&e(a).bind(d,c[d]);a[d]=function(h){e(a).bind(d,
-h);return a}});if(c.circular){var r=a.getItems().slice(-1).clone().prependTo(g),s=a.getItems().eq(1).clone().appendTo(g);r.add(s).addClass(c.clonedClass);a.onBeforeSeek(function(b,d,h){if(!b.isDefaultPrevented())if(d==-1){a.seekTo(r,h,function(){a.end(0)});return b.preventDefault()}else d==a.getSize()&&a.seekTo(s,h,function(){a.begin(0)})});a.seekTo(0,0,function(){})}var o=n(f,c.prev).click(function(){a.prev()}),p=n(f,c.next).click(function(){a.next()});!c.circular&&a.getSize()>1&&a.onBeforeSeek(function(b,
-d){setTimeout(function(){if(!b.isDefaultPrevented()){o.toggleClass(c.disabledClass,d<=0);p.toggleClass(c.disabledClass,d>=a.getSize()-1)}},1)});c.mousewheel&&e.fn.mousewheel&&f.mousewheel(function(b,d){if(c.mousewheel){a.move(d<0?1:-1,c.wheelSpeed||50);return false}});c.keyboard&&e(document).bind("keydown.scrollable",function(b){if(!(!c.keyboard||b.altKey||b.ctrlKey||e(b.target).is(":input")))if(!(c.keyboard!="static"&&j!=a)){var d=b.keyCode;if(m&&(d==38||d==40)){a.move(d==38?-1:1);return b.preventDefault()}if(!m&&
-(d==37||d==39)){a.move(d==37?-1:1);return b.preventDefault()}}});c.initialIndex&&a.seekTo(c.initialIndex,0,function(){})}e.tools=e.tools||{version:"1.2.4"};e.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,wheelSpeed:0}};var j;e.fn.scrollable=function(f){var c=this.data("scrollable");if(c)return c;f=e.extend({},
-e.tools.scrollable.conf,f);this.each(function(){c=new t(e(this),f);e(this).data("scrollable",c)});return f.api?c:this}})(jQuery);
-(function(c){var g=c.tools.scrollable;g.autoscroll={conf:{autoplay:true,interval:3E3,autopause:true}};c.fn.autoscroll=function(d){if(typeof d=="number")d={interval:d};var b=c.extend({},g.autoscroll.conf,d),h;this.each(function(){var a=c(this).data("scrollable");if(a)h=a;var e,i,f=true;a.play=function(){if(!e){f=false;e=setInterval(function(){a.next()},b.interval);a.next()}};a.pause=function(){e=clearInterval(e)};a.stop=function(){a.pause();f=true};b.autopause&&a.getRoot().add(a.getNaviButtons()).hover(function(){a.pause();
-clearInterval(i)},function(){f||(i=setTimeout(a.play,b.interval))});b.autoplay&&setTimeout(a.play,b.interval)});return b.api?h:this}})(jQuery);
-(function(d){function p(b,g){var h=d(g);return h.length<2?h:b.parent().find(g)}var m=d.tools.scrollable;m.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:false,idPrefix:null,history:false}};d.fn.navigator=function(b){if(typeof b=="string")b={navi:b};b=d.extend({},m.navigator.conf,b);var g;this.each(function(){function h(a,c,i){e.seekTo(c);if(j){if(location.hash)location.hash=a.attr("href").replace("#","")}else return i.preventDefault()}function f(){return k.find(b.naviItem||
-"> *")}function n(a){var c=d("<"+(b.naviItem||"a")+"/>").click(function(i){h(d(this),a,i)}).attr("href","#"+a);a===0&&c.addClass(l);b.indexed&&c.text(a+1);b.idPrefix&&c.attr("id",b.idPrefix+a);return c.appendTo(k)}function o(a,c){a=f().eq(c.replace("#",""));a.length||(a=f().filter("[href="+c+"]"));a.click()}var e=d(this).data("scrollable"),k=b.navi.jquery?b.navi:p(e.getRoot(),b.navi),q=e.getNaviButtons(),l=b.activeClass,j=b.history&&d.fn.history;if(e)g=e;e.getNaviButtons=function(){return q.add(k)};
-f().length?f().each(function(a){d(this).click(function(c){h(d(this),a,c)})}):d.each(e.getItems(),function(a){n(a)});e.onBeforeSeek(function(a,c){setTimeout(function(){if(!a.isDefaultPrevented()){var i=f().eq(c);!a.isDefaultPrevented()&&i.length&&f().removeClass(l).eq(c).addClass(l)}},1)});e.onAddItem(function(a,c){c=n(e.getItems().index(c));j&&c.history(o)});j&&f().history(o)});return b.api?g:this}})(jQuery);
-(function(a){function t(d,b){var c=this,i=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+
-'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";i.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var j=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof j=="string")j=j=="center"?Math.max((o.height()-v)/2,0):parseInt(j,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:j,left:r},function(){if(m){e.type="onLoad";i.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click",
-c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";i.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";i.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f},
-getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(j){a(c).bind(h,j);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('<a class="close"></a>');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.4"};a.tools.overlay={addEffect:function(d,
-b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),i=a(window);if(!c.fixed){d.top+=i.scrollTop();d.left+=i.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed,
-d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery);
-(function(i){function j(b){var d=b.offset();return{top:d.top+b.height()/2,left:d.left+b.width()/2}}var k=i.tools.overlay,f=i(window);i.extend(k.conf,{start:{top:null,left:null},fadeInSpeed:"fast",zIndex:9999});function n(b,d){var a=this.getOverlay(),c=this.getConf(),g=this.getTrigger(),o=this,l=a.outerWidth({margin:true}),h=a.data("img");if(!h){var e=a.css("backgroundImage");if(!e)throw"background-image CSS property not set for overlay";e=e.slice(e.indexOf("(")+1,e.indexOf(")")).replace(/\"/g,"");
-a.css("backgroundImage","none");h=i('<img src="'+e+'"/>');h.css({border:0,display:"none"}).width(l);i("body").append(h);a.data("img",h)}e=c.start.top||Math.round(f.height()/2);var m=c.start.left||Math.round(f.width()/2);if(g){g=j(g);e=g.top;m=g.left}h.css({position:"absolute",top:e,left:m,width:0,zIndex:c.zIndex}).show();b.top+=f.scrollTop();b.left+=f.scrollLeft();b.position="absolute";a.css(b);h.animate({top:a.css("top"),left:a.css("left"),width:l},c.speed,function(){if(c.fixed){b.top-=f.scrollTop();
-b.left-=f.scrollLeft();b.position="fixed";h.add(a).css(b)}a.css("zIndex",c.zIndex+1).fadeIn(c.fadeInSpeed,function(){o.isOpened()&&!i(this).index(a)?d.call():a.hide()})})}function p(b){var d=this.getOverlay().hide(),a=this.getConf(),c=this.getTrigger();d=d.data("img");var g={top:a.start.top,left:a.start.left,width:0};c&&i.extend(g,j(c));a.fixed&&d.css({position:"absolute"}).animate({top:"+="+f.scrollTop(),left:"+="+f.scrollLeft()},0);d.animate(g,a.closeSpeed,b)}k.addEffect("apple",n,p)})(jQuery);
-(function(d){function R(b,c){return 32-(new Date(b,c,32)).getDate()}function S(b,c){b=""+b;for(c=c||2;b.length<c;)b="0"+b;return b}function T(b,c,i){var p=b.getDate(),h=b.getDay(),q=b.getMonth();b=b.getFullYear();var f={d:p,dd:S(p),ddd:B[i].shortDays[h],dddd:B[i].days[h],m:q+1,mm:S(q+1),mmm:B[i].shortMonths[q],mmmm:B[i].months[q],yy:String(b).slice(2),yyyy:b};c=c.replace(X,function(r){return r in f?f[r]:r.slice(1,r.length-1)});return Y.html(c).html()}function y(b){return parseInt(b,10)}function U(b,
-c){return b.getFullYear()===c.getFullYear()&&b.getMonth()==c.getMonth()&&b.getDate()==c.getDate()}function C(b){if(b){if(b.constructor==Date)return b;if(typeof b=="string"){var c=b.split("-");if(c.length==3)return new Date(y(c[0]),y(c[1])-1,y(c[2]));if(!/^-?\d+$/.test(b))return;b=y(b)}c=new Date;c.setDate(c.getDate()+b);return c}}function Z(b,c){function i(a,e,g){m=a;D=a.getFullYear();E=a.getMonth();G=a.getDate();g=g||d.Event("api");g.type="change";H.trigger(g,[a]);if(!g.isDefaultPrevented()){b.val(T(a,
-e.format,e.lang));b.data("date",a);h.hide(g)}}function p(a){a.type="onShow";H.trigger(a);d(document).bind("keydown.d",function(e){if(e.ctrlKey)return true;var g=e.keyCode;if(g==8){b.val("");return h.hide(e)}if(g==27)return h.hide(e);if(d(V).index(g)>=0){if(!v){h.show(e);return e.preventDefault()}var j=d("#"+f.weeks+" a"),s=d("."+f.focus),n=j.index(s);s.removeClass(f.focus);if(g==74||g==40)n+=7;else if(g==75||g==38)n-=7;else if(g==76||g==39)n+=1;else if(g==72||g==37)n-=1;if(n>41){h.addMonth();s=d("#"+
-f.weeks+" a:eq("+(n-42)+")")}else if(n<0){h.addMonth(-1);s=d("#"+f.weeks+" a:eq("+(n+42)+")")}else s=j.eq(n);s.addClass(f.focus);return e.preventDefault()}if(g==34)return h.addMonth();if(g==33)return h.addMonth(-1);if(g==36)return h.today();if(g==13)d(e.target).is("select")||d("."+f.focus).click();return d([16,17,18,9]).index(g)>=0});d(document).bind("click.d",function(e){var g=e.target;if(!d(g).parents("#"+f.root).length&&g!=b[0]&&(!L||g!=L[0]))h.hide(e)})}var h=this,q=new Date,f=c.css,r=B[c.lang],
-k=d("#"+f.root),M=k.find("#"+f.title),L,I,J,D,E,G,m=b.attr("data-value")||c.value||b.val(),o=b.attr("min")||c.min,t=b.attr("max")||c.max,v;if(o===0)o="0";m=C(m)||q;o=C(o||c.yearRange[0]*365);t=C(t||c.yearRange[1]*365);if(!r)throw"Dateinput: invalid language: "+c.lang;if(b.attr("type")=="date"){var N=d("<input/>");d.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(a,e){N.attr(e,b.attr(e))});b.replaceWith(N);b=N}b.addClass(f.input);var H=
-b.add(h);if(!k.length){k=d("<div><div><a/><div/><a/></div><div><div/><div/></div></div>").hide().css({position:"absolute"}).attr("id",f.root);k.children().eq(0).attr("id",f.head).end().eq(1).attr("id",f.body).children().eq(0).attr("id",f.days).end().eq(1).attr("id",f.weeks).end().end().end().find("a").eq(0).attr("id",f.prev).end().eq(1).attr("id",f.next);M=k.find("#"+f.head).find("div").attr("id",f.title);if(c.selectors){var z=d("<select/>").attr("id",f.month),A=d("<select/>").attr("id",f.year);M.append(z.add(A))}for(var $=
-k.find("#"+f.days),O=0;O<7;O++)$.append(d("<span/>").text(r.shortDays[(O+c.firstDay)%7]));d("body").append(k)}if(c.trigger)L=d("<a/>").attr("href","#").addClass(f.trigger).click(function(a){h.show();return a.preventDefault()}).insertAfter(b);var K=k.find("#"+f.weeks);A=k.find("#"+f.year);z=k.find("#"+f.month);d.extend(h,{show:function(a){if(!(b.is("[readonly]")||v)){a=a||d.Event();a.type="onBeforeShow";H.trigger(a);if(!a.isDefaultPrevented()){d.each(W,function(){this.hide()});v=true;z.unbind("change").change(function(){h.setValue(A.val(),
-d(this).val())});A.unbind("change").change(function(){h.setValue(d(this).val(),z.val())});I=k.find("#"+f.prev).unbind("click").click(function(){I.hasClass(f.disabled)||h.addMonth(-1);return false});J=k.find("#"+f.next).unbind("click").click(function(){J.hasClass(f.disabled)||h.addMonth();return false});h.setValue(m);var e=b.position();k.css({top:e.top+b.outerHeight({margins:true})+c.offset[0],left:e.left+c.offset[1]});if(c.speed)k.show(c.speed,function(){p(a)});else{k.show();p(a)}return h}}},setValue:function(a,
-e,g){var j;if(parseInt(e,10)>=-1){a=y(a);e=y(e);g=y(g);j=new Date(a,e,g)}else{j=a||m;a=j.getFullYear();e=j.getMonth();g=j.getDate()}if(e==-1){e=11;a--}else if(e==12){e=0;a++}if(!v){i(j,c);return h}E=e;D=a;g=new Date(a,e,1-c.firstDay);g=g.getDay();var s=R(a,e),n=R(a,e-1),P;if(c.selectors){z.empty();d.each(r.months,function(w,F){o<new Date(a,w+1,-1)&&t>new Date(a,w,0)&&z.append(d("<option/>").html(F).attr("value",w))});A.empty();j=q.getFullYear();for(var l=j+c.yearRange[0];l<j+c.yearRange[1];l++)o<
-new Date(l+1,-1,0)&&t>new Date(l,0,0)&&A.append(d("<option/>").text(l));z.val(e);A.val(a)}else M.html(r.months[e]+" "+a);K.empty();I.add(J).removeClass(f.disabled);l=!g?-7:0;for(var u,x;l<(!g?35:42);l++){u=d("<a/>");if(l%7===0){P=d("<div/>").addClass(f.week);K.append(P)}if(l<g){u.addClass(f.off);x=n-g+l+1;j=new Date(a,e-1,x)}else if(l>=g+s){u.addClass(f.off);x=l-s-g+1;j=new Date(a,e+1,x)}else{x=l-g+1;j=new Date(a,e,x);if(U(m,j))u.attr("id",f.current).addClass(f.focus);else U(q,j)&&u.attr("id",f.today)}o&&
-j<o&&u.add(I).addClass(f.disabled);t&&j>t&&u.add(J).addClass(f.disabled);u.attr("href","#"+x).text(x).data("date",j);P.append(u)}K.find("a").click(function(w){var F=d(this);if(!F.hasClass(f.disabled)){d("#"+f.current).removeAttr("id");F.attr("id",f.current);i(F.data("date"),c,w)}return false});f.sunday&&K.find(f.week).each(function(){var w=c.firstDay?7-c.firstDay:0;d(this).children().slice(w,w+1).addClass(f.sunday)});return h},setMin:function(a,e){o=C(a);e&&m<o&&h.setValue(o);return h},setMax:function(a,
-e){t=C(a);e&&m>t&&h.setValue(t);return h},today:function(){return h.setValue(q)},addDay:function(a){return this.setValue(D,E,G+(a||1))},addMonth:function(a){return this.setValue(D,E+(a||1),G)},addYear:function(a){return this.setValue(D+(a||1),E,G)},hide:function(a){if(v){a=d.Event();a.type="onHide";H.trigger(a);d(document).unbind("click.d").unbind("keydown.d");if(a.isDefaultPrevented())return;k.hide();v=false}return h},getConf:function(){return c},getInput:function(){return b},getCalendar:function(){return k},
-getValue:function(a){return a?T(m,a,c.lang):m},isOpen:function(){return v}});d.each(["onBeforeShow","onShow","change","onHide"],function(a,e){d.isFunction(c[e])&&d(h).bind(e,c[e]);h[e]=function(g){d(h).bind(e,g);return h}});b.bind("focus click",h.show).keydown(function(a){var e=a.keyCode;if(!v&&d(V).index(e)>=0){h.show(a);return a.preventDefault()}return a.shiftKey||a.ctrlKey||a.altKey||e==9?true:a.preventDefault()});C(b.val())&&i(m,c)}d.tools=d.tools||{version:"1.2.4"};var W=[],Q,V=[75,76,38,39,
-74,72,40,37],B={};Q=d.tools.dateinput={conf:{format:"mm/dd/yy",selectors:false,yearRange:[-5,5],lang:"en",offset:[0,0],speed:0,firstDay:0,min:undefined,max:undefined,trigger:false,css:{prefix:"cal",input:"date",root:0,head:0,title:0,prev:0,next:0,month:0,year:0,days:0,body:0,weeks:0,today:0,current:0,week:0,off:0,sunday:0,focus:0,disabled:0,trigger:0}},localize:function(b,c){d.each(c,function(i,p){c[i]=p.split(",")});B[b]=c}};Q.localize("en",{months:"January,February,March,April,May,June,July,August,September,October,November,December",
-shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",days:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",shortDays:"Sun,Mon,Tue,Wed,Thu,Fri,Sat"});var X=/d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*'/g,Y=d("<a/>");d.expr[":"].date=function(b){var c=b.getAttribute("type");return c&&c=="date"||!!d(b).data("dateinput")};d.fn.dateinput=function(b){if(this.data("dateinput"))return this;b=d.extend(true,{},Q.conf,b);d.each(b.css,function(i,p){if(!p&&i!="prefix")b.css[i]=(b.css.prefix||"")+
-(p||i)});var c;this.each(function(){var i=new Z(d(this),b);W.push(i);i=i.getInput().data("dateinput",i);c=c?c.add(i):i});return c?c:this}})(jQuery);
-(function(e){function F(d,a){a=Math.pow(10,a);return Math.round(d*a)/a}function p(d,a){if(a=parseInt(d.css(a),10))return a;return(d=d[0].currentStyle)&&d.width&&parseInt(d.width,10)}function C(d){return(d=d.data("events"))&&d.onSlide}function G(d,a){function h(c,b,f,j){if(f===undefined)f=b/k*z;else if(j)f-=a.min;if(r)f=Math.round(f/r)*r;if(b===undefined||r)b=f*k/z;if(isNaN(f))return g;b=Math.max(0,Math.min(b,k));f=b/k*z;if(j||!n)f+=a.min;if(n)if(j)b=k-b;else f=a.max-f;f=F(f,t);var q=c.type=="click";
-if(D&&l!==undefined&&!q){c.type="onSlide";A.trigger(c,[f,b]);if(c.isDefaultPrevented())return g}j=q?a.speed:0;q=q?function(){c.type="change";A.trigger(c,[f])}:null;if(n){m.animate({top:b},j,q);a.progress&&B.animate({height:k-b+m.width()/2},j)}else{m.animate({left:b},j,q);a.progress&&B.animate({width:b+m.width()/2},j)}l=f;H=b;d.val(f);return g}function s(){if(n=a.vertical||p(i,"height")>p(i,"width")){k=p(i,"height")-p(m,"height");u=i.offset().top+k}else{k=p(i,"width")-p(m,"width");u=i.offset().left}}
-function v(){s();g.setValue(a.value||a.min)}var g=this,o=a.css,i=e("<div><div/><a href='#'/></div>").data("rangeinput",g),n,l,u,k,H;d.before(i);var m=i.addClass(o.slider).find("a").addClass(o.handle),B=i.find("div").addClass(o.progress);e.each("min,max,step,value".split(","),function(c,b){c=d.attr(b);if(parseFloat(c))a[b]=parseFloat(c,10)});var z=a.max-a.min,r=a.step=="any"?0:a.step,t=a.precision;if(t===undefined)try{t=r.toString().split(".")[1].length}catch(I){t=0}if(d.attr("type")=="range"){var w=
-e("<input/>");e.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(c,b){w.attr(b,d.attr(b))});w.val(a.value);d.replaceWith(w);d=w}d.addClass(o.input);var A=e(g).add(d),D=true;e.extend(g,{getValue:function(){return l},setValue:function(c,b){return h(b||e.Event("api"),undefined,c,true)},getConf:function(){return a},getProgress:function(){return B},getHandle:function(){return m},getInput:function(){return d},step:function(c,b){b=b||e.Event();
-var f=a.step=="any"?1:a.step;g.setValue(l+f*(c||1),b)},stepUp:function(c){return g.step(c||1)},stepDown:function(c){return g.step(-c||-1)}});e.each("onSlide,change".split(","),function(c,b){e.isFunction(a[b])&&e(g).bind(b,a[b]);g[b]=function(f){e(g).bind(b,f);return g}});m.drag({drag:false}).bind("dragStart",function(){D=C(e(g))||C(d)}).bind("drag",function(c,b,f){if(d.is(":disabled"))return false;h(c,n?b:f)}).bind("dragEnd",function(c){if(!c.isDefaultPrevented()){c.type="change";A.trigger(c,[l])}}).click(function(c){return c.preventDefault()});
-i.click(function(c){if(d.is(":disabled")||c.target==m[0])return c.preventDefault();s();var b=m.width()/2;h(c,n?k-u-b+c.pageY:c.pageX-u-b)});a.keyboard&&d.keydown(function(c){if(!d.attr("readonly")){var b=c.keyCode,f=e([75,76,38,33,39]).index(b)!=-1,j=e([74,72,40,34,37]).index(b)!=-1;if((f||j)&&!(c.shiftKey||c.altKey||c.ctrlKey)){if(f)g.step(b==33?10:1,c);else if(j)g.step(b==34?-10:-1,c);return c.preventDefault()}}});d.blur(function(c){var b=e(this).val();b!==l&&g.setValue(b,c)});e.extend(d[0],{stepUp:g.stepUp,
-stepDown:g.stepDown});v();k||e(window).load(v)}e.tools=e.tools||{version:"1.2.4"};var E;E=e.tools.rangeinput={conf:{min:0,max:100,step:"any",steps:0,value:0,precision:undefined,vertical:0,keyboard:true,progress:false,speed:100,css:{input:"range",slider:"slider",progress:"progress",handle:"handle"}}};var x,y;e.fn.drag=function(d){document.ondragstart=function(){return false};d=e.extend({x:true,y:true,drag:true},d);x=x||e(document).bind("mousedown mouseup",function(a){var h=e(a.target);if(a.type=="mousedown"&&
-h.data("drag")){var s=h.position(),v=a.pageX-s.left,g=a.pageY-s.top,o=true;x.bind("mousemove.drag",function(i){var n=i.pageX-v;i=i.pageY-g;var l={};if(d.x)l.left=n;if(d.y)l.top=i;if(o){h.trigger("dragStart");o=false}d.drag&&h.css(l);h.trigger("drag",[i,n]);y=h});a.preventDefault()}else try{y&&y.trigger("dragEnd")}finally{x.unbind("mousemove.drag");y=null}});return this.data("drag",true)};e.expr[":"].range=function(d){var a=d.getAttribute("type");return a&&a=="range"||!!e(d).filter("input").data("rangeinput")};
-e.fn.rangeinput=function(d){if(this.data("rangeinput"))return this;d=e.extend(true,{},E.conf,d);var a;this.each(function(){var h=new G(e(this),e.extend(true,{},d));h=h.getInput().data("rangeinput",h);a=a?a.add(h):h});return a?a:this}})(jQuery);
-(function(e){function t(a,b,c){var k=a.offset().top,f=a.offset().left,l=c.position.split(/,?\s+/),p=l[0];l=l[1];k-=b.outerHeight()-c.offset[0];f+=a.outerWidth()+c.offset[1];c=b.outerHeight()+a.outerHeight();if(p=="center")k+=c/2;if(p=="bottom")k+=c;a=a.outerWidth();if(l=="center")f-=(a+b.outerWidth())/2;if(l=="left")f-=a;return{top:k,left:f}}function x(a){function b(){return this.getAttribute("type")==a}b.key="[type="+a+"]";return b}function u(a,b,c){function k(g,d,j){if(!(!c.grouped&&g.length)){var h;
-if(j===false||e.isArray(j)){h=i.messages[d.key||d]||i.messages["*"];h=h[c.lang]||i.messages["*"].en;(d=h.match(/\$\d/g))&&e.isArray(j)&&e.each(d,function(n){h=h.replace(this,j[n])})}else h=j[c.lang]||j;g.push(h)}}var f=this,l=b.add(f);a=a.not(":button, :image, :reset, :submit");e.extend(f,{getConf:function(){return c},getForm:function(){return b},getInputs:function(){return a},reflow:function(){a.each(function(){var g=e(this),d=g.data("msg.el");if(d){g=t(g,d,c);d.css({top:g.top,left:g.left})}});return f},
-invalidate:function(g,d){if(!d){var j=[];e.each(g,function(h,n){h=a.filter("[name='"+h+"']");if(h.length){h.trigger("OI",[n]);j.push({input:h,messages:[n]})}});g=j;d=e.Event()}d.type="onFail";l.trigger(d,[g]);d.isDefaultPrevented()||r[c.effect][0].call(f,g,d);return f},reset:function(g){g=g||a;g.removeClass(c.errorClass).each(function(){var d=e(this).data("msg.el");if(d){d.remove();e(this).data("msg.el",null)}}).unbind(c.errorInputEvent||"");return f},destroy:function(){b.unbind(c.formEvent).unbind("reset.V");
-a.unbind(c.inputEvent||"").unbind("change.V");return f.reset()},checkValidity:function(g,d){g=g||a;g=g.not(":disabled");if(!g.length)return true;d=d||e.Event();d.type="onBeforeValidate";l.trigger(d,[g]);if(d.isDefaultPrevented())return d.result;var j=[],h=c.errorInputEvent+".v";g.not(":radio:not(:checked)").each(function(){var q=[],m=e(this).unbind(h).data("messages",q);e.each(v,function(){var o=this,s=o[0];if(m.filter(s).length){o=o[1].call(f,m,m.val());if(o!==true){d.type="onBeforeFail";l.trigger(d,
-[m,s]);if(d.isDefaultPrevented())return false;var w=m.attr(c.messageAttr);if(w){q=[w];return false}else k(q,s,o)}}});if(q.length){j.push({input:m,messages:q});m.trigger("OI",[q]);c.errorInputEvent&&m.bind(h,function(o){f.checkValidity(m,o)})}if(c.singleError&&j.length)return false});var n=r[c.effect];if(!n)throw'Validator: cannot find effect "'+c.effect+'"';if(j.length){f.invalidate(j,d);return false}else{n[1].call(f,g,d);d.type="onSuccess";l.trigger(d,[g]);g.unbind(h)}return true}});e.each("onBeforeValidate,onBeforeFail,onFail,onSuccess".split(","),
-function(g,d){e.isFunction(c[d])&&e(f).bind(d,c[d]);f[d]=function(j){e(f).bind(d,j);return f}});c.formEvent&&b.bind(c.formEvent,function(g){if(!f.checkValidity(null,g))return g.preventDefault()});b.bind("reset.V",function(){f.reset()});a[0]&&a[0].validity&&a.each(function(){this.oninvalid=function(){return false}});if(b[0])b[0].checkValidity=f.checkValidity;c.inputEvent&&a.bind(c.inputEvent,function(g){f.checkValidity(e(this),g)});a.filter(":checkbox, select").filter("[required]").bind("change.V",
-function(g){var d=e(this);if(this.checked||d.is("select")&&e(this).val())r[c.effect][1].call(f,d,g)});var p=a.filter(":radio").change(function(g){f.checkValidity(p,g)});e(window).resize(function(){f.reflow()})}e.tools=e.tools||{version:"1.2.4"};var y=/\[type=([a-z]+)\]/,z=/^-?[0-9]*(\.[0-9]+)?$/,A=/^([a-z0-9_\.\-\+]+)@([\da-z\.\-]+)\.([a-z\.]{2,6})$/i,B=/^(https?:\/\/)?[\da-z\.\-]+\.[a-z\.]{2,6}[#\?\/\w \.\-=]*$/i,i;i=e.tools.validator={conf:{grouped:false,effect:"default",errorClass:"invalid",inputEvent:null,
-errorInputEvent:"keyup",formEvent:"submit",lang:"en",message:"<div/>",messageAttr:"data-message",messageClass:"error",offset:[0,0],position:"center right",singleError:false,speed:"normal"},messages:{"*":{en:"Please correct this value"}},localize:function(a,b){e.each(b,function(c,k){i.messages[c]=i.messages[c]||{};i.messages[c][a]=k})},localizeFn:function(a,b){i.messages[a]=i.messages[a]||{};e.extend(i.messages[a],b)},fn:function(a,b,c){if(e.isFunction(b))c=b;else{if(typeof b=="string")b={en:b};this.messages[a.key||
-a]=b}if(b=y.exec(a))a=x(b[1]);v.push([a,c])},addEffect:function(a,b,c){r[a]=[b,c]}};var v=[],r={"default":[function(a){var b=this.getConf();e.each(a,function(c,k){c=k.input;c.addClass(b.errorClass);var f=c.data("msg.el");if(!f){f=e(b.message).addClass(b.messageClass).appendTo(document.body);c.data("msg.el",f)}f.css({visibility:"hidden",display:"none"}).find("span").remove();e.each(k.messages,function(l,p){e("<span/>").html(p).appendTo(f)});f.outerWidth()==f.parent().width()&&f.add(f.find("p")).css({display:"inline"});
-k=t(c,f,b);f.css({visibility:"visible",position:"absolute",top:k.top,left:k.left}).fadeIn(b.speed)})},function(a){var b=this.getConf();a.removeClass(b.errorClass).each(function(){var c=e(this).data("msg.el");c&&c.css({visibility:"hidden"})})}]};e.each("email,url,number".split(","),function(a,b){e.expr[":"][b]=function(c){return c.getAttribute("type")===b}});e.fn.oninvalid=function(a){return this[a?"bind":"trigger"]("OI",a)};i.fn(":email","Please enter a valid email address",function(a,b){return!b||
-A.test(b)});i.fn(":url","Please enter a valid URL",function(a,b){return!b||B.test(b)});i.fn(":number","Please enter a numeric value.",function(a,b){return z.test(b)});i.fn("[max]","Please enter a value smaller than $1",function(a,b){if(b===""||e.tools.dateinput&&a.is(":date"))return true;a=a.attr("max");return parseFloat(b)<=parseFloat(a)?true:[a]});i.fn("[min]","Please enter a value larger than $1",function(a,b){if(b===""||e.tools.dateinput&&a.is(":date"))return true;a=a.attr("min");return parseFloat(b)>=
-parseFloat(a)?true:[a]});i.fn("[required]","Please complete this mandatory field.",function(a,b){if(a.is(":checkbox"))return a.is(":checked");return!!b});i.fn("[pattern]",function(a){var b=new RegExp("^"+a.attr("pattern")+"$");return b.test(a.val())});e.fn.validator=function(a){var b=this.data("validator");if(b){b.destroy();this.removeData("validator")}a=e.extend(true,{},i.conf,a);if(this.is("form"))return this.each(function(){var c=e(this);b=new u(c.find(":input"),c,a);c.data("validator",b)});else{b=
-new u(this,this.eq(0).closest("form"),a);return this.data("validator",b)}}})(jQuery);
--- a/web/hdabo/static/hdabo/js/jquery.validate.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1131 +0,0 @@
-/*
- * jQuery validation plug-in 1.5.5
- *
- * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
- * http://docs.jquery.com/Plugins/Validation
- *
- * Copyright (c) 2006 - 2008 Jörn Zaefferer
- *
- * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-
-(function($) {
-
-$.extend($.fn, {
- // http://docs.jquery.com/Plugins/Validation/validate
- validate: function( options ) {
-
- // if nothing is selected, return nothing; can't chain anyway
- if (!this.length) {
- options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
- return;
- }
-
- // check if a validator for this form was already created
- var validator = $.data(this[0], 'validator');
- if ( validator ) {
- return validator;
- }
-
- validator = new $.validator( options, this[0] );
- $.data(this[0], 'validator', validator);
-
- if ( validator.settings.onsubmit ) {
-
- // allow suppresing validation by adding a cancel class to the submit button
- this.find("input, button").filter(".cancel").click(function() {
- validator.cancelSubmit = true;
- });
-
- // when a submitHandler is used, capture the submitting button
- if (validator.settings.submitHandler) {
- this.find("input, button").filter(":submit").click(function() {
- validator.submitButton = this;
- });
- }
-
- // validate the form on submit
- this.submit( function( event ) {
- if ( validator.settings.debug )
- // prevent form submit to be able to see console output
- event.preventDefault();
-
- function handle() {
- if ( validator.settings.submitHandler ) {
- if (validator.submitButton) {
- // insert a hidden input as a replacement for the missing submit button
- var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
- }
- validator.settings.submitHandler.call( validator, validator.currentForm );
- if (validator.submitButton) {
- // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
- hidden.remove();
- }
- return false;
- }
- return true;
- }
-
- // prevent submit for invalid forms or custom submit handlers
- if ( validator.cancelSubmit ) {
- validator.cancelSubmit = false;
- return handle();
- }
- if ( validator.form() ) {
- if ( validator.pendingRequest ) {
- validator.formSubmitted = true;
- return false;
- }
- return handle();
- } else {
- validator.focusInvalid();
- return false;
- }
- });
- }
-
- return validator;
- },
- // http://docs.jquery.com/Plugins/Validation/valid
- valid: function() {
- if ( $(this[0]).is('form')) {
- return this.validate().form();
- } else {
- var valid = true;
- var validator = $(this[0].form).validate();
- this.each(function() {
- valid &= validator.element(this);
- });
- return valid;
- }
- },
- // attributes: space seperated list of attributes to retrieve and remove
- removeAttrs: function(attributes) {
- var result = {},
- $element = this;
- $.each(attributes.split(/\s/), function(index, value) {
- result[value] = $element.attr(value);
- $element.removeAttr(value);
- });
- return result;
- },
- // http://docs.jquery.com/Plugins/Validation/rules
- rules: function(command, argument) {
- var element = this[0];
-
- if (command) {
- var settings = $.data(element.form, 'validator').settings;
- var staticRules = settings.rules;
- var existingRules = $.validator.staticRules(element);
- switch(command) {
- case "add":
- $.extend(existingRules, $.validator.normalizeRule(argument));
- staticRules[element.name] = existingRules;
- if (argument.messages)
- settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
- break;
- case "remove":
- if (!argument) {
- delete staticRules[element.name];
- return existingRules;
- }
- var filtered = {};
- $.each(argument.split(/\s/), function(index, method) {
- filtered[method] = existingRules[method];
- delete existingRules[method];
- });
- return filtered;
- }
- }
-
- var data = $.validator.normalizeRules(
- $.extend(
- {},
- $.validator.metadataRules(element),
- $.validator.classRules(element),
- $.validator.attributeRules(element),
- $.validator.staticRules(element)
- ), element);
-
- // make sure required is at front
- if (data.required) {
- var param = data.required;
- delete data.required;
- data = $.extend({required: param}, data);
- }
-
- return data;
- }
-});
-
-// Custom selectors
-$.extend($.expr[":"], {
- // http://docs.jquery.com/Plugins/Validation/blank
- blank: function(a) {return !$.trim(a.value);},
- // http://docs.jquery.com/Plugins/Validation/filled
- filled: function(a) {return !!$.trim(a.value);},
- // http://docs.jquery.com/Plugins/Validation/unchecked
- unchecked: function(a) {return !a.checked;}
-});
-
-// constructor for validator
-$.validator = function( options, form ) {
- this.settings = $.extend( {}, $.validator.defaults, options );
- this.currentForm = form;
- this.init();
-};
-
-$.validator.format = function(source, params) {
- if ( arguments.length == 1 )
- return function() {
- var args = $.makeArray(arguments);
- args.unshift(source);
- return $.validator.format.apply( this, args );
- };
- if ( arguments.length > 2 && params.constructor != Array ) {
- params = $.makeArray(arguments).slice(1);
- }
- if ( params.constructor != Array ) {
- params = [ params ];
- }
- $.each(params, function(i, n) {
- source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
- });
- return source;
-};
-
-$.extend($.validator, {
-
- defaults: {
- messages: {},
- groups: {},
- rules: {},
- errorClass: "error",
- validClass: "valid",
- errorElement: "label",
- focusInvalid: true,
- errorContainer: $( [] ),
- errorLabelContainer: $( [] ),
- onsubmit: true,
- ignore: [],
- ignoreTitle: false,
- onfocusin: function(element) {
- this.lastActive = element;
-
- // hide error label and remove error class on focus if enabled
- if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
- this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
- this.errorsFor(element).hide();
- }
- },
- onfocusout: function(element) {
- if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
- this.element(element);
- }
- },
- onkeyup: function(element) {
- if ( element.name in this.submitted || element == this.lastElement ) {
- this.element(element);
- }
- },
- onclick: function(element) {
- if ( element.name in this.submitted )
- this.element(element);
- },
- highlight: function( element, errorClass, validClass ) {
- $(element).addClass(errorClass).removeClass(validClass);
- },
- unhighlight: function( element, errorClass, validClass ) {
- $(element).removeClass(errorClass).addClass(validClass);
- }
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
- setDefaults: function(settings) {
- $.extend( $.validator.defaults, settings );
- },
-
- messages: {
- required: "This field is required.",
- remote: "Please fix this field.",
- email: "Please enter a valid email address.",
- url: "Please enter a valid URL.",
- date: "Please enter a valid date.",
- dateISO: "Please enter a valid date (ISO).",
- dateDE: "Bitte geben Sie ein gültiges Datum ein.",
- number: "Please enter a valid number.",
- numberDE: "Bitte geben Sie eine Nummer ein.",
- digits: "Please enter only digits",
- creditcard: "Please enter a valid credit card number.",
- equalTo: "Please enter the same value again.",
- accept: "Please enter a value with a valid extension.",
- maxlength: $.validator.format("Please enter no more than {0} characters."),
- minlength: $.validator.format("Please enter at least {0} characters."),
- rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
- range: $.validator.format("Please enter a value between {0} and {1}."),
- max: $.validator.format("Please enter a value less than or equal to {0}."),
- min: $.validator.format("Please enter a value greater than or equal to {0}.")
- },
-
- autoCreateRanges: false,
-
- prototype: {
-
- init: function() {
- this.labelContainer = $(this.settings.errorLabelContainer);
- this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
- this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
- this.submitted = {};
- this.valueCache = {};
- this.pendingRequest = 0;
- this.pending = {};
- this.invalid = {};
- this.reset();
-
- var groups = (this.groups = {});
- $.each(this.settings.groups, function(key, value) {
- $.each(value.split(/\s/), function(index, name) {
- groups[name] = key;
- });
- });
- var rules = this.settings.rules;
- $.each(rules, function(key, value) {
- rules[key] = $.validator.normalizeRule(value);
- });
-
- function delegate(event) {
- var validator = $.data(this[0].form, "validator");
- validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
- }
- $(this.currentForm)
- .delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
- .delegate("click", ":radio, :checkbox", delegate);
-
- if (this.settings.invalidHandler)
- $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/form
- form: function() {
- this.checkForm();
- $.extend(this.submitted, this.errorMap);
- this.invalid = $.extend({}, this.errorMap);
- if (!this.valid())
- $(this.currentForm).triggerHandler("invalid-form", [this]);
- this.showErrors();
- return this.valid();
- },
-
- checkForm: function() {
- this.prepareForm();
- for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
- this.check( elements[i] );
- }
- return this.valid();
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/element
- element: function( element ) {
- element = this.clean( element );
- this.lastElement = element;
- this.prepareElement( element );
- this.currentElements = $(element);
- var result = this.check( element );
- if ( result ) {
- delete this.invalid[element.name];
- } else {
- this.invalid[element.name] = true;
- }
- if ( !this.numberOfInvalids() ) {
- // Hide error containers on last error
- this.toHide = this.toHide.add( this.containers );
- }
- this.showErrors();
- return result;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/showErrors
- showErrors: function(errors) {
- if(errors) {
- // add items to error list and map
- $.extend( this.errorMap, errors );
- this.errorList = [];
- for ( var name in errors ) {
- this.errorList.push({
- message: errors[name],
- element: this.findByName(name)[0]
- });
- }
- // remove items from success list
- this.successList = $.grep( this.successList, function(element) {
- return !(element.name in errors);
- });
- }
- this.settings.showErrors
- ? this.settings.showErrors.call( this, this.errorMap, this.errorList )
- : this.defaultShowErrors();
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/resetForm
- resetForm: function() {
- if ( $.fn.resetForm )
- $( this.currentForm ).resetForm();
- this.submitted = {};
- this.prepareForm();
- this.hideErrors();
- this.elements().removeClass( this.settings.errorClass );
- },
-
- numberOfInvalids: function() {
- return this.objectLength(this.invalid);
- },
-
- objectLength: function( obj ) {
- var count = 0;
- for ( var i in obj )
- count++;
- return count;
- },
-
- hideErrors: function() {
- this.addWrapper( this.toHide ).hide();
- },
-
- valid: function() {
- return this.size() == 0;
- },
-
- size: function() {
- return this.errorList.length;
- },
-
- focusInvalid: function() {
- if( this.settings.focusInvalid ) {
- try {
- $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
- } catch(e) {
- // ignore IE throwing errors when focusing hidden elements
- }
- }
- },
-
- findLastActive: function() {
- var lastActive = this.lastActive;
- return lastActive && $.grep(this.errorList, function(n) {
- return n.element.name == lastActive.name;
- }).length == 1 && lastActive;
- },
-
- elements: function() {
- var validator = this,
- rulesCache = {};
-
- // select all valid inputs inside the form (no submit or reset buttons)
- // workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
- return $([]).add(this.currentForm.elements)
- .filter(":input")
- .not(":submit, :reset, :image, [disabled]")
- .not( this.settings.ignore )
- .filter(function() {
- !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
-
- // select only the first element for each name, and only those with rules specified
- if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
- return false;
-
- rulesCache[this.name] = true;
- return true;
- });
- },
-
- clean: function( selector ) {
- return $( selector )[0];
- },
-
- errors: function() {
- return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
- },
-
- reset: function() {
- this.successList = [];
- this.errorList = [];
- this.errorMap = {};
- this.toShow = $([]);
- this.toHide = $([]);
- this.formSubmitted = false;
- this.currentElements = $([]);
- },
-
- prepareForm: function() {
- this.reset();
- this.toHide = this.errors().add( this.containers );
- },
-
- prepareElement: function( element ) {
- this.reset();
- this.toHide = this.errorsFor(element);
- },
-
- check: function( element ) {
- element = this.clean( element );
-
- // if radio/checkbox, validate first element in group instead
- if (this.checkable(element)) {
- element = this.findByName( element.name )[0];
- }
-
- var rules = $(element).rules();
- var dependencyMismatch = false;
- for( method in rules ) {
- var rule = { method: method, parameters: rules[method] };
- try {
- var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
-
- // if a method indicates that the field is optional and therefore valid,
- // don't mark it as valid when there are no other rules
- if ( result == "dependency-mismatch" ) {
- dependencyMismatch = true;
- continue;
- }
- dependencyMismatch = false;
-
- if ( result == "pending" ) {
- this.toHide = this.toHide.not( this.errorsFor(element) );
- return;
- }
-
- if( !result ) {
- this.formatAndAdd( element, rule );
- return false;
- }
- } catch(e) {
- this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
- + ", check the '" + rule.method + "' method");
- throw e;
- }
- }
- if (dependencyMismatch)
- return;
- if ( this.objectLength(rules) )
- this.successList.push(element);
- return true;
- },
-
- // return the custom message for the given element and validation method
- // specified in the element's "messages" metadata
- customMetaMessage: function(element, method) {
- if (!$.metadata)
- return;
-
- var meta = this.settings.meta
- ? $(element).metadata()[this.settings.meta]
- : $(element).metadata();
-
- return meta && meta.messages && meta.messages[method];
- },
-
- // return the custom message for the given element name and validation method
- customMessage: function( name, method ) {
- var m = this.settings.messages[name];
- return m && (m.constructor == String
- ? m
- : m[method]);
- },
-
- // return the first defined argument, allowing empty strings
- findDefined: function() {
- for(var i = 0; i < arguments.length; i++) {
- if (arguments[i] !== undefined)
- return arguments[i];
- }
- return undefined;
- },
-
- defaultMessage: function( element, method) {
- return this.findDefined(
- this.customMessage( element.name, method ),
- this.customMetaMessage( element, method ),
- // title is never undefined, so handle empty string as undefined
- !this.settings.ignoreTitle && element.title || undefined,
- $.validator.messages[method],
- "<strong>Warning: No message defined for " + element.name + "</strong>"
- );
- },
-
- formatAndAdd: function( element, rule ) {
- var message = this.defaultMessage( element, rule.method );
- if ( typeof message == "function" )
- message = message.call(this, rule.parameters, element);
- this.errorList.push({
- message: message,
- element: element
- });
- this.errorMap[element.name] = message;
- this.submitted[element.name] = message;
- },
-
- addWrapper: function(toToggle) {
- if ( this.settings.wrapper )
- toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
- return toToggle;
- },
-
- defaultShowErrors: function() {
- for ( var i = 0; this.errorList[i]; i++ ) {
- var error = this.errorList[i];
- this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
- this.showLabel( error.element, error.message );
- }
- if( this.errorList.length ) {
- this.toShow = this.toShow.add( this.containers );
- }
- if (this.settings.success) {
- for ( var i = 0; this.successList[i]; i++ ) {
- this.showLabel( this.successList[i] );
- }
- }
- if (this.settings.unhighlight) {
- for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
- this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
- }
- }
- this.toHide = this.toHide.not( this.toShow );
- this.hideErrors();
- this.addWrapper( this.toShow ).show();
- },
-
- validElements: function() {
- return this.currentElements.not(this.invalidElements());
- },
-
- invalidElements: function() {
- return $(this.errorList).map(function() {
- return this.element;
- });
- },
-
- showLabel: function(element, message) {
- var label = this.errorsFor( element );
- if ( label.length ) {
- // refresh error/success class
- label.removeClass().addClass( this.settings.errorClass );
-
- // check if we have a generated label, replace the message then
- label.attr("generated") && label.html(message);
- } else {
- // create label
- label = $("<" + this.settings.errorElement + "/>")
- .attr({"for": this.idOrName(element), generated: true})
- .addClass(this.settings.errorClass)
- .html(message || "");
- if ( this.settings.wrapper ) {
- // make sure the element is visible, even in IE
- // actually showing the wrapped element is handled elsewhere
- label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
- }
- if ( !this.labelContainer.append(label).length )
- this.settings.errorPlacement
- ? this.settings.errorPlacement(label, $(element) )
- : label.insertAfter(element);
- }
- if ( !message && this.settings.success ) {
- label.text("");
- typeof this.settings.success == "string"
- ? label.addClass( this.settings.success )
- : this.settings.success( label );
- }
- this.toShow = this.toShow.add(label);
- },
-
- errorsFor: function(element) {
- return this.errors().filter("[for='" + this.idOrName(element) + "']");
- },
-
- idOrName: function(element) {
- return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
- },
-
- checkable: function( element ) {
- return /radio|checkbox/i.test(element.type);
- },
-
- findByName: function( name ) {
- // select by name and filter by form for performance over form.find("[name=...]")
- var form = this.currentForm;
- return $(document.getElementsByName(name)).map(function(index, element) {
- return element.form == form && element.name == name && element || null;
- });
- },
-
- getLength: function(value, element) {
- switch( element.nodeName.toLowerCase() ) {
- case 'select':
- return $("option:selected", element).length;
- case 'input':
- if( this.checkable( element) )
- return this.findByName(element.name).filter(':checked').length;
- }
- return value.length;
- },
-
- depend: function(param, element) {
- return this.dependTypes[typeof param]
- ? this.dependTypes[typeof param](param, element)
- : true;
- },
-
- dependTypes: {
- "boolean": function(param, element) {
- return param;
- },
- "string": function(param, element) {
- return !!$(param, element.form).length;
- },
- "function": function(param, element) {
- return param(element);
- }
- },
-
- optional: function(element) {
- return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
- },
-
- startRequest: function(element) {
- if (!this.pending[element.name]) {
- this.pendingRequest++;
- this.pending[element.name] = true;
- }
- },
-
- stopRequest: function(element, valid) {
- this.pendingRequest--;
- // sometimes synchronization fails, make sure pendingRequest is never < 0
- if (this.pendingRequest < 0)
- this.pendingRequest = 0;
- delete this.pending[element.name];
- if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
- $(this.currentForm).submit();
- } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
- $(this.currentForm).triggerHandler("invalid-form", [this]);
- }
- },
-
- previousValue: function(element) {
- return $.data(element, "previousValue") || $.data(element, "previousValue", previous = {
- old: null,
- valid: true,
- message: this.defaultMessage( element, "remote" )
- });
- }
-
- },
-
- classRuleSettings: {
- required: {required: true},
- email: {email: true},
- url: {url: true},
- date: {date: true},
- dateISO: {dateISO: true},
- dateDE: {dateDE: true},
- number: {number: true},
- numberDE: {numberDE: true},
- digits: {digits: true},
- creditcard: {creditcard: true}
- },
-
- addClassRules: function(className, rules) {
- className.constructor == String ?
- this.classRuleSettings[className] = rules :
- $.extend(this.classRuleSettings, className);
- },
-
- classRules: function(element) {
- var rules = {};
- var classes = $(element).attr('class');
- classes && $.each(classes.split(' '), function() {
- if (this in $.validator.classRuleSettings) {
- $.extend(rules, $.validator.classRuleSettings[this]);
- }
- });
- return rules;
- },
-
- attributeRules: function(element) {
- var rules = {};
- var $element = $(element);
-
- for (method in $.validator.methods) {
- var value = $element.attr(method);
- if (value) {
- rules[method] = value;
- }
- }
-
- // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
- if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
- delete rules.maxlength;
- }
-
- return rules;
- },
-
- metadataRules: function(element) {
- if (!$.metadata) return {};
-
- var meta = $.data(element.form, 'validator').settings.meta;
- return meta ?
- $(element).metadata()[meta] :
- $(element).metadata();
- },
-
- staticRules: function(element) {
- var rules = {};
- var validator = $.data(element.form, 'validator');
- if (validator.settings.rules) {
- rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
- }
- return rules;
- },
-
- normalizeRules: function(rules, element) {
- // handle dependency check
- $.each(rules, function(prop, val) {
- // ignore rule when param is explicitly false, eg. required:false
- if (val === false) {
- delete rules[prop];
- return;
- }
- if (val.param || val.depends) {
- var keepRule = true;
- switch (typeof val.depends) {
- case "string":
- keepRule = !!$(val.depends, element.form).length;
- break;
- case "function":
- keepRule = val.depends.call(element, element);
- break;
- }
- if (keepRule) {
- rules[prop] = val.param !== undefined ? val.param : true;
- } else {
- delete rules[prop];
- }
- }
- });
-
- // evaluate parameters
- $.each(rules, function(rule, parameter) {
- rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
- });
-
- // clean number parameters
- $.each(['minlength', 'maxlength', 'min', 'max'], function() {
- if (rules[this]) {
- rules[this] = Number(rules[this]);
- }
- });
- $.each(['rangelength', 'range'], function() {
- if (rules[this]) {
- rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
- }
- });
-
- if ($.validator.autoCreateRanges) {
- // auto-create ranges
- if (rules.min && rules.max) {
- rules.range = [rules.min, rules.max];
- delete rules.min;
- delete rules.max;
- }
- if (rules.minlength && rules.maxlength) {
- rules.rangelength = [rules.minlength, rules.maxlength];
- delete rules.minlength;
- delete rules.maxlength;
- }
- }
-
- // To support custom messages in metadata ignore rule methods titled "messages"
- if (rules.messages) {
- delete rules.messages
- }
-
- return rules;
- },
-
- // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
- normalizeRule: function(data) {
- if( typeof data == "string" ) {
- var transformed = {};
- $.each(data.split(/\s/), function() {
- transformed[this] = true;
- });
- data = transformed;
- }
- return data;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/addMethod
- addMethod: function(name, method, message) {
- $.validator.methods[name] = method;
- $.validator.messages[name] = message || $.validator.messages[name];
- if (method.length < 3) {
- $.validator.addClassRules(name, $.validator.normalizeRule(name));
- }
- },
-
- methods: {
-
- // http://docs.jquery.com/Plugins/Validation/Methods/required
- required: function(value, element, param) {
- // check if dependency is met
- if ( !this.depend(param, element) )
- return "dependency-mismatch";
- switch( element.nodeName.toLowerCase() ) {
- case 'select':
- var options = $("option:selected", element);
- return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
- case 'input':
- if ( this.checkable(element) )
- return this.getLength(value, element) > 0;
- default:
- return $.trim(value).length > 0;
- }
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/remote
- remote: function(value, element, param) {
- if ( this.optional(element) )
- return "dependency-mismatch";
-
- var previous = this.previousValue(element);
-
- if (!this.settings.messages[element.name] )
- this.settings.messages[element.name] = {};
- this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
-
- param = typeof param == "string" && {url:param} || param;
-
- if ( previous.old !== value ) {
- previous.old = value;
- var validator = this;
- this.startRequest(element);
- var data = {};
- data[element.name] = value;
- $.ajax($.extend(true, {
- url: param,
- mode: "abort",
- port: "validate" + element.name,
- dataType: "json",
- data: data,
- success: function(response) {
- var valid = response === true;
- if ( valid ) {
- var submitted = validator.formSubmitted;
- validator.prepareElement(element);
- validator.formSubmitted = submitted;
- validator.successList.push(element);
- validator.showErrors();
- } else {
- var errors = {};
- errors[element.name] = previous.message = response || validator.defaultMessage( element, "remote" );
- validator.showErrors(errors);
- }
- previous.valid = valid;
- validator.stopRequest(element, valid);
- }
- }, param));
- return "pending";
- } else if( this.pending[element.name] ) {
- return "pending";
- }
- return previous.valid;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/minlength
- minlength: function(value, element, param) {
- return this.optional(element) || this.getLength($.trim(value), element) >= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/maxlength
- maxlength: function(value, element, param) {
- return this.optional(element) || this.getLength($.trim(value), element) <= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/rangelength
- rangelength: function(value, element, param) {
- var length = this.getLength($.trim(value), element);
- return this.optional(element) || ( length >= param[0] && length <= param[1] );
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/min
- min: function( value, element, param ) {
- return this.optional(element) || value >= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/max
- max: function( value, element, param ) {
- return this.optional(element) || value <= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/range
- range: function( value, element, param ) {
- return this.optional(element) || ( value >= param[0] && value <= param[1] );
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/email
- email: function(value, element) {
- // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
- return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/url
- url: function(value, element) {
- // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
- return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/date
- date: function(value, element) {
- return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/dateISO
- dateISO: function(value, element) {
- return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/dateDE
- dateDE: function(value, element) {
- return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/number
- number: function(value, element) {
- return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/numberDE
- numberDE: function(value, element) {
- return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/digits
- digits: function(value, element) {
- return this.optional(element) || /^\d+$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/creditcard
- // based on http://en.wikipedia.org/wiki/Luhn
- creditcard: function(value, element) {
- if ( this.optional(element) )
- return "dependency-mismatch";
- // accept only digits and dashes
- if (/[^0-9-]+/.test(value))
- return false;
- var nCheck = 0,
- nDigit = 0,
- bEven = false;
-
- value = value.replace(/\D/g, "");
-
- for (n = value.length - 1; n >= 0; n--) {
- var cDigit = value.charAt(n);
- var nDigit = parseInt(cDigit, 10);
- if (bEven) {
- if ((nDigit *= 2) > 9)
- nDigit -= 9;
- }
- nCheck += nDigit;
- bEven = !bEven;
- }
-
- return (nCheck % 10) == 0;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/accept
- accept: function(value, element, param) {
- param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
- return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/equalTo
- equalTo: function(value, element, param) {
- return value == $(param).val();
- }
-
- }
-
-});
-
-// deprecated, use $.validator.format instead
-$.format = $.validator.format;
-
-})(jQuery);
-
-// ajax mode: abort
-// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
-// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
-;(function($) {
- var ajax = $.ajax;
- var pendingRequests = {};
- $.ajax = function(settings) {
- // create settings for compatibility with ajaxSetup
- settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
- var port = settings.port;
- if (settings.mode == "abort") {
- if ( pendingRequests[port] ) {
- pendingRequests[port].abort();
- }
- return (pendingRequests[port] = ajax.apply(this, arguments));
- }
- return ajax.apply(this, arguments);
- };
-})(jQuery);
-
-// provides cross-browser focusin and focusout events
-// IE has native support, in other browsers, use event caputuring (neither bubbles)
-
-// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
-// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
-
-// provides triggerEvent(type: String, target: Element) to trigger delegated events
-;(function($) {
- $.each({
- focus: 'focusin',
- blur: 'focusout'
- }, function( original, fix ){
- $.event.special[fix] = {
- setup:function() {
- if ( $.browser.msie ) return false;
- this.addEventListener( original, $.event.special[fix].handler, true );
- },
- teardown:function() {
- if ( $.browser.msie ) return false;
- this.removeEventListener( original,
- $.event.special[fix].handler, true );
- },
- handler: function(e) {
- arguments[0] = $.event.fix(e);
- arguments[0].type = fix;
- return $.event.handle.apply(this, arguments);
- }
- };
- });
- $.extend($.fn, {
- delegate: function(type, delegate, handler) {
- return this.bind(type, function(event) {
- var target = $(event.target);
- if (target.is(delegate)) {
- return handler.apply(target, arguments);
- }
- });
- },
- triggerEvent: function(type, target) {
- return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
- }
- })
-})(jQuery);
--- a/web/hdabo/templates/all_tags.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-{% extends "hdabo_base.html" %}
- {% block title %}HDA - BO : Tous les tags{% endblock %}
-
- {% block js_import %}
- {{block.super}}
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
- {% endblock %}
-
- {% block js_declaration %}
- {{block.super}}
- <script type="text/javascript">
-
- var global_csrf_token = "{{ csrf_token }}";
- var static_url = "{{STATIC_URL}}";
- var tag_up_down_url = "{% url hdabo.views.tag_up_down %}";
- var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
- var modify_tag_url = "{% url hdabo.views.modify_tag %}";
- var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
- var add_tag_url = "{% url hdabo.views.add_tag %}";
- var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
- var update_tag_alias_url = "{% url hdabo.views.update_tag_alias %}";
- var update_tag_category_url = "{% url hdabo.views.update_tag_category %}";
- var categories_list = '{{categories|safe}}';
-
- $(document).ready(function(){
- init_tags_events();
- });
- </script>
- {% endblock %}
-
- {% block css_import %}
- {{block.super}}
- <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
- {% endblock %}
-
- {% block css_declaration %}
- {{block.super}}
- <style type="text/css">
- .ui-autocomplete {
- max-height: 100px;
- overflow-y: auto;
- /* prevent horizontal scrollbar */
- overflow-x: hidden;
- /* add padding to account for vertical scrollbar */
- padding-right: 20px;
- }
- </style>
- {% endblock %}
-
-
- {% block content %}
- {{block.super}}
- <form method="POST" action="{% url hdabo.views.all_tags %}">
- {% csrf_token %}
- <p>Chercher :
- {% for s in search_def %}
- <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort, searched=s.1 %}">{{s.0}}</a>
- {% endfor %}
- <input type="text" name="searched" value="{% if searched %}{{searched}}{% endif %}" id="searched" />
- </p>
- <p>Tags {{ current_page.start_index }} à {{ current_page.end_index }} sur {{ nb_total }}</p>
- <div id="count_nav_top"><p>
- {% if searched and searched != "" %}
- <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort, searched=searched %}"><<</a>
- <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}"><</a>
- {{ num_page }}/{{ last_page }}
- <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">></a>
- <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">>></a></p>
- {% else %}
- <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort %}"><<</a>
- <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, sort=sort %}"><</a>
- {{ num_page }}/{{ last_page }}
- <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, sort=sort %}">></a>
- <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, sort=sort %}">>></a>
- {% endif %}</p>
- </div>
- <input type="hidden" name="num_page" value="{{num_page}}" id="num_page" />
- <input type="hidden" name="nb_by_page" value="{{nb_by_page}}" id="nb_by_page" />
- <input type="hidden" name="searched_str" value="{% if searched %}{{searched}}{% endif %}" id="searched_str" />
- <input type="hidden" name="sort" value="{% if sort %}{{sort}}{% endif %}" id="sort" />
- <div id="tag_table_container">
- {% include "partial/all_tags_table.html" %}
- </div>
- <div id="count_nav_bottom"><p>
- {% if searched and searched != "" %}
- <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort, searched=searched %}"><<</a>
- <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}"><</a>
- {{ num_page }}/{{ last_page }}
- <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">></a>
- <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">>></a></p>
- {% else %}
- <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort %}"><<</a>
- <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, sort=sort %}"><</a>
- {{ num_page }}/{{ last_page }}
- <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, sort=sort %}">></a>
- <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, sort=sort %}">>></a>
- {% endif %}</p>
- </div>
- {% endblock %}
--- a/web/hdabo/templates/generic_sheet.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-{% extends "hdabo_base.html" %}
- {% block title %}HDA - BO : Fiches pour {{ orga_name }}{% endblock %}
-
- {% block js_import %}
- {{block.super}}
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
- {% endblock %}
-
- {% block js_declaration %}
- {{block.super}}
- {% if valid != "2" %}
- <script type="text/javascript">
-
- var global_csrf_token = "{{ csrf_token }}";
- var static_url = "{{STATIC_URL}}";
- var tag_up_down_url = "{% url hdabo.views.tag_up_down %}";
- var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
- var modify_tag_url = "{% url hdabo.views.modify_tag_datasheet %}";
- var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
- var reorder_tag_datasheet_url = "{% url hdabo.views.reorder_tag_datasheet %}";
- var add_tag_url = "{% url hdabo.views.add_tag %}";
- var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
- var validate_datasheet_url = "{% url hdabo.views.validate_datasheet %}";
- var update_tag_alias_url = "{% url hdabo.views.update_tag_alias %}";
- var update_tag_category_url = "{% url hdabo.views.update_tag_category %}";
- var categories_list = '{{categories|safe}}';
-
- $(document).ready(function(){
- init_tags_events();
- init_datasheet_events();
- });
- </script>
- {% endif %}
- {% endblock %}
-
- {% block css_import %}
- {{block.super}}
- <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
- {% endblock %}
-
- {% block css_declaration %}
- {{block.super}}
- <style type="text/css">
- .ui-autocomplete {
- max-height: 100px;
- overflow-y: auto;
- /* prevent horizontal scrollbar */
- overflow-x: hidden;
- /* add padding to account for vertical scrollbar */
- padding-right: 20px;
- }
- </style>
- {% endblock %}
-
-
- {% block content %}
- {{block.super}}
- <p>
- {% if tag %} Fiche(s) concernées par le tag <b>{{ tag.label }}</b>
- {% else %} Fiche(s) {% if valid %}<b>validées</b>{% else %}<b>non validées</b>{% endif %} pour l'organisation <b>{{ orga_name }}</b>
- {% endif %} : {{nb_sheets}} fiche(s)</p>
- <div id="count_nav_top">
- <p><a href="{% url hdabo.views.display_datasheet ds_id=zero_id %}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index=0"><<</a>
- <a href="{% url hdabo.views.display_datasheet ds_id=prev_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{prev_index}}"><</a>
- {{displayed_index}}/{{nb_sheets}}
- <a href="{% url hdabo.views.display_datasheet ds_id=next_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{next_index}}">></a>
- <a href="{% url hdabo.views.display_datasheet ds_id=last_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{last_index}}">>></a></p>
- </div>
- <table>
- <tr class="imageline {% cycle 'hdabosimpleevenline' 'hdabosimpleoddline' %}"><td>
- {% include "partial/one_sheet.html" %}
- </td></tr>
- </table>
- <div id="count_nav_bottom">
- <p><a href="{% url hdabo.views.display_datasheet ds_id=zero_id %}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index=0"><<</a>
- <a href="{% url hdabo.views.display_datasheet ds_id=prev_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{prev_index}}"><</a>
- {{displayed_index}}/{{nb_sheets}}
- <a href="{% url hdabo.views.display_datasheet ds_id=next_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{next_index}}">></a>
- <a href="{% url hdabo.views.display_datasheet ds_id=last_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{last_index}}">>></a></p>
- </div>
- {% endblock %}
--- a/web/hdabo/templates/hdabo_base.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-{% load i18n %}
-{% comment %}{% load logintag %}{% endcomment %}
-{% comment %}{% load navigation %}{% endcomment %}
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
-<head>
-{% block head %}
- <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
- <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
- <link rel="SHORTCUT ICON" href="{{STATIC_URL}}hdabo/img/favicon.ico" />
- <title>{% block title %}HDA-BO{% endblock %}</title>
- {% block js_import %}
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/hdabo.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.min.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.nyroModal.min.js"></script>
- <!--[if IE 6]>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.nyroModal-ie6.min.js"></script>
- <![endif]-->
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.qtip.min.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.validate.js" ></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.textchange.min.js" ></script>
- {% endblock %}
-
- {% block css_declaration %}
- <style type="text/css">
- .rounded {
- behavior:url("{{STATIC_URL}}hdabo/css/border-radius.htc");
- }
- </style>
- {% endblock %}
-
- {% block css_import %}
-
- <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/style.css" type="text/css"/>
- <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/nyroModal.css" type="text/css"/>
- {% endblock %}
-
- {% block js_declaration %}
- {% endblock %}
-
-{% endblock %}
-</head>
-<body>
-{% block body %}
-<div class="container">
-<div id="header">
- {% block header %}
- <div id="header_left">
- <p><a href="{% url hdabo.views.home %}">HDA<span class="hda_blue">BO</span></a></p>
- </div>
- {% endblock %}
-</div>
-<div id="content" class="span-24 last">
- <div id="toolbar">
- {% block toolbar %}
- {% if user.is_authenticated %}
- <ul><li><a href="{% url hdabo.views.home %}">Home</a></li>
- <li><a href="{% url hdabo.views.all_tags %}">Tous les tags</a></li>
- <li><a href="{% url haystack_search %}">Recherche</a></li>
- <li><span style="float:right;">{{user.username}} | <a href="{% url django.contrib.auth.views.logout_then_login %}" >Se déconnecter</a>{% if user.is_staff %} | <a href="{% url admin:index %}" >admin</a>{% endif %}</span></li>
- </ul>
- {% endif %}
- {% endblock %}
- </div>
- <div id="inner_content">
- {% block content %}
- {% endblock %}
- </div>
-</div>
-<div id="footer" class="span-24 last">
- {% block footer %}
- <div class="footer_img">
- <a href="http://www.iri.centrepompidou.fr" target="_blank"><img src="{{STATIC_URL}}hdabo/img/logo_IRI_footer.png" alt="Logo IRI" /></a>
- </div>
- <div style="float: right; text-align: right;" class="small" id="copyright_version">
- <div>©2011 <a style="text-decoration: none; color: #4F5155;" href="http://www.iri.centrepompidou.fr" target="_blank">IRI</a></div>
- <div id="versionwrapper"><span class="version" id="version">{{VERSION}}</span></div>
- </div>
- {% endblock %}
-</div>
-</div>
-{% endblock %}
-</body>
-</html>
--- a/web/hdabo/templates/list_for_orga.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-{% extends "hdabo_base.html" %}
- {% block title %}HDA - BO : Fiches pour {{ orga_name }}{% endblock %}
-
- {% block js_import %}
- {{block.super}}
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
- <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
- {% endblock %}
-
- {% block js_declaration %}
- {{block.super}}
- {% if valid != "2" %}
- <script type="text/javascript">
-
- var global_csrf_token = "{{ csrf_token }}";
- var static_url = "{{STATIC_URL}}";
- var tag_up_down_url = "{% url hdabo.views.tag_up_down %}";
- var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
- var modify_tag_url = "{% url hdabo.views.modify_tag_datasheet %}";
- var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
- var add_tag_url = "{% url hdabo.views.add_tag %}";
- var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
- var validate_datasheet_url = "{% url hdabo.views.validate_datasheet %}";
- var update_tag_alias_url = "{% url hdabo.views.update_tag_alias %}";
- var update_tag_category_url = "{% url hdabo.views.update_tag_category %}";
- var categories_list = '{{categories|safe}}';
-
- $(document).ready(function(){
- init_tags_events();
- init_datasheet_events();
- });
- </script>
- {% endif %}
- {% endblock %}
-
- {% block css_import %}
- {{block.super}}
- <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
- {% endblock %}
-
- {% block css_declaration %}
- {{block.super}}
- <style type="text/css">
- .ui-autocomplete {
- max-height: 100px;
- overflow-y: auto;
- /* prevent horizontal scrollbar */
- overflow-x: hidden;
- /* add padding to account for vertical scrollbar */
- padding-right: 20px;
- }
- </style>
- {% endblock %}
-
-
- {% block content %}
- {{block.super}}
- <p>Fiche(s) {% if valid == "1" %}<b>validées</b>{% else %}{% if valid != "2" %}<b>non validées</b>{% endif %}{% endif %}
- pour l'organisation <b>{{ orga_name }}</b> : {{nb_sheets}} fiche(s)</p>
- {% if valid != "2" %}
- <div id="count_nav_top">
- <p><a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=0 %}"><<</a>
- <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=prev_index %}"><</a>
- {{displayed_index}}/{{nb_sheets}}
- <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=next_index %}">></a>
- <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=last_index %}">>></a></p>
- </div>
- {% endif %}
- <table>
- {% for ds in datasheets %}
- <tr class="imageline {% cycle 'hdabosimpleevenline' 'hdabosimpleoddline' %}"><td>
- {% include "partial/one_sheet.html" %}
- </td></tr>
- {% endfor %}
- </table>
- {% if valid != "2" %}
- <div id="count_nav_bottom">
- <p><a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=0 %}"><<</a>
- <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=prev_index %}"><</a>
- {{displayed_index}}/{{nb_sheets}}
- <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=next_index %}">></a>
- <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=last_index %}">>></a></p>
- </div>
- {% endif %}
- {% endblock %}
--- a/web/hdabo/templates/organisation_list.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-{% extends "hdabo_base.html" %}
- {% block title %}HDA-BO : Liste des organisations{% endblock %}
-
- {% block content %}
- {{block.super}}
- <p>Afficher les fiches non validées pour les lieux suivants :</p>
- <table>
- <tr>
- <th class="contenttitle">Nom</th>
- <th class="contenttitle">Fiches non validées</th>
- <th class="contenttitle">Fiches validées</th>
- <th class="contenttitle">Toutes les fiches</th>
- </tr>
- {% for item in organisations %}
- <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline'%}">
- <td class="contenttitle">{{ item.organisation.name|default:"_" }} (<a href="{{item.organisation.website}}" target="_blank">lien</a>)</td>
- <td class="contenttitle">
- {% if item.nb_unval > 0 %}
- <a class="contenttitlelink" href="{% url hdabo.views.display_datasheet ds_id=item.first_id_unval %}">{{item.nb_unval}}</a>
- {% else %}0{% endif %}</td>
- <td class="contenttitle">
- {% if item.nb_val > 0 %}
- <a class="contenttitlelink" href="{% url hdabo.views.display_datasheet ds_id=item.first_id_val %}">{{item.nb_val}}</a>
- {% else %}0{% endif %}</td>
- <td class="contenttitle">
- {% if item.nb_all > 0 %}
- <a class="contenttitlelink" href="{% url hdabo.views.list_for_orga orga_id=item.organisation.id valid=2 %}">{{item.nb_all}}</a>
- {% else %}0{% endif %}</td>
- </tr>
- {% endfor %}
- </table>
- {% endblock %}
--- a/web/hdabo/templates/partial/all_tags_table.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-{% block tag_table %}
- <table id="all_tags_table">
- <tr><th>id</th>
- <th>
- {% if sort|slice:"1:" != "lab" %}
- {% if searched and searched != "" %}
- <a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort='+lab', searched=searched %}">label</a>
- {% else %}
- <a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort='+lab' %}">label</a>
- {% endif %}
- {% else %}label {% if searched and searched != "" %}<a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort=reverse_sort, searched=searched %}">{% else %}<a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort=reverse_sort %}">{% endif %}<img src="{{STATIC_URL}}hdabo/img/sort-{% if sort|first == '+' %}asc{% else %}desc{% endif %}.png"/></a>{% endif %}
- </th>
- <th>original_label</th>
- <th class="text_centered">Lien W</th>
- <th class="text_centered">Lien D</th>
- <th>Catégorie</th>
- <th class="large_25 text_centered">Supprimer<br/>le lien W</th>
- <th>Alias</th>
- <th class="text_centered">Nb de<br/>fiches</th>
- <th>
- {% if sort|slice:"1:" != "pop" %}
- {% if searched and searched != "" %}
- <a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort='+pop', searched=searched %}">Popularité</a>
- {% else %}
- <a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort='+pop' %}">Popularité</a>
- {% endif %}
- {% else %}Popularité {% if searched and searched != "" %}<a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort=reverse_sort, searched=searched %}">{% else %}<a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort=reverse_sort %}">{% endif %}<img src="{{STATIC_URL}}hdabo/img/sort-{% if sort|first == '+' %}asc{% else %}desc{% endif %}.png"/></a>{% endif %}
- </th></tr>
- {% for tag in tags %}
- <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}">
- <td class="reset_wp_info">{{tag.id}}</td>
- <td class="{{tag.url_status_text}} wikipediatag" id="{{tag.id}}" >{{tag.label}}</td>
- <td>{{tag.original_label}}</td>
- <td class="text_centered">
- {% if tag.wikipedia_url and tag.wikipedia_url != "" %}
- <a href="{{tag.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
- {% else %}
- <a href="http://fr.wikipedia.org/w/index.php?search={{tag.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
- {% endif %}
- </td>
- <td class="text_centered">
- {% if tag.dbpedia_uri and tag.dbpedia_uri != "" %}
- <a href="{{tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
- {% else %}
-
- {% endif %}
- </td>
- <td class="tag_category" id="{{tag.id}}">{% if tag.category %}{{ tag.category }}{% endif %}</td>
- <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/red_cross.png" class="remove_wp_link" id="{{tag.id}}" alt="{{tag.label}}" /></td>
- <td class="tag_alias" id="{{tag.id}}" >{% if tag.alias %}{{tag.alias}}{% endif %}</td>
- <td class="text_centered">
- {% if tag.num_ds > 0 %}
- <a href="{% url hdabo.views.display_datasheet %}?tag={{tag.id}}" >{{tag.num_ds}}</a>
- {% else %}
- {{tag.num_ds}}
- {% endif %}
- </td>
- <td class="text_centered">{{tag.popularity}}</td></tr>
- {% endfor %}
- </table>
-{% endblock %}
--- a/web/hdabo/templates/partial/one_sheet.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-{% block one_sheet %}
-<div class="complete_sheet">
- <div class="left_sheet">
- <p><b>id hda</b><br/>{{ds.hda_id}}</p>
- <p><b>Titre</b><br><span class="sheet_title">{{ds.title}}</span></p>
- <p><b>Description</b><br/>{{ds.description}}</p>
- <p><b>Url</b><br/><a href="{{ds.url}}" target="_blank">{{ds.url}}</a></p>
- <p><b>Domaine artistique</b><br/>{{ds.domains_text}}</p>
- <p><b>Périodes Primaire</b><br/>{{ds.primary_periods_text}}</p>
- <p><b>Périodes Collège</b><br/>{{ds.college_periods_text}}</p>
- <p><b>Périodes Lycée</b><br/>{{ds.highschool_periods_text}}</p>
- <p><b>Liste de référence du primaire</b><br/>{{ds.primary_themes_text}}</p>
- <p><b>Thèmes Collège</b><br/>{{ds.college_themes_text}}</p>
- <p><b>Thèmes Lycée</b><br/>{{ds.highschool_themes_text}}</p>
- <p><b>Ville</b><br/>{{ds.town_text}}</p>
- <p><b>Format</b><br/>{{ds.format}}</p>
- <table><tr><th>Date de création</th><th>Date de modification</th></tr>
- <tr><td>{{ds.original_creation_date|date:"d/m/Y"}}</td><td>{{ds.modification_datetime|date:"d/m/Y"}}</td></tr></table>
- {# <p><b>original_modification_date</b><br/>{{ds.original_modification_date|date:"d/m/Y"}}</p> #}
- </div>
- <div class="right_sheet">
- <div id="tags_commands" style="float:left;width: 100%" >
- <div style="float:left;"><input type="radio" name="gr_validated{{ds.hda_id}}" id="not_validated" value="not_validated" {% if not ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />En cours
- <input type="radio" name="gr_validated{{ds.hda_id}}" id="validated" value="validated" {% if ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />Validé
- {% if ds.validated %}
- par {{ds.validator.username}} le {{ds.validation_date|date:"d/m/Y"}}
- {% endif %}
- </div>
- {% if valid != "2" %}
- <div style="float:right;" id="tags_actions">
- <span>Trier les tags : <input type="image" src="{{STATIC_URL}}hdabo/img/sort-descending.png" width="16" height="16" name="trier" id="tags_sort" /></span>
- <span>Ajouter un tag : <input type="text" name="wp_search" id="wp_search" size="35" /> <span id="ok_search" class="hand_cursor"><b>OK</b></span></span>
- </div>
- {% endif %}
- {% csrf_token %}
- <input type="hidden" name="datasheet_id" value="{{ds.hda_id}}" id="datasheet_id" />
- </div>
- <div id="tag_table_container" style="float:left; width: 100%">
- {% include "partial/tag_table.html" %}
- </div>
- </div>
-</div>
-{% endblock %}
--- a/web/hdabo/templates/partial/tag_table.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-{% block tag_table %}
- <table id="tag_table"><tr class="nodrop nodrag">
- {% if ordered_tags %}<th>#</th>{% endif %}
- {% if valid != "2" and ordered_tags %}
- <th><img src="{{STATIC_URL}}hdabo/img/arrow_up_down.png"/></th>
- {% endif %}
- <th>id</th>
- <th>label</th>
- {% comment %}<th>original_label</th>{% endcomment %}
- <th class="text_centered">Lien W</th>
- <th class="text_centered">pLien W</th>
- <th class="text_centered">Lien D</th>
- <th>Catégorie</th>
- {% if ordered_tags %}<th class="large_25 text_centered">Supprimer<br/>le lien W</th>{% endif %}
- <th>Alias</th>
- {% if ordered_tags %}<th class="large_25 text_centered">Retirer le tag</th>{% endif %}</tr>
- {% if ordered_tags %}
- {# ordered_tags is a list of TaggedSheet #}
- {% for t in ordered_tags %}
- <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}" id="{{forloop.counter}}">
- <td>{{forloop.counter}}</td>
- {% if valid != "2" %}
- <td class="updown_td text_centered"><img src="{{STATIC_URL}}hdabo/img/arrow_up_down.png" class="updown" alt="updown" id={{t.tag.id}} pos="{{forloop.counter0}}"></td>
- {% endif %}
- <td>{{t.tag.id}}</td>
- <td class="{{t.tag.url_status_text}} wikipediatag" id="{{t.tag.id}}" >{{t.tag.label}}</td>
- {% comment %}<td>{{t.tag.original_label}}</td>{% endcomment %}
- <td class="text_centered">
- {% if t.tag.wikipedia_url and t.tag.wikipedia_url != "" %}
- <a href="{{t.tag.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
- {% else %}
- <a href="http://fr.wikipedia.org/w/index.php?search={{t.tag.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
- {% endif %}
- </td>
- <td class="text_centered">
- {% if t.wikipedia_revision_id %}
- <a href="{{t.wikipedia_verion_permalink}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/clock_arrow.png" ></a>
- {% else %}
-
- {% endif %}
- </td>
- <td class="text_centered">
- {% if t.tag.dbpedia_uri and t.tag.dbpedia_uri != "" %}
- <a href="{{t.tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
- {% else %}
-
- {% endif %}
- </td>
- <td class="tag_category" id="{{t.tag.id}}">{% if t.tag.category %}{{ t.tag.category }}{% endif %}</td>
- <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/red_cross.png" class="remove_wp_link" id="{{t.tag.id}}" alt="{{t.tag.label}}" /></td>
- <td>{% if t.tag.alias %}{{t.tag.alias}}{% endif %}</td>
- <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/tag_remove.png" class="remove_tag_from_list" id="{{t.tag.id}}" alt="{{t.tag.label}}" /></td></tr>
- {% endfor %}
- {% else %}
- {# ds is a DataSheet #}
- {% for t in ds.tags.all %}
- <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}">
- <td>{{t.id}}</td>
- <td class="{{t.url_status_text}}">{{t.label}}</td>
- {% comment %}<td>{{t.original_label}}</td>{% endcomment %}
- <td class="text_centered">
- {% if t.wikipedia_url and t.wikipedia_url != "" %}
- <a href="{{t.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
- {% else %}
- <a href="http://fr.wikipedia.org/w/index.php?search={{t.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
- {% endif %}
- </td>
- <td class="text_centered">
- {% if t.wikipedia_revision_id %}
- <a href="{{t.wikipedia_verion_permalink}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/clock_arrow.png" ></a>
- {% else %}
-
- {% endif %}
- </td>
- <td class="text_centered">
- {% if t.dbpedia_uri and t.dbpedia_uri != "" %}
- <a href="{{t.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
- {% else %}
-
- {% endif %}
- </td>
- <td>{% if t.category %}{{ t.category }}{% endif %}</td>
- <td>{% if t.alias %}{{ t.alias }}{% endif %}</td></tr>
- {% endfor %}
- {% endif %}
- </table>
-{% endblock %}
--- a/web/hdabo/templates/registration/login.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-{% extends "hdabo_base.html" %}
-{% load i18n %}
- {% block content %}
- {{block.super}}
- {% if form.errors %}
- <p class="error">{% trans "Sorry, that's not a valid username or password." %}</p>
- {% endif %}
- <div class="span-24 last">
- <form action="" method='post' id="login-form">
- <div id="loginform_div" class="span-12">
- {% csrf_token %}
- <input type="hidden" name="next" value="{{ next }}" />
- <div id="login_fields_list">
- <table>
- {{form.as_table}}
- </table>
- </div>
- <div>
- <a href="{% url django.contrib.auth.views.password_reset %}" >{% trans "Forget password?" %}</a>
- </div>
- <div id="submitcontent-buttons-login" class="span-24 last">
- <button class="button"type="submit" value="login">{% trans "login" %}</button>
- </div>
- </div>
- </form>
- </div>
- {% endblock %}
-
\ No newline at end of file
--- a/web/hdabo/templates/search/indexes/hdabo/datasheet_text.txt Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-{{ object.title }}
-{{ object.description }}
-{{ object.tags_text }}
-
--- a/web/hdabo/templates/search/search.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-{% extends 'hdabo_base.html' %}
-
-{% block content %}
- <h2>Recherche</h2>
-
- <div id="search_form">
- <form method="get" action=".">
- <table>
- <tr>
- <th><label for="id_q">Recherche :</label></th>
- <td><input type="text" name="q" id="id_q" value="{{query}}"></td>
- </tr>
- <tr>
- <td> </td>
- <td>
- <input type="submit" value="Rechercher">
- </td>
- </tr>
- </table>
- </form>
- </div>
- <div id="search_results">
- {% if query %}
- <h3>Résultats</h3>
- <div id="page_number">Page {{page.number}}/{{paginator.num_pages}}</div>
- <table id="search_result">
- {% for result in page.object_list %}
- <tr>
- <th class="result_counter">{{forloop.counter0|add:page.start_index}}.</th>
- <td>
- <a href="{{ result.object.get_absolute_url }}" class="result_link" >{{ result.object.title }}</a>
- </td>
- </tr>
-
- {% empty %}
- <tr><td>Pas de résultats.</td></tr>
- {% endfor %}
- </table>
-
- {% if page.has_previous or page.has_next %}
- <div id="search_prev_next">
- {% if page.has_previous %}<a href="?q={{ query }}&page={{ page.previous_page_number }}">{% endif %}« Prec.{% if page.has_previous %}</a>{% endif %}
- |
- {% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Suiv. »{% if page.has_next %}</a>{% endif %}
- </div>
- {% endif %}
- {% endif %}
- </div>
-
-{% endblock %}
\ No newline at end of file
--- a/web/hdabo/tests/__init__.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-from hdabo.tests.models import DatasheetTest
-
-#from hdabo.tests.sortedm2mfield import TestSortedFormField, TestSortedManyToManyField, TestStringReference
\ No newline at end of file
--- a/web/hdabo/tests/models.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.test import TestCase
-from hdabo.models import Datasheet
-
-
-class DatasheetTest(TestCase):
- fixtures = ['datasheet_10']
-
- def setUp(self):
- self.datasheet_instance = Datasheet.objects.get(hda_id='1608')
-
- def test_domains_text(self):
- domains_text = self.datasheet_instance.domains_text
- self.assertEqual(u"Arts du quotidien; Arts du visuel", domains_text)
-
- def test_domains_list(self):
- domains_list = self.datasheet_instance.domains_list
- self.assertListEqual([u"Arts du quotidien", u"Arts du visuel"], domains_list)
-
- def test_tags_text(self):
- tags_text = [s.strip() for s in self.datasheet_instance.tags_text.split(";")]
- tags_text.sort()
- self.assertListEqual(tags_text, [u'XIXe s.', u'XVIIIe s.', u'XVIIe s.', u'XVIe s.', u'affichage', u'affiche', u'afficheur', u'aménagement urbain', u'colonne Morris', u'mobilier urbain', u'ordonnance de François Ier', u'publicité'], "Tags list does not match")
--- a/web/hdabo/urls.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-from django.conf.urls.defaults import patterns, include, url
-from django.contrib import admin
-from django.contrib.auth import urls as auth_url
-
-
-# Uncomment the next two lines to enable the admin:
-admin.autodiscover()
-
-urlpatterns = patterns('',
- # Examples:
- # url(r'^$', 'hdabo.views.home', name='home'),
- # url(r'^hdabo/', include('hdabo.foo.urls')),
-
- # Uncomment the admin/doc line below to enable admin documentation:
- # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
-
- # Uncomment the next line to enable the admin:
- url(r'^accounts/', include(auth_url)),
- url(r'^logout/', 'django.contrib.auth.views.logout_then_login'),
- url(r'^admin/', include(admin.site.urls)),
- url(r'^search/', include('haystack.urls')),
- url(r'^$', 'hdabo.views.home', name='home'),
- url(r'^list/(?P<orga_id>[\w-]+)$', 'hdabo.views.list_for_orga', name='list_for_orga'),
- url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
- url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/(?P<start_index>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
- url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/(?P<start_index>[\w-]+)/(?P<length>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
- url(r'^data$', 'hdabo.views.display_datasheet', name='display_datasheet'),
- url(r'^data/(?P<ds_id>[\w-]+)$', 'hdabo.views.display_datasheet', name='display_datasheet'),
- url(r'^tagupdown$', 'hdabo.views.tag_up_down'),
- url(r'^removetagfromlist$', 'hdabo.views.remove_tag_from_list'),
- url(r'^modifytag$', 'hdabo.views.modify_tag'),
- url(r'^modifytagds$', 'hdabo.views.modify_tag_datasheet'),
- url(r'^resetwpinfo$', 'hdabo.views.reset_wikipedia_info'),
- url(r'^addtag$', 'hdabo.views.add_tag'),
- url(r'^removewplink$', 'hdabo.views.remove_wp_link'),
- url(r'^alltags/?$', 'hdabo.views.all_tags'),
- url(r'^alltags/(?P<num_page>[\w-]+)/?$', 'hdabo.views.all_tags'),
- url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/?$', 'hdabo.views.all_tags'),
- url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<sort>[+-][\w]+)/?$', 'hdabo.views.all_tags'),
- url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<sort>[+-][\w]+)/(?P<searched>.*)/?$', 'hdabo.views.all_tags'),
- url(r'^validatedatasheet$', 'hdabo.views.validate_datasheet'),
- url(r'^validatedatasheet/(?P<ds_id>[\w-]+)$', 'hdabo.views.validate_datasheet'),
- url(r'^validatedatasheet/(?P<ds_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.validate_datasheet'),
- url(r'^updatetagalias$', 'hdabo.views.update_tag_alias'),
- url(r'^updatetagcategory$', 'hdabo.views.update_tag_category'),
- url(r'^ordertagsdatasheet$', 'hdabo.views.reorder_tag_datasheet'),
-)
--- a/web/hdabo/utils.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,374 +0,0 @@
-# -*- coding: utf-8 -*-
-import collections
-import unicodedata
-import sys
-import math
-import codecs
-
-###
-# allow to declare a property as a decorator
-###
-def Property(func):
- return property(**func())
-
-
-## {{{ http://code.activestate.com/recipes/576694/ (r7)
-
-KEY, PREV, NEXT = range(3)
-
-class OrderedSet(collections.MutableSet):
-
- def __init__(self, iterable=None):
- self.end = end = []
- end += [None, end, end] # sentinel node for doubly linked list
- self.map = {} # key --> [key, prev, next]
- if iterable is not None:
- self |= iterable
-
- def __len__(self):
- return len(self.map)
-
- def __contains__(self, key):
- return key in self.map
-
- def add(self, key):
- if key not in self.map:
- end = self.end
- curr = end[PREV]
- curr[NEXT] = end[PREV] = self.map[key] = [key, curr, end]
-
- def discard(self, key):
- if key in self.map:
- key, prev, next = self.map.pop(key)
- prev[NEXT] = next
- next[PREV] = prev
-
- def __iter__(self):
- end = self.end
- curr = end[NEXT]
- while curr is not end:
- yield curr[KEY]
- curr = curr[NEXT]
-
- def __reversed__(self):
- end = self.end
- curr = end[PREV]
- while curr is not end:
- yield curr[KEY]
- curr = curr[PREV]
-
- def pop(self, last=True):
- if not self:
- raise KeyError('set is empty')
- key = next(reversed(self)) if last else next(iter(self))
- self.discard(key)
- return key
-
- def __repr__(self):
- if not self:
- return '%s()' % (self.__class__.__name__,)
- return '%s(%r)' % (self.__class__.__name__, list(self))
-
- def __eq__(self, other):
- if isinstance(other, OrderedSet):
- return len(self) == len(other) and list(self) == list(other)
- return set(self) == set(other)
-
- def __del__(self):
- self.clear() # remove circular references
-
-
-## end of http://code.activestate.com/recipes/576694/ }}}
-
-
-## {{{ http://code.activestate.com/recipes/576693/ (r9)
-# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
-# Passes Python2.7's test suite and incorporates all the latest updates.
-
-try:
- from thread import get_ident as _get_ident
-except ImportError:
- from dummy_thread import get_ident as _get_ident
-
-try:
- from _abcoll import KeysView, ValuesView, ItemsView
-except ImportError:
- pass
-
-
-class OrderedDict(dict):
- 'Dictionary that remembers insertion order'
- # An inherited dict maps keys to values.
- # The inherited dict provides __getitem__, __len__, __contains__, and get.
- # The remaining methods are order-aware.
- # Big-O running times for all methods are the same as for regular dictionaries.
-
- # The internal self.__map dictionary maps keys to links in a doubly linked list.
- # The circular doubly linked list starts and ends with a sentinel element.
- # The sentinel element never gets deleted (this simplifies the algorithm).
- # Each link is stored as a list of length three: [PREV, NEXT, KEY].
-
- def __init__(self, *args, **kwds):
- '''Initialize an ordered dictionary. Signature is the same as for
- regular dictionaries, but keyword arguments are not recommended
- because their insertion order is arbitrary.
-
- '''
- if len(args) > 1:
- raise TypeError('expected at most 1 arguments, got %d' % len(args))
- try:
- self.__root
- except AttributeError:
- self.__root = root = [] # sentinel node
- root[:] = [root, root, None]
- self.__map = {}
- self.__update(*args, **kwds)
-
- def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
- 'od.__setitem__(i, y) <==> od[i]=y'
- # Setting a new item creates a new link which goes at the end of the linked
- # list, and the inherited dictionary is updated with the new key/value pair.
- if key not in self:
- root = self.__root
- last = root[0]
- last[1] = root[0] = self.__map[key] = [last, root, key]
- dict_setitem(self, key, value)
-
- def __delitem__(self, key, dict_delitem=dict.__delitem__):
- 'od.__delitem__(y) <==> del od[y]'
- # Deleting an existing item uses self.__map to find the link which is
- # then removed by updating the links in the predecessor and successor nodes.
- dict_delitem(self, key)
- link_prev, link_next, key = self.__map.pop(key)
- link_prev[1] = link_next
- link_next[0] = link_prev
-
- def __iter__(self):
- 'od.__iter__() <==> iter(od)'
- root = self.__root
- curr = root[1]
- while curr is not root:
- yield curr[2]
- curr = curr[1]
-
- def __reversed__(self):
- 'od.__reversed__() <==> reversed(od)'
- root = self.__root
- curr = root[0]
- while curr is not root:
- yield curr[2]
- curr = curr[0]
-
- def clear(self):
- 'od.clear() -> None. Remove all items from od.'
- try:
- for node in self.__map.itervalues():
- del node[:]
- root = self.__root
- root[:] = [root, root, None]
- self.__map.clear()
- except AttributeError:
- pass
- dict.clear(self)
-
- def popitem(self, last=True):
- '''od.popitem() -> (k, v), return and remove a (key, value) pair.
- Pairs are returned in LIFO order if last is true or FIFO order if false.
-
- '''
- if not self:
- raise KeyError('dictionary is empty')
- root = self.__root
- if last:
- link = root[0]
- link_prev = link[0]
- link_prev[1] = root
- root[0] = link_prev
- else:
- link = root[1]
- link_next = link[1]
- root[1] = link_next
- link_next[0] = root
- key = link[2]
- del self.__map[key]
- value = dict.pop(self, key)
- return key, value
-
- # -- the following methods do not depend on the internal structure --
-
- def keys(self):
- 'od.keys() -> list of keys in od'
- return list(self)
-
- def values(self):
- 'od.values() -> list of values in od'
- return [self[key] for key in self]
-
- def items(self):
- 'od.items() -> list of (key, value) pairs in od'
- return [(key, self[key]) for key in self]
-
- def iterkeys(self):
- 'od.iterkeys() -> an iterator over the keys in od'
- return iter(self)
-
- def itervalues(self):
- 'od.itervalues -> an iterator over the values in od'
- for k in self:
- yield self[k]
-
- def iteritems(self):
- 'od.iteritems -> an iterator over the (key, value) items in od'
- for k in self:
- yield (k, self[k])
-
- def update(*args, **kwds): #@NoSelf
- '''od.update(E, **F) -> None. Update od from dict/iterable E and F.
-
- If E is a dict instance, does: for k in E: od[k] = E[k]
- If E has a .keys() method, does: for k in E.keys(): od[k] = E[k]
- Or if E is an iterable of items, does: for k, v in E: od[k] = v
- In either case, this is followed by: for k, v in F.items(): od[k] = v
-
- '''
- if len(args) > 2:
- raise TypeError('update() takes at most 2 positional '
- 'arguments (%d given)' % (len(args),))
- elif not args:
- raise TypeError('update() takes at least 1 argument (0 given)')
- self = args[0]
- # Make progressively weaker assumptions about "other"
- other = ()
- if len(args) == 2:
- other = args[1]
- if isinstance(other, dict):
- for key in other:
- self[key] = other[key]
- elif hasattr(other, 'keys'):
- for key in other.keys():
- self[key] = other[key]
- else:
- for key, value in other:
- self[key] = value
- for key, value in kwds.items():
- self[key] = value
-
- __update = update # let subclasses override update without breaking __init__
-
- __marker = object()
-
- def pop(self, key, default=__marker):
- '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
- If key is not found, d is returned if given, otherwise KeyError is raised.
-
- '''
- if key in self:
- result = self[key]
- del self[key]
- return result
- if default is self.__marker:
- raise KeyError(key)
- return default
-
- def setdefault(self, key, default=None):
- 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
- if key in self:
- return self[key]
- self[key] = default
- return default
-
- def __repr__(self, _repr_running={}):
- 'od.__repr__() <==> repr(od)'
- call_key = id(self), _get_ident()
- if call_key in _repr_running:
- return '...'
- _repr_running[call_key] = 1
- try:
- if not self:
- return '%s()' % (self.__class__.__name__,)
- return '%s(%r)' % (self.__class__.__name__, self.items())
- finally:
- del _repr_running[call_key]
-
- def __reduce__(self):
- 'Return state information for pickling'
- items = [[k, self[k]] for k in self]
- inst_dict = vars(self).copy()
- for k in vars(OrderedDict()):
- inst_dict.pop(k, None)
- if inst_dict:
- return (self.__class__, (items,), inst_dict)
- return self.__class__, (items,)
-
- def copy(self):
- 'od.copy() -> a shallow copy of od'
- return self.__class__(self)
-
- @classmethod
- def fromkeys(cls, iterable, value=None):
- '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
- and values equal to v (which defaults to None).
-
- '''
- d = cls()
- for key in iterable:
- d[key] = value
- return d
-
- def __eq__(self, other):
- '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
- while comparison to a regular mapping is order-insensitive.
-
- '''
- if isinstance(other, OrderedDict):
- return len(self) == len(other) and self.items() == other.items()
- return dict.__eq__(self, other)
-
- def __ne__(self, other):
- return not self == other
-
- # -- the following methods are only used in Python 2.7 --
-
- def viewkeys(self):
- "od.viewkeys() -> a set-like object providing a view on od's keys"
- return KeysView(self)
-
- def viewvalues(self):
- "od.viewvalues() -> an object providing a view on od's values"
- return ValuesView(self)
-
- def viewitems(self):
- "od.viewitems() -> a set-like object providing a view on od's items"
- return ItemsView(self)
-## end of http://code.activestate.com/recipes/576693/ }}}
-
-def remove_accents(str):
- nkfd_form = unicodedata.normalize('NFKD', unicode(str))
- return u"".join([c for c in nkfd_form if not unicodedata.combining(c)])
-
-def normalize(str):
- return remove_accents(str).lower().replace(u"œ",u"oe")
-
-def show_progress(current_line, total_line, label, width, writer=None):
-
- if writer is None:
- writer = sys.stdout
- if sys.stdout.encoding is not None:
- writer = codecs.getwriter(sys.stdout.encoding)(sys.stdout)
-
- percent = (float(current_line) / float(total_line)) * 100.0
-
- marks = math.floor(width * (percent / 100.0))
- spaces = math.floor(width - marks)
-
- loader = u'[' + (u'=' * int(marks)) + (u' ' * int(spaces)) + u']'
-
- s = u"%s %3d%% %*d/%d - %*s\r" % (loader, percent, len(str(total_line)), current_line, total_line, width, label[:width])
-
- writer.write(s) #takes the header into account
- if percent >= 100:
- writer.write("\n")
- writer.flush()
-
- return writer
-
--- a/web/hdabo/views.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,580 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.conf import settings
-from django.contrib.auth.decorators import login_required #@UnusedImport
-from django.core.paginator import Paginator
-from django.db import connection
-from django.db.models import Max, Count, Min
-from django.http import HttpResponseBadRequest
-from django.shortcuts import render_to_response, redirect
-from django.template import RequestContext
-from django.utils.http import urlquote
-from haystack.constants import DJANGO_ID
-from haystack.query import SearchQuerySet
-from hdabo.utils import OrderedDict, remove_accents, normalize
-from hdabo.wp_utils import (normalize_tag, query_wikipedia_title,
- get_or_create_tag, process_tag, reorder_datasheet_tags)
-from models import Datasheet, Organisation, Tag, TagCategory, TaggedSheet
-from wikitools import wiki
-import django.utils.simplejson as json
-import re
-
-
-@login_required
-def home(request):
-
- orgas = Organisation.objects.all().order_by('name')
-
- org_list = []
- all_ds_mapping = dict([(res['organisation'], res['nb_all']) for res in Datasheet.objects.values("organisation").annotate(nb_all=Count("organisation"))])
- validated_ds_mapping = dict([(res['organisation'], [res['nb_val'], res['first_id_val']]) for res in Datasheet.objects.filter(validated=True).values("organisation").annotate(nb_val=Count("organisation")).annotate(first_id_val=Min("id"))])
- unvalidated_ds_mapping = dict([(res['organisation'], [res['nb_unval'], res['first_id_unval']]) for res in Datasheet.objects.filter(validated=False).values("organisation").annotate(nb_unval=Count("organisation")).annotate(first_id_unval=Min("id"))])
- # We get the hda_id from the id
- val_hda_ids = dict([(res.id, res.hda_id) for res in Datasheet.objects.filter(id__in=[v[1] for v in validated_ds_mapping.values()]).only("id", "hda_id")])
- unval_hda_ids = dict([(res.id, res.hda_id) for res in Datasheet.objects.filter(id__in=[v[1] for v in unvalidated_ds_mapping.values()]).only("id", "hda_id")])
-
- for orga in orgas :
- nb_all = all_ds_mapping.get(orga.id, 0)
- duo_val = validated_ds_mapping.get(orga.id, [0, None])
- nb_val = duo_val[0]
- first_id_val = val_hda_ids.get(duo_val[1], None)
- duo_unval = unvalidated_ds_mapping.get(orga.id, [0, None])
- nb_unval = duo_unval[0]
- first_id_unval = unval_hda_ids.get(duo_unval[1], None)
- org_list.append({'organisation':orga, 'nb_all':nb_all, 'nb_val':nb_val, 'first_id_val':first_id_val, 'nb_unval':nb_unval, 'first_id_unval':first_id_unval})
-
- return render_to_response("organisation_list.html",
- {'organisations':org_list},
- context_instance=RequestContext(request))
-
-
-@login_required
-def display_datasheet(request, ds_id=None):
-
- if ds_id :
- ds = Datasheet.objects.get(hda_id=ds_id)
-
- # In this function the context is given by the get parameters.
- if "index" in request.GET :
- try:
- index = int(request.GET["index"])
- except :
- index = 0
- else :
- index = 0
- if "nb_sheets" in request.GET :
- try:
- nb_sheets = int(request.GET["nb_sheets"])
- except :
- nb_sheets = None
- else :
- nb_sheets = None
- # If there is tag parameter, it means that we display all the ds tagged by one particular tag
- tag = None
- if "tag" in request.GET :
- tag = Tag.objects.get(id=int(request.GET["tag"]))
- datasheets_qs = Datasheet.objects.filter(tags__in=[tag]).order_by("organisation__name", "original_creation_date").select_related("format")
- # If tag is set and if ds_id is None, it means that we have to display the first ds
- if not ds_id :
- index = 0
- ds = datasheets_qs[0]
- else :
- # The current list depends on the ds's validation state
- datasheets_qs = Datasheet.objects.filter(organisation=ds.organisation).filter(validated=ds.validated).order_by("id").select_related("format")
- # We calculate the number of sheets if necessary
- if not nb_sheets :
- nb_sheets = datasheets_qs.count()
-
- # We get only the prev/current/next sheets
- if nb_sheets > 1 :
- if index == 0 :
- select_qs = datasheets_qs[:2]
- prev_index = 0
- prev_id = select_qs[0].hda_id
- next_index = 1
- next_id = select_qs[1].hda_id
- elif index == (nb_sheets - 1) :
- select_qs = datasheets_qs[nb_sheets - 2:]
- prev_index = nb_sheets - 2
- prev_id = select_qs[0].hda_id
- next_index = nb_sheets - 1
- next_id = select_qs[1].hda_id
- else :
- select_qs = datasheets_qs[index - 1:index + 2]
- prev_index = index - 1
- prev_id = select_qs[0].hda_id
- next_index = index + 1
- next_id = select_qs[2].hda_id
- else :
- prev_index = next_index = 0
- prev_id = next_id = datasheets_qs[0].hda_id
-
- # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
- ordered_tags = TaggedSheet.objects.filter(datasheet=ds).select_related("tag").order_by('order')
-
- displayed_index = index + 1;
- zero_id = datasheets_qs[0].hda_id
- last_index = max(nb_sheets - 1, 0)
- last_id = datasheets_qs[last_index].hda_id
-
- return render_to_response("generic_sheet.html",
- {'ds':ds, 'orga_name':ds.organisation.name,
- 'nb_sheets':nb_sheets, 'ordered_tags':ordered_tags,
- 'zero_id':zero_id, 'prev_index':prev_index, 'prev_id':prev_id,
- 'next_index':next_index, 'next_id':next_id,
- 'last_index':last_index, 'last_id':last_id,
- 'displayed_index':displayed_index, 'tag':tag, 'valid':ds.validated,
- 'categories':json.dumps(get_categories())},
- context_instance=RequestContext(request))
-
-
-@login_required
-def list_for_orga(request, orga_id=None, valid=None, start_index=None):
-
- orga = Organisation.objects.get(id=orga_id)
- orga_name = orga.name
-
- if start_index :
- try:
- start_index = int(start_index)
- except :
- start_index = 0
- else :
- start_index = 0
-
- # If valid = 0, we search unvalidated sheets
- # If valid = 1, we search validated sheets
- # If valid = 2, we search AND DISPLAY all sheets
- datasheets_qs = Datasheet.objects.filter(organisation=orga).order_by("id").select_related("format")
-
- if valid == "1" :
- # We count all the validated sheets
- datasheets_qs = datasheets_qs.filter(validated=True)
- # And select the current one
- datasheets = [datasheets_qs[start_index]]
- elif valid != "2":
- valid = "0"
- # We count all the validated sheets
- datasheets_qs = datasheets_qs.filter(validated=False)
- # And select the current one
- datasheets = [datasheets_qs[start_index]]
- else:
- datasheets = datasheets_qs
-
- nb_sheets = datasheets_qs.count()
-
- # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
- ordered_tags = None
- if valid != "2" :
- ordered_tags = TaggedSheet.objects.filter(datasheet=datasheets[0]).select_related("tag").order_by('order')
-
- displayed_index = start_index + 1;
- prev_index = max(start_index - 1, 0);
- next_index = min(nb_sheets - 1, start_index + 1);
- last_index = max(nb_sheets - 1, 0);
-
- return render_to_response("list_for_orga.html",
- {'datasheets':datasheets, 'orga_name':orga_name,
- 'nb_sheets':nb_sheets, 'orga_id':orga_id, 'ordered_tags':ordered_tags,
- 'prev_index':prev_index, 'next_index':next_index, 'last_index':last_index,
- 'start_index':start_index, 'displayed_index':displayed_index, 'valid':valid,
- 'categories':json.dumps(get_categories())},
- context_instance=RequestContext(request))
-
-
-@login_required
-def all_tags(request, num_page=None, nb_by_page=None, sort="+pop", searched=None):
-
- # If the view is asked after a form sent with post vars, it means that searched is a post var.
- if u"searched" in request.POST :
- searched = request.POST["searched"]
- nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
- num_page = 1
-
- # Get paginator and current page
- current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, sort, searched)
-
- prev_page = max(num_page - 1, 1)
- next_page = min(num_page + 1, p.num_pages)
- last_page = p.num_pages
-
-
- cursor = connection.cursor() #@UndefinedVariable
- fl_list = []
- try:
- cursor.execute("select upper(substring(normalized_label from 1 for 1)) as fl from hdabo_tag group by fl order by fl;")
-
- for row in cursor:
- new_char = remove_accents(row[0])
- if new_char not in fl_list:
- fl_list.append(new_char)
- finally:
- cursor.close()
-
- search_def = tuple([(c, urlquote(c + settings.SEARCH_STAR_CHARACTER)) for c in fl_list])
- reverse_sort = ("-" if sort[0] == "+" else "+") + sort[1:]
-
- return render_to_response("all_tags.html",
- {'nb_total':p.count, 'tags':current_page.object_list, 'current_page':current_page,
- 'prev_page':prev_page, 'next_page':next_page, 'last_page':last_page,
- 'num_page':num_page, 'nb_by_page':nb_by_page, 'searched':searched,
- 'categories':json.dumps(get_categories()),
- 'search_def':search_def, 'sort':sort, 'reverse_sort': reverse_sort},
- context_instance=RequestContext(request))
-
-
-@login_required
-def tag_up_down(request):
- ds_id = request.POST["datasheet_id"]
- # post vars new_order and old_order indicate the position (from 1) of the tag in the list.
- # NB : it is different from the TagSheet.order in the database.
- new_order = int(request.POST["new_order"]) - 1
- old_order = int(request.POST["old_order"]) - 1
- # First we get the datasheet's TaggedSheets (list to force evaluation)
- ordered_tags = list(TaggedSheet.objects.filter(datasheet__hda_id=ds_id).order_by('order'))
- # We change the moved TaggedSheets's order
- new_ts_order = ordered_tags[new_order].order
- moved_ts = ordered_tags[old_order]
- moved_ts.order = new_ts_order
- moved_ts.save()
- # We move the TaggedSheets's order
- if new_order > old_order :
- # And we decrease the other ones
- for i in range(old_order + 1, new_order + 1) :
- ts = ordered_tags[i]
- ts.order = ts.order - 1
- ts.save()
- else :
- # And we increase the other ones
- for i in range(new_order, old_order) :
- ts = ordered_tags[i]
- ts.order = ts.order + 1
- ts.save()
- ds = Datasheet.objects.get(hda_id=ds_id)
- ds.manual_order = True
- ds.save()
-
- return get_tag_table(request=request, ds_id=ds_id, valid=0)
-
-
-@login_required
-def get_tag_table(request=None, ds_id=None, valid=None):
-
- ordered_tags = TaggedSheet.objects.filter(datasheet__hda_id=ds_id).order_by('order')
-
- return render_to_response("partial/tag_table.html",
- {'ordered_tags':ordered_tags, 'valid':valid},
- context_instance=RequestContext(request))
-
-
-@login_required
-def get_all_tags_table(request, num_page=None, nb_by_page=None, sort="+pop", searched=None):
-
- current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, sort, searched) #@UnusedVariable
- reverse_sort = ("-" if sort[0] == "+" else "+") + sort[1:]
-
- return render_to_response("partial/all_tags_table.html",
- {'tags':current_page.object_list, 'nb_by_page':nb_by_page, 'searched':searched, 'sort': sort, 'reverse_sort': reverse_sort},
- context_instance=RequestContext(request))
-
-
-def get_current_page(num_page=None, nb_by_page=None, sort="+pop", searched=None):
-
- base_queryset = Tag.objects
-
- if searched and searched != "" :
- searched = normalize(searched.strip())
- regex = "^%s$" % (re.escape(searched).replace(re.escape(settings.SEARCH_STAR_CHARACTER), ".*"))
- base_queryset = base_queryset.filter(normalized_label__iregex=regex)
-
- alltags = base_queryset.annotate(num_ds=Count('datasheet'))
-
- alltags = {
- "+lab" : alltags.order_by('normalized_label', 'label'),
- "-lab" : alltags.order_by('-normalized_label', '-label'),
- "+pop" : alltags.order_by('-popularity', '-num_ds', 'normalized_label', 'label'),
- "-pop" : alltags.order_by('popularity', 'num_ds', '-normalized_label', '-label'),
- }.get(sort, alltags.order_by('-popularity', '-num_ds', 'normalized_label', 'label'))
-
-
- # We build the paginator for the requested list
- if nb_by_page :
- try:
- nb_by_page = int(nb_by_page)
- except :
- nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
- else :
- nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
- if num_page :
- try:
- num_page = int(num_page)
- except :
- num_page = 1
- else :
- num_page = 1
- p = Paginator(alltags, nb_by_page)
-
- #use the much simpler base query to have the count
- p._count = base_queryset.count()
- current_page = p.page(num_page)
-
- return current_page, p, num_page, nb_by_page
-
-
-@login_required
-def remove_tag_from_list(request=None):
-
- ds_id = request.POST["datasheet_id"]
- tag_id = request.POST["tag_id"]
- # First we get the datasheet's TaggedSheets
- ds_tags = TaggedSheet.objects.filter(datasheet__hda_id=ds_id)
- # We get the current TaggedSheet and we delete it
- ts = ds_tags.filter(tag=Tag.objects.filter(id=tag_id))[0]
- ts.delete()
-
- ds = Datasheet.objects.get(hda_id=ds_id)
- ds.manual_order = True
- ds.save()
-
- return get_tag_table(request=request, ds_id=ds_id, valid=0)
-
-
-@login_required
-def modify_tag(request):
-
- tag_id = request.POST["id"]
- tag_label = request.POST["value"]
-
- tag = Tag.objects.get(id=tag_id)
-
- if tag.label != tag_label:
-
- tag.label = tag_label
-
- site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
- wp_res = query_wikipedia_title(site, label=tag_label)
- status, url, pageid, dbpedia_uri, revision_id = (wp_res['status'], wp_res['wikipedia_url'], wp_res['pageid'], wp_res["dbpedia_uri"], wp_res['revision_id'])
-
- if status is not None:
- tag.url_status = status
-
- old_pageid = tag.wikipedia_pageid
-
- tag.wikipedia_url = url
- tag.wikipedia_pageid = pageid
- tag.dbpedia_uri = dbpedia_uri
-
- try:
- tag.save()
- except:
- return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s (%s) existe déjà." % (tag_label, tag.original_label)}), mimetype="application/json")
-
- if old_pageid != pageid:
- TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
-
- return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-
-
-@login_required
-def modify_tag_datasheet(request):
-
- tag_id = request.POST["id"]
- tag_label = request.POST["value"]
- ds_id = request.POST["datasheet_id"]
-
- tag = Tag.objects.get(id=tag_id)
-
- ds = Datasheet.objects.get(hda_id=ds_id)
-
- if tag.label != tag_label:
-
- if tag_label.lower() in [t.label.lower() for t in ds.tags.all()]:
- return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s existe déjà pour cette fiche." % (tag_label)}), mimetype="application/json")
-
- tag, revision_id, created = get_or_create_tag(tag_label) #@UnusedVariable
-
- ts = TaggedSheet.objects.get(tag=tag_id, datasheet__hda_id=ds_id)
- ts.tag = tag
- ts.wikipedia_revision_id = revision_id
- kwargs = {DJANGO_ID + "__exact": unicode(ds_id)}
- results = SearchQuerySet().filter(title=tag_label).filter_or(description=tag_label).filter(**kwargs)
- if len(results) > 0:
- ts.index_note = results[0].score
-
- ts.save()
-
- ds.manual_order = True
- ds.save()
-
- return get_tag_table(request=request, ds_id=ds_id, valid=0)
-
-
-
-@login_required
-def reset_wikipedia_info(request):
- # 2 cases :
- # - ordered tag for one datasheet : POST["datasheet_id"] is not null
- # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
- tag_id = request.POST["tag_id"]
-
- tag = Tag.objects.get(id=tag_id)
- site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
-
- tag.label = normalize_tag(tag.original_label)
-
- #reset tag info
- tag.wikipedia_url = None
- tag.wikipedia_pageid = None
-
- try:
- process_tag(site, tag)
- except:
- return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"La version sémantisée du tag %s (%s) existe déjà." % (tag.label, tag.original_label)}), mimetype="application/json")
-
-
-
- if u"datasheet_id" in request.POST :
- return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
- else :
- return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-
-
-@login_required
-def add_tag(request=None):
-
- ds_id = request.POST["datasheet_id"]
- tag_label = request.POST["value"]
-
- ds = Datasheet.objects.get(hda_id=ds_id)
- if tag_label.lower() in [t.label.lower() for t in ds.tags.all()]:
- return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s existe déjà pour cette fiche." % (tag_label)}), mimetype="application/json")
-
-
- tag, revision_id, created = get_or_create_tag(tag_label)
- # We put the tag at the bottom of the datasheet's tag list
- # if the tag is created or if the tag is not in the list
-
- list_ts = TaggedSheet.objects.filter(datasheet=ds)
- if created or list_ts.filter(tag=tag).count() == 0 :
- new_order = list_ts.aggregate(Max('order'))['order__max'] + 1
- ts = TaggedSheet.objects.create(datasheet=ds, tag=tag, original_order=new_order, order=new_order, wikipedia_revision_id=revision_id)
- ts.save()
- ds.manual_order = True
- ds.save()
-
- return get_tag_table(request=request, ds_id=ds_id, valid=0)
-
-
-@login_required
-def remove_wp_link(request=None):
- # 2 cases :
- # - ordered tag for one datasheet : POST["datasheet_id"] is not null
- # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
- tag_id = request.POST["tag_id"]
- tag = Tag.objects.get(id=tag_id)
-
-
- if u"datasheet_id" in request.POST :
- #create another tag almost identical, without the W info
- new_tag, created = Tag.objects.get_or_create(label=tag.label, original_label=tag.original_label, url_status=Tag.TAG_URL_STATUS_DICT['null_result'], #@UnusedVariable
- defaults={'label':tag.label, 'original_label': tag.original_label, 'url_status':Tag.TAG_URL_STATUS_DICT['null_result'], 'wikipedia_url': None, 'wikipedia_pageid': None, 'dbpedia_uri': None, 'category':tag.category, 'alias':tag.alias, 'popularity':tag.popularity})
-
- TaggedSheet.objects.filter(tag=tag, datasheet__hda_id=request.POST["datasheet_id"]).update(tag=new_tag, wikipedia_revision_id=None)
-
- else:
-
- if Tag.objects.filter(label=tag.label, original_label=tag.original_label, url_status=Tag.TAG_URL_STATUS_DICT['null_result']).count() > 0:
- return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"La version désémantisée du tag %s (%s) existe déjà." % (tag.label, tag.original_label)}), mimetype="application/json")
- tag.wikipedia_url = None
- tag.wikipedia_pageid = None
- tag.dbpedia_uri = None
- tag.url_status = Tag.TAG_URL_STATUS_DICT['null_result']
- tag.save()
-
- TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=None)
-
- if u"datasheet_id" in request.POST :
- return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
- else :
- return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-
-
-@login_required
-def validate_datasheet(request=None, ds_id=None, valid=None):
- # We set if valid is true of false, function of the url parameters
- if valid == "1" or valid == "true" or not valid :
- valid = True
- else :
- valid = False
- # We validate or unvalidate the requester datasheet
-
- if request.user.is_authenticated():
- user = request.user
- else:
- user = None
-
- ds = Datasheet.objects.get(hda_id=ds_id)
- if valid :
- ds.validate(user)
- else :
- ds.unvalidate()
- ds.save()
-
- # If there are still some unvalidated/validated ds for the ds's orga, we display the first one
- same_organisation_ds = Datasheet.objects.filter(organisation=ds.organisation).filter(validated=not valid)
- if len(same_organisation_ds) > 0 :
- return redirect('display_datasheet', ds_id=same_organisation_ds[0].hda_id)
- else :
- return redirect('home')
-
-
-@login_required
-def update_tag_alias(request):
- # 2 cases :
- # - ordered tag for one datasheet : POST["datasheet_id"] is not null
- # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
- tag_id = request.POST["id"]
- tag_alias = request.POST["value"]
- tag = Tag.objects.get(id=tag_id)
- tag.alias = tag_alias
- tag.save()
-
- if u"datasheet_id" in request.POST :
- return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
- else :
- return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-
-
-def get_categories():
- # List of categories in an OrderedDict
- categories = OrderedDict({"":""})
- for c in TagCategory.objects.order_by('label') :
- categories.update({c.label:c.label})
- return categories
-
-
-@login_required
-def update_tag_category(request):
-
- tag_id = request.POST["id"]
- cat = request.POST["value"]
- tag = Tag.objects.get(id=tag_id)
- if cat and cat != "" :
- tag.category = TagCategory.objects.get(label=cat)
- else :
- tag.category = None
- tag.save()
-
- if u"datasheet_id" in request.POST :
- return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
- else :
- return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-
-@login_required
-def reorder_tag_datasheet(request):
-
- ds_id = request.REQUEST['datasheet_id']
- ds = Datasheet.objects.get(hda_id=ds_id)
- reorder_datasheet_tags(ds)
-
- return get_tag_table(request=request, ds_id=ds_id, valid=0)
--- a/web/hdabo/wp_utils.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.conf import settings
-from django.utils.http import urlquote
-from haystack.constants import DJANGO_ID
-from haystack.query import SearchQuerySet
-from hdabo.models import Tag, TaggedSheet
-from wikitools import api, wiki
-
-
-def normalize_tag(tag):
- if len(tag) == 0:
- return tag
- tag = tag.strip()
- tag = tag.replace("_", " ")
- tag = " ".join(tag.split())
- tag = tag[0].upper() + tag[1:]
- return tag
-
-def urlize_for_wikipedia(label):
- return urlquote(label.replace(" ", "_"))
-
-
-def __is_homonymie(page_dict):
- for cat in page_dict.get(u"categories", []):
- if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
- return True
- return False
-
-
-def query_wikipedia_title(site, label=None, pageid=None):
-
- params = {'action':'query', 'prop':'info|categories|langlinks', 'inprop':'url', 'lllimit':'500', 'cllimit':'500', 'rvprop':'ids'}
-
- if label:
- params['titles'] = label
- else:
- params['pageids'] = pageid
- wpquery = api.APIRequest(site, params) #@UndefinedVariable
-
- response = wpquery.query()
- original_response = response
- def return_null_result():
- return { 'new_label': None, 'alternative_label': None, 'status': Tag.TAG_URL_STATUS_DICT["null_result"], 'wikipedia_url': None, 'pageid': None, 'alternative_wikipedia_url': None, 'alternative_pageid': None, 'dbpedia_uri': None, 'revision_id': None, 'response': response }
-
-
- query_dict = response['query']
- # get page if multiple pages or none -> return Tag.null_result
- pages = query_dict.get("pages", {})
- if len(pages) > 1 or len(pages) == 0:
- return return_null_result()
-
- page = pages.values()[0]
-
- if u"invalid" in page or u"missing" in page:
- return return_null_result()
-
- url = page.get(u'fullurl', None)
- pageid = page.get(u'pageid', None)
- new_label = page[u'title']
- alternative_label = None
- alternative_url = None
- alternative_pageid = None
-
- if __is_homonymie(page):
- status = Tag.TAG_URL_STATUS_DICT["homonyme"]
- elif u"redirect" in page:
- status = Tag.TAG_URL_STATUS_DICT["redirection"]
- else:
- status = Tag.TAG_URL_STATUS_DICT["match"]
-
- if status == Tag.TAG_URL_STATUS_DICT["redirection"]:
- params['redirects'] = True
- wpquery = api.APIRequest(site, params) #@UndefinedVariable
- response = wpquery.query()
- query_dict = response['query']
- pages = query_dict.get("pages", {})
- #we know that we have at least one answer
- if len(pages) > 1 or len(pages) == 0:
- return return_null_result()
- page = pages.values()[0]
- alternative_label = page.get('title', None)
- alternative_url = page.get('fullurl', None)
- alternative_pageid = page.get('pageid',None)
-
-
- revision_id = page.get('lastrevid', None)
-
- #process language to extract the english label
- english_label = None
-
- if status == Tag.TAG_URL_STATUS_DICT['match'] or status == Tag.TAG_URL_STATUS_DICT['redirection']:
- lang_links = page.get('langlinks', [])
- for lang_info_dict in lang_links:
- if lang_info_dict['lang'] == "en":
- english_label = lang_info_dict["*"]
- break
-
- if english_label and "#" not in english_label:
- dbpedia_uri = settings.DBPEDIA_URI_TEMPLATE % (urlize_for_wikipedia(english_label))
- else:
- dbpedia_uri = None
-
-
- return { 'new_label': new_label, 'alternative_label': alternative_label, 'status': status, 'wikipedia_url': url, 'pageid': pageid, 'alternative_wikipedia_url': alternative_url, 'alternative_pageid': alternative_pageid, 'dbpedia_uri': dbpedia_uri, 'revision_id': revision_id, 'response': original_response }
-
-
-
-def get_or_create_tag(tag_label):
-
- tag_label_normalized = normalize_tag(tag_label)
- # We get the wikipedia references for the tag_label
- # We get or create the tag object
-
- tag = None
- for t in Tag.objects.filter(label__iexact=tag_label_normalized):
- if tag is None or t.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
- tag = t
- if tag.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
- break
-
- if tag is None:
- tag = Tag(label=tag_label_normalized, original_label=tag_label)
- created = True
- else:
- created = False
-
- site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
-
- if created:
- wp_res = query_wikipedia_title(site, label=tag_label_normalized)
- new_label = wp_res['new_label']
- alternative_label= wp_res['alternative_label']
- status = wp_res['status']
- url = wp_res['wikipedia_url']
- alternative_url = wp_res['alternative_wikipedia_url']
- pageid = wp_res['pageid']
- alternative_pageid = wp_res['alternative_pageid']
- dbpedia_uri = wp_res["dbpedia_uri"]
- wikipedia_revision_id = wp_res['revision_id']
-
-
- # We save the datas
- if new_label is not None:
- tag.label = new_label
- if status is not None:
- tag.url_status = status
- tag.alternative_label = alternative_label
- tag.alternative_wikipedia_url = alternative_url
- tag.alternative_wikipedia_pageid = alternative_pageid
- tag.wikipedia_url = url
- tag.wikipedia_pageid = pageid
- tag.dbpedia_uri = dbpedia_uri
-
- tag.save()
-
- elif tag.wikipedia_pageid:
- wp_res = query_wikipedia_title(site, pageid=tag.wikipedia_pageid)
- wikipedia_revision_id = wp_res['revision_id']
- else:
- wikipedia_revision_id = None
-
-
- return tag, wikipedia_revision_id, created
-
-def process_tag(site, tag, verbosity=0):
-
- wp_res = query_wikipedia_title(site, label=tag.label)
- new_label = wp_res['new_label']
- alternative_label= wp_res['alternative_label']
- status = wp_res['status']
- url = wp_res['wikipedia_url']
- alternative_url = wp_res['alternative_wikipedia_url']
- pageid = wp_res['pageid']
- alternative_pageid = wp_res['alternative_pageid']
- response = wp_res['response']
- dbpedia_uri = wp_res["dbpedia_uri"]
- revision_id = wp_res["revision_id"]
-
- if verbosity >= 2 :
- print "response from query to %s with parameters %s :" % (site.apibase, repr(new_label))
- print repr(response)
-
- prev_wikipedia_pageid = tag.wikipedia_pageid
-
- if new_label is not None:
- tag.label = new_label
- if status is not None:
- tag.url_status = status
- tag.wikipedia_url = url
- tag.wikipedia_pageid = pageid
- tag.dbpedia_uri = dbpedia_uri
- tag.alternative_label = alternative_label
- tag.alternative_wikipedia_url = alternative_url
- tag.alternative_wikipedia_pageid = alternative_pageid
-
- tag.save()
-
- if prev_wikipedia_pageid != pageid:
- TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
-
-
-def reorder_datasheet_tags(ds):
- ts_list = []
- for ts in ds.taggedsheet_set.all():
- ts.index_note = 0
- kwargs = {DJANGO_ID + "__exact": unicode(ds.pk)}
-
- results = SearchQuerySet().filter(title=ts.tag.label).filter_or(description=ts.tag.label).filter(**kwargs)
- if len(results) > 0:
- ts.index_note += results[0].score
- ts.save()
-
- ts_list.append(ts)
- ts_list.sort(key=lambda t: (-t.index_note, t.order))
- for k, ts in enumerate(ts_list):
- ts.order = k + 1
- ts.save()
- if ds.manual_order:
- ds.manual_order = False
- ds.save()
-
-
--- a/web/hdalab/.htaccess.mod_wsgi.tmpl Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-
-SetEnv DJANGO_SETTINGS_MODULE hdalab.settings
-SetEnv PROJECT_PATH /Users/ymh/dev/workspace/hdabo/web
-SetEnv PYTHON_PATH /Users/ymh/dev/workspace/hdabo/virtualenv/web/env/hdabo/lib/python2.6/site-packages:/Applications/Dev/eclipse/plugins/org.python.pydev.debug_2.2.0.2011062419/pysrc/
-SetEnv PYDEV_DEBUG False
-
-Options ExecCGI FollowSymLinks
-SetHandler wsgi-script
-
-#if defined in global definition
-#defined with WSGIDaemonProcess
-#WSGIProcessGroup platform
-
-RewriteEngine On
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^(.*)$ /~ymh/hdabo/hdalab/modwsgi.wsgi/$1 [QSA,PT,L]
-
-Header set Pragma "no-cache"
-Header set Cache-Control "no-cache"
-Header set Expires "-1"
--- a/web/hdalab/README.txt Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-== Inclusion géographique ==
-
-La migration 0007_geographic_inclusion crée les tables nécessaires
-
-Pour récupérer les informations d'inclusion géographique de DBpedia (nécessite le package python SparqlWrapper)
- python manage.py query_geo_inclusion
-
-== Traitement du fichier countries.geo.json ==
-
-Le fichier a été téléchargé sur https://github.com/johan/world.geo.json/
-Afin de faire correspondre les labels des pays aux tags sémantisés, on applique le script
- python manage.py geojson_transform <chemin/nom_du_fichier.geo.json>
-pour rajouter ces informations dans le fichier
-
-== Import des données Insee ==
-
-La migration 0008_datasheet_insee crée les tables nécessaires
-
-Il faut d'abord importer les fichiers donnant les coordonnées géographiques par code Insee dans la base.
-Le fichier data/villes.csv a été téléchargé sur http://www.pillot.fr/cartographe/fic_villes.php
-Il manque dans ce fichier quelques villes et les codes INSEE pour Paris, Marseille et Lyon n'incluent pas les arrondissements
-Les communes manquantes se trouvent dans additional_cities.csv
-Pour importer chacun de ces fichiers :
- python manage.py import_insee_csv <chemin/nom_du_fichier.csv>
-
-Il faut ensuite importer les fichiers donnant la correspondance entre notices HDA (référencées par leur identifiant hda_id) et codes INSEE
-Celles-ci sont fournies dans un fichier Excel donné par Bertrand, que j'ai converti en CSV et corrigé. Il s'agit de data/hda_insee.csv
-Pour importer ce fichier:
- python manage.py import_insee_hda_csv <chemin/nom_du_fichier.csv>
-
-
-=== Migration hdabo -> hdalab ===
-
-0) appliquer les migrations south
-1) lancement de la commande query_wikipedia_category
-2) lancement de la commande fill_tag_years
-3) lancement de la commande query_wikipedia
-4) lancement de la commande query_geo_inclusion
-5) lancement de la commande geo_json_transform
-6) lancement de la commande import_insee_csv
-7) lancement de la commande import_hda_insee_csv
-8) lancement de la commande query_category_inclusion
-
-Toutes ces actions sont echaînées dans la commande import_hdabo_db
-
-
-
--- a/web/hdalab/__init__.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-VERSION = (2, 22, 0, "final", 0)
-
-
-def get_version():
- version = '%s.%s' % (VERSION[0], VERSION[1])
- if VERSION[2]:
- version = '%s.%s' % (version, VERSION[2])
- if VERSION[3:] == ('alpha', 0):
- version = '%s pre-alpha' % version
- else:
- if VERSION[3] != 'final':
- version = '%s %s %s' % (version, VERSION[3], VERSION[4])
- return version
-
-
-__version__ = get_version()
--- a/web/hdalab/config.py.tmpl Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 26, 2012
-
-@author: ymh
-'''
-import os
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
- # ('Your Name', 'your_email@example.com'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': '', # Or path to database file if using sqlite3.
- 'USER': '', # Not used with sqlite3.
- 'PASSWORD': '', # Not used with sqlite3.
- 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- }
-}
-
-BASE_DIR = os.path.dirname(os.path.abspath(__file__)).rstrip("/") + "/"
-BASE_URL = '/~ymh/hdabo/'
-WEB_URL = 'http://localhost'
-
-LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale',), )
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = os.path.abspath(BASE_DIR + "../static/media/")
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = BASE_URL + "static/media/"
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = os.path.abspath(BASE_DIR + "../static/site/")
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = BASE_URL + "static/site/"
-
-# URL prefix for admin static files -- CSS, JavaScript and images.
-# Make sure to use a trailing slash.
-# Examples: "http://foo.com/static/admin/", "/static/admin/".
-ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
-
-GOOGLE_ANALYTICS_CODE = None
-
--- a/web/hdalab/django_wsgi.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-import os
-
-os.environ['DJANGO_SETTINGS_MODULE'] = 'hdalab.settings'
-
-import django.core.handlers.wsgi
-
-application = django.core.handlers.wsgi.WSGIHandler()
-
-if os.environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
- import pydevd #@UnresolvedImport
- pydevd.settrace(suspend=False)
Binary file web/hdalab/locale/de/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/de/LC_MESSAGES/django.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: settings.py:40
-msgid "French"
-msgstr "Französisch"
-
-#: settings.py:41
-msgid "English"
-msgstr "Englisch"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italienisch"
-
-#: settings.py:43
-msgid "German"
-msgstr "Deutsch"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Spanisch"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Japanisch"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Chinesisch"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Suche nach Facetten"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Die Session teilen"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "Schreibgeschützt"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "In Handschrift"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Link kopieren"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Meine Ansichten"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Eine Ansicht über die Suchergebnisse schaffen"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Eine Hinweisliste schaffen"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filter:"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Die Ansicht verwalten"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Name:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Sichtbare Blöcke:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Länder"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Stichwortwolke"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Information über ein Stichwort"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Einen Tag suchen"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr "Schnittstelle übersetzt von Mara Dumitru"
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notizen"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Künstlerische Disziplinen"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Suchergebnisse"
-
-#: templates/completion.html:37
-msgid "Recherche par liste de completion"
-msgstr "Autovervollständigen Suche"
Binary file web/hdalab/locale/de/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/de/LC_MESSAGES/djangojs.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "Inhalt"
-msgstr[1] "Inhalte"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "für diesen Tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Alle Zeitspannen"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode :"
-msgstr "Zeitspanne:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "bis"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays :"
-msgstr "Länder:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag :"
-msgstr "Tag:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Anmerkungen"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Diesen Inhalt anmerken"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "An {0} hinzufügen"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Von {0} entfernen"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "Hinweis"
-msgstr[1] "Hinweise"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"Die Inhaltsliste ist leer! Fügen Sie Inhalte hinzu um die Liste sie "
-"öffentlich bekannt zu machen!"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Die Ansicht verwalten"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Diese Ansicht anmerken"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Neue Session"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "Meine Suchergebnisse"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Meine Liste"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "Schreibgeschützt"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Wie möchten Sie Ihre neue Ansicht nennen?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Neue Suchergebnisse"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Neue Liste"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source : Wikipédia"
-msgstr "Quelle: Wikipedia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation :"
-msgstr "Standort:"
Binary file web/hdalab/locale/en/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/en/LC_MESSAGES/django.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Yves-Marie Haussonne <ymh.work@gmail.com>, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\n"
-"PO-Revision-Date: 2012-03-09 02:10+0200\n"
-"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
-"Language-Team: IRI\n"
-"Language: en\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.7.0-mac-beta-1\n"
-
-#: settings.py:40
-msgid "French"
-msgstr "French"
-
-#: settings.py:41
-msgid "English"
-msgstr "English"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italian"
-
-#: settings.py:43
-msgid "German"
-msgstr "German"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Spanish"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Japanese"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Chinese"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Faceted search"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Share session"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "Read-only"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "Read-write"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Copy link"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "My views:"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Create a view on search results"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Create datasheet list"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filters:"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Manage view"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Name:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Visible blocs:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Countries"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Keyword cloud"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Keyword information"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Tag search"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr " "
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notes"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Artistic discipline"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Search results"
-
-#: templates/completion.html:37
-msgid "Recherche par liste de completion"
-msgstr "Autocomplete Search"
Binary file web/hdalab/locale/en/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/en/LC_MESSAGES/djangojs.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Yves-Marie Haussonne <ymh.work@gmail.com>, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\n"
-"PO-Revision-Date: 2012-03-09 02:04+0200\n"
-"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
-"Language-Team: IRI\n"
-"Language: en\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.7.0-mac-beta-1\n"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "content"
-msgstr[1] "contents"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "for this tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "All periods"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode :"
-msgstr "Period:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "to"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays :"
-msgstr "Country:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag :"
-msgstr "Tag:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Annotations"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Annotate the content"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "Add to {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Remove from {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "datasheet"
-msgstr[1] "datasheets"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr "The content list is empty! Add contents to display the list!"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Manage the view"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Annotate this view"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "New Session"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "My search results"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "My list"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "read only"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "How do you want to name your new view ?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "New search results"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "New list"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source : Wikipédia"
-msgstr "Source: Wikipedia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation :"
-msgstr "Location:"
Binary file web/hdalab/locale/es/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/es/LC_MESSAGES/django.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: settings.py:40
-msgid "French"
-msgstr "Francés"
-
-#: settings.py:41
-msgid "English"
-msgstr "Inglés"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italiano"
-
-#: settings.py:43
-msgid "German"
-msgstr "Alemán"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Español"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Japonés"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Chino"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Búsqueda por facetas"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Compartir sesión"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "Lectura sola"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "Lectura-escritura"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Enlácenos"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Mis vistas:"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Crear una lista de los resultados de búsqueda"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Crear une lista de registros"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filtros:"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Administrar la vista"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Nombre:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "bloques visibles:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "País"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Nube de palabras clave"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Información sobre una palabra llave"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Buscar una etiqueta"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr "Traducción de la interfaz en español por Roselyne Aliacar"
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notas"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Disciplinas artísticas"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Resultados de búsqueda"
-
-#: templates/completion.html:37
-msgid "Recherche par liste de completion"
-msgstr "Busqueda con autocompletar"
Binary file web/hdalab/locale/es/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/es/LC_MESSAGES/djangojs.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "contenido"
-msgstr[1] "contenidos"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "para esta etiqueta"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Todos períodos"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode :"
-msgstr "Período :"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "a"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays :"
-msgstr "País :"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag :"
-msgstr "Etiqueta :"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Anotaciones"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Anotar este contenido"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "Añadir a {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Borrar {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "Registro"
-msgstr[1] "Registros"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"La lista de contenidos esta vacia! Añada contenidos (para ver la lista)!"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Administrar la vista"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Anotar esta vista"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Iniciar sesión"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "Mis resultados de búsqueda"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Mi lista"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "lectura sola"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Como desea nombrar su nueva vista?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Nuevos resultados de búsqueda"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Nueva lista"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source : Wikipédia"
-msgstr "Fuente: Wikipedia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation :"
-msgstr "Localización:"
Binary file web/hdalab/locale/fr/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/fr/LC_MESSAGES/django.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-
-#: settings.py:40
-msgid "French"
-msgstr "Français"
-
-#: settings.py:41
-msgid "English"
-msgstr "Anglais"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italien"
-
-#: settings.py:43
-msgid "German"
-msgstr "Allemand"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Espagnol"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Japonais"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Chinois"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Recherche par facettes"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Partager la session"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "En lecture seule"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "En lecture-écriture"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Copier le lien"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Mes vues :"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Créer une vue sur des résultats de recherche"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Créer une liste de notices"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filtres :"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Gérer la vue"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Nom :"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Blocs visibles :"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Pays"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Nuage de mots-clés"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Information sur un mot-clé"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Rechercher un tag"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr " "
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notes"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Disciplines artistiques"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Résultats de recherche"
Binary file web/hdalab/locale/fr/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/fr/LC_MESSAGES/djangojs.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "contenu"
-msgstr[1] "contenus"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "pour ce tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Toutes périodes"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode :"
-msgstr "Période :"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "à"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays :"
-msgstr "Pays :"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag :"
-msgstr ""
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Annotations"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Annoter ce contenu"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "Ajouter à {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Retirer de {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "notice"
-msgstr[1] "notices"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Gérer la vue"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Annoter cette vue"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Nouvelle session"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "Mes résultats de recherche"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Ma liste"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "lecture seule"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Comment souhaitez-vous nommer votre nouvelle vue ?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Nouveaux résultats de recherche"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Nouvelle liste"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source : Wikipédia"
-msgstr "Source : Wikipédia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation :"
-msgstr "Localisation :"
Binary file web/hdalab/locale/it/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/it/LC_MESSAGES/django.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-
-#: settings.py:40
-msgid "French"
-msgstr "Francese"
-
-#: settings.py:41
-msgid "English"
-msgstr "Inglese"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italiano"
-
-#: settings.py:43
-msgid "German"
-msgstr "Tedesco"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Spagnolo"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Giapponese"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Cinese"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Ricerca per campo"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Dividere la sessione"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "Solo lettura"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "Lettura-scrittura"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Copiare il link"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Le mie vedute:"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Creare una veduta su i risultati della ricerca"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Creare un elenco di informazioni"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filtri:"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Gestire la veduta"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Nome:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Blocchi visibili:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Paese"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Nucleo di parole chiave"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Informazioni su una parola chiave"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Cercare un tag"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr "Traduzione dell'interfaccia informatica in italiano: Natalie Biet"
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Note"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Discipline artistiche"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Risultati della ricerca"
-
-#: templates/completion.html:37
-msgid "Recherche par liste de completion"
-msgstr "Ricerca con autocompletamento"
Binary file web/hdalab/locale/it/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/it/LC_MESSAGES/djangojs.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "contenuto"
-msgstr[1] "contenuti"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "Per questo tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Qualsiasi periodo"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode :"
-msgstr "periodo:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "al"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays :"
-msgstr "Paese:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag :"
-msgstr "Tag:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Annotazioni"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Annotare questo contenuto"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "Aggiungere a {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Togliere da {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "informazion"
-msgstr[1] "informazioni"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"L'elenco dei contenuti è vuoto! Aggiungere dei contenuti per visualizzare "
-"l'elenco !"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Gestire la veduta"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Annotare questa veduta"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Nuova sessione"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "La mia ricerca"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Il mio elenco"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "solo lettura"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Come volete chiamare la vostra nuova veduta ?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Nuovi risultati di ricerca"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Nuovo elenco"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source : Wikipédia"
-msgstr "Fonte: Wikipedia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation :"
-msgstr "Localizzazione:"
Binary file web/hdalab/locale/ja/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/ja/LC_MESSAGES/django.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-20 11:21-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translamessage:%3C20120531030701.11087.qmail@ml.vector.co.jp%3Etor: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-#: settings.py:40
-msgid "French"
-msgstr "フランス語"
-
-#: settings.py:41
-msgid "English"
-msgstr "英語"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "イタリア語"
-
-#: settings.py:43
-msgid "German"
-msgstr "ドイツ語"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "スペイン語"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "日本語"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "中国語"
-
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "ファセット検索"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "このセッションを共有"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "読み出しのみ"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "読み/書き"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "この行をコピー"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "マイ・ビュー:"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "検索結果から新規ビューを作る"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "記事のリストを作る"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "フィルター"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "ビューの管理"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "名前:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "可視ブロック:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "国名"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "キーワードクラウド"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "キーワードについての情報"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "タグを検索する"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr "翻訳に関する情報"
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "注釈"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "学術・芸術分野"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "検索結果"
Binary file web/hdalab/locale/ja/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/ja/LC_MESSAGES/djangojs.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0\n"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "個"
-msgstr[1] "個"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "のコンツンツがこのタグと関係"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "すべての期間"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode :"
-msgstr "期間:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "から"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays :"
-msgstr "国名:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag :"
-msgstr "タグ:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "注釈"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "このコンテンツに注釈をつける"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "リストに追加 {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "リストから取り除く {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "個の記事"
-msgstr[1] "個の記事"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"リストが空です。 リストを表示するにはコンテンツを1つ以上追加してください"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "ビューの管理"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "このビューに注釈をつける"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "新規セッション"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "マイ検索結果"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "マイリスト"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "読み出しのみ"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "新規ビューに名前を付けてください"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "名称未設定の検索結果"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "名称未設定のリスト"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source : Wikipédia"
-msgstr "ウィキペディア"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation :"
-msgstr "Location:"
Binary file web/hdalab/locale/zh-tw/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/zh-tw/LC_MESSAGES/django.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-
-#: settings.py:40
-msgid "French"
-msgstr "Français"
-
-#: settings.py:41
-msgid "English"
-msgstr "Anglais"
-
-#: settings.py:42
-msgid "Italian"
-msgstr ""
-
-#: settings.py:43
-msgid "German"
-msgstr "Allemand"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Espagnol"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr ""
-
-#: settings.py:46
-msgid "Chinese"
-msgstr ""
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Recherche par facettes"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Partager la session"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "En lecture seule"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "En lecture-écriture"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Copier le lien"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Mes vues :"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Créer une vue sur des résultats de recherche"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Créer une liste de notices"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filtres :"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Gérer la vue"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Nom :"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Blocs visibles :"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Pays"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Nuage de mots-clés"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Information sur un mot-clé"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Rechercher un tag"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr ""
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notes"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Disciplines artistiques"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Résultats de recherche"
Binary file web/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.po Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "contenu"
-msgstr[1] "contenus"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "pour ce tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Toutes périodes"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode :"
-msgstr "Période :"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "à"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays :"
-msgstr "Pays :"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag :"
-msgstr ""
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Annotations"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Annoter ce contenu"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-#, fuzzy
-msgid "Ajouter a {0}"
-msgstr "Ajouter à"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-#, fuzzy
-msgid "Retirer de {0}"
-msgstr "Retirer de"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "notice"
-msgstr[1] "notices"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Gérer la vue"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Annoter cette vue"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Nouvelle session"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "Mes résultats de recherche"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Ma liste"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "lecture seule"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Comment souhaitez-vous nommer votre nouvelle vue ?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Nouveaux résultats de recherche"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Nouvelle liste"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source : Wikipédia"
-msgstr "Source : Wikipédia"
--- a/web/hdalab/manage.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-from django.core.management import execute_manager
-import imp
-try:
- imp.find_module('settings') # Assumed to be in the same directory.
-except ImportError:
- import sys
- sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
- sys.exit(1)
-
-import settings
-
-if __name__ == "__main__":
- execute_manager(settings)
--- a/web/hdalab/management/commands/export_tags_csv.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 25, 2012
-
-@author: ymh
-'''
-
-from django.core.management.base import BaseCommand, CommandError
-from django.db.models import Q
-from hdabo import utils
-from hdabo.models import Tag
-from optparse import make_option
-from hdalab.management.utils import UnicodeWriter
-
-class Command(BaseCommand):
- '''
- Command to export tags
- '''
- args = '<path_to_name_base_csv_file>'
- options = '[-c|--category filter by category name] [-e|--encoding csv file encoding]'
- help = """export csv files for hdabo
-Options:
- -c, --category : filter by category
- --lines : max number of lines to load (for each file). 0 means all.
- --encoding : files encoding. default to latin-1"""
-
- option_list = BaseCommand.option_list + (
- make_option("-c","--category",
- action='append',
- type='string',
- dest='categories',
- default=[],
- help='filter tag by category (or)'),
- make_option("-e","--encoding",
- action='store',
- type='string',
- dest='encoding',
- default="utf-8",
- help='file encoding, default utf-8'),
- make_option("-f","--force",
- action='store_true',
- dest='force',
- default=False,
- help='force file overwrite'),
- )
-
- def handle(self, *args, **options):
-
- if len(args) == 0 or not args[0]:
- raise CommandError("Gives at last one csv file to export")
-
- self.encoding = options.get("encoding", "utf-8")
- self.categories = options.get("categories", [])
- self.force = options.get("force", False)
- self.base_path = args[0].strip()
- self.interactive = options.get("interactive",True)
-
- files_path = {
- "visible" : { 'path':self.base_path + "_visible.txt",},
- "hidden" : { 'path':self.base_path + "_hidden.txt",},
- "infobox" : { 'path':self.base_path + "_infobox.txt",},
- }
-
- try:
- for filedef in files_path.values():
- try:
- filedef['file'] = open(filedef['path'],'r')
- if (not self.force) and self.interactive:
- print filedef['path']
- resp = raw_input("export file already exists. override ? type yes to continue : ")
- if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
- self.force = True
- # clear file
- else:
- return "error"
- elif not self.interactive and not self.force:
- print "Export file %s already exists. Exit." % (filedef['path'])
- return "error"
-
- filedef['file'].close()
- filedef['file'] = open(filedef['path'],'w')
- except IOError:
- filedef['file'] = open(filedef['path'],'w')
-
- filedef['csv'] = UnicodeWriter(filedef['file'], doublequote=False, escapechar="\\", encoding=self.encoding)
-
- queryset = Tag.objects.exclude(wikipedia_pageid= None)
- cat_filter = None
- for cat in self.categories:
- if cat_filter is None:
- cat_filter = Q(category__label = cat)
- else:
- cat_filter = cat_filter | Q(category__label = cat)
- if cat_filter is not None:
- queryset = queryset.filter(cat_filter)
-
- tcount = queryset.count()
-
- print "Exporting %d tags" % (tcount)
- writer = None
-
- for i,t in enumerate(queryset.order_by("label")):
-
- writer = utils.show_progress(i+1, tcount, t.label, 50, writer)
- #normal category
- row = [t.label,] + [cat.wp_category.label for cat in t.wp_categories.filter(hidden=False)]
- files_path['visible']['csv'].writerow(row)
-
- #hidden category
- row = [t.label,] + [cat.wp_category.label for cat in t.wp_categories.filter(hidden=True)]
- files_path['hidden']['csv'].writerow(row)
-
- #infobox
- for i in t.infoboxes.all():
- vec = [[p.param_name,p.param_value.replace('\n',"\\n")] for p in i.infoboxparameter_set.all()]
- ib_params = [num for elem in vec for num in elem]
- row = [t.label, i.name.strip()] + ib_params
- files_path['infobox']['csv'].writerow(row)
-
- finally:
- for filedef in files_path.itervalues():
- if filedef.get('file',None):
- filedef['file'].close()
-
\ No newline at end of file
--- a/web/hdalab/management/commands/export_wpcategory_csv.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 2, 2012
-
-@author: ymh
-'''
-from django.core.management.base import BaseCommand, CommandError
-from optparse import make_option
-from hdalab.management.utils import UnicodeWriter
-from hdabo.wp_utils import normalize_tag
-from hdalab.models.categories import WpCategory
-from django.utils.http import urlquote
-from hdabo.utils import show_progress
-
-class Command(BaseCommand):
- '''
- Command to export tags
- '''
- args = '<path_to_csv_file>'
- options = '[-e|--encoding csv file encoding]|[-f|--force force file overwrite]'
- help = """export csv files for hdabo
-Options:
- -e, --encoding : files encoding. default to latin-1
- -f, --force : force file overwrite
- """
-
- option_list = BaseCommand.option_list + (
- make_option("-e","--encoding",
- action='store',
- type='string',
- dest='encoding',
- default="utf-8",
- help='file encoding, default utf-8'),
- make_option("-f","--force",
- action='store_true',
- dest='force',
- default=False,
- help='force file overwrite'),
- )
-
- def handle(self, *args, **options):
-
- if len(args) == 0 or not args[0]:
- raise CommandError("Gives at last one csv file to export")
-
- self.encoding = options.get("encoding", "utf-8")
- self.force = options.get("force", False)
- self.path = args[0].strip()
- self.interactive = options.get("interactive",True)
-
- file = None
- try:
- try:
- file = open(self.path,'r')
- if (not self.force) and self.interactive:
- print self.path
- resp = raw_input("export file already exists. override ? type yes to continue : ")
- if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
- self.force = True
- # clear file
- else:
- return "error"
- elif not self.interactive and not self.force:
- print "Export file %s already exists. Exit." % (self.path)
- return "error"
-
- file.close()
- file = open(self.path,'w')
- except IOError:
- file = open(self.path,'w')
-
- csv = UnicodeWriter(file, doublequote=False, escapechar="\\", encoding=self.encoding)
- writer = None
-
- qs = WpCategory.objects.filter(tagwpcategory__hidden=False).distinct()
-
- total = qs.count()
-
- for i,wpcat in enumerate(qs):
- writer = show_progress(i+1, total, wpcat.label, 50, writer)
- nb_ds = 0
- for tag in wpcat.tagwpcategory_set.all():
- nb_ds += tag.tag.datasheet_set.count()
-
- csv.writerow([wpcat.label, u"http://fr.wikipedia.org/wiki/Catégorie:%s" % urlquote(normalize_tag(wpcat.label)), nb_ds])
-
- finally:
- if file is not None:
- file.close()
\ No newline at end of file
--- a/web/hdalab/management/commands/fill_tag_years.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 29, 2012
-
-@author: ymh
-'''
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdabo.utils import show_progress
-import re
-from hdabo.models import Tag
-from hdalab.models import TagYears
-
-class Command(NoArgsCommand):
- def handle_noargs(self, **options):
- self.style = no_style()
-
- qs = Tag.objects.filter(category__label="Datation")
- total = qs.count()
- dbptstart = len("http://dbpedia.org/resource/")
-
- writer = None
-
- for i,tag in enumerate(qs):
- writer = show_progress(i+1, total, tag.label, 50, writer)
- start = None
- end = None
- range = re.findall("^(Années )?(-?\d+)\-?(\d+)?( en France| au cinéma)?$", tag.label)
- # S'il s'agit d'une année ou d'un ensemble d'années
- if range:
- start = int(range[0][1])
- end = start
- if range[0][0]:
- end = start + 10
- if range[0][2]:
- end = int(range[0][2])
- else:
- if tag.dbpedia_uri:
- dbptitle = tag.dbpedia_uri[dbptstart:]
- # S'il s'agit d'un siècle, on se fie à l'URL DBpedia,
- # car les siècles y sont en chiffres arabes.
- century = re.findall("(\d+)(st|nd|rd|th)_century_?(BC)?", dbptitle)
- if century:
- val = int(century[0][0])
- if century[0][2] == 'BC':
- start = -100*val
- else:
- start = 1 + 100*(val-1)
- end = start + 100
-
- if start != None and end != None:
- ty = TagYears.objects.create(tag=tag, start_year=start, end_year=end)
- ty.save()
--- a/web/hdalab/management/commands/geojson_transform.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-@author: raphv
-'''
-from django.core.management.base import BaseCommand, CommandError
-from django.utils.http import urlquote
-import django.utils.simplejson as json
-from SPARQLWrapper import SPARQLWrapper, JSON
-
-#import pydevd #@UnresolvedImport
-#pydevd.settrace(suspend=False)
-
-
-class Command(BaseCommand):
- '''
- Command to export tags
- '''
- args = '<path_to_geojson_file>'
- options = ''
- help = """Adds semantic data to countries.geo.json files"""
-
- def handle(self, *args, **options):
-
- if len(args) == 0 or not args[0]:
- raise CommandError("Give a Geo Json File to process")
-
- geojsonfile = args[0]
-
- f = open(geojsonfile,"r")
- geojson = json.loads(f.read())
- f.close()
-
- labels = [feature['properties']['name'] for feature in geojson['features']]
- uris = dict([(label, 'http://dbpedia.org/resource/' + urlquote(label.replace(' ','_'))) for label in labels])
-
- uri_list = [uris[label] for label in uris]
- base_uris = dict([(uris[label],uris[label]) for label in uris])
-
- grp = 10
- endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
- endpoint.setReturnFormat(JSON)
-
- start = 0
- while start < len(uri_list):
- sparql = """
- PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
- SELECT ?source ?target
- WHERE {
- ?source dbpedia-owl:wikiPageRedirects ?target .
- Filter (?source in (<%s>)) .
- }
- """ % '>, <'.join(uri_list[start:start + grp])
- endpoint.setQuery(sparql)
- results = endpoint.query().convert()
-
- for r in results["results"]["bindings"]:
- source = r["source"]["value"]
- target = r["target"]["value"]
- base_uris[source] = target
- #print "%s redirects to %s"%(source, target)
- start += grp
-
- base_uri_list = [base_uris[uri] for uri in base_uris]
-
- french_labels = {}
- labels = {}
-
- start = 0
- while start < len(base_uri_list):
-
- sparql = """
- PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
- SELECT ?country ?label WHERE {
- ?country rdfs:label ?label .
- FILTER (?country in (<%s>))
- }
- """ % '>, <'.join(base_uri_list[start:start + grp])
-
- endpoint.setQuery(sparql)
- results = endpoint.query().convert()
-
- print repr(results)
-
- for r in results["results"]["bindings"]:
- country = r["country"]["value"]
- label = r["label"]["value"]
- if country not in labels:
- labels[country] = {}
- labels[country][r["label"]["xml:lang"]] = label
- if r["label"]["xml:lang"] == 'fr':
- french_labels[country] = label
- print "%s label: %s"%(country, label)
-
- start += grp
-
- for feature in geojson['features']:
- base_uri = base_uris[uris[feature['properties']['name']]]
- feature['properties']['dbpedia_uri'] = base_uri
-
- if labels.has_key(base_uri):
- feature['properties']['labels'] = labels[base_uri]
- if french_labels.has_key(base_uri):
- feature['properties']['label_fr'] = french_labels[base_uri]
- else:
- print "No label for %s"%base_uri
-
- f = open(geojsonfile,"w")
- f.write(json.dumps(geojson))
- f.close()
\ No newline at end of file
--- a/web/hdalab/management/commands/import_hda_insee_csv.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-@author: raphv
-'''
-from django.core.management.base import BaseCommand, CommandError
-import django.utils.simplejson as json
-from SPARQLWrapper import SPARQLWrapper, JSON
-from hdalab.models import InseeCoords, DatasheetExtras
-from hdabo.models import Datasheet
-import csv
-import re
-import sys
-
-class Command(BaseCommand):
- '''
- Command to export tags
- '''
- args = '<path_to_csv_file>'
- options = ''
- help = """Imports HDA Lab INSEE codes from a csv file"""
-
- def handle(self, *args, **options):
-
- if len(args) == 0 or not args[0]:
- raise CommandError("Give a CSV File to import")
-
- filename = args[0]
-
- csvfile = open(filename, "rb")
- dialect = csv.Sniffer().sniff(csvfile.read(1024))
- csvfile.seek(0)
- reader = csv.reader(csvfile, dialect)
- fieldstoget = [ 'id', 'insee' ]
-
-
- for i,line in enumerate(reader):
- if i == 0:
- fields = {}
- minlength = 0
- for j,field in enumerate(line):
- for fieldname in fieldstoget:
- if re.search('(?i)%s' % fieldname, field):
- fields[fieldname] = j
- minlength = max(j,minlength)
- else:
- if len(line) > minlength:
- rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
- # Traitement special pour la Corse
- insee = int(re.sub('^2(A|B)','20',rawdata['insee']))
-
- hda_id = int(rawdata['id'])
-
- try:
- datasheet = Datasheet.objects.get(hda_id=hda_id)
- except Datasheet.DoesNotExist:
- #print "Datasheet for id %d does not exist" % hda_id
- datasheet = None
- try:
- inseecoord = InseeCoords.objects.get(insee=insee)
- except InseeCoords.DoesNotExist:
- print "INSEE entry for Insee Code %d does not exist" % insee
- inseecoord = None
-
- if datasheet is not None and inseecoord is not None:
- dsextra, created = DatasheetExtras.objects.get_or_create(datasheet=datasheet, defaults={'insee':inseecoord})
- if not created:
- dsextra.insee = inseecoord
- dsextra.save()
-
- csvfile.close()
\ No newline at end of file
--- a/web/hdalab/management/commands/import_hdabo_db.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 28, 2012
-
-@author: ymh
-'''
-from django.core.management.base import BaseCommand
-from django.core.management import call_command
-from optparse import make_option
-import os.path
-
-
-class Command(BaseCommand):
-
- args = "[<path to the data folder>]"
- option_list = BaseCommand.option_list + (
- make_option('-c', '--categories',
- action='store_true',
- dest='categories',
- default=False,
- help='load categories in db'),
- )
-
-
- def handle(self, *args, **options):
-
- if len(args) == 0:
- data_path = os.path.abspath(os.path.join(os.path.basename(__file__),'../../../../data'))
- else:
- data_path = args[0]
-
- print("=========== MIGRATE ===========")
- call_command('syncdb', migrate=True)
- if options.get('categories', False):
- print("=========== QUERY WIKIPEDIA CATEGORY ===========")
- call_command('query_wikipedia_category', interactive=False, force=True)
-
- print("=========== QUERY DBPEDIA ===========")
- call_command('query_dbpedia', interactive=False, force=True)
- print("=========== FILL TAG YEAR ===========")
- call_command('fill_tag_years')
- print("=========== GEOJSON TRANSFORM ===========")
- call_command('geojson_transform', os.path.join(data_path,'countries.geo.json'))
- print("=========== QUERY GEO INCLUSION ===========")
- call_command('query_geo_inclusion')
- print("=========== IMPORT INSEE CSV PASS 1 ===========")
- call_command('import_insee_csv', os.path.join(data_path,'villes.csv'))
- print("=========== IMPORT INSEE CSV PASS 2 ===========")
- call_command('import_insee_csv', os.path.join(data_path,'additional_cities.csv'))
- print("=========== IMPORT HDA INSEE CSV ===========")
- call_command('import_hda_insee_csv', os.path.join(data_path,'HDA_Insee.csv'))
- print("=========== QUERY CATEGORY INCLUSION ===========")
- call_command('query_category_inclusion', all=True, force=True, interactive=False)
-
-
\ No newline at end of file
--- a/web/hdalab/management/commands/import_insee_csv.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-@author: raphv
-'''
-from django.core.management.base import BaseCommand, CommandError
-import django.utils.simplejson as json
-from SPARQLWrapper import SPARQLWrapper, JSON
-from hdalab.models import InseeCoords
-import csv
-import re
-import sys
-
-class Command(BaseCommand):
- '''
- Command to export tags
- '''
- args = '<path_to_csv_file>'
- options = ''
- help = """Imports Insee codes and geographic coordinates from a csv file"""
-
- def handle(self, *args, **options):
-
- if len(args) == 0 or not args[0]:
- raise CommandError("Give a CSV File to import")
-
- filename = args[0]
-
- csvfile = open(filename, "rb")
- dialect = csv.Sniffer().sniff(csvfile.read(1024))
- csvfile.seek(0)
- reader = csv.reader(csvfile, dialect)
- fieldstoget = [ 'ville', 'insee', 'latitude', 'longitude' ]
-
- for i,line in enumerate(reader):
- if i == 0:
- fields = {}
- minlength = 0
- for j,field in enumerate(line):
- for fieldname in fieldstoget:
- if re.search('(?i)%s' % fieldname, field):
- fields[fieldname] = j
- minlength = max(j,minlength)
- else:
- if len(line) > minlength:
- rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
- #print "Processing line %d" % i
- #print rawdata
- try:
- latitude = float(rawdata['latitude'].replace(',','.'))
- longitude = float(rawdata['longitude'].replace(',','.')) if rawdata['longitude'] != '-' else 0
- insee = int(rawdata['insee'])
- ville = unicode(rawdata['ville'], 'iso-8859-1')
-
- InseeCoords.objects.get_or_create(insee=insee, city_name=ville, latitude=latitude, longitude=longitude)
-
- except:
- print line, "Error :", sys.exc_info()[1]
-
- csvfile.close()
\ No newline at end of file
--- a/web/hdalab/management/commands/query_category_inclusion.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on July 2, 2012
-
-@author: raphv
-'''
-
-from django.conf import settings
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdalab.models import WpCategory, WpCategoryInclusion
-from optparse import make_option
-from wikitools import api,wiki
-import sys
-import re
-import itertools
-from hdabo import utils
-from django.db.models import Count
-from django.db import transaction
-
-CATEGORY_PREFIX = u'Catégorie:'
-
-class Command(NoArgsCommand):
- '''
- query and update wikipedia for tag title.
- '''
- options = ''
- help = """query and update wikipedia for tag title."""
-
- option_list = NoArgsCommand.option_list + (
- make_option('--all',
- action='store_true',
- dest='all',
- default=False,
- help='force all categories to be updated, not only those not yet processed'),
- make_option('--force',
- action='store_true',
- dest='force',
- default=False,
- help='ask no questions'),
- make_option('--site',
- action='store',
- type='string',
- dest='site_url',
- default="http://fr.wikipedia.org/w/api.php",
- help='the url for the wikipedia site'),
- make_option('--limit',
- action='store',
- type='int',
- dest='limit',
- default= -1,
- help='number of categories to process'),
- make_option('--start',
- action='store',
- type='int',
- dest='start',
- default=0,
- help='number of categories to ignore'),
- make_option('--category',
- action='append',
- dest='category',
- type='string',
- default=[],
- help='the categories to query'),
-
- )
-
-
- def query_all_categories(self, category_title, site):
-
- params = {'action':'query', 'cmtitle':category_title, 'list':'categorymembers', 'cmlimit': 'max'}
-
- res = []
-
- wpquery = api.APIRequest(site, params) #@UndefinedVariable
- response = wpquery.query()
-
- if self.verbosity > 1:
- print "Query category : " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
- print repr(response)
-
- members = response.get('query', {}).get('categorymembers', [])
-
- for member in members:
- title = member.get('title',"")
- if re.match(CATEGORY_PREFIX, title):
- res.append(re.sub(CATEGORY_PREFIX, "", title))
-
- if self.verbosity > 1:
- print "Query categories result: "
- print repr(res)
-
- return res
-
- def process_categories(self, cat_list, parent_cat):
- for cat in cat_list:
- child_cat,created = WpCategory.objects.get_or_create(label=cat) #@UnusedVariable
- WpCategoryInclusion.objects.get_or_create(parent_category=parent_cat, child_category=child_cat)
-
- def handle_noargs(self, **options):
-
- self.style = no_style()
-
- interactive = options.get('interactive', True)
-
- self.verbosity = int(options.get('verbosity', '1'))
-
- force = options.get('force', False)
-
- limit = options.get("limit", -1)
- start = options.get("start", 0)
-
- site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
-
- types_mask = 0
-
- if self.verbosity > 2:
- print "option passed : " + repr(options)
-
- queryset = WpCategory.objects.filter(tags__hidden = False).distinct()
-
- cat_list = options.get("category", []);
-
- if cat_list:
- queryset = queryset.filter(label__in=cat_list)
- elif options.get('all',False):
- queryset = queryset.annotate(wpc=Count('child_categories')).filter(wpc = 0)
-
- queryset = queryset.order_by("label")
-
- if limit >= 0:
- queryset = queryset[start:limit]
- elif start > 0:
- queryset = queryset[start:]
-
- if self.verbosity > 2 :
- print "Category Query is %s" % (queryset.query)
-
- site = wiki.Wiki(site_url) #@UndefinedVariable
-
-
- count = queryset.count()
- if self.verbosity > 1:
- print "Processing %d categories" % (count)
-
- if not force and interactive:
- confirm = raw_input("You have requested to query and replace the wikipedia information for %d categories.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
- else:
- confirm = 'yes'
-
- if confirm != "yes":
- print "wikipedia query cancelled"
- return
-
- for i, category in enumerate(queryset):
-
- if self.verbosity > 1:
- print "processing category %s (%d/%d)" % (category.label, i + 1, count)
- else:
- utils.show_progress(i + 1, count, category.label, 60)
-
- title = CATEGORY_PREFIX + category.label
- # query categories
-
- with transaction.commit_on_success():
- res = self.query_all_categories(title, site)
- self.process_categories(res, category)
\ No newline at end of file
--- a/web/hdalab/management/commands/query_dbpedia.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,205 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 30, 2012
-
-@author: ymh
-'''
-
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-
-from optparse import make_option
-from django.conf import settings
-from django.db.models import Count
-from django.db import transaction
-from hdabo.models import Tag
-from hdalab.models import DbpediaFields, TagLinks
-from hdabo.utils import show_progress
-from rdflib.graph import Graph
-from rdflib import URIRef
-import traceback
-import sys
-from hdalab.models.dataviz import DbpediaFieldsTranslation
-from django import db
-from SPARQLWrapper import SPARQLWrapper, RDF
-
-class Command(NoArgsCommand):
- '''
- query and update wikipedia for tag title.
- '''
- options = ''
- help = """query and update wikipedia for tag title."""
-
- option_list = NoArgsCommand.option_list + (
- make_option('--all',
- action='store_true',
- dest='all',
- default=False,
- help='force all tags to be updated, not only those not yet processed'),
- make_option('--force',
- action='store_true',
- dest='force',
- default=False,
- help='ask no questions'),
- make_option('--random',
- action='store_true',
- dest='random',
- default=False,
- help='randomize query on tags'),
- make_option('--limit',
- action='store',
- type='int',
- dest='limit',
- default= -1,
- help='number of tag to process'),
- make_option('--start',
- action='store',
- type='int',
- dest='start',
- default=0,
- help='number of tag to ignore'),
- make_option('--tag',
- action='append',
- dest='tags',
- type='string',
- default=[],
- help='the tag to query'),
- )
-
- def handle_noargs(self, **options):
-
- self.style = no_style()
-
- self.interactive = options.get('interactive', True)
-
- self.verbosity = int(options.get('verbosity', '1'))
-
- self.force = options.get('force', False)
-
- self.limit = options.get("limit", -1)
- self.start = options.get("start", 0)
-
- self.random = options.get('random', False)
-
- if self.verbosity > 2:
- print "option passed : " + repr(options)
-
- self.tag_list = options.get("tags", []);
-
- queryset = Tag.objects.exclude(dbpedia_uri= None)
-
-
- if self.tag_list:
- queryset = queryset.filter(label__in=self.tag_list)
- elif not options.get('all',False):
- queryset = queryset.annotate(dbfc=Count('dbpedia_fields')).filter(dbfc = 0)
-
- if self.random:
- queryset = queryset.order_by("?")
- else:
- queryset = queryset.order_by("label")
-
- if self.limit >= 0:
- queryset = queryset[self.start:self.limit]
- elif self.start > 0:
- queryset = queryset[self.start:]
-
- if self.verbosity > 2 :
- print "Tag Query is %s" % (queryset.query)
-
- count = queryset.count()
-
- if count == 0:
- print "No tag to query : exit."
- return
-
-
- if not self.force and self.interactive:
- confirm = raw_input("You have requested to query and replace the dbpedia information for %d tags.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
- else:
- confirm = 'yes'
-
- if confirm != "yes":
- print "dbpedia query cancelled"
- return
-
- endpoint = SPARQLWrapper("http://dbpedia.org/sparql", returnFormat=RDF)
-
- writer = None
- for i,tag in enumerate(queryset):
- writer = show_progress(i+1, count, tag.label, 50, writer)
- db.reset_queries()
-
- #abstract query
- #"select ?y
- # where {<%s> <http://dbpedia.org/ontology/abstract> ?y}" % (tag.dbpedia_uri)
-
- #rdf_uri = re.sub('\/resource\/', "/data/", tag.dbpedia_uri) + ".n3"
- #g = Graph()
- try :
- abstracts = {}
- labels = {}
- thumbnail = None
- with transaction.commit_on_success():
- endpoint.setQuery("select distinct ?y where {<%s> <http://dbpedia.org/ontology/abstract> ?y}" % (tag.dbpedia_uri))
- res_abstracts = endpoint.queryAndConvert()
- for _,_,o in res_abstracts.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
- abstracts[o.language] = (unicode(o), True)
-
- endpoint.setQuery("select distinct ?y where {<%s> <http://www.w3.org/2000/01/rdf-schema#label> ?y}" % (tag.dbpedia_uri))
- res_labels = endpoint.queryAndConvert()
- for _,_,o in res_labels.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
- labels[o.language] = (unicode(o), True)
-
- endpoint.setQuery("select distinct ?y where {<%s> <http://dbpedia.org/ontology/thumbnail> ?y} limit 1" % (tag.dbpedia_uri))
- res_thumbnails = endpoint.queryAndConvert()
- for _,_,o in res_thumbnails.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
- thumbnail = unicode(o)
-
- endpoint.setQuery('select distinct ?y where { <%s> ?p ?y . FILTER regex(?y, "^http://dbpedia.org/resource")}' % (tag.dbpedia_uri))
- res_links = endpoint.queryAndConvert()
- for _,_,o in res_links.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
- tagqs = Tag.objects.filter(dbpedia_uri=unicode(o))
- if tagqs:
- TagLinks.objects.get_or_create(subject=tag, object=tagqs[0])
-
- ref_label_lang, (ref_label, _) = ('fr',labels['fr']) if 'fr' in labels else ('en',labels['en']) if 'en' in labels else labels.items()[0] if len(labels) > 0 else ('fr',(tag.label, True))
- ref_abstract_lang, (ref_abstract, _) = ('fr',abstracts['fr']) if 'fr' in abstracts else ('en',abstracts['en']) if 'en' in abstracts else abstracts.items()[0] if len(abstracts) > 0 else ('fr',(None, 'True'))
-
- for lang in settings.LANGUAGES:
- if lang[0] not in labels:
- labels[lang[0]]= (ref_label, False)
- if lang[0] not in abstracts:
- abstracts[lang[0]] = (ref_abstract, False)
-
- dbfield , created = DbpediaFields.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri,tag=tag, defaults={'abstract':ref_abstract, 'thumbnail':thumbnail, 'label':ref_label}) #@UndefinedVariable
- if not created:
- dbfield.abstract = ref_abstract
- dbfield.thumbnail = thumbnail
- dbfield.label = ref_label
- dbfield.save()
- DbpediaFieldsTranslation.objects.filter(master=dbfield).delete()
-
- consolidated_trans = {}
- for lang,label in labels.iteritems():
- consolidated_trans[lang] = [label,(ref_abstract, lang==ref_abstract_lang)]
- for lang,abstract in abstracts.iteritems():
- if lang in consolidated_trans:
- consolidated_trans[lang][1] = abstract
- else:
- consolidated_trans[lang] = [(ref_label, lang==ref_label_lang), abstract]
-
- for lang, trans in consolidated_trans.iteritems():
- label, abstract = tuple(trans)
- DbpediaFieldsTranslation.objects.create(master=dbfield, language_code=lang, label=label[0], is_label_translated=label[1], abstract=abstract[0], is_abstract_translated=abstract[1])
-
-
- except Exception as e:
- print "\nError processing resource %s : %s" %(rdf_uri,unicode(e))
- traceback.print_exception(type(e), e, sys.exc_info()[2])
-
-
-
-
-
-
--- a/web/hdalab/management/commands/query_geo_inclusion.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 22, 2012
-
-@author: raphv
-'''
-
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdabo.utils import show_progress
-from hdabo.models import Tag
-from hdalab.models import Country, GeoInclusion
-from SPARQLWrapper import SPARQLWrapper, JSON
-import re
-
-class Command(NoArgsCommand):
- def handle_noargs(self, **options):
- self.style = no_style()
-
- qs = Tag.objects.filter(category__label="Localisation").exclude(dbpedia_uri = None)
- total = qs.count()
-
- endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
- endpoint.setReturnFormat(JSON)
- sparqltext = """
- SELECT ?resource WHERE {
- { <%s> ?resource <http://dbpedia.org/ontology/Country> . }
- UNION
- { <%s> <http://dbpedia.org/ontology/country> ?resource . }
- }
- """
- resourceprefix = "http://dbpedia.org/resource/"
- identityuri = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
-
- writer = None
-
- for i,tag in enumerate(qs):
- endpoint.setQuery(sparqltext % (tag.dbpedia_uri, tag.dbpedia_uri))
-
- results = endpoint.query().convert()['results']['bindings']
-
- if len(results) == 1: # We don't want places located in multiple countries
-
- resourceuri = results[0]['resource']['value']
-
- if re.match(resourceprefix, resourceuri):
- countrytxt = re.findall('([^/]+$)', resourceuri)[0]
-
- country, created = Country.objects.get_or_create(dbpedia_uri=resourceuri)
- GeoInclusion.objects.get_or_create(tag=tag, country=country)
-
- if resourceuri == identityuri:
- countrytxt = '<is a country>'
-
- country, created = Country.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri)
- GeoInclusion.objects.get_or_create(tag=tag, country=country)
-
- else:
- countrytxt = '<unknown>'
-
- writer = show_progress(i+1, total, '%s => %s'%(tag.label, countrytxt), 50, writer)
\ No newline at end of file
--- a/web/hdalab/management/commands/query_wikipedia_category.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,396 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jun 7, 2011
-
-@author: ymh
-'''
-
-from django.conf import settings
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdabo.models import Tag
-from hdalab.models import WpCategory, TagWpCategory, TagInfobox, InfoboxParameter
-from optparse import make_option
-from wikitools import api,wiki
-import sys
-import re
-import itertools
-from hdabo import utils
-from django.db.models import Count
-from django.db import transaction
-
-
-TYPES_MASK_DICT = {
- u'visible': 0b001,
- u'hidden': 0b010,
- u'infobox': 0b100,
- u'all': 0b111,
- }
-
-START_PATTERN = re.compile(u"\{\{\s?Infobox\s+([^|]+)", re.M|re.U|re.I)
-END_PATTERN = re.compile(u"\{\{|\}\}", re.M|re.U)
-SPLIT_PATTERN = re.compile("\s*?\|\s*([\w]+[^=|]*)\s*=", re.U|re.M)
-DELIMITER_PATTERN = re.compile("\{{2,3}|\}{2,3}|\[\[|\]\]|\[|\]")
-COMMENT_PATTERN = re.compile("<!--.*?-->",re.U|re.M)
-
-
-
-class Command(NoArgsCommand):
- '''
- query and update wikipedia for tag title.
- '''
- options = ''
- help = """query and update wikipedia for tag title."""
-
- option_list = NoArgsCommand.option_list + (
- make_option('--all',
- action='store_true',
- dest='all',
- default=False,
- help='force all tags to be updated, not only those not yet processed'),
- make_option('--force',
- action='store_true',
- dest='force',
- default=False,
- help='ask no questions'),
- make_option('--random',
- action='store_true',
- dest='random',
- default=False,
- help='randomize query on tags'),
- make_option('--site',
- action='store',
- type='string',
- dest='site_url',
- default="http://fr.wikipedia.org/w/api.php",
- help='the url for the wikipedia site'),
- make_option('--limit',
- action='store',
- type='int',
- dest='limit',
- default= -1,
- help='number of tag to process'),
- make_option('--start',
- action='store',
- type='int',
- dest='start',
- default=0,
- help='number of tag to ignore'),
- make_option('--type',
- action='append',
- dest='types',
- type='choice',
- choices=['visible','hidden', 'infobox', 'all'],
- default=[],
- help='what type of query to perform : visible : visible categories, hidden : hidden categories, infobox: infoboxes, all: all of them. This option can be assed multiple times'),
- make_option('--use-label',
- action='store_true',
- dest='use_label',
- default=False,
- help='use label instead of pageid to query wikipedia'),
- make_option('--tag',
- action='append',
- dest='tags',
- type='string',
- default=[],
- help='the tag to query'),
-
- )
-
-
-# def process_wp_response(self, label, response):
-#
-# query_dict = response['query']
-# # get page if multiple pages or none -> return Tag.null_result
-# pages = query_dict.get("pages", {})
-# if len(pages) > 1 or len(pages) == 0:
-# return None, Tag.TAG_URL_STATUS_DICT["null_result"], None, None
-#
-# page = pages.values()[0]
-#
-# if u"invalid" in page or u"missing" in page:
-# return None, Tag.TAG_URL_STATUS_DICT["null_result"], None, None
-#
-# url = page.get(u'fullurl', None)
-# pageid = page.get(u'pageid', None)
-# new_label = page[u'title']
-#
-# if self.__is_homonymie(page):
-# status = Tag.TAG_URL_STATUS_DICT["homonyme"]
-# elif u"redirect" in page:
-# status = Tag.TAG_URL_STATUS_DICT["redirection"]
-# else:
-# status = Tag.TAG_URL_STATUS_DICT["match"]
-#
-# return new_label, status, url, pageid
-
- def query_all_categories(self, hidden, site, pageid, use_label):
-
- clshow = 'hidden' if hidden else '!hidden'
- params = {'action':'query', 'titles' if use_label else 'pageids': pageid, 'prop':'categories', 'clshow': clshow}
-
- clcontinue = ""
- res = []
-
- while clcontinue is not None:
- if clcontinue:
- params['clcontinue'] = clcontinue
-
- wpquery = api.APIRequest(site, params) #@UndefinedVariable
- response = wpquery.query()
-
- if self.verbosity > 1:
- print "Query infoboxes : " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
- print repr(response)
-
-
- query_dict = response.get('query', None)
-
- if query_dict is None:
- return res
-
- pages = query_dict.get("pages", {})
- if len(pages) > 1 or len(pages) == 0:
- return res
-
- page = pages.values()[0]
-
- for cat in page.get('categories',[]):
- title = cat.get('title',"")
- title = title[title.find(":")+1:]
- if title and clcontinue != ("%s|%s" % (pageid,title)):
- res.append(title)
-
- clcontinue = response.get('query-continue', {}).get('categories',{}).get('clcontinue', None)
-
- if self.verbosity > 1:
- print "Query infoboxes RES: "
- print repr(res)
-
- return res
-
- def process_categories(self, cat_list, hidden, tag):
-
- for cat in cat_list:
- wp_cat,created = WpCategory.objects.get_or_create(label=cat) #@UnusedVariable
- TagWpCategory.objects.get_or_create(tag=tag, wp_category=wp_cat, hidden=hidden)
-
-
- def query_infoboxes(self, site, pageid, use_label):
-
- res = []
- params = {'action':'query', 'titles' if use_label else 'pageids': pageid, 'prop':'revisions', 'rvprop': 'ids|content'}
- wpquery = api.APIRequest(site, params) #@UndefinedVariable
- response = wpquery.query()
-
- query_dict = response.get('query', None)
-
- if query_dict is None:
- return res
-
- pages = query_dict.get("pages", {})
- if len(pages) > 1 or len(pages) == 0:
- return res
-
- page = pages.values()[0]
-
- if 'revisions' not in page or not page['revisions']:
- return res
-
- rev = page['revisions'][0]
-
- content = rev['*']
-
- start = 0
- depth = 0
- current_infobox_name = None
- current_start = 0
-
- while start <= len(content):
- if depth==0:
- resm = START_PATTERN.search(content[start:])
- if resm is None:
- break
- depth = 1
- current_start = resm.start()+start
- start += resm.end()+1
- current_infobox_name = resm.group(1)
- else:
- resm = END_PATTERN.search(content[start:])
- if resm is None:
- break
- if resm.group(0) == "{{":
- depth += 1
- elif resm.group(0) == "}}":
- depth -= 1
- if depth == 0:
- res.append((content[current_start:resm.end()+start], current_infobox_name))
- start += resm.end()+1
-
- return_val = (rev['revid'],res)
-
- if self.verbosity > 1:
- print "Query infoboxes url: " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
- print repr(return_val)
-
- return return_val
-
- def split_infoboxes(self, src):
-
- start = 0
- previous_end = 0
- split_indexes = []
- delimiter_stack = []
- while start<=len(src):
- resd = DELIMITER_PATTERN.search(src[start:])
- ress = SPLIT_PATTERN.search(src[start:]) if len(delimiter_stack) == 0 else None
- startd = resd.start() if resd is not None else sys.maxint
- starts = ress.start() if ress is not None else sys.maxint
- if starts < startd:
- if len(split_indexes)>0:
- split_indexes.append((previous_end, ress.start(0)+start))
- split_indexes.append((ress.start(1)+start, ress.end(1)+start))
- start += ress.end(0)
- previous_end = start
- elif startd < sys.maxint:
- if resd.group().startswith("{") or resd.group().startswith("[") :
- delimiter_stack.append(resd.group())
- elif len(delimiter_stack)>0 and ( (delimiter_stack[-1].startswith('{') and resd.group()[0] == '}') or (delimiter_stack[-1].startswith('[') and resd.group()[0] == ']') ) and len(delimiter_stack[-1]) == len(resd.group()):
- delimiter_stack.pop()
- start += resd.end()
- else:
- break
-
- if previous_end > 0:
- split_indexes.append((previous_end,len(src)))
- res = [src[start:end] for start,end in split_indexes]
- return res
-
-
-
- def process_infoboxes(self, infobox_defs, tag):
-
- if not infobox_defs:
- return
-
- revision_id = infobox_defs[0]
- for infobox in infobox_defs[1]:
- src = infobox[0].strip(' \t\n\r')
- name = infobox[1]
- tag_infobox, created = TagInfobox.objects.get_or_create(tag=tag, name=name, revision_id = revision_id, defaults={'source': src})
- if not created:
- tag_infobox.source = src
- tag_infobox.save()
-
- src = COMMENT_PATTERN.sub('',src)
- src = START_PATTERN.sub('',src[:-2]).strip()
-
- keyvalues = self.split_infoboxes(src)
-
- for key,value in itertools.izip(*[itertools.islice(keyvalues, i, None, 2) for i in range(2)]):
- param, created = InfoboxParameter.objects.get_or_create(tag_infobox=tag_infobox, param_name=key.strip(), defaults={'param_value':value.strip()})
- if not created:
- param.param_value = value.strip()
- param.save()
-
- def handle_noargs(self, **options):
-
- self.style = no_style()
-
- interactive = options.get('interactive', True)
-
- self.verbosity = int(options.get('verbosity', '1'))
- use_label = options.get('use_label', False)
-
- force = options.get('force', False)
-
- limit = options.get("limit", -1)
- start = options.get("start", 0)
-
- site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
-
- random = options.get('random', False)
-
- types_mask = 0
- types_list = options.get('types', [])
-
- if len(types_list) == 0:
- types_mask = TYPES_MASK_DICT['all']
- else:
- for t in types_list:
- types_mask |= TYPES_MASK_DICT[t]
-
- if self.verbosity > 1 :
- print "types mask %s " % (bin(types_mask))
-
- if self.verbosity > 2:
- print "option passed : " + repr(options)
-
-
- queryset = Tag.objects.exclude(wikipedia_pageid= None)
-
- tag_list = options.get("tags", []);
-
- if tag_list:
- queryset = queryset.filter(label__in=tag_list)
- elif not options.get('all',False):
- queryset = queryset.annotate(wpc=Count('wp_categories')).filter(wpc = 0)
- #else:
- # queryset = Tag.objects.filter(url_status=None)
-
- if random:
- queryset = queryset.order_by("?")
- else:
- queryset = queryset.order_by("label")
-
- if limit >= 0:
- queryset = queryset[start:limit]
- elif start > 0:
- queryset = queryset[start:]
-
- if self.verbosity > 2 :
- print "Tag Query is %s" % (queryset.query)
-
- site = wiki.Wiki(site_url) #@UndefinedVariable
-
-
- count = queryset.count()
- if self.verbosity > 1:
- print "Processing %d tags" % (count)
-
- if not force and interactive:
- confirm = raw_input("You have requested to query and replace the wikipedia information for %d tags.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
- else:
- confirm = 'yes'
-
- if confirm != "yes":
- print "wikipedia query cancelled"
- return
-
-
-
- for i, tag in enumerate(queryset):
-
- if self.verbosity > 1:
- print "processing tag %s (%d/%d)" % (tag.label, i + 1, count)
- else:
- utils.show_progress(i + 1, count, tag.label, 60)
-
- # query categories
- wikipedia_pageid = tag.label if use_label else tag.wikipedia_pageid
- if tag.url_status == Tag.TAG_URL_STATUS_DICT['redirection'] and tag.alternative_wikipedia_pageid is not None :
- wikipedia_pageid = tag.alternative_label if use_label else tag.alternative_wikipedia_pageid
-
- with transaction.commit_on_success():
- if types_mask & TYPES_MASK_DICT['visible']:
- res = self.query_all_categories(False, site, wikipedia_pageid, use_label)
- self.process_categories(res, False, tag)
-
- if types_mask & TYPES_MASK_DICT['hidden']:
- res = self.query_all_categories(True, site, wikipedia_pageid, use_label)
- self.process_categories(res, True, tag)
-
- if types_mask & TYPES_MASK_DICT['infobox']:
- res = self.query_infoboxes(site, wikipedia_pageid, use_label)
- self.process_infoboxes(res, tag)
-
--- a/web/hdalab/management/utils.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 2, 2012
-
-@author: ymh
-'''
-
-import cStringIO
-import csv
-import codecs
-
-class UnicodeWriter:
- """
- A CSV writer which will write rows to CSV file "f",
- which is encoded in the given encoding.
- """
-
- def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
- # Redirect output to a queue
- self.queue = cStringIO.StringIO()
- self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
- self.stream = f
- self.encoder = codecs.getincrementalencoder(encoding)()
-
- def writerow(self, row):
- self.writer.writerow([unicode(s).encode("utf-8") for s in row])
- # Fetch UTF-8 output from the queue ...
- data = self.queue.getvalue()
- data = data.decode("utf-8")
- # ... and reencode it into the target encoding
- data = self.encoder.encode(data)
- # write to the target stream
- self.stream.write(data)
- # empty queue
- self.queue.truncate(0)
-
- def writerows(self, rows):
- for row in rows:
- self.writerow(row)
--- a/web/hdalab/migrations/0001_initial.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-# encoding: utf-8
-from south.db import db
-from south.v2 import SchemaMigration
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'WpCategory'
- db.create_table('hdalab_wpcategory', ( #@UndefinedVariable
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=2048)),
- ))
- db.send_create_signal('hdalab', ['WpCategory']) #@UndefinedVariable
-
- # Adding model 'TagWpCategory'
- db.create_table('hdalab_tagwpcategory', ( #@UndefinedVariable
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='wp_categories', to=orm['hdabo.Tag'])),
- ('wp_category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.WpCategory'])),
- ('hidden', self.gf('django.db.models.fields.BooleanField')(default=False)),
- ))
- db.send_create_signal('hdalab', ['TagWpCategory']) #@UndefinedVariable
-
- # Adding unique constraint on 'TagWpCategory', fields ['tag', 'wp_category', 'hidden']
- db.create_unique('hdalab_tagwpcategory', ['tag_id', 'wp_category_id', 'hidden']) #@UndefinedVariable
-
- # Adding model 'TagInfobox'
- db.create_table('hdalab_taginfobox', ( #@UndefinedVariable
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='infoboxes', to=orm['hdabo.Tag'])),
- ('name', self.gf('django.db.models.fields.CharField')(max_length=2048)),
- ('source', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ('revision_id', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
- ))
- db.send_create_signal('hdalab', ['TagInfobox']) #@UndefinedVariable
-
- # Adding unique constraint on 'TagInfobox', fields ['tag', 'name', 'revision_id']
- db.create_unique('hdalab_taginfobox', ['tag_id', 'name', 'revision_id']) #@UndefinedVariable
-
- # Adding model 'InfoboxParameter'
- db.create_table('hdalab_infoboxparameter', ( #@UndefinedVariable
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('tag_infobox', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.TagInfobox'])),
- ('param_name', self.gf('django.db.models.fields.CharField')(max_length=2048)),
- ('param_value', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ))
- db.send_create_signal('hdalab', ['InfoboxParameter']) #@UndefinedVariable
-
- # Adding unique constraint on 'InfoboxParameter', fields ['tag_infobox', 'param_name']
- db.create_unique('hdalab_infoboxparameter', ['tag_infobox_id', 'param_name']) #@UndefinedVariable
-
-
- def backwards(self, orm):
-
- # Removing unique constraint on 'InfoboxParameter', fields ['tag_infobox', 'param_name']
- db.delete_unique('hdalab_infoboxparameter', ['tag_infobox_id', 'param_name']) #@UndefinedVariable
-
- # Removing unique constraint on 'TagInfobox', fields ['tag', 'name', 'revision_id']
- db.delete_unique('hdalab_taginfobox', ['tag_id', 'name', 'revision_id']) #@UndefinedVariable
-
- # Removing unique constraint on 'TagWpCategory', fields ['tag', 'wp_category', 'hidden']
- db.delete_unique('hdalab_tagwpcategory', ['tag_id', 'wp_category_id', 'hidden']) #@UndefinedVariable
-
- # Deleting model 'WpCategory'
- db.delete_table('hdalab_wpcategory') #@UndefinedVariable
-
- # Deleting model 'TagWpCategory'
- db.delete_table('hdalab_tagwpcategory') #@UndefinedVariable
-
- # Deleting model 'TagInfobox'
- db.delete_table('hdalab_taginfobox') #@UndefinedVariable
-
- # Deleting model 'InfoboxParameter'
- db.delete_table('hdalab_infoboxparameter') #@UndefinedVariable
-
-
- models = {
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0002_dataviz.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'DbpediaFields'
- db.create_table('hdalab_dbpediafields', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=2048, db_index=True)),
- ('tag', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='dbpedia_fields', null=True, to=orm['hdabo.Tag'])),
- ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
- ('thumbnail', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
- ))
- db.send_create_signal('hdalab', ['DbpediaFields'])
-
- # Adding model 'TagLinks'
- db.create_table('hdalab_taglinks', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('subject', self.gf('django.db.models.fields.related.ForeignKey')(related_name='taglinks_subjects', to=orm['hdabo.Tag'])),
- ('object', self.gf('django.db.models.fields.related.ForeignKey')(related_name='taglinks_objects', to=orm['hdabo.Tag'])),
- ))
- db.send_create_signal('hdalab', ['TagLinks'])
-
- # Adding model 'CountryCode'
- db.create_table('hdalab_countrycode', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=1024, db_index=True)),
- ('isocode', self.gf('django.db.models.fields.CharField')(unique=True, max_length=3, db_index=True)),
- ))
- db.send_create_signal('hdalab', ['CountryCode'])
-
- # Adding model 'TagYears'
- db.create_table('hdalab_tagyears', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='years', to=orm['hdabo.Tag'])),
- ('start_year', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
- ('end_yar', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
- ))
- db.send_create_signal('hdalab', ['TagYears'])
-
-
- def backwards(self, orm):
-
- # Deleting model 'DbpediaFields'
- db.delete_table('hdalab_dbpediafields')
-
- # Deleting model 'TagLinks'
- db.delete_table('hdalab_taglinks')
-
- # Deleting model 'CountryCode'
- db.delete_table('hdalab_countrycode')
-
- # Deleting model 'TagYears'
- db.delete_table('hdalab_tagyears')
-
-
- models = {
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdalab.countrycode': {
- 'Meta': {'object_name': 'CountryCode'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0003_hdasession.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'HdaSession'
- db.create_table('hdalab_hdasession', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('sessionid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=36, db_index=True)),
- ('data', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ))
- db.send_create_signal('hdalab', ['HdaSession'])
-
-
- def backwards(self, orm):
-
- # Deleting model 'HdaSession'
- db.delete_table('hdalab_hdasession')
-
-
- models = {
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdalab.countrycode': {
- 'Meta': {'object_name': 'CountryCode'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0004_remove_dbpedia_unicity.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Removing unique constraint on 'DbpediaFields', fields ['dbpedia_uri']
- db.delete_unique('hdalab_dbpediafields', ['dbpedia_uri'])
-
-
- def backwards(self, orm):
-
- # Adding unique constraint on 'DbpediaFields', fields ['dbpedia_uri']
- db.create_unique('hdalab_dbpediafields', ['dbpedia_uri'])
-
-
- models = {
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdalab.countrycode': {
- 'Meta': {'object_name': 'CountryCode'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0005_rename_end_year.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Deleting field 'TagYears.end_yar'
- db.delete_column('hdalab_tagyears', 'end_yar')
-
- # Adding field 'TagYears.end_year'
- db.add_column('hdalab_tagyears', 'end_year', self.gf('django.db.models.fields.IntegerField')(default=2012, db_index=True), keep_default=False)
-
-
- def backwards(self, orm):
-
- # User chose to not deal with backwards NULL issues for 'TagYears.end_yar'
- raise RuntimeError("Cannot reverse this migration. 'TagYears.end_yar' and its values cannot be restored.")
-
- # Deleting field 'TagYears.end_year'
- db.delete_column('hdalab_tagyears', 'end_year')
-
-
- models = {
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdalab.countrycode': {
- 'Meta': {'object_name': 'CountryCode'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0006_dbpedia_fields_one_to_one.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Changing field 'DbpediaFields.tag'
- db.alter_column('hdalab_dbpediafields', 'tag_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, to=orm['hdabo.Tag']))
-
- # Adding unique constraint on 'DbpediaFields', fields ['tag']
- db.create_unique('hdalab_dbpediafields', ['tag_id'])
-
-
- def backwards(self, orm):
-
- # Removing unique constraint on 'DbpediaFields', fields ['tag']
- db.delete_unique('hdalab_dbpediafields', ['tag_id'])
-
- # Changing field 'DbpediaFields.tag'
- db.alter_column('hdalab_dbpediafields', 'tag_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['hdabo.Tag']))
-
-
- models = {
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdalab.countrycode': {
- 'Meta': {'object_name': 'CountryCode'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0007_geographic_inclusion.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Deleting model 'CountryCode'
- db.delete_table('hdalab_countrycode')
-
- # Adding model 'GeoInclusion'
- db.create_table('hdalab_geoinclusion', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('tag', self.gf('django.db.models.fields.related.OneToOneField')(related_name='locatedin', unique=True, to=orm['hdabo.Tag'])),
- ('country', self.gf('django.db.models.fields.related.ForeignKey')(related_name='includes', to=orm['hdalab.Country'])),
- ))
- db.send_create_signal('hdalab', ['GeoInclusion'])
-
- # Adding model 'Country'
- db.create_table('hdalab_country', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=255, db_index=True)),
- ))
- db.send_create_signal('hdalab', ['Country'])
-
-
- def backwards(self, orm):
-
- # Adding model 'CountryCode'
- db.create_table('hdalab_countrycode', (
- ('isocode', self.gf('django.db.models.fields.CharField')(max_length=3, unique=True, db_index=True)),
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('label', self.gf('django.db.models.fields.CharField')(max_length=1024, unique=True, db_index=True)),
- ))
- db.send_create_signal('hdalab', ['CountryCode'])
-
- # Deleting model 'GeoInclusion'
- db.delete_table('hdalab_geoinclusion')
-
- # Deleting model 'Country'
- db.delete_table('hdalab_country')
-
-
- models = {
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdalab.country': {
- 'Meta': {'object_name': 'Country'},
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.geoinclusion': {
- 'Meta': {'object_name': 'GeoInclusion'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0008_datasheet_insee.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,304 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'DatasheetExtras'
- db.create_table('hdalab_datasheetextras', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('datasheet', self.gf('django.db.models.fields.related.OneToOneField')(related_name='extras', unique=True, to=orm['hdabo.Datasheet'])),
- ('insee', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.InseeCoords'], null=True, blank=True)),
- ))
- db.send_create_signal('hdalab', ['DatasheetExtras'])
-
- # Adding model 'InseeCoords'
- db.create_table('hdalab_inseecoords', (
- ('insee', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
- ('city_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
- ('latitude', self.gf('django.db.models.fields.FloatField')()),
- ('longitude', self.gf('django.db.models.fields.FloatField')()),
- ))
- db.send_create_signal('hdalab', ['InseeCoords'])
-
-
- def backwards(self, orm):
-
- # Deleting model 'DatasheetExtras'
- db.delete_table('hdalab_datasheetextras')
-
- # Deleting model 'InseeCoords'
- db.delete_table('hdalab_inseecoords')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdalab.country': {
- 'Meta': {'object_name': 'Country'},
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'hdalab.datasheetextras': {
- 'Meta': {'object_name': 'DatasheetExtras'},
- 'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.geoinclusion': {
- 'Meta': {'object_name': 'GeoInclusion'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.inseecoords': {
- 'Meta': {'object_name': 'InseeCoords'},
- 'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
- 'latitude': ('django.db.models.fields.FloatField', [], {}),
- 'longitude': ('django.db.models.fields.FloatField', [], {})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0009_i18n.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,308 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'DbpediaFieldsTranslation'
- db.create_table('hdalab_dbpediafieldstranslation', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', to=orm['hdalab.DbpediaFields'])),
- ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
- ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, blank=True)),
- ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
- ))
- db.send_create_signal('hdalab', ['DbpediaFieldsTranslation'])
-
- # Adding unique constraint on 'DbpediaFieldsTranslation', fields ['master', 'language_code']
- db.create_unique('hdalab_dbpediafieldstranslation', ['master_id', 'language_code'])
-
-
- def backwards(self, orm):
-
- # Removing unique constraint on 'DbpediaFieldsTranslation', fields ['master', 'language_code']
- db.delete_unique('hdalab_dbpediafieldstranslation', ['master_id', 'language_code'])
-
- # Deleting model 'DbpediaFieldsTranslation'
- db.delete_table('hdalab_dbpediafieldstranslation')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 3, 8, 13, 47, 54, 155003)'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 3, 8, 13, 47, 54, 154782)'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdalab.country': {
- 'Meta': {'object_name': 'Country'},
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'hdalab.datasheetextras': {
- 'Meta': {'object_name': 'DatasheetExtras'},
- 'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.dbpediafieldstranslation': {
- 'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
- 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
- },
- 'hdalab.geoinclusion': {
- 'Meta': {'object_name': 'GeoInclusion'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.inseecoords': {
- 'Meta': {'object_name': 'InseeCoords'},
- 'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
- 'latitude': ('django.db.models.fields.FloatField', [], {}),
- 'longitude': ('django.db.models.fields.FloatField', [], {})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0010_categoryinclusion.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,312 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding model 'WpCategoryInclusion'
- db.create_table('hdalab_wpcategoryinclusion', (
- ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
- ('parent_category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='child_categories', to=orm['hdalab.WpCategory'])),
- ('child_category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='parent_categories', to=orm['hdalab.WpCategory'])),
- ))
- db.send_create_signal('hdalab', ['WpCategoryInclusion'])
-
- # Adding unique constraint on 'WpCategoryInclusion', fields ['parent_category', 'child_category']
- db.create_unique('hdalab_wpcategoryinclusion', ['parent_category_id', 'child_category_id'])
-
-
- def backwards(self, orm):
-
- # Removing unique constraint on 'WpCategoryInclusion', fields ['parent_category', 'child_category']
- db.delete_unique('hdalab_wpcategoryinclusion', ['parent_category_id', 'child_category_id'])
-
- # Deleting model 'WpCategoryInclusion'
- db.delete_table('hdalab_wpcategoryinclusion')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 7, 2, 5, 14, 31, 895549)'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 7, 2, 5, 14, 31, 895384)'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdalab.country': {
- 'Meta': {'object_name': 'Country'},
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'hdalab.datasheetextras': {
- 'Meta': {'object_name': 'DatasheetExtras'},
- 'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.dbpediafieldstranslation': {
- 'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
- 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
- },
- 'hdalab.geoinclusion': {
- 'Meta': {'object_name': 'GeoInclusion'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.inseecoords': {
- 'Meta': {'object_name': 'InseeCoords'},
- 'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
- 'latitude': ('django.db.models.fields.FloatField', [], {}),
- 'longitude': ('django.db.models.fields.FloatField', [], {})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- },
- 'hdalab.wpcategoryinclusion': {
- 'Meta': {'unique_together': "(('parent_category', 'child_category'),)", 'object_name': 'WpCategoryInclusion'},
- 'child_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parent_categories'", 'to': "orm['hdalab.WpCategory']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'parent_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'child_categories'", 'to': "orm['hdalab.WpCategory']"})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0011_auto__add_field_dbpediafieldstranslation_is_label_translated__add_fiel.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
-
- # Adding field 'DbpediaFieldsTranslation.is_label_translated'
- db.add_column('hdalab_dbpediafieldstranslation', 'is_label_translated', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
-
- # Adding field 'DbpediaFieldsTranslation.is_abstract_translated'
- db.add_column('hdalab_dbpediafieldstranslation', 'is_abstract_translated', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
-
-
- def backwards(self, orm):
-
- # Deleting field 'DbpediaFieldsTranslation.is_label_translated'
- db.delete_column('hdalab_dbpediafieldstranslation', 'is_label_translated')
-
- # Deleting field 'DbpediaFieldsTranslation.is_abstract_translated'
- db.delete_column('hdalab_dbpediafieldstranslation', 'is_abstract_translated')
-
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 6, 7, 27, 20, 166066)'}),
- 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 6, 7, 27, 20, 165955)'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- 'hdabo.author': {
- 'Meta': {'object_name': 'Author'},
- 'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet': {
- 'Meta': {'object_name': 'Datasheet'},
- 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
- 'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
- 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
- 'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
- 'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
- 'original_creation_date': ('django.db.models.fields.DateField', [], {}),
- 'original_modification_date': ('django.db.models.fields.DateField', [], {}),
- 'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
- 'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
- 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
- 'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
- 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
- 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.datasheet_college_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_college_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_domains': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_highschool_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_highschool_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.datasheet_primary_periods': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {}),
- 'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
- },
- 'hdabo.datasheet_primary_themes': {
- 'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sort_value': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.documentformat': {
- 'Meta': {'object_name': 'DocumentFormat'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.domain': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdabo.location': {
- 'Meta': {'object_name': 'Location'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
- },
- 'hdabo.organisation': {
- 'Meta': {'object_name': 'Organisation'},
- 'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tag': {
- 'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
- 'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
- 'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
- 'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
- 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
- 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdabo.tagcategory': {
- 'Meta': {'object_name': 'TagCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
- },
- 'hdabo.taggedsheet': {
- 'Meta': {'object_name': 'TaggedSheet'},
- 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
- 'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
- 'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
- 'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
- 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
- },
- 'hdabo.timeperiod': {
- 'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
- 'school_period': ('django.db.models.fields.IntegerField', [], {})
- },
- 'hdalab.country': {
- 'Meta': {'object_name': 'Country'},
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- 'hdalab.datasheetextras': {
- 'Meta': {'object_name': 'DatasheetExtras'},
- 'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.dbpediafields': {
- 'Meta': {'object_name': 'DbpediaFields'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
- 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
- },
- 'hdalab.dbpediafieldstranslation': {
- 'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
- 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_abstract_translated': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_label_translated': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
- 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
- 'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
- },
- 'hdalab.geoinclusion': {
- 'Meta': {'object_name': 'GeoInclusion'},
- 'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.hdasession': {
- 'Meta': {'object_name': 'HdaSession'},
- 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
- },
- 'hdalab.infoboxparameter': {
- 'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
- },
- 'hdalab.inseecoords': {
- 'Meta': {'object_name': 'InseeCoords'},
- 'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
- 'latitude': ('django.db.models.fields.FloatField', [], {}),
- 'longitude': ('django.db.models.fields.FloatField', [], {})
- },
- 'hdalab.taginfobox': {
- 'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
- 'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
- 'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.taglinks': {
- 'Meta': {'object_name': 'TagLinks'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
- 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.tagwpcategory': {
- 'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
- 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
- 'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tags'", 'to': "orm['hdalab.WpCategory']"})
- },
- 'hdalab.tagyears': {
- 'Meta': {'object_name': 'TagYears'},
- 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
- 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
- },
- 'hdalab.wpcategory': {
- 'Meta': {'object_name': 'WpCategory'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
- },
- 'hdalab.wpcategoryinclusion': {
- 'Meta': {'unique_together': "(('parent_category', 'child_category'),)", 'object_name': 'WpCategoryInclusion'},
- 'child_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parent_categories'", 'to': "orm['hdalab.WpCategory']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'parent_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'child_categories'", 'to': "orm['hdalab.WpCategory']"})
- }
- }
-
- complete_apps = ['hdalab']
--- a/web/hdalab/models/__init__.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-from hdalab.models.categories import (WpCategory, InfoboxParameter, TagInfobox,
- TagWpCategory, WpCategoryInclusion)
-from hdalab.models.dataviz import TagYears, Country, GeoInclusion, TagLinks, DbpediaFields, HdaSession, InseeCoords, DatasheetExtras, DbpediaFieldsTranslation
-
-__all__ = ['WpCategory', 'InfoboxParameter', 'TagInfobox', 'TagWpCategory', 'TagYears', 'Country', 'GeoInclusion', 'TagLinks', 'DbpediaFields', 'DbpediaFieldsTranslation', 'HdaSession', 'InseeCoords', 'DatasheetExtras', 'WpCategoryInclusion']
\ No newline at end of file
--- a/web/hdalab/models/categories.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-'''
-Created on Jan 26, 2012
-
-@author: ymh
-'''
-from django.db import models
-from hdabo.models import Tag
-
-
-class WpCategory(models.Model):
- label = models.CharField(max_length=2048, unique=True, blank=False, null=False)
-
- def __unicode__(self):
- return unicode(self.label)
-
- class Meta:
- app_label = 'hdalab'
- verbose_name_plural = "WpCategories"
-
-class TagWpCategory(models.Model):
- tag = models.ForeignKey(Tag, related_name="wp_categories")
- wp_category = models.ForeignKey(WpCategory, related_name="tags")
- hidden = models.BooleanField(blank=False, null=False)
-
- class Meta:
- app_label = 'hdalab'
- unique_together = ('tag', 'wp_category', 'hidden')
-
-class TagInfobox(models.Model):
- tag = models.ForeignKey(Tag, related_name="infoboxes")
- name = models.CharField(max_length=2048, unique=False, blank=False, null=False)
- source = models.TextField(unique=False, blank=True, null=True)
- revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
-
- class Meta:
- app_label = 'hdalab'
- unique_together = ('tag','name','revision_id')
-
-class InfoboxParameter(models.Model):
- tag_infobox = models.ForeignKey(TagInfobox)
- param_name = models.CharField(max_length=2048, unique=False, blank=False, null=False)
- param_value = models.TextField(unique=False, blank=True, null=True)
-
- class Meta:
- app_label = 'hdalab'
- unique_together = ('tag_infobox','param_name')
-
-# Added on 02/07/2012
-
-class WpCategoryInclusion(models.Model):
- parent_category = models.ForeignKey(WpCategory, related_name="child_categories")
- child_category = models.ForeignKey(WpCategory, related_name="parent_categories")
-
- class Meta:
- app_label = 'hdalab'
- unique_together = ('parent_category','child_category')
\ No newline at end of file
--- a/web/hdalab/models/dataviz.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 27, 2012
-
-@author: ymh
-'''
-from django.db import models
-from hdabo.models import Tag, Datasheet
-
-
-class TagYears(models.Model):
-
- tag = models.ForeignKey(Tag, related_name="years", blank=False, null=False, db_index=True)
- start_year = models.IntegerField(blank=False, null=False, db_index=True)
- end_year = models.IntegerField(blank=False, null=False, db_index=True)
-
- class Meta:
- app_label = 'hdalab'
-
-
-class TagLinks(models.Model):
-
- subject = models.ForeignKey(Tag, blank=False, null=False, db_index=True, related_name="taglinks_subjects")
- object = models.ForeignKey(Tag, blank=False, null=False, db_index=True, related_name="taglinks_objects")
-
- class Meta:
- app_label = 'hdalab'
-
-class Country(models.Model):
-
- dbpedia_uri = models.URLField(verify_exists=False, max_length=255, blank=False, null=False, db_index=True, unique=True)
-
- class Meta:
- app_label = 'hdalab'
-
-class GeoInclusion(models.Model):
-
- tag = models.OneToOneField(Tag, related_name="locatedin", db_index=True)
- country = models.ForeignKey(Country, blank=False, null=False, related_name="includes", db_index=True)
-
- class Meta:
- app_label = 'hdalab'
-
-class DbpediaFields(models.Model):
-
- dbpedia_uri = models.URLField(verify_exists=False, max_length=2048, blank=False, null=False, db_index=True, unique=False)
- tag = models.OneToOneField(Tag, blank=True, null=True, db_index=True, related_name="dbpedia_fields")
- abstract = models.TextField(blank=True, null=True)
- thumbnail = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=False)
- label = models.CharField(max_length=2048, unique=False, blank=True, null=True)
-
- class Meta:
- app_label = 'hdalab'
-
-
-class DbpediaFieldsTranslation(models.Model):
-
- master = models.ForeignKey(DbpediaFields, blank=False, null=False, db_index=True, related_name="translations")
- language_code = models.CharField(max_length=15, blank=False, null=False, db_index=True)
- label = models.CharField(max_length=2048, unique=False, blank=True, null=False)
- abstract = models.TextField(blank=True, null=True)
- is_label_translated = models.BooleanField(default=True)
- is_abstract_translated = models.BooleanField(default=True)
- class Meta:
- app_label = 'hdalab'
- unique_together = ('master', 'language_code')
-
-
-class HdaSession(models.Model):
-
- sessionid = models.CharField(max_length=36, unique=True, blank=False, null=False, db_index=True)
- data = models.TextField(blank=True, null=True)
-
- class Meta:
- app_label = 'hdalab'
-
-class InseeCoords(models.Model):
-
- insee = models.IntegerField(primary_key=True)
- city_name = models.CharField(max_length=255, blank=False, null=False)
- latitude = models.FloatField(blank=False, null=False)
- longitude = models.FloatField(blank=False, null=False)
-
- class Meta:
- app_label = 'hdalab'
-
-class DatasheetExtras(models.Model):
-
- datasheet = models.OneToOneField(Datasheet, related_name="extras", db_index=True)
- insee = models.ForeignKey(InseeCoords, blank=True, null=True, db_index=True)
-
- class Meta:
- app_label = 'hdalab'
\ No newline at end of file
--- a/web/hdalab/modwsgi.wsgi Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-import os
-import sys
-import site
-
-
-
-def application(environ, start_response):
-
- global g_env_set
-
- if 'g_env_set' not in globals() or not g_env_set:
- os.environ['DJANGO_SETTINGS_MODULE'] = environ['DJANGO_SETTINGS_MODULE']
-
- prev_sys_path = list(sys.path)
-
- sys.path.append(environ['PROJECT_PATH'])
- for path in environ.get('PYTHON_PATH', "").split(os.pathsep):
- if path:
- site.addsitedir(path) #@UndefinedVariable
-
- new_sys_path = []
- for item in list(sys.path):
- if item not in prev_sys_path and item not in new_sys_path:
- new_sys_path.append(item)
- sys.path.remove(item)
- sys.path[:0] = new_sys_path
- g_env_set = True
-
- import django.core.handlers.wsgi
-
- _application = django.core.handlers.wsgi.WSGIHandler()
-
- if environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
- import pydevd #@UnresolvedImport
- pydevd.settrace(suspend=False)
-
- return _application(environ, start_response)
-
--- a/web/hdalab/settings.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-# -*- coding: utf-8 -*-
-# Django settings for hdalab project.
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
- # ('Your Name', 'your_email@example.com'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': '', # Or path to database file if using sqlite3.
- 'USER': '', # Not used with sqlite3.
- 'PASSWORD': '', # Not used with sqlite3.
- 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
- }
-}
-
-# Local time zone for this installation. Choices can be found here:
-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
-# although not all choices may be available on all operating systems.
-# On Unix systems, a value of None will cause Django to use the same
-# timezone as the operating system.
-# If running in a Windows environment this must be set to the same as your
-# system time zone.
-TIME_ZONE = 'America/Chicago'
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'fr-fr'
-
-ugettext = lambda s:s
-
-LANGUAGES = (
- ('fr', ugettext('French')),
- ('en', ugettext('English')),
- ('it', ugettext('Italian')),
- ('de', ugettext('German')),
- ('es', ugettext('Spanish')),
- ('ja', ugettext('Japanese')),
- #('zh-tw', ugettext('Chinese')),
-)
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale
-USE_L10N = True
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = ''
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = ''
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = ''
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = '/static/'
-
-# URL prefix for admin static files -- CSS, JavaScript and images.
-# Make sure to use a trailing slash.
-# Examples: "http://foo.com/static/admin/", "/static/admin/".
-#ADMIN_MEDIA_PREFIX = '/static/admin/'
-
-# Additional locations of static files
-STATICFILES_DIRS = (
- # Put strings here, like "/home/html/static" or "C:/www/django/static".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
-)
-
-# List of finder classes that know how to find static files in
-# various locations.
-STATICFILES_FINDERS = (
- 'django.contrib.staticfiles.finders.FileSystemFinder',
- 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = 'u!@fo&-)d-hqz7==jmc2*_^__wod8$k^lb7^)y@ihbok)gn4fe'
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
-# 'django.template.loaders.eggs.Loader',
-)
-
-MIDDLEWARE_CLASSES = (
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.locale.LocaleMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
-)
-
-ROOT_URLCONF = 'hdalab.urls'
-
-TEMPLATE_DIRS = (
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
-)
-
-INSTALLED_APPS = (
- 'south',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'django.contrib.admin',
- 'django_extensions',
- 'hdabo',
- 'hdalab',
-)
-
-# A sample logging configuration. The only tangible logging
-# performed by this configuration is to send an email to
-# the site admins on every HTTP 500 error.
-# See http://docs.djangoproject.com/en/dev/topics/logging for
-# more details on how to customize your logging configuration.
-#LOGGING = {
-# 'version': 1,
-# 'disable_existing_loggers': False,
-# 'handlers': {
-# 'mail_admins': {
-# 'level': 'ERROR',
-# 'class': 'django.utils.log.AdminEmailHandler'
-# }
-# },
-# 'loggers': {
-# 'django.request': {
-# 'handlers': ['mail_admins'],
-# 'level': 'ERROR',
-# 'propagate': True,
-# },
-# }
-#}
-
-HAYSTACK_SITECONF = 'hdabo.search.sites'
-HAYSTACK_SEARCH_ENGINE = 'hdabo.search.french_whoosh'
-#HAYSTACK_WHOOSH_PATH = os.path.abspath(BASE_DIR + "../index/").rstrip("/") + "/"
-
-WIKIPEDIA_API_URL = "http://fr.wikipedia.org/w/api.php"
-WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s"
-DBPEDIA_URI_TEMPLATE = "http://dbpedia.org/resource/%s"
-
-LOCALE_PATHS = ()
-
-from hdalab.config import * #@UnusedWildImport
-
Binary file web/hdalab/static/hdalab/css/DroidSerif-Bold.ttf has changed
Binary file web/hdalab/static/hdalab/css/DroidSerif-BoldItalic.ttf has changed
Binary file web/hdalab/static/hdalab/css/DroidSerif-Italic.ttf has changed
Binary file web/hdalab/static/hdalab/css/DroidSerif-Regular.ttf has changed
Binary file web/hdalab/static/hdalab/css/OpenSans-Bold.ttf has changed
Binary file web/hdalab/static/hdalab/css/OpenSans-BoldItalic.ttf has changed
Binary file web/hdalab/static/hdalab/css/OpenSans-Italic.ttf has changed
Binary file web/hdalab/static/hdalab/css/OpenSans-Regular.ttf has changed
--- a/web/hdalab/static/hdalab/css/cattree.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-.leftzone {
- width: 280px;
- min-height: 400px;
- float: left;
- height: 100%;
- padding-right: 20px;
- border-right: 1px solid #999;
-}
-
-.leftzone h2 {
- font-size: 16px; font-weight: bold; margin-bottom: 5px;
-}
-
-.leftzone h3 {
- font-size: 13px; font-weight: bold; margin: 30px 0 5px;
-}
-
-.leftzone input {
- background: #ffffff; width: 260px; font-size: 14px; font-weight: bold; margin: 5px 0;
-}
-
-.results {
- margin-top: 30px;
-}
-
-.content-results {
- color: #000060;
-}
-
-ul.disciplist, ul.theslist {
- list-style: none; margin: 10px 5px;
-}
-
-.disciplist li, .theslist li {
- font-size: 12px; font-weight: bold;
-}
-
-.disciplist a, .theslist a {
- color: #000066;
-}
-
-.disciplist .selected a, .theslist .selected a {
- color: #0000ff;
-}
-
-.ui-autocomplete strong {
- font-weight: bold; color: #990000;
-}
-
-div.cattree {
- margin: 10px 0 0 320px;
-}
--- a/web/hdalab/static/hdalab/css/common.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-@font-face
-{
- font-family: "Open Sans"; src: url(OpenSans-Regular.ttf);
-}
-
-@font-face
-{
- font-family: "Open Sans"; font-weight: bold; src: url(OpenSans-Bold.ttf);
-}
-
-@font-face
-{
- font-family: "Open Sans"; font-style: italic; src: url(OpenSans-Italic.ttf);
-}
-
-@font-face
-{
- font-family: "Open Sans"; font-weight: bold; font-style: italic; src: url(OpenSans-BoldItalic.ttf);
-}
-
-/* Browser-reset CSS */
-
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed,
-figure, figcaption, footer, header, hgroup,
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
- margin: 0;
- padding: 0;
- border: 0;
- font-size: 100%;
- font: inherit;
- vertical-align: baseline;
-}
-
-input::-moz-focus-inner /*Remove button padding in FF*/
-{
- border: 0;
- padding: 0;
-}
-
-table {
- border-collapse: separate; border-spacing: 0;
-}
-
-th, td {
- vertical-align: top;
-}
-
-img a {
- border: none;
-}
-
-/* Body */
-
-body {
- font-family: "Open Sans", Arial, Helvetica, sans-serif; background: url(../img/bgdhdalab.png) top repeat-x #ffffff; color: #000000; font-size: 10px;
-}
-
-input, textarea {
- font-family: "Open Sans", Arial, Helvetica, sans-serif; background: transparent;
-}
-
-a {
- text-decoration: none;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-/* Main container */
-
-#header {
- position: relative; width: 960px; margin: 0 auto; height: 65px;
-}
-
-#container {
- position: relative; width: 960px; margin: 0 auto; min-height: 800px;
-}
-
-h1 {
- margin: 5px 0 10px; font-size: 34px;
-}
-
-h1 a {
- color: #ffffff;
-}
-
-h1 a:hover {
- color: #e07000;
-}
-
-#nav {
- float: right; list-style: none; margin-top: 3px;
-}
-
-#nav li {
- float: left; font-size: 14px; margin-left: 15px; font-weight: bold;
- color: #CCCCCC;
-}
-
-#nav a {
- color: #ffffff;
-}
-
-#nav a:hover {
- color: #e07000;
-}
-
-#nav a.actif {
- color: #ffff80;
-}
-
-#footer {
- width: 100%; float: left; clear: both; background: url(../img/bgdfooter.png) top repeat-x #b1b4c0; padding: 110px 0 20px 0;
-}
-
-#footer-contents {
- list-style: none; width: 960px; margin: 0 auto; color: #ffffff;
-}
-
-#footer-contents li {
- float: left; width: 240px;
-}
-
-#footer-contents p {
- font-size: 13px; margin: 2px 0;
-}
-
-#footer-contents img {
- display: block; margin: 0 auto;
-}
--- a/web/hdalab/static/hdalab/css/completion.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,195 +0,0 @@
-#titlebar, #columns {
- width: 100%;
- clear: both;
-}
-
-.langbutton {
- width: 19px; height: 13px; margin: 2px; padding: 0; border: none; text-indent: -999px; background-position: 0 -26px; cursor: pointer;
-}
-
-.langbutton:hover {
- background-position: 0 -13px;
-}
-
-.langbutton.selected {
- background-position: 0 0; cursor: default;
-}
-
-.barrebloc {
- float: left; width: 473px; border: 1px solid #b0b0b0;
- background-image: url(../img/bgdhdalab.png); background-position: 0 -22px; background-repeat: repeat-x; cursor: pointer; cursor: hand;
- border-top-left-radius: 4px; border-top-right-radius: 4px
-}
-
-.barrebloc h2 {
- margin: 4px 0; font-size: 16px; text-align: center; color: #ffffff; font-weight: bold;
-}
-
-.bloc {
- float: left; width: 475px; margin-bottom: 10px;
-}
-
-#bloc_translationinfo {
- color: #666;
- font-style: italic;
-}
-
-.corpsbloc {
- float: left; width: 465px; border: 1px solid #b0b0b0; padding: 8px 4px; border-top-style: none;
- background-color: #ffffff; background-image: url(../img/bgdhdalab.png); background-position: 0 -62px; background-repeat: repeat-x;
- border-bottom-left-radius: 4px; border-bottom-right-radius: 4px
-}
-
-#hdatitle {
- float: left; width: 475px; margin: 5px 0; font-size: 20px;
-}
-
-#titleleft {
- float: left;
-}
-
-#titleright {
- float: right;
-}
-
-#langselect {
- float: right;
-}
-
-#leftcol {
- float: left; width: 475px; margin-right: 5px;
-}
-
-#rightcol {
- float: left; width: 475px; margin-left: 5px;
-}
-
-#contentlist {
- list-style: none;
-}
-
-li.content-item {
- margin: 2px 0 12px;
-}
-
-.content-item h3 {
- font-size: 18px; margin: 3px 0; clear: both;
-}
-
-.content-item h4 {
- font-size: 11px; margin: 3px 0;
-}
-
-.content-item h4 a {
- color: #000066;
-}
-
-.maplet {
- float: right;
-}
-
-.content-item p {
- font-size: 12px; margin: 3px 0;
-}
-
-.content-annotation ul {
- list-style : disc; margin: 2px 0; padding-left: 1.5em; font-size: 12px;
- cursor: pointer; cursor: hand;
-}
-
-.content-annotation li {
- margin: 2px 0;
-}
-
-.content-annotation textarea {
- width: 99%; margin: 0; padding: 0; font-size: 12px;
-}
-
-ul.content-tags {
- list-style: none;
-}
-
-li.content-tag-item {
- display: inline-block; margin: 2px; padding: 2px; font-size: 13px; background: #666666;
-}
-
-.content-tag-item a {
- color: #ffffff;
-}
-
-.content-tag-item a:hover {
- color: #ff8080;
-}
-
-.content-tag-item a.tagmatch {
- color: #ffff00; font-weight: bold;
-}
-
-#taginfo p, h2, h3 {
- margin: 5px 0;
-}
-
-#taginfo h3 {
- font-size: 14px;
-}
-
-#taginfo p {
- font-size: 11px;
-}
-
-#img_wikipedia {
- float: left; max-width: 160px; max-height: 120px; margin: 2px 2px 2px 0;
-}
-
-#tagsearch {
- width: 100%; font-size: 16px; font-weight: bold; border-style: none; border-bottom: 1px solid #000;
-}
-
-#tagsearch.waiting {
- background: url(../img/small-loader.gif) no-repeat right;
-}
-
-ul.ui-autocomplete {
- font-family: "Open Sans"; max-width: 230px;
- max-height: 400px; overflow-y: auto; overflow-x: hidden;
-}
-
-.wpinfo {
- margin-left: 240px;
-}
-
-.ui-menu-item:hover .acwp {
- display: block;
-}
-
-.acnb {
- float: right; font-size: 12px; margin: 2px 0 0 2px;
-}
-
-.actitle {
- font-size: 13px;
-}
-
-.wptitle {
- font-size: 13px; font-weight: bold;
-}
-
-.wpimg {
- max-width: 80px; max-height: 60px; float: left; margin: 5px 2px 2px 0; border: none;
-}
-
-.wpabstract {
- font-size: 11px;
-}
-
-.wpsource {
- font-size: 10px; font-style: bold;
-}
-
-.clear {
- clear: both;
-}
-
-.actitle strong, .wptitle strong {
- color: #c000c0;
-}
\ No newline at end of file
--- a/web/hdalab/static/hdalab/css/facettes.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,490 +0,0 @@
-.langbutton {
- width: 19px; height: 13px; margin: 2px; padding: 0; border: none; text-indent: -999px; background-position: 0 -26px; cursor: pointer;
-}
-
-.langbutton:hover {
- background-position: 0 -13px;
-}
-
-.langbutton.selected {
- background-position: 0 0; cursor: default;
-}
-
-.barrebloc {
- float: left; width: 473px; border: 1px solid #b0b0b0;
- background-image: url(../img/bgdhdalab.png); background-position: 0 -22px; background-repeat: repeat-x; cursor: pointer; cursor: hand;
- border-top-left-radius: 4px; border-top-right-radius: 4px
-}
-
-.barrebloc h2 {
- margin: 4px 0; font-size: 16px; text-align: center; color: #ffffff; font-weight: bold;
-}
-
-.bloc, #bloc_gestvue {
- float: left; width: 475px; margin-bottom: 10px;
-}
-
-#bloc_translationinfo {
- color: #666;
- font-style: italic;
-}
-
-.corpsbloc {
- float: left; width: 465px; border: 1px solid #b0b0b0; padding: 8px 4px; border-top-style: none;
- background-color: #ffffff; background-image: url(../img/bgdhdalab.png); background-position: 0 -62px; background-repeat: repeat-x;
- border-bottom-left-radius: 4px; border-bottom-right-radius: 4px
-}
-
-#hdatitle {
- float: left; width: 475px; margin: 5px 0; font-size: 20px;
-}
-
-#sessionname {
- color: #600000; font-size: 22px;
-}
-
-#hdatitle .lectseul {
- font-size: 17px;
-}
-
-#hdatitle input {
- display: inline; font-size: 18px; font-weight: bold;
-}
-
-
-#titleleft {
- float: left;
-}
-
-#titleright {
- float: right;
-}
-
-#langselect {
- float: right;
-}
-
-
-#apartager {
- float: right; font-size: 14px; clear: right;
-}
-
-
-#vues {
- float: right; text-align: right; width: 475px; margin: 2px 0; clear: right;
-}
-
-#vuestitre {
- display: inline; padding: 2px 4px; font-size: 15px;
-}
-
-#ongletsvues {
- display: inline; list-style: none;
-}
-
-li.lienvue {
- display: inline; padding: 3px; font-size: 13px; font-weight: bold;
-}
-
-.lienvue a, #apartager a {
- color: #666666;
-}
-
-.lienvue.actif a, #apartager.actif a {
- color: #cc0066;
-}
-
-#nouvellevue a {
- font-weight: bold; color: #ff3000; font-size: 16px;
-}
-
-#partageurls, #plusdevues {
- float: right; text-align: right; clear: both; margin: 2px 0;
- font-size: 13px; display: none; width: 100%;
-}
-
-#partageurls ul {
- list-style: none;
-}
-
-#partageurls li {
- float: right; margin-left: 5px; padding: 4px; font-weight: bold;
-}
-
-#partageurls li.actif {
- background: #000080;
-}
-
-#partageurls li.actif a {
- color: #ffffff;
-}
-
-#zc-partageligne {
- float: right; clear: both; margin-top: 3px; width: 100%; font-size: 13px; text-align: right;
-}
-
-#zc-partageinput {
- width: 360px; padding: 2px; border: 1px solid #999999;
-}
-
-#zc-partageinput.hover {
- background: #000080; color: #ffffff;
-}
-
-#zc-partageinput.active {
- background: #800000; color: #ffffff;
-}
-
-#plusdevues {
- list-style: none;
-}
-
-.myurl {
- font-weight: bold;
-}
-
-#timeline {
- float: left; width: 100%; margin: 15px 0;
-}
-
-#dates {
- list-style: none; float: left; width: 100%; height: 0;
-}
-
-#dates li {
- position: absolute; width: 1px; height: 20px; background: rgba(0,0,0,.3); z-index: 2;
-}
-
-div.datelabel {
- width: 60px; margin: 4px 0 0 -30px; font-size: 10px; text-align: center; opacity: .8;
-}
-
-#dateheat {
- float: left; width: 100%; height: 20px; z-index: 1;
-}
-
-.handle {
- position: absolute; width: 0; z-index: 2; cursor: pointer; cursor: hand;
-}
-
-.handleinner {
- float: left; border: 5px solid #999; background: #fff;
- height: 30px; width: 10px; margin-top: -10px; border-radius: 4px;
- opacity: .8;
-}
-
-.handleinner:hover {
- background: #ccc;
-}
-
-.ui-draggable-dragging .handleinner {
- background: #660000; color: #ffffff;
-}
-
-#leftcol {
- float: left; width: 475px; margin-right: 5px;
-}
-
-#bandefiltre {
- float: left; width: 100%; margin-top: 10px;
-}
-
-#filtertitle {
- float: left; margin: 1px 0; font-size: 13px; font-weight: bold;
-}
-
-#filters {
- list-style: none; float: left; margin: 0 20px; font-size: 12px;
-}
-
-#filters li {
- float: left; padding: 2px 3px; margin-right: 5px; font-weight: bold;
-}
-
-#filters a {
- color: #666666;
-}
-
-#filters li.nofilter {
- font-style: italic; color: #ff3030;
-}
-
-#filters li.filtag {
- color: #ffffff; background: #000066;
-}
-
-#filters li.filcountry {
- color: #ffffff; background: #cc0066;
-}
-
-#filters li.filperiod {
- color: #ffffff; background: #e07000;
-}
-
-span.spyr {
- cursor: pointer; cursor: hand;
-}
-
-.spyr input {
- display: inline; margin: 0; padding: 0; font-size: 11px;
-}
-
-#contentcount {
- float: left; width: 100%; text-align: right; font-size: 13px; margin: 2px 0;
-}
-
-#filters a.remfil {
- color: #cccccc; margin-left: 2px;
-}
-
-#map {
- height: 250px;
-}
-
-.leaflet-container {
- background: #e3e9fd url(../img/bgmap.png);
-}
-
-#tagcloud {
- text-align: center;
-}
-
-#tclist {
- list-style: none;
-}
-
-#tclist li {
- display: inline-block; margin: 2px 5px;
-}
-
-#tclist a {
- color: #000000;
-}
-
-#tclist a.tagmatch {
- color: #0000cc;
-}
-
-#tclist a:hover {
- color: #800000;
-}
-
-#rightcol {
- float: left; width: 475px; margin-left: 5px;
-}
-
-#disciplines {
-
-}
-
-.disc-ul {
- float: left; clear: both; list-style: none;
-}
-
-.disc-li {
- float: left; width: 230px; margin: 2px 0;
-}
-
-.disc-label {
- float: left; font-size: 13px; width: 100px; text-align: right; margin-right: 5px; line-height: 13px;
-}
-
-.disc-bar {
- float: left; height: 14px; margin: 2px 0; cursor: pointer; cursor: hand;
-}
-
-.disc-bar:hover {
- background: #80a0ff;
-}
-
-#contentlist {
- list-style: none;
-}
-
-li.content-item {
- margin: 2px 0 12px;
-}
-
-.content-item h3 {
- font-size: 18px; margin: 3px 0;
-}
-
-.content-item h3 a, .content-item p a {
- color: #000000;
-}
-
-.content-item h4 {
- font-size: 11px; margin: 3px 0;
-}
-
-.content-item h4 a {
- color: #000066;
-}
-
-.maplet {
- float: right;
-}
-
-.content-item p {
- font-size: 12px; margin: 3px 0;
-}
-
-.content-annotation ul {
- list-style : disc; margin: 2px 0; padding-left: 1.5em; font-size: 12px;
- cursor: pointer; cursor: hand;
-}
-
-.content-annotation li {
- margin: 2px 0;
-}
-
-.content-annotation textarea {
- width: 99%; margin: 0; padding: 0; font-size: 12px;
-}
-
-ul.content-tags {
- list-style: none;
-}
-
-li.content-tag-item {
- display: inline-block; margin: 2px; padding: 2px; font-size: 13px; background: #666666;
-}
-
-.content-tag-item a {
- color: #ffffff;
-}
-
-.content-tag-item a:hover {
- color: #ff8080;
-}
-
-.content-tag-item a.tagmatch {
- color: #ffff00; font-weight: bold;
-}
-
-#tagcount {
- float: right; text-align: right; font-size: 14px; font-weight: bold;
-}
-
-#taginfo p, h2, h3 {
- margin: 5px 0;
-}
-
-#taginfo h3 {
- font-size: 14px;
-}
-
-#taginfo p {
- font-size: 11px;
-}
-
-#img_wikipedia {
- float: left; max-width: 160px; max-height: 120px; margin: 2px 2px 2px 0;
-}
-
-#gestvue {
- display: none;
-}
-
-#div_titrevue {
- margin: 5px 0;
-}
-
-#div_titrevue label {
- font-size: 14px;
-}
-
-#titrevue {
- font-size: 15px; margin: 0 0 0 5px; width: 220px; padding: 2px; border-style: none; border-bottom: 1px solid #000;
-}
-
-#gestvue h4 {
- margin: 2px 0; font-size: 14px;
-}
-
-#widgetlist {
- list-style: none; width: 100%;
-}
-
-#widgetlist li {
- float: left; width: 48%;
-}
-
-#widgetlist label {
- font-size: 13px;
-}
-
-#notes ul {
- font-size: 13px; margin: 0; padding-left: 1.5em;
-}
-
-#notes textarea {
- width: 99%; font-size: 13px;
-}
-
-#waitcontainer {
- float: left; clear: both; width: 100%; height: 0; position: relative;
-}
-
-#waiting {
- position: absolute; width: 100%; height: 600px; background: #ffffff; opacity: .8; z-index: 100;
-}
-
-.waittick {
- position: absolute; width: 10px; height: 10px; background: #000000; border-radius: 5px; display: none;
-}
-
-/* COMPLETION */
-
-#tagsearch {
- width: 100%; font-size: 16px; font-weight: bold; border-style: none; border-bottom: 1px solid #000;
-}
-
-#tagsearch.waiting {
- background: url(../img/small-loader.gif) no-repeat right;
-}
-
-ul.ui-autocomplete {
- font-family: "Open Sans"; max-width: 230px;
- max-height: 400px; overflow-y: auto; overflow-x: hidden;
-}
-
-.wpinfo {
- margin-left: 240px;
-}
-
-.ui-menu-item:hover .acwp {
- display: block;
-}
-
-.acnb {
- float: right; font-size: 12px; margin: 2px 0 0 2px;
-}
-
-.actitle {
- font-size: 13px;
-}
-
-.wptitle {
- font-size: 13px; font-weight: bold;
-}
-
-.wpimg {
- max-width: 80px; max-height: 60px; float: left; margin: 5px 2px 2px 0; border: none;
-}
-
-.wpabstract {
- font-size: 11px;
-}
-
-.wpsource {
- font-size: 10px; font-style: bold;
-}
-
-.clear {
- clear: both;
-}
-
-.actitle strong, .wptitle strong {
- color: #c000c0;
-}
--- a/web/hdalab/static/hdalab/css/index.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-@font-face
-{
- font-family: "Droid Serif"; src: url(DroidSerif-Regular.ttf);
-}
-
-@font-face
-{
- font-family: "Droid Serif"; font-weight: bold; src: url(DroidSerif-Bold.ttf);
-}
-
-@font-face
-{
- font-family: "Droid Serif"; font-style: italic; src: url(DroidSerif-Italic.ttf);
-}
-
-@font-face
-{
- font-family: "Droid Serif"; font-weight: bold; font-style: italic; src: url(DroidSerif-BoldItalic.ttf);
-}
-
-#container h2 {
- text-align: center; font-size: 24px; font-style: italic; font-weight: bold; color: #999; margin: 20px 0;
- font-family: "Droid Serif", "Times New Roman", Times, serif;
-}
-
-#container h3 {
- color: #666; font-weight: bold; font-size: 18px; text-transform: uppercase; margin: 20px 0 5px;
-}
-
-#container h4 {
- color: #666; font-weight: bold; font-size: 16px; margin: 0; padding: 10px 0 5px; clear: both;
-}
-
-#container p, #container li {
- font-size: 13px; margin: 5px 0;
- font-family: "Droid Serif", "Times New Roman", Times, serif;
-}
-
-#container ul {
- padding-left: 18px;
-}
-
-#container strong {
- font-weight: bold;
-}
-
-.liste {
- clear: both;
-}
-
-.bloc-appli {
- width: 310px; float: left;
-}
-
-.separateur-applis {
- width: 15px; height: 100px; float: left;
-}
-
-.fond-bloc {
- cursor: pointer; height: 290px; margin: 5px 0 15px; padding: 5px;
-}
-
-.overlay-bloc {
- padding: 5px 10px; background: rgba(255, 190, 100, 0.85); display: none;
-}
-
-p.goto {
- text-align: right; font-size: 20px;
-}
-
-#bloc-facettes {
- background: url(../img/facettes-thumb.jpg);
-}
-
-#bloc-categories {
- background: url(../img/categories-thumb.jpg);
-}
-
-#bloc-thesaurus {
- background: url(../img/thesaurus-thumb.jpg);
-}
-
-.mini-table {
- float: left; width: 960px; clear: both; margin: 5px 0;
-}
-
-.half-bloc {
- float: left; width: 470px; margin-right: 10px;
-}
--- a/web/hdalab/static/hdalab/css/notice.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-h2 {
- font-size: 20px; font-weight: bold; text-align: center;
-}
-
-.main-datasheet {
- float: left; width: 300px; border-radius: 3px; padding: 9px; border: 1px solid #999;
- background: #FFF8F0; margin-top: 10px;
-}
-
-.main-datasheet a {
- color: #000000;
-}
-
-.main-datasheet h3 {
- font-size: 16px; font-weight: bold; font-style: italic; margin: 10px 0;
-}
-
-.main-datasheet img {
- max-width: 173px; float: right; margin: 5px 0 2px 2px; border: 1px solid #999;
-}
-
-.main-datasheet p {
- font-size: 12px; margin: 5px 0;
-}
-
-.main-datasheet ul {
- padding-left: 15px; margin: 10px 0 5px;
-}
-
-.main-datasheet li {
- font-size: 13px; margin: 5px 0; font-weight: bold;
-}
-
-.main-datasheet li a {
- text-decoration: underline;
-}
-
-.tag-container {
- float: left; width: 320px; height: 1px; position: relative;
-}
-
-.tag-container h2, .related-datasheets h2 {
- margin: 10px;
-}
-
-.tag-canvas, .tags-main {
- position: absolute; top: 0; left: 0;
-}
-
-.tags-main {
- width: 320px;
-}
-
-.tags {
- list-style: none; text-align: center;
-}
-
-.tags li {
- font-size: 12px; line-height: 14px; min-height: 14px; margin: 20px 0; cursor: pointer;
-}
-
-
-.tags span {
- color: #ffffff; padding: 4px; background: #666680;
-}
-
-.tags span.selected {
- color: #FFFF00; font-weight: bold;
-}
-
-.related-datasheets {
- float: left; width: 320px;
-}
-
-.datasheets {
- list-style: none;
-}
-
-.datasheet {
- border-radius: 3px; padding: 4px; border: 1px solid #999; margin: 5px 0;
- background: #FFF8F0;
-}
-
-.datasheet img {
- max-width: 86px; float: right; margin: 2px 0 2px 2px; border: 1px solid #999;
-}
-
-.datasheet h3 {
- font-size: 13px; font-weight: bold; line-height: 13px; margin: 4px 0;
-}
-
-.datasheet h3 a {
- color: #000000;
-}
-
-.datasheet h4 {
- font-size: 12px; font-style: italic; line-height: 12px; margin: 4px 0;
-}
-
-.datasheet-tags {
- list-style: none; /* display: none; */
-}
-
-.datasheet-tags li {
- padding: 2px; color: #ffffff; background: #999999; margin: 2px 2px 0 0;
- font-size: 11px; display: inline-block;
-}
-
-.datasheet-tags li.common-tag {
- font-weight: bold; background: #666680;
-}
-
-.datasheet:hover .datasheet-tags {
- display: block;
-}
--- a/web/hdalab/static/hdalab/css/thesaurus.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-.column {
- float: left; width: 449px;
- padding-left: 20px;
-}
-
-.separator {
- float: left; width: 1px; height: 500px; margin: 30px 10px 0; background: #666;
-}
-
-.column h3 {
- font-size: 14px; font-weight: bold;
- margin: 10px 0;
-}
-
-.explain {
- font-size: 12px;
-}
-
-.explain p, li {
- margin: 5px 0;
-}
-
-.explain ul {
- margin-left: 16px;
-}
--- a/web/hdalab/static/hdalab/css/trees.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-.hidden {
- display: none;
-}
-
-.cattree .content p.title {
- font-weight: bold; cursor: pointer;
-}
-
-.cattree .content p.title:before {
- font-weight: normal;
-}
-
-.cattree .score_0, .cattree .score_1, .cattree .score_0 a, .cattree .score_1 a {
- color: #80d080;
-}
-
-.cattree .score_2, .cattree .score_3, .cattree .score_4, .cattree .score_2 a, .cattree .score_3 a, .cattree .score_4 a {
- color: #409840;
-}
-
-.cattree .score_5, .cattree .score_6, .cattree .score_7, .cattree .score_5 a, .cattree .score_6 a, .cattree .score_7 a {
- color: #006000;
-}
-
-.cattree .score_0:before, .cattree .score_1:before {
- content: "★☆☆ ";
-}
-
-.cattree .score_2:before, .cattree .score_3:before, .cattree .score_4:before {
- content: "★★☆ ";
-}
-
-.cattree .score_5:before, .cattree .score_6:before, .cattree .score_7:before {
- content: "★★★ ";
-}
-
-.cattree .img-container {
- float: left; margin: 10px 0 0; width: 60px; height: 50px; background: #dddddd;
-}
-
-.cattree .img-container img {
- min-width: 30px; max-width: 60px; max-height: 50px; margin: 0px auto;
-}
-
-.cattree .content p.description {
- margin: 4px 0 4px 64px; font-size: 12px; min-height: 50px;
-}
-
-.cattree a.content {
- color: #000000;
-}
-
-.cattree li, .cattree p.theme {
- margin: 4px 0; font-size: 12px; position: relative;
-}
-
-.cattree p.theme {
- color: #000080; height: 20px; cursor: pointer;
-}
-
-.cattree p.theme:after {
- font-weight: bold;
- content: " [-]"
-}
-
-.cattree .folded p.theme:after {
- font-weight: bold;
- content: " [+]"
-}
-
-.cattree .theme span {
- font-weight: bold; line-height: 12px;
-}
-
-.cattree ul {
- list-style: none; position: relative; padding: 0; margin: 0;
-}
-
-.cattree .folded ul {
- display: none;
-}
-
-.cattree .foldedcontent {
- height: 0px; overflow: hidden;
-}
-
-.cattree .show_more {
- color: #800000; font-style: italic; cursor: pointer;
-}
-
-.cattree li {
- list-style: none;
-}
-
-.cattree ul li {
- margin-left: 38px;
-}
-
-.cattree ul li:after {
- content: ""; position: absolute; left: -50px; top: 9px; width: 40px; bottom: 0; border-style: solid none none solid; border-width: 1px; border-color: #333;
-}
-
-.cattree ul li:before {
- content: ""; position: absolute; left: -50px; top: -10px; height: 19px; width: 1px; background: #333;
-}
-
-.cattree ul li:last-child:after {
- border-style: solid none none;
-}
-
-.cattree .eltype {
- font-style: italic; display: none;
-}
-
-.cattree li.themeli {
- list-style: square;
-}
-
-.cattree li.content {
- list-style: disc;
-}
-
-.loading {
- height: 128px; background: url(../img/loader.gif) no-repeat center;
-}
\ No newline at end of file
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_222222_256x240.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_228ef1_256x240.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ef8c08_256x240.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffd27a_256x240.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffffff_256x240.png has changed
--- a/web/hdalab/static/hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,405 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
-.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
-.ui-widget-header a { color: #ffffff; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
-.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
- * jQuery UI Resizable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Autocomplete 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.16
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
- list-style:none;
- padding: 2px;
- margin: 0;
- display:block;
- float: left;
-}
-.ui-menu .ui-menu {
- margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
- margin:0;
- padding: 0;
- zoom: 1;
- float: left;
- clear: left;
- width: 100%;
-}
-.ui-menu .ui-menu-item a {
- text-decoration:none;
- display:block;
- padding:.2em .4em;
- line-height:1.5;
- zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
- font-weight: normal;
- margin: -1px;
-}
-/*
- * jQuery UI Slider 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Progressbar 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
Binary file web/hdalab/static/hdalab/img/bgdfooter.png has changed
Binary file web/hdalab/static/hdalab/img/bgdhdalab.png has changed
Binary file web/hdalab/static/hdalab/img/bgmap.png has changed
Binary file web/hdalab/static/hdalab/img/categories-thumb.jpg has changed
Binary file web/hdalab/static/hdalab/img/facettes-thumb.jpg has changed
Binary file web/hdalab/static/hdalab/img/favicon.ico has changed
Binary file web/hdalab/static/hdalab/img/flag_de.png has changed
Binary file web/hdalab/static/hdalab/img/flag_en.png has changed
Binary file web/hdalab/static/hdalab/img/flag_es.png has changed
Binary file web/hdalab/static/hdalab/img/flag_fr.png has changed
Binary file web/hdalab/static/hdalab/img/flag_it.png has changed
Binary file web/hdalab/static/hdalab/img/flag_ja.png has changed
Binary file web/hdalab/static/hdalab/img/flag_zh-tw.png has changed
Binary file web/hdalab/static/hdalab/img/loader.gif has changed
Binary file web/hdalab/static/hdalab/img/logo_iri.png has changed
Binary file web/hdalab/static/hdalab/img/logo_iri_blanc.png has changed
Binary file web/hdalab/static/hdalab/img/logo_mcc.png has changed
Binary file web/hdalab/static/hdalab/img/logo_mcc_blanc.png has changed
Binary file web/hdalab/static/hdalab/img/small-loader.gif has changed
Binary file web/hdalab/static/hdalab/img/thesaurus-thumb.jpg has changed
--- a/web/hdalab/static/hdalab/js/cattree.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-function showData(_label, _data) {
- $(".disciplist li").each(function() {
- if ($(this).text().trim().toLowerCase() === _label.toLowerCase()) {
- $(this).addClass("selected");
- }
- })
- $(".label-name").html(_label);
- if (_data) {
- renderData($("#tree"), _data, 1);
- $(".results").show();
- $(".content-count").html($(".cattree a.content").length);
- $(".category-count").html(Math.max(0, $("p.category").length - 1));
- $(".tag-count").html($("p.tag").length);
- } else {
- $("#tree").html("");
- $(".results").hide();
- }
-}
-
-function gettree(_label) {
- $(".disciplist li").removeClass("selected");
- $("#tree").html('<div class="loading"></div>');
- $.getJSON(
- endpoints.cat_tree,
- { label: _label },
- function(_data) {
- showData(_label, _data);
- }
- );
-}
-
-$(function() {
- $("#catsearch").autocomplete({
- source: endpoints.cat_search,
- minLength: 2,
- select: function( event, ui ) {
- gettree(ui.item.value);
- }
- })
- .data("autocomplete")._renderItem = function(ul, item) {
- return $( "<li></li>" )
- .data( "item.autocomplete", item )
- .append(
- "<a>"
- + item.label.replace(
- new RegExp('('
- + $("#catsearch").val().replace(/(\W)/g, '\\$1')
- + ')','gi') ,
- '<strong>$1</strong>')
- + "</a>" )
- .appendTo( ul )
- };
- $("#catform").submit(function() {
- gettree($("#catsearch").val());
- });
- gettree("cinéma");
- $(".disciplist li").click(function() {
- gettree($(this).text().trim());
- });
-});
\ No newline at end of file
--- a/web/hdalab/static/hdalab/js/gomina.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,905 +0,0 @@
-/**
- * @author raph
- */
-
-str_format = function() {
- var s = arguments[0];
- for (var i = 0; i < arguments.length - 1; i++) {
- var reg = new RegExp("\\{" + i + "\\}", "gm");
- s = s.replace(reg, arguments[i + 1]);
- }
-
- return s;
-}
-
-var gomNs = {
- minYear: -5000,
- maxYear: 2010,
- tlPixels: 960,
- tlGamma: 6,
- heatGamma: 2,
- displayedDates: [ -5000, 0, 500, 1000, 1200, 1400, 1600, 1700, 1750, 1800, 1850, 1900, 1950, 2010 ],
- mappingLibrary: 'leaflet',
- gradientStart: [ 255, 255, 240 ],
- gradientEnd: [ 255, 160, 30 ],
- zeroColor: [ 230, 230, 235 ],
- languageCode: 'fr'
-}
-
-function yearToPx(year) {
- return gomNs.tlPixels * Math.pow( ( year - gomNs.minYear ) / ( gomNs.maxYear - gomNs.minYear ), gomNs.tlGamma );
-}
-
-function pxToYear(px) {
- return gomNs.minYear + ( gomNs.maxYear - gomNs.minYear ) * Math.pow( px / gomNs.tlPixels, 1 / gomNs.tlGamma );
-}
-
-function getGradient(_pos) {
- if (_pos == 0) {
- var _rgb = gomNs.zeroColor;
- } else {
- var _rgb = [],
- _exp = Math.pow(_pos, 1/gomNs.heatGamma);
- for (var i=0; i<3; i++) {
- _rgb.push(Math.floor(_exp*gomNs.gradientEnd[i] + (1-_exp)*gomNs.gradientStart[i]));
- }
- }
- return "rgb(" + _rgb.join(",") + ")"
-}
-
-function polygon_to_gmap(polycoords, dbpedia_uri) {
- var _opts = {
- strokeColor: "#000000",
- strokeWeight: .5,
- fillColor: "rgb(" + gomNs.zeroColor.join(",") + ")",
- fillOpacity: 1
- }
- _opts.paths = polycoords.map(function(path) {
- return path.map(function(coord) {
- return new google.maps.LatLng(coord[1], coord[0]);
- });
- });
- var _polygon = new google.maps.Polygon(_opts);
- _polygon.setMap(gomNs.map);
- google.maps.event.addListener(_polygon, 'click', function(a,b) {
- addFilter('country', dbpedia_uri);
- })
- return _polygon;
-}
-
-function showCountriesGmap(geoJson) {
- gomNs.countries = {};
- _(geoJson.features).each(function(feature) {
- var _el = { "properties" : feature.properties };
- if (feature.id == 'ATA') {
- _el.gPolygons = [];
- } else {
- switch(feature.geometry.type) {
- case('Polygon'):
- _el.gPolygons = [ polygon_to_gmap(feature.geometry.coordinates, feature.properties.dbpedia_uri) ];
- break;
- case('MultiPolygon'):
- _el.gPolygons = feature.geometry.coordinates.map(function(polygon) {
- return polygon_to_gmap(polygon, feature.properties.dbpedia_uri);
- })
- break;
- }
- }
- gomNs.countries[feature.properties.dbpedia_uri] = _el;
- });
-}
-
-function showCountriesLeaflet(geoJson) {
- gomNs.countries = {};
- var gJ = new L.GeoJSON();
- gJ.on('featureparse', function(_f) {
- var isocode = _f.id;
- _f.layer.setStyle({
- color: "#000000",
- weight: .5,
- fillOpacity: 1,
- fillColor: "rgb(" + gomNs.zeroColor.join(",") + ")"
- });
- _f.layer.on('click', function() {
- addFilter('country', _f.properties.dbpedia_uri);
- });
- gomNs.countries[_f.properties.dbpedia_uri] = {
- "properties" : _f.properties,
- "layer" : _f.layer
- }
- });
- gJ.addGeoJSON(geoJson);
- gomNs.map.addLayer(gJ);
-}
-
-function addFilter(_type, _label) {
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- if (_curView.type == 'filter') {
- if (_curView[_type].indexOf(_label) < 0) {
- _curView[_type].push(_label);
- }
- updateFilters();
- debouncedSaveChanges();
- }
-}
-
-function removeFilter(_type, _index) {
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- if (_curView.type == 'filter') {
- _curView[_type].splice(_index,1);
- updateFilters();
- debouncedSaveChanges();
- }
-}
-
-function getUpdates() {
- var _params = {},
- _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- if (_curView.type == 'filter') {
- if (!(_curView.period[0] == gomNs.minYear && _curView.period[1] == gomNs.maxYear)) {
- _params.period = _curView.period.join(',');
- }
- if (_curView.tag.length) {
- _params.label = _curView.tag.join(',');
- }
- if (_curView.country.length) {
- _params.country = _curView.country.join(',');
- }
- $.getJSON(gomNs.urls['filter'], _params, updateDisplay);
- animLoad();
- }
-}
-
-var debouncedGetUpdates = _.debounce(getUpdates, 300);
-
-function updatePeriod(_n, _val) {
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- if (_curView.type == 'filter') {
- var _int = parseInt(_val);
- if (_int != NaN) {
- if ((_n == 1 && _val >= _curView.period[0]) || (_n == 0 && _val <= _curView.period[1])) {
- _curView.period[_n] = _int;
- }
- updateFilters();
- debouncedSaveChanges();
- }
- }
-}
-
-function removePeriod() {
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- if (_curView.type == 'filter') {
- _curView.period[0] = gomNs.minYear;
- _curView.period[1] = gomNs.maxYear;
- updateFilters();
- debouncedSaveChanges();
- }
-}
-
-function changeSpan(_this) {
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- if (_curView.type == 'filter') {
- if (!$(_this).children().length) {
- var _el = document.createElement('input'),
- _n = _this.id.split('_')[1];
- _el.value = _curView.period[_n];
- _el.style.width = $(_this).width() + 'px';
- $(_el).focusout(function() {
- updatePeriod(_n, this.value);
- }).keypress(function(e) {
- if (e.keyCode == 13) {
- updatePeriod(_n, this.value);
- }
- });
- $(_this).html(_el);
- _el.focus();
- _el.select();
- }
- }
-}
-
-function updateFilters() {
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- if (_curView.type != 'filter') {
- return;
- }
- var _htmFilters = '',
- _fl = _curView.tag.length,
- _cl = _curView.country.length;
- if (_curView.period[0] == gomNs.minYear && _curView.period[1] == gomNs.maxYear) {
- _htmFilters += '<li class="filperiod">'+gettext("Toutes periodes")+'</li>';
- } else {
- _htmFilters += '<li class="filperiod">'+gettext("Periode :")+' <span class="spyr" id="sp_0" onclick="changeSpan(this);">'
- + _curView.period[0]
- + '</span> ' + gettext('a')+' <span class="spyr" id="sp_1" onclick="changeSpan(this);">'
- + _curView.period[1]
- + '</span><a href="#" class="remfil" onclick="removePeriod(); return false;">[x]</a></li>';
- }
- $("#handle_0").css({
- "left" : yearToPx(_curView.period[0])+"px",
- }).attr("year", _curView.period[0])
- .find(".handleinner")
- .css({
- "margin-left" : "-20px"
- });
- $("#handle_1").css({
- "left" : yearToPx(_curView.period[1])+"px",
- }).attr("year", _curView.period[1])
- .find(".handleinner")
- .css({
- "margin-left" : "0"
- });
- if (_cl) {
- _htmFilters += _(_curView.country).map(function(_t, _i) {
- return '<li class="filcountry">'+gettext('Pays :')+' '
- + ( (typeof gomNs.countries == "object" && typeof gomNs.countries[_t] == "object") ? gomNs.countries[_t].properties.labels[gomNs.languageCode] : decodeURIComponent(_t.match('[^/]+$')[0]).replace('_',' '))
- + '<a href="#" class="remfil" onclick="removeFilter(\'country\','
- + _i
- + '); return false;">[x]</a></li>';
- }).join("");
- }
- if (_fl) {
- _htmFilters += _(_curView.tag).map(function(_t, _i) {
- return '<li class="filtag">'+gettext('Tag :')+' '
- + '<span class="filtag_label">'+_t+'</span>'
- + '<a href="#" class="remfil" onclick="removeFilter(\'tag\','
- + _i
- + '); return false;">[x]</a></li>';
- }).join("");
- }
- $("#filters").html(_htmFilters).hide();
- debouncedGetUpdates();
-}
-
-function displayContents(contentdata) {
- if (contentdata && contentdata.length) {
- var _htmlCl = '<ul id="contentlist">'
- + contentdata.map(function(_d) {
- var _dsurl = gomNs.urls.datasheet.replace(/ID$/,_d.hda_id);
- var _html = '<li class="content-item"><h3><a href="'
- + _dsurl
- + '">'
- + _d.title
- + '</a></h3>'
- + ( typeof _d.coords == "object" ?
- '<div class="maplet"><img src="http://maps.googleapis.com/maps/api/staticmap?center=47,1.5&zoom=4&size=160x160&maptype=roadmap&markers=color:red%7C'
- + _d.coords.latitude
- + ','
- + _d.coords.longitude
- + '&sensor=false" /><h4>'
- + gettext('Localisation :')
- + ' '
- + _d.coords.city_name
- + '</h4></div>'
- : '')
- + '<h4><a href="'
- + _d.url
- + '" target="_blank">'
- + _d.url.replace(/(^.{40}).+(.{30}$)/m,'$1 … $2')
- + '</a></h4><p><a href="'
- + _dsurl
- + '">'
- + _d.description.replace(/(^.{0,160})([\s]|$)(.*)/,'$1…')
- + '</a></p><ul class="content-tags">'
- + _d.tags.map(function(_t) {
- return '<li class="content-tag-item"><a href="#" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
- + _t.label
- + '"'
- + (_t.match ? ' class="tagmatch"' : '')
- + '>'
- + _t.translated_label
- + '</a></li>';
- }).join('')
- + '</ul><h4>'+gettext("Annotations")+'</h4><div class="content-annotation" contentid="'
- + _d.id
- + '">'
- + ( gomNs.sessiondata.annotations[_d.id] && gomNs.sessiondata.annotations[_d.id].texte
- ? '<ul><li>'
- + _.escape(gomNs.sessiondata.annotations[_d.id].texte).replace(/\n/gm,"</li><li>")
- + '</li>'
- : ( gomNs.write_allowed ? '<ul><li>'+gettext("Annoter ce contenu")+'...</li></ul>' : '' ) )
- + '</div>';
- if (gomNs.write_allowed) {
- _(gomNs.sessiondata.views).each(function(_view, _k) {
- if (_view.type == 'list') {
- _html += '<p><a href="#" class="addremlist" contentid="'
- + _d.id
- + '" viewid="'
- + _k
- + '">'
- + str_format(( _view.list.indexOf(_d.id) == -1 ? gettext('Ajouter a {0}') : gettext('Retirer de {0}') ),'"'+ _.escape(_view.name)+ '"')
- + '</a></p>'
- }
- });
- }
- _html += '</li>';
- return _html;
- }).join('')
- + '</ul>';
- $("#contents").html(_htmlCl).scrollTop(0);
- $("a.addremlist").click(function() {
- var _id = $(this).attr("contentid"),
- _vid =
- _view = gomNs.sessiondata.views[$(this).attr("viewid")],
- _io = _view.list.indexOf(_id);
- if ( _io == -1) {
- _view.list.push(_id);
- $(this).html(str_format(gettext('Retirer de {0}'),'"' + _.escape(_view.name) + '"' ));
- } else {
- _view.list.splice(_io, 1);
- $(this).html(str_format(gettext('Ajouter a {0}'),'"' + _.escape(_view.name) + '"'));
- }
- if (gomNs.sessiondata.view == 1) {
- showView();
- }
- debouncedSaveChanges();
- return false;
- })
- if (gomNs.write_allowed) {
- $("div.content-annotation").click(function() {
- if (this.children[0].tagName == 'UL') {
- var _el = document.createElement('textarea'),
- _id = $(this).attr("contentid");
- _el.innerHTML = (gomNs.sessiondata.annotations[_id] && gomNs.sessiondata.annotations[_id].texte) ? gomNs.sessiondata.annotations[_id].texte : '';
- $(_el).focusout(function() {
- var _id = this.parentNode.attributes.contentid.nodeValue;
- if (!gomNs.sessiondata.annotations[_id]) {
- gomNs.sessiondata.annotations[_id] = {};
- }
- gomNs.sessiondata.annotations[_id].texte = this.value;
- this.parentNode.innerHTML = '<ul><li>' + (this.value.length ? _.escape(gomNs.sessiondata.annotations[_id].texte).replace(/\n/gm,"</li><li>") : gettext('Annoter ce contenu')+'...' ) + '</ul>';
- debouncedSaveChanges();
- });
- $(this).html(_el);
- _el.focus();
- _el.select();
- }
- });
- }
- }
- else {
- $("#contents").html("");
- }
-}
-
-function updateDisplay(data) {
- animStop();
-
- // translate filters
- $('.filtag_label').each(function(index, elt) {
- txt = $(this).text();
- if(txt in data.tagtranslations) {
- $(this).text(data.tagtranslations[txt]);
- }
- });
- $("#filters").show();
-
-
- if (gomNs.dhmPaper) {
- gomNs.dhmPaper.clear();
- } else {
- gomNs.dhmPaper = new Raphael("dateheat");
- }
- $("#contentcount").html('<b>'+data.count+'</b> ' + ngettext('notice', 'notices', data.count));
- if (!data.sparkline.length || data.sparkline[0].year != gomNs.minYear) {
- data.sparkline.splice(0,0,{"year": gomNs.minYear, "score": 0});
- }
- var _maxheat = _(data.sparkline).max(function(_d) { return parseInt(_d.score); }).score;
- _(data.sparkline).each(function(_d, _i) {
- var _nxt = (_i == data.sparkline.length - 1) ? (gomNs.maxYear + 1) : data.sparkline[_i + 1].year,
- _x1 = yearToPx(_d.year),
- _x2 = yearToPx(_nxt),
- _heat = _d.score / _maxheat;
- gomNs.dhmPaper.rect(_x1, 0, _x2 - _x1, 20).attr({
- "fill" : getGradient(_heat),
- "stroke" : "none"
- })
- });
- if (gomNs.sessiondata.view == 0) {
- var _h0 = $("#handle_0").position().left,
- _h1 = $("#handle_1").position().left;
- gomNs.dhmPaper.rect(Math.min(_h0, _h1) - 1, 0, Math.abs(_h0 - _h1) + 2, 20).attr({
- "stroke" : "#cc0066",
- "stroke-width" : "3"
- });
- }
- if (data.tags.length) {
- var _scores = _(data.tags).map(function(_d) { return parseInt(_d.score)}),
- _maxTag = _(_scores).max(),
- _minTag = Math.min(_(_scores).min(), _maxTag - 1),
- _scale = 10 / Math.sqrt(_maxTag - _minTag),
- _htmlTc = '<ul id="tclist">'
- + _(data.tags).map(function(_d) {
- return '<li style="font-size:'
- + parseInt(10 + _scale * Math.sqrt(_d.score - _minTag))
- + 'px;"><a href="#" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
- + _d.label
- +'"'
- + (_d.match ? ' class="tagmatch"' : '')
- + '>'
- + _d.translated_label
- + '</a></li>';
- }).join('')
- + '</ul>';
- $("#tagcloud").html(_htmlTc);
- }
- else {
- $("#tagcloud").html("<h4>Pas de mots-clés trouvés</h4>");
- }
- displayContents(data.contents);
- if (gomNs.countries && data.countries) {
- var _max = Math.max(1, _(data.countries).max());
- _(gomNs.countries).each(function(_country, _k) {
- var _val = data.countries[_k] || 0,
- _fill = getGradient(_val/_max);
- switch(gomNs.mappingLibrary) {
- case 'gmaps':
- _(_country.gPolygons).each(function(_p) {
- _p.setOptions({
- "fillColor" : _fill,
- "fillOpacity" : 1
- });
- });
- break;
- case 'leaflet':
- _country.layer.setStyle({
- "fillColor" : _fill,
- "fillOpacity" : 1
- })
- break;
- }
- });
- }
- if (data.disciplines) {
- var _disc = data.disciplines.filter(function(_d) {
- return +_d.score > 0;
- }),
- _max = _disc.reduce(function(_a, _b) {
- return Math.max(_a,_b.score)
- }, 1);
- $("#disciplines").html(
- '<ul class="disc-ul">'
- + _disc.map(function(_d) {
- var _col = getGradient(_d.score / _max);
- return '<li class="disc-li" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
- + _d.label
- + '"><div class="disc-label"><a href="#">'
- + _d.translated_label
- + '</a></div><div class="disc-bar" style="background:'
- + _col
- + '; width:'
- + Math.floor(120 * (_d.score / _max))
- + 'px">'
- }).join("")
- + '</ul>'
- )
-
- }
-}
-
-function saveChanges() {
- if (gomNs.sessionid && gomNs.sessionkey) {
- $.getJSON(gomNs.urls['session_info'], {
- "sessionid" : gomNs.sessionid,
- "sessionkey" : gomNs.sessionkey,
- "data" : JSON.stringify(gomNs.sessiondata),
- });
- }
-}
-
-var debouncedSaveChanges = _.debounce(saveChanges, 3000);
-
-function changeView(nview) {
- var _curView = gomNs.sessiondata.views[nview];
- if (_curView.type == 'list' && (!_curView.list || !_curView.list.length)) {
- alert(gettext("La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"));
- } else {
- gomNs.sessiondata.view = nview;
- debouncedSaveChanges();
- showView();
- }
-}
-
-function showView() {
- $(".lienvue").removeClass("actif");
- $("#view_" + gomNs.sessiondata.view).addClass("actif");
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- $("#titrevue").val(_curView.name);
- $("#bloc_gestvue h2").html(gettext('Gerer la vue')+' "' + _.escape(_curView.name) + '"');
- $("div.bloc").show();
- $("#widgetlist input").prop("checked",true);
- _(_curView.hiddenWidgets).each(function(_w) {
- $("#chbx_" + _w).prop("checked",false);
- $("#" + _w).hide();
- });
- $("#notes").html( _curView.notes
- ? '<ul><li>' + _.escape(_curView.notes).replace(/\n/gm,"</li><li>") + '</li></ul>'
- : ( gomNs.write_allowed ? '<ul><li>'+gettext('Annoter cette vue')+'...</li></ul>' : '' ) );
- switch(_curView.type) {
- case 'list':
- $("#bandefiltre, .handle").hide();
- $.getJSON(gomNs.urls['filter'], {
- contentlist: _curView.list.join(',')
- }, updateDisplay);
- animLoad();
- break;
- case 'filter':
- $("#bandefiltre, .handle").show();
- updateFilters();
- break;
- }
-}
-
-function displayViewList() {
- $("#ongletsvues").html(gomNs.sessiondata.views.map(function(_v, _k) {
- return '<li class="lienvue" id="view_'
- + _k
- + '" onclick="changeView('
- + _k
- + '); return false;"><a href="#">'
- + _.escape(_v.name)
- + '</a></li>';
- }).join(""))
-}
-
-function getInitialView() {
- var _urlParam = {};
- if (document.location.hash) {
- var _tab = document.location.hash.replace("#","").split(":");
- _urlParam.sessionid = _tab[0];
- if (_tab.length > 1) {
- _urlParam.sessionkey = _tab[1];
- }
- }
- $.getJSON(gomNs.urls['session_info'], _urlParam, function(data) {
- gomNs.sessionid = data.sessionid;
- if (data.sessionkey) {
- gomNs.sessionkey = data.sessionkey;
- }
- gomNs.write_allowed = data.write_allowed;
- if (data.write_allowed) {
- $("#partagerw").show();
- } else {
- $("#partagerw").hide();
- }
- var _baseUrl = document.location.href.split("#")[0];
- gomNs.hash = "#" + data.sessionid + (data.sessionkey ? (':' + data.sessionkey) : '');
- document.location.hash = gomNs.hash;
- gomNs.sessiondata = typeof data.data == "string" ? JSON.parse(data.data) : (typeof data.data == "object" ? data.data : {});
- if (!gomNs.sessiondata.title) {
- gomNs.sessiondata.title = gettext('Nouvelle session');
- }
- if (!gomNs.sessiondata.views) {
- gomNs.sessiondata.views = [];
- }
- if (!gomNs.sessiondata.views.length) {
- addView( 'filter', gettext('Mes resultats de recherche') );
- addView( 'list', gettext('Ma liste') );
- }
- if (!gomNs.sessiondata.annotations) {
- gomNs.sessiondata.annotations = {};
- }
- if (data.write_allowed) {
- $("#bloc_gestvue").show();
- } else {
- $("#bloc_gestvue").hide();
- }
- $("#sessionname").html(_.escape(gomNs.sessiondata.title)
- + ( data.write_allowed ? '' : '<span class="lectseul"> ('+gettext("lecture seule")+')</span>' ) );
- gomNs.hrefinterval = setInterval(function() {
- if (document.location.hash != gomNs.hash) {
- clearInterval(gomNs.hrefinterval);
- getInitialView();
- }
- }, 500);
- displayViewList();
- showView();
- });
-}
-
-function changeSessionTitle(title) {
- gomNs.sessiondata.title = title;
- $("#sessionname").html(_.escape(gomNs.sessiondata.title));
- debouncedSaveChanges();
-}
-
-function addView(viewtype, viewname) {
- var _content = {
- type: viewtype,
- name: viewname,
- hiddenWidgets: [],
- };
- switch(viewtype) {
- case 'filter':
- _content.period = [ gomNs.minYear, gomNs.maxYear ];
- _content.tag = [];
- _content.country = [];
- gomNs.sessiondata.view = gomNs.sessiondata.views.length;
- break;
- case 'list':
- _content.list = [];
- break;
- }
- gomNs.sessiondata.views.push(_content);
- debouncedSaveChanges();
-}
-
-function animLoad() {
- //console.log("animLoad");
- var _d = $("#waiting"),
- _w = _d.width(),
- _h = _d.height(),
- _r = .33*Math.min(_w,_h),
- _count = 24,
- _html = '',
- _f = 2* Math.PI / _count;
- _d.empty().show();
- for (var _i = 0; _i < _count; _i++) {
- var _x = Math.floor(Math.sin(_i * _f)*_r + _w/2),
- _y = Math.floor(-Math.cos(_i * _f)*_r + _h/2),
- _el = document.createElement('div');
- _el.className = 'waittick';
- _d.append(_el);
- $(_el).css({
- "left": _x + "px",
- "top": _y + "px"
- }).delay(200*_i).fadeIn(400).delay(600 + 200* _i).fadeOut();
- }
-}
-
-function animStop() {
- $("#waiting").empty().fadeOut();
-}
-function ellipse(_text, _length) {
- var _rgxp = new RegExp('(^.{0,' + _length + '})([\s]|$)(.*)')
- return _text.replace(/(\n|\r|\r\n)/mg,' ').trim().replace(_rgxp,'$1…')
-}
-
-function highlightText(_text, _search) {
- var _rgxp = new RegExp('(' + _search.replace(/(\W)/g, '\\$1') + ')','gi');
- return _text.replace(_rgxp, '<strong>$1</strong>');
-}
-
-function wikipediaUrl(_text) {
- return "http://" + gomNs.languageCode + ".wikipedia.org/wiki/" + encodeURI(_text.replace(/ /g,'_'))
-}
-
-wpTemplate = _.template(
- '<h4 class="wptitle"><% print(highlightText(item.label, inputvalue)); %></h4><% if (item.thumbnail) { %><img class="wpimg" src="<%-item.thumbnail%>" /><% };'
- + ' if (item.abstract) { %><p class="wpabstract"><% print(ellipse(item.abstract,250))%></p><p class="wpsource"><a href="<% print(wikipediaUrl(item.label)) %>" target="_blank"><% print(gettext("Source : Wikipédia")) %></a></p><% }; %><div class="clear"></div>'
-);
-
-acTemplate = _.template(
- '<a><span class="acnb"><%- item.nb %></span><h4 class="actitle"><% print(highlightText(item.label, inputvalue)); %></h4></a>'
-);
-
-$(document).ready(function() {
- switch(gomNs.mappingLibrary) {
- case 'gmaps':
- gomNs.map = new google.maps.Map(document.getElementById("map"),
- {
- center: new google.maps.LatLng(30, 0),
- zoom: 1,
- mapTypeId: google.maps.MapTypeId.SATELLITE
- });
- $.getJSON(gomNs.urls['countries'], showCountriesGmap);
- break;
- case 'leaflet':
- gomNs.map = new L.Map('map', {
- center: new L.LatLng(30, 0),
- zoom: 1
- });
- //gomNs.map.addLayer(new L.TileLayer("http://s3.amazonaws.com/com.modestmaps.bluemarble/{z}-r{y}-c{x}.jpg", {maxZoom: 9}));
- $.getJSON(gomNs.urls['countries'], showCountriesLeaflet);
- break;
- }
- var _html = gomNs.displayedDates.map(function(_v) {
- return '<li style="left: '
- + parseInt(yearToPx(_v))
- + 'px"><div class="datelabel">'
- + _v
- + '</div></li>'
- }).join('');
- $("#dates").html(_html);
- $("#apartager").click(function() {
- var _pu = $("#partageurls");
- if (_pu.is(":visible")) {
- $(this).removeClass("actif");
- } else {
- $(this).addClass("actif");
- $("#partagero").addClass("actif");
- $("#partagerw").removeClass("actif");
- var _url = document.location.href.split("#")[0] + "#" + gomNs.sessionid;
- $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
- }
- $(this).attr("class",_pu.is(":visible") ? "" : "actif");
- _pu.slideToggle(function() {
- if ($(this).is(":visible")) {
- if (typeof gomNs.clip == "undefined") {
- gomNs.clip = new ZeroClipboard.Client();
- gomNs.clip.setHandCursor( true );
- gomNs.clip.glue('zc-partageinput');
- }
- gomNs.clip.show();
- gomNs.clip.setText( _url );
- } else {
- gomNs.clip.hide();
- }
- });
- return false;
- })
- $("#partagero").click(function() {
- $("#partagero").addClass("actif");
- $("#partagerw").removeClass("actif");
- var _url = document.location.href.split("#")[0] + "#" + gomNs.sessionid;
- $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
- gomNs.clip.setText( _url );
- return false;
- });
- $("#partagerw").click(function() {
- $("#partagerw").addClass("actif");
- $("#partagero").removeClass("actif");
- var _url = document.location.href.split("#")[0] + gomNs.hash;
- $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
- gomNs.clip.setText( _url );
- return false;
- });
- $(".handle").draggable({
- "axis" : "x",
- "containment" : "parent",
- "drag": function() {
- $(this).attr("year",parseInt(pxToYear($(this).position().left)));
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- if (_curView.type == 'filter') {
- var _h0 = $("#handle_0"),
- _h1 = $("#handle_1"),
- _h0v = parseInt(_h0.attr("year")),
- _h1v = parseInt(_h1.attr("year"));
- _curView.period = [ Math.min(_h0v, _h1v), Math.max(_h0v, _h1v)];
- _h0.find(".handleinner").css({
- "margin-left" : (_h0v>_h1v ? "0" : "-20px")
- })
- _h1.find(".handleinner").css({
- "margin-left" : (_h1v>_h0v ? "0" : "-20px")
- })
- updateFilters();
- debouncedSaveChanges();
- }
- }
- });
- $("#sessionname").click(function() {
- if (gomNs.write_allowed && !$(this).children().length) {
- var _el = document.createElement('input');
- _el.value = gomNs.sessiondata.title;
- $(_el).focusout(function() {
- changeSessionTitle(this.value);
- }).keypress(function(e) {
- if (e.keyCode == 13) {
- changeSessionTitle(this.value);
- }
- });
- $(this).html(_el);
- _el.focus();
- _el.select();
- }
- });
- $("#titrevue").keyup(function() {
- var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- _curView.name = $(this).val();
- $("#view_" + gomNs.sessiondata.view + " a").html(_.escape(_curView.name))
- $("#bloc_gestvue h2").html(gettext('Gerer la vue')+' "' + _.escape(_curView.name) + '"');
- debouncedSaveChanges();
- });
- $("#notes").click(function() {
- if (gomNs.write_allowed) {
- if (this.children[0].tagName == 'UL') {
- var _el = document.createElement('textarea'),
- _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
- _el.innerHTML = _curView.notes ? _curView.notes : '';
- $(_el).focusout(function() {
- _curView.notes = this.value;
- this.parentNode.innerHTML = '<ul><li>' + (this.value.length ? _.escape(_curView.notes).replace(/\n/gm,"</li><li>") : gettext('Annoter cette vue')+'...' ) + '</ul>';
- debouncedSaveChanges();
- });
- $(this).html(_el);
- _el.focus();
- _el.select();
- }
- }
- });
-/* gomNs.disChart = d3.select("#disciplines")
- .append("svg:svg")
- .attr("width", 475)
- .attr("height", 120); */
- getInitialView();
- $(".barrebloc").click(function() {
- $(this).next().slideToggle();
- });
- gomNs.widgetList = [];
- var _html = '<ul id="widgetlist">';
- $("div.bloc").each(function() {
- gomNs.widgetList.push(this.id);
- _html += '<li><input type="checkbox" id="chbx_'
- + this.id
- + '" /><label>' + $(this).find("h2").html() + '</label></li>'
- });
- _html + '</ul>';
- $("#gestvue").append(_html);
- $("#nouvellevue").click(function() {
- $("#plusdevues").slideToggle();
- return false;
- })
- $("#widgetlist input").change(function() {
- var _newWL = [];
- $("#widgetlist input").each(function(_k, _e) {
- var _id = _e.id.substr(5);
- if (!$(_e).prop("checked")) {
- $("#" + _id).hide();
- _newWL.push(_id);
- } else {
- $("#" + _id).show();
- }
- });
- gomNs.sessiondata.views[gomNs.sessiondata.view].hiddenWidgets = _newWL;
- debouncedSaveChanges();
- });
- $("#nouv_resrech").click(function() {
- var _txt = prompt(gettext("Comment souhaitez-vous nommer votre nouvelle vue ?"),gettext("Nouveaux resultats de recherche"));
- if (_txt !== null) {
- addView('filter', _txt);
- displayViewList();
- }
- return false;
- });
- $("#nouv_liste").click(function() {
- var _txt = prompt(gettext("Comment souhaitez-vous nommer votre nouvelle vue ?"),gettext("Nouvelle liste"));
- if (_txt !== null) {
- addView('list', _txt);
- displayViewList();
- }
- return false;
- });
- $(" #tagform ").submit(function() {
- return false;
- });
- var cache = {}, /*CACHE => http://jqueryui.com/demos/autocomplete/#remote-with-cache */
- lastXhr;
- $( "#tagsearch" ).autocomplete({
- source: function( request, response ) {
- var term = request.term;
- if ( term in cache ) {
- $("#tagsearch").removeClass("waiting");
- response( cache[ term ] );
- return;
- }
- $("#tagsearch").addClass("waiting");
- lastXhr = $.getJSON( gomNs.urls['tag_search'], request, function( data, status, xhr ) {
- cache[ term ] = data;
- if ( xhr === lastXhr ) {
- response( data );
- $("#tagsearch").removeClass("waiting");
- }
- });
- },
- minLength: ( gomNs.languageCode == 'ja' ? 1 : 2 ),
- focus: function( event, ui ) {
- $(".wpinfo").html(wpTemplate({
- item: ui.item,
- inputvalue: $("#tagsearch").val()
- }));
- },
- select: function( event, ui ) {
- addFilter('tag', ui.item.original_label);
- }
- })
- .data("autocomplete")._renderItem = function(ul, item) {
- var _contents = acTemplate({
- item: item,
- inputvalue: $("#tagsearch").val()
- });
- return $( "<li>" )
- .data( "item.autocomplete", item )
- .html( _contents )
- .appendTo( ul );
- };
-});
--- a/web/hdalab/static/hdalab/js/notice.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-var selectedelement = null;
-
-function drawlinks() {
- var w$ = $(window)
- scroll = w$.scrollTop(),
- windowheight = w$.height();
- $(".tags-main, .main-datasheet").css({
- "margin-top": Math.max(0, scroll - 60) + "px"
- });
- var cvheight = Math.max($(".tags-main").outerHeight(), $(".related-datasheets").outerHeight()),
- cvwidth = $(".tag-container").width(),
- cv$ = $(".tag-canvas"),
- cvo = cv$.offset(),
- colors = ["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];
- cv$.attr({
- width: cvwidth,
- height: cvheight
- }).css({
- width: cvwidth,
- height: cvheight
- });
-
- $(".main-datasheet-tag, .datasheet").css("opacity", selectedelement ? .7 : 1);
- $(selectedelement).css("opacity",1);
-
- var ctx = cv$[0].getContext('2d'),
- mds$ = $(".main-datasheet"),
- ymain = Math.floor(mds$.height() / 2 + mds$.offset().top - cvo.top);
-
- $(".main-datasheet-tag").each(function() {
- var tag$ = $(this),
- ytag = Math.floor(tag$.offset().top + tag$.outerHeight() / 2 - cvo.top);
- ctx.strokeStyle = "#999999";
- ctx.lineWidth = (this === selectedelement ? 4 : 1);
- ctx.beginPath();
- ctx.moveTo(0, ymain);
- ctx.bezierCurveTo(80,ymain, 40,ytag, 120, ytag);
- ctx.lineTo(160, ytag);
- ctx.stroke();
-
- var tagid = tag$.attr("data-tag-id"),
- relds = $(".related-datasheet-tag[data-tag-id=" + tagid + "]").parent().parent();
-
- if (this === selectedelement) {
- relds.css("opacity", 1);
- }
-
- relds.each(function(i) {
- var ds$ = $(this),
- dst = ds$.offset().top,
- dsh = ds$.outerHeight(),
- visible = ds$.is(":visible") && (dst - scroll < windowheight) && (dst + dsh - scroll > 0);
- if (visible) {
- var yds = Math.floor(dst + dsh / 2 - cvo.top);
- ctx.lineWidth = (this === selectedelement || tag$[0] === selectedelement ? 4 : 1);
- ctx.strokeStyle = colors[ds$.index() % colors.length];
- ctx.beginPath();
- ctx.moveTo(160, ytag);
- ctx.lineTo(200, ytag);
- ctx.bezierCurveTo(280,ytag, 280,yds, 320, yds);
- ctx.stroke();
- if (this === selectedelement) {
- tag$.css("opacity",1);
- }
- }
- })
- });
-}
-
-$(function() {
- $(window).scroll(drawlinks);
- $(window).resize(drawlinks);
- $(".main-datasheet-tag").click(function() {
- var tag$ = $(this);
- if (tag$.hasClass("selected")) {
- $(".datasheet").show();
- tag$.removeClass("selected");
- } else {
- $(".datasheet").hide();
- var tagid = tag$.attr("data-tag-id");
- $(".related-datasheet-tag[data-tag-id=" + tagid + "]").parent().parent().show();
- $(".main-datasheet-tag").removeClass("selected");
- tag$.addClass("selected");
- }
- drawlinks();
- });
- $(".main-datasheet-tag, .datasheet").mouseover(function() {
- if (selectedelement !== this) {
- selectedelement = this;
- drawlinks();
- }
- }).mouseout(function() {
- if (selectedelement) {
- selectedelement = null;
- drawlinks();
- }
- });
- drawlinks();
-});
--- a/web/hdalab/static/hdalab/js/thesaurus.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-var trees = [
- {
- title: "Thésaurus de l'Architecture et de l'Urbanisme : Secteur urbain",
- tree: {
- label: "secteur urbain",
- contents: [
- {
- label: "banlieue",
- contents: [
- {
- label: "faubourg"
- }
- ]
- },
- {
- label: "îlot"
- },
- {
- label: "quartier",
- contents: [
- {
- label: "centre-ville"
- }
- ]
- },
- {
- label: "secteur urbain concerté",
- contents: [
- {
- label: "grand ensemble"
- },
- {
- label: "lotissement",
- contents: [
- {
- label: "lotissement concerté",
- contents: [
- {
- label: "cité-jardin"
- },
- {
- label: "cité ouvrière"
- },
- {
- label: "courée"
- },
- ]
- }
- ]
- }
- ]
- },
- ]
- }
- },
- {
- title: "Thésaurus Garnier : Architecture d'habitation",
- tree: {
- label: "architecture d'habitation",
- contents: [
- {
- label: "cité-jardin"
- },
- {
- label: "édifice d'habitation",
- contents: [
- {
- label: "demeure",
- contents: [
- {
- label: "chalet"
- },
- {
- label: "château"
- },
- {
- label: "château-fort",
- contents: [
- {
- label: "chemin de ronde"
- },
- {
- label: "donjon"
- }
- ]
- },
- {
- label: "hôtel particulier"
- },
- {
- label: "maison"
- },
- {
- label: "manoir"
- },
- {
- label: "palais"
- }
- ]
- },
- {
- label: "abri",
- contents: [
- {
- label: "buron"
- },
- {
- label: "cabane"
- },
- {
- label: "campement",
- contents: [
- {
- label: "tente"
- },
- {
- label: "tipi"
- },
- {
- label: "igloo"
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- }
- },
- {
- title: "Thésaurus Garnier : Sciences occultes",
- tree: {
- label: "sciences occultes",
- contents: [
- {
- label: "alchimie"
- },
- {
- label: "astrologie"
- },
- {
- label: "divination"
- },
- {
- label: "magie",
- contents: [
- {
- label: "sorcellerie"
- },
- {
- label: "sorcière"
- }
- ]
- }
- ]
- }
- }
-];
-$(function() {
- $(".column").each(function(_key) {
- var _tree = trees[_key],
- _el = $(this);
- _el.find("h3").text(_tree.title);
- $.getJSON(
- endpoints.fill_tree,
- { tree: JSON.stringify(_tree.tree) },
- function(_data) {
- renderData(_el.find(".cattree"), _data, 2);
- _el.find("p.theme:contains('cité-jardin')")
- .css("background-color","#ffff80")
- .parent()
- .parentsUntil(".cattree")
- .removeClass("folded");
- }
- );
- });
-});
--- a/web/hdalab/static/hdalab/js/trees.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-
-function countContentsAndThemes(_data) {
- _data.counts = {
- contents: (typeof _data.contents == "object" && typeof _data.contents.slice == "function" ? _data.contents.length : 0),
- themes: (typeof _data.themes == "object" && typeof _data.themes.slice == "function" ? _data.themes.length : 0)
- }
- if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
- for (var _i = 0; _i < _data.themes.length; _i++) {
- countContentsAndThemes(_data.themes[_i]);
- var _subres = _data.themes[_i].counts;
- _data.counts.contents += _subres.contents;
- _data.counts.themes += _subres.themes;
- }
- }
-}
-
-function renderTemplate(_data, _level, _scale, _maxlevel) {
- _data.isfolded = _level >= _maxlevel;
- _(_data.tags).each(function(_tag) {
- _(_tag.contents).each(function(_content, _key) {
- _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1…');
- _content.hidden = (_key >= 5);
- });
- _tag.show_more = _tag.contents && _tag.contents.length > 5 ? _tag.contents.length - 5 : 0;
- });
- _(_data.contents).each(function(_content, _key) {
- _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1…');
- _content.hidden = (_key >= 5);
- });
- _data.show_more = _data.contents && _data.contents.length > 5 ? _data.contents.length - 5 : 0;
- _data.font_size = (10+Math.log(_data.counts.contents)*_scale);
- var _dsurl = endpoints.datasheet.replace(/ID$/,'');
- var _prefix = '<li class="themeli{{#isfolded}} folded{{/isfolded}}"><p class="theme"><span style="font-size: {{font_size}}px">{{label}}</span> — {{#counts.themes}}{{counts.themes}} thème(s){{#counts.contents}}, {{/counts.contents}}{{/counts.themes}}{{#counts.contents}}{{counts.contents}} notice(s){{/counts.contents}}</p><ul>',
- _suffix = '{{#contents}}<li class="content{{#hidden}} hidden{{/hidden}}" id="content_{{id}}"><p class="title score_{{score}}"><a href="'
- + _dsurl
- + '{{hda_id}}">{{title}}</a></p><div class="foldedcontent"><div class="img-container"><img src="http://www.histoiredesarts.culture.fr/images/cached/images/{{hda_id}}.jpg" />'
- + '</div><p class="description">Source: <a href="{{organization_url}}" target="_blank">{{organization}}</a><br /><a href="'
- + _dsurl
- + '{{hda_id}}" class="content">{{trimmed_description}}</a></p></div></li>{{/contents}}{{#show_more}}<li class="show_more">Plus de contenus (<span class="show_more_count">{{show_more}}</span>)…</li>{{/show_more}}</ul></li>',
- _html = Mustache.to_html(_prefix, _data);
- if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
- for (var _i = 0; _i < _data.themes.length; _i++) {
- _html += renderTemplate(_data.themes[_i], _level + 1, _scale, _maxlevel);
- }
- }
- _html += Mustache.to_html(_suffix, _data);
- return _html;
-}
-
-function renderData(_selector, _data, _maxlevel) {
- countContentsAndThemes(_data);
- var _scale = 8 / Math.max(1,Math.log(_data.counts.contents));
- _selector.html(renderTemplate(_data, 0, _scale, _maxlevel));
- _selector.find("p.theme").click(function() {
- $(this).parent().toggleClass("folded")
- return false;
- });
- _selector.find("li.content").mouseenter(function() {
- $(this).find(".foldedcontent")
- .dequeue()
- .animate({
- height: 5 + $(this).find("p.description").outerHeight()
- },
- 500);
- }).mouseleave(function() {
- $(this).find(".foldedcontent")
- .dequeue()
- .animate({
- height: "0"
- },
- 500);
- });
- _selector.find(".show_more").click(function() {
- $(this).siblings(".hidden:lt(5)").removeClass("hidden");
- var _l = $(this).siblings(".hidden").length;
- $(this).find(".show_more_count").html(_l);
- if (!_l) {
- $(this).detach();
- }
- });
-}
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/ZeroClipboard.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,311 +0,0 @@
-// Simple Set Clipboard System
-// Author: Joseph Huckaby
-
-var ZeroClipboard = {
-
- version: "1.0.7",
- clients: {}, // registered upload clients on page, indexed by id
- moviePath: 'ZeroClipboard.swf', // URL to movie
- nextId: 1, // ID of next movie
-
- $: function(thingy) {
- // simple DOM lookup utility function
- if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
- if (!thingy.addClass) {
- // extend element with a few useful methods
- thingy.hide = function() { this.style.display = 'none'; };
- thingy.show = function() { this.style.display = ''; };
- thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
- thingy.removeClass = function(name) {
- var classes = this.className.split(/\s+/);
- var idx = -1;
- for (var k = 0; k < classes.length; k++) {
- if (classes[k] == name) { idx = k; k = classes.length; }
- }
- if (idx > -1) {
- classes.splice( idx, 1 );
- this.className = classes.join(' ');
- }
- return this;
- };
- thingy.hasClass = function(name) {
- return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
- };
- }
- return thingy;
- },
-
- setMoviePath: function(path) {
- // set path to ZeroClipboard.swf
- this.moviePath = path;
- },
-
- dispatch: function(id, eventName, args) {
- // receive event from flash movie, send to client
- var client = this.clients[id];
- if (client) {
- client.receiveEvent(eventName, args);
- }
- },
-
- register: function(id, client) {
- // register new client to receive events
- this.clients[id] = client;
- },
-
- getDOMObjectPosition: function(obj, stopObj) {
- // get absolute coordinates for dom element
- var info = {
- left: 0,
- top: 0,
- width: obj.width ? obj.width : obj.offsetWidth,
- height: obj.height ? obj.height : obj.offsetHeight
- };
-
- while (obj && (obj != stopObj)) {
- info.left += obj.offsetLeft;
- info.top += obj.offsetTop;
- obj = obj.offsetParent;
- }
-
- return info;
- },
-
- Client: function(elem) {
- // constructor for new simple upload client
- this.handlers = {};
-
- // unique ID
- this.id = ZeroClipboard.nextId++;
- this.movieId = 'ZeroClipboardMovie_' + this.id;
-
- // register client with singleton to receive flash events
- ZeroClipboard.register(this.id, this);
-
- // create movie
- if (elem) this.glue(elem);
- }
-};
-
-ZeroClipboard.Client.prototype = {
-
- id: 0, // unique ID for us
- ready: false, // whether movie is ready to receive events or not
- movie: null, // reference to movie object
- clipText: '', // text to copy to clipboard
- handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
- cssEffects: true, // enable CSS mouse effects on dom container
- handlers: null, // user event handlers
-
- glue: function(elem, appendElem, stylesToAdd) {
- // glue to DOM element
- // elem can be ID or actual DOM element object
- this.domElement = ZeroClipboard.$(elem);
-
- // float just above object, or zIndex 99 if dom element isn't set
- var zIndex = 99;
- if (this.domElement.style.zIndex) {
- zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
- }
-
- if (typeof(appendElem) == 'string') {
- appendElem = ZeroClipboard.$(appendElem);
- }
- else if (typeof(appendElem) == 'undefined') {
- appendElem = document.getElementsByTagName('body')[0];
- }
-
- // find X/Y position of domElement
- var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
-
- // create floating DIV above element
- this.div = document.createElement('div');
- var style = this.div.style;
- style.position = 'absolute';
- style.left = '' + box.left + 'px';
- style.top = '' + box.top + 'px';
- style.width = '' + box.width + 'px';
- style.height = '' + box.height + 'px';
- style.zIndex = zIndex;
-
- if (typeof(stylesToAdd) == 'object') {
- for (addedStyle in stylesToAdd) {
- style[addedStyle] = stylesToAdd[addedStyle];
- }
- }
-
- // style.backgroundColor = '#f00'; // debug
-
- appendElem.appendChild(this.div);
-
- this.div.innerHTML = this.getHTML( box.width, box.height );
- },
-
- getHTML: function(width, height) {
- // return HTML for movie
- var html = '';
- var flashvars = 'id=' + this.id +
- '&width=' + width +
- '&height=' + height;
-
- if (navigator.userAgent.match(/MSIE/)) {
- // IE gets an OBJECT tag
- var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
- html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
- }
- else {
- // all other browsers get an EMBED tag
- html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
- }
- return html;
- },
-
- hide: function() {
- // temporarily hide floater offscreen
- if (this.div) {
- this.div.style.left = '-2000px';
- }
- },
-
- show: function() {
- // show ourselves after a call to hide()
- this.reposition();
- },
-
- destroy: function() {
- // destroy control and floater
- if (this.domElement && this.div) {
- this.hide();
- this.div.innerHTML = '';
-
- var body = document.getElementsByTagName('body')[0];
- try { body.removeChild( this.div ); } catch(e) {;}
-
- this.domElement = null;
- this.div = null;
- }
- },
-
- reposition: function(elem) {
- // reposition our floating div, optionally to new container
- // warning: container CANNOT change size, only position
- if (elem) {
- this.domElement = ZeroClipboard.$(elem);
- if (!this.domElement) this.hide();
- }
-
- if (this.domElement && this.div) {
- var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
- var style = this.div.style;
- style.left = '' + box.left + 'px';
- style.top = '' + box.top + 'px';
- }
- },
-
- setText: function(newText) {
- // set text to be copied to clipboard
- this.clipText = newText;
- if (this.ready) this.movie.setText(newText);
- },
-
- addEventListener: function(eventName, func) {
- // add user event listener for event
- // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
- eventName = eventName.toString().toLowerCase().replace(/^on/, '');
- if (!this.handlers[eventName]) this.handlers[eventName] = [];
- this.handlers[eventName].push(func);
- },
-
- setHandCursor: function(enabled) {
- // enable hand cursor (true), or default arrow cursor (false)
- this.handCursorEnabled = enabled;
- if (this.ready) this.movie.setHandCursor(enabled);
- },
-
- setCSSEffects: function(enabled) {
- // enable or disable CSS effects on DOM container
- this.cssEffects = !!enabled;
- },
-
- receiveEvent: function(eventName, args) {
- // receive event from flash
- eventName = eventName.toString().toLowerCase().replace(/^on/, '');
-
- // special behavior for certain events
- switch (eventName) {
- case 'load':
- // movie claims it is ready, but in IE this isn't always the case...
- // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
- this.movie = document.getElementById(this.movieId);
- if (!this.movie) {
- var self = this;
- setTimeout( function() { self.receiveEvent('load', null); }, 1 );
- return;
- }
-
- // firefox on pc needs a "kick" in order to set these in certain cases
- if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
- var self = this;
- setTimeout( function() { self.receiveEvent('load', null); }, 100 );
- this.ready = true;
- return;
- }
-
- this.ready = true;
- this.movie.setText( this.clipText );
- this.movie.setHandCursor( this.handCursorEnabled );
- break;
-
- case 'mouseover':
- if (this.domElement && this.cssEffects) {
- this.domElement.addClass('hover');
- if (this.recoverActive) this.domElement.addClass('active');
- }
- break;
-
- case 'mouseout':
- if (this.domElement && this.cssEffects) {
- this.recoverActive = false;
- if (this.domElement.hasClass('active')) {
- this.domElement.removeClass('active');
- this.recoverActive = true;
- }
- this.domElement.removeClass('hover');
- }
- break;
-
- case 'mousedown':
- if (this.domElement && this.cssEffects) {
- this.domElement.addClass('active');
- }
- break;
-
- case 'mouseup':
- if (this.domElement && this.cssEffects) {
- this.domElement.removeClass('active');
- this.recoverActive = false;
- }
- break;
- } // switch eventName
-
- if (this.handlers[eventName]) {
- for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
- var func = this.handlers[eventName][idx];
-
- if (typeof(func) == 'function') {
- // actual function reference
- func(this, args);
- }
- else if ((typeof(func) == 'object') && (func.length == 2)) {
- // PHP style object + method, i.e. [myObject, 'myMethod']
- func[0][ func[1] ](this, args);
- }
- else if (typeof(func) == 'string') {
- // name of function
- window[func](this, args);
- }
- } // foreach event handler defined
- } // user defined handler for event
- }
-
-};
Binary file web/hdalab/static/hdalab/lib/ZeroClipboard.swf has changed
--- a/web/hdalab/static/hdalab/lib/countries.geo.json Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-{"type": "FeatureCollection", "features": [{"geometry": {"type": "Polygon", "coordinates": [[[61.210816999999999, 35.650072000000002], [62.230651000000002, 35.270663999999996], [62.984662, 35.404040999999999], [63.193537999999997, 35.857165999999999], [63.982895999999997, 36.007956999999998], [64.546479000000005, 36.312072999999998], [64.746105, 37.111818], [65.588948000000002, 37.305216999999999], [65.745631000000003, 37.661163999999999], [66.217384999999993, 37.393790000000003], [66.518607000000003, 37.362783999999998], [67.075782000000004, 37.356144], [67.829999999999998, 37.144993999999997], [68.135561999999993, 37.023114999999997], [68.859446000000005, 37.344335999999998], [69.196273000000005, 37.151144000000002], [69.518784999999994, 37.608997000000002], [70.116578000000004, 37.588222999999999], [70.270573999999996, 37.735165000000002], [70.376304000000005, 38.138396], [70.806820999999999, 38.486282000000003], [71.348130999999995, 38.258904999999999], [71.239403999999993, 37.953265000000002], [71.541917999999995, 37.905774000000001], [71.448693000000006, 37.065645000000004], [71.844638000000003, 36.738171000000001], [72.193040999999994, 36.948287999999998], [72.636889999999994, 37.047558000000002], [73.260056000000006, 37.495257000000002], [73.948695999999998, 37.421565999999999], [74.980001999999999, 37.419989999999999], [75.158028000000002, 37.133031000000003], [74.575892999999994, 37.020840999999997], [74.067552000000006, 36.836176000000002], [72.920024999999995, 36.720007000000003], [71.846292000000005, 36.509942000000002], [71.262348000000003, 36.074387999999999], [71.498767999999998, 35.650562999999998], [71.613076000000007, 35.153202999999998], [71.115019000000004, 34.733125999999999], [71.156773000000001, 34.348911000000001], [70.881803000000005, 33.988855999999998], [69.930543, 34.020119999999999], [70.323594, 33.358533000000001], [69.687146999999996, 33.105499000000002], [69.262522000000004, 32.501944000000002], [69.317763999999997, 31.901412000000001], [68.926676999999998, 31.620189], [68.556932000000003, 31.71331], [67.792688999999996, 31.582930000000001], [67.683394000000007, 31.303153999999999], [66.938890999999998, 31.304911000000001], [66.381457999999995, 30.738899], [66.346473000000003, 29.887943], [65.046862000000004, 29.472180999999999], [64.350419000000002, 29.560030999999999], [64.148002000000005, 29.340819], [63.550260999999999, 29.468330999999999], [62.549857000000003, 29.318572], [60.874248000000001, 29.829239000000001], [61.781222, 30.735849999999999], [61.699314000000001, 31.379505999999999], [60.941944999999997, 31.548075000000001], [60.863655000000001, 32.182920000000003], [60.536078000000003, 32.981268999999998], [60.963700000000003, 33.528832000000001], [60.52843, 33.676445999999999], [60.803193, 34.404102000000002], [61.210816999999999, 35.650072000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d", "fr": "Afghanistan", "en": "Afghanistan", "nl": "Afghanistan", "pt": "Afeganist\u00e3o", "no": "Afghanistan", "de": "Afghanistan", "it": "Afghanistan", "sv": "Afghanistan", "pl": "Afganistan", "fi": "Afganistan", "zh": "\u963f\u5bcc\u6c57", "ja": "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3", "es": "Afganist\u00e1n"}, "label_fr": "Afghanistan", "name": "Afghanistan", "dbpedia_uri": "http://dbpedia.org/resource/Afghanistan"}, "id": "AFG"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[16.326528, -5.8774699999999998], [16.573180000000001, -6.6226450000000003], [16.860191, -7.2222980000000003], [17.089995999999999, -7.5456890000000003], [17.47297, -8.0685509999999994], [18.134222000000001, -7.9876779999999998], [18.464175999999998, -7.8470139999999997], [19.016752, -7.9882460000000002], [19.166613000000002, -7.7381840000000004], [19.417501999999999, -7.1554289999999998], [20.037723, -7.1163610000000004], [20.091622000000001, -6.9430899999999998], [20.601823, -6.9393180000000001], [20.514748000000001, -7.2996059999999998], [21.728110999999998, -7.2908720000000002], [21.746455999999998, -7.9200850000000003], [21.949131000000001, -8.3059010000000004], [21.801801000000001, -8.9087069999999997], [21.875181999999999, -9.5237079999999992], [22.208753000000002, -9.8947959999999995], [22.155268, -11.084801000000001], [22.402798000000001, -10.993074999999999], [22.837344999999999, -11.017621999999999], [23.456790999999999, -10.867863], [23.912215, -10.926826], [24.017893999999998, -11.237297999999999], [23.904153999999998, -11.722282], [24.079905, -12.191297], [23.930921999999999, -12.565848000000001], [24.016137000000001, -12.911046000000001], [21.933886000000001, -12.898436999999999], [21.887843, -16.080310000000001], [22.562477999999999, -16.898451000000001], [23.215047999999999, -17.523116000000002], [21.377175999999999, -17.930636], [18.956187, -17.789095], [18.263309, -17.309951000000002], [14.209707, -17.353100999999999], [14.058501, -17.423380999999999], [13.462362000000001, -16.971212000000001], [12.814081, -16.941343], [12.215460999999999, -17.111668000000002], [11.734199, -17.301888999999999], [11.640096, -16.673141999999999], [11.778537, -15.793816], [12.123581, -14.878316], [12.175618999999999, -14.449144], [12.500095, -13.547700000000001], [12.738479, -13.137905999999999], [13.312913999999999, -12.48363], [13.633721, -12.038645000000001], [13.738728, -11.297863], [13.686379000000001, -10.731076], [13.387328, -10.373578], [13.120988000000001, -9.7668970000000002], [12.87537, -9.1669339999999995], [12.929061000000001, -8.9590910000000008], [13.236433, -8.5626289999999994], [12.93304, -7.5965389999999999], [12.728298000000001, -6.9271219999999998], [12.227347, -6.294448], [12.322431999999999, -6.1000920000000001], [12.735170999999999, -5.9656820000000002], [13.024869000000001, -5.9843890000000002], [13.375597000000001, -5.8642409999999998], [16.326528, -5.8774699999999998]]], [[[12.436688, -5.684304], [12.182337, -5.7899310000000002], [11.914963, -5.0379870000000002], [12.318607999999999, -4.60623], [12.620760000000001, -4.4380230000000003], [12.995517, -4.7811029999999999], [12.631612000000001, -4.9912710000000002], [12.468004000000001, -5.2483620000000002], [12.436688, -5.684304]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043d\u0433\u043e\u043b\u0430", "fr": "Angola", "en": "Angola", "nl": "Angola", "pt": "Angola", "no": "Angola", "de": "Angola", "it": "Angola", "sv": "Angola", "pl": "Angola", "fi": "Angola", "zh": "\u5b89\u54e5\u62c9", "ja": "\u30a2\u30f3\u30b4\u30e9", "es": "Angola"}, "label_fr": "Angola", "name": "Angola", "dbpedia_uri": "http://dbpedia.org/resource/Angola"}, "id": "AGO"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.590247000000002, 41.855404], [20.463175, 41.515089000000003], [20.605181999999999, 41.086226000000003], [21.020040000000002, 40.842726999999996], [20.99999, 40.580004000000002], [20.674997000000001, 40.435000000000002], [20.614999999999998, 40.110007000000003], [20.150016000000001, 39.624997999999998], [19.98, 39.694992999999997], [19.960001999999999, 39.915005999999998], [19.406082000000001, 40.250773000000002], [19.319058999999999, 40.727229999999999], [19.403549999999999, 41.409565999999998], [19.540026999999998, 41.719985999999999], [19.371769, 41.877547999999997], [19.304486000000001, 42.195745000000002], [19.738050999999999, 42.688246999999997], [19.801613, 42.500093], [20.070699999999999, 42.588630000000002], [20.283754999999999, 42.320259999999998], [20.522950000000002, 42.217869999999998], [20.590247000000002, 41.855404]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043b\u0431\u0430\u043d\u0438\u044f", "fr": "Albanie", "en": "Albania", "nl": "Albani\u00eb", "pt": "Alb\u00e2nia", "no": "Albania", "de": "Albanien", "it": "Albania", "sv": "Albanien", "pl": "Albania", "fi": "Albania", "zh": "\u963f\u5c14\u5df4\u5c3c\u4e9a", "ja": "\u30a2\u30eb\u30d0\u30cb\u30a2", "es": "Albania"}, "label_fr": "Albanie", "name": "Albania", "dbpedia_uri": "http://dbpedia.org/resource/Albania"}, "id": "ALB"}, {"geometry": {"type": "Polygon", "coordinates": [[[51.579518999999998, 24.245497], [51.757441, 24.294073000000001], [51.794389000000002, 24.019825999999998], [52.577081, 24.177439], [53.404007, 24.151316999999999], [54.008001, 24.121758], [54.693024000000001, 24.797892000000001], [55.439025000000001, 25.439145], [56.070821000000002, 26.055464000000001], [56.261042000000003, 25.714606], [56.396847000000001, 24.924731999999999], [55.886232999999997, 24.920831], [55.804119, 24.269604000000001], [55.981214000000001, 24.130542999999999], [55.528632000000002, 23.933603999999999], [55.525841, 23.524868999999999], [55.234489000000004, 23.110993000000001], [55.208340999999997, 22.70833], [55.006802999999998, 22.496948], [52.000732999999997, 23.001154], [51.617708, 24.014219000000001], [51.579518999999998, 24.245497]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0410\u0440\u0430\u0431\u0441\u043a\u0438\u0435 \u042d\u043c\u0438\u0440\u0430\u0442\u044b", "fr": "\u00c9mirats arabes unis", "en": "United Arab Emirates", "nl": "Verenigde Arabische Emiraten", "pt": "Emirados \u00c1rabes Unidos", "no": "De forente arabiske emirater", "de": "Vereinigte Arabische Emirate", "it": "Emirati Arabi Uniti", "sv": "F\u00f6renade Arabemiraten", "pl": "Zjednoczone Emiraty Arabskie", "fi": "Yhdistyneet arabiemiirikunnat", "zh": "\u963f\u62c9\u4f2f\u8054\u5408\u914b\u957f\u56fd", "ja": "\u30a2\u30e9\u30d6\u9996\u9577\u56fd\u9023\u90a6", "es": "Emiratos \u00c1rabes Unidos"}, "label_fr": "\u00c9mirats arabes unis", "name": "United Arab Emirates", "dbpedia_uri": "http://dbpedia.org/resource/United_Arab_Emirates"}, "id": "ARE"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-65.5, -55.200000000000003], [-66.450000000000003, -55.25], [-66.959919999999997, -54.896810000000002], [-67.562439999999995, -54.870010000000001], [-68.633349999999993, -54.869500000000002], [-68.634010000000004, -52.636369999999999], [-68.25, -53.100000000000001], [-67.75, -53.850000000000001], [-66.450000000000003, -54.450000000000003], [-65.049999999999997, -54.700000000000003], [-65.5, -55.200000000000003]]], [[[-64.964892000000006, -22.075862000000001], [-64.377020999999999, -22.798090999999999], [-63.986837999999999, -21.993644], [-62.846468000000002, -22.034984999999999], [-62.685057, -22.249029], [-60.846564999999998, -23.880713], [-60.028965999999997, -24.032796000000001], [-58.807127999999999, -24.771459], [-57.777217, -25.16234], [-57.633659999999999, -25.603656999999998], [-58.618174000000003, -27.123719000000001], [-57.609760000000001, -27.395899], [-56.486702000000001, -27.548499], [-55.695846000000003, -27.387837000000001], [-54.788795, -26.621786], [-54.625290999999997, -25.739255], [-54.130049999999997, -25.547639], [-53.628349, -26.124865], [-53.648735000000002, -26.923473000000001], [-54.490724999999998, -27.474757], [-55.162286000000002, -27.881914999999999], [-56.290900000000001, -28.852761000000001], [-57.625132999999998, -30.216294999999999], [-57.874937000000003, -31.016556000000001], [-58.142440000000001, -32.044504000000003], [-58.132648000000003, -33.040567000000003], [-58.349611000000003, -33.263188999999997], [-58.427073999999998, -33.909453999999997], [-58.495441999999997, -34.431489999999997], [-57.225830000000002, -35.288027], [-57.362358999999998, -35.97739], [-56.737487000000002, -36.413125999999998], [-56.788285000000002, -36.901572000000002], [-57.749156999999997, -38.183871000000003], [-59.231856999999998, -38.720219999999998], [-61.237445000000001, -38.928424999999997], [-62.335957000000001, -38.827706999999997], [-62.125762999999999, -39.424104999999997], [-62.330531000000001, -40.172586000000003], [-62.145994000000002, -40.676896999999997], [-62.745803000000002, -41.028761000000003], [-63.770494999999997, -41.166789000000001], [-64.732089999999999, -40.802677000000003], [-65.118035000000006, -41.064315000000001], [-64.978560999999999, -42.058000999999997], [-64.303408000000005, -42.359015999999997], [-63.755947999999997, -42.043686999999998], [-63.458058999999999, -42.563138000000002], [-64.378804000000002, -42.873558000000003], [-65.181804, -43.495381000000002], [-65.328823, -44.501365999999997], [-65.565269000000001, -45.036785999999999], [-66.509966000000006, -45.039628], [-67.293794000000005, -45.551895999999999], [-67.580545999999998, -46.301772999999997], [-66.597065999999998, -47.033925000000004], [-65.641026999999994, -47.236134999999997], [-65.985088000000005, -48.133288999999998], [-67.166179, -48.697336999999997], [-67.816087999999993, -49.869669000000002], [-68.728745000000004, -50.264218], [-69.138538999999994, -50.732509999999998], [-68.815561000000002, -51.771104000000001], [-68.149995000000004, -52.349983000000002], [-68.571545, -52.299444000000001], [-69.498362, -52.142761], [-71.914804000000004, -52.009022000000002], [-72.329403999999997, -51.425955999999999], [-72.309973999999997, -50.677010000000003], [-72.975746999999998, -50.74145], [-73.328051000000002, -50.378785000000001], [-73.415436, -49.318435999999998], [-72.648246999999998, -48.878618000000003], [-72.331160999999994, -48.244238000000003], [-72.447355000000002, -47.738532999999997], [-71.917258000000004, -46.884838000000002], [-71.552008999999998, -45.560732999999999], [-71.659316000000004, -44.973689], [-71.222779000000003, -44.784242999999996], [-71.329801000000003, -44.407522], [-71.793622999999997, -44.207172], [-71.464055999999999, -43.787610999999998], [-71.915424000000002, -43.408565000000003], [-72.148898000000003, -42.254888000000001], [-71.746803999999997, -42.051386000000001], [-71.915734, -40.832338999999997], [-71.680761000000004, -39.808163999999998], [-71.413516999999999, -38.916021999999998], [-70.814663999999993, -38.552995000000003], [-71.118624999999994, -37.576827000000002], [-71.121881000000002, -36.658124000000001], [-70.364768999999995, -36.005088999999998], [-70.388048999999995, -35.169688000000001], [-69.817308999999995, -34.193570999999999], [-69.814777000000007, -33.273885999999997], [-70.074399, -33.091209999999997], [-70.535068999999993, -31.365010000000002], [-69.919008000000005, -30.336338999999999], [-70.013549999999995, -29.367923000000001], [-69.656130000000005, -28.459140999999999], [-69.001234999999994, -27.521214000000001], [-68.295541999999998, -26.899339999999999], [-68.594800000000006, -26.506909], [-68.386000999999993, -26.185016000000001], [-68.417653000000001, -24.518554999999999], [-67.328442999999993, -24.025303000000001], [-66.985234000000005, -22.986349000000001], [-67.106673999999998, -22.735925000000002], [-66.273339000000007, -21.83231], [-64.964892000000006, -22.075862000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430", "fr": "Argentine", "en": "Argentina", "nl": "Argentini\u00eb", "pt": "Argentina", "no": "Argentina", "de": "Argentinien", "it": "Argentina", "sv": "Argentina", "pl": "Argentyna", "fi": "Argentiina", "zh": "\u963f\u6839\u5ef7", "ja": "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3", "es": "Argentina"}, "label_fr": "Argentine", "name": "Argentina", "dbpedia_uri": "http://dbpedia.org/resource/Argentina"}, "id": "ARG"}, {"geometry": {"type": "Polygon", "coordinates": [[[43.582746, 41.092143], [44.972479999999997, 41.248128999999999], [45.179496, 40.985354000000001], [45.560350999999997, 40.812289999999997], [45.359175, 40.561503999999999], [45.891907000000003, 40.218476000000003], [45.610011999999998, 39.899994], [46.034534000000001, 39.628020999999997], [46.483499000000002, 39.464154999999998], [46.505719999999997, 38.770605000000003], [46.143622999999998, 38.741200999999997], [45.735379000000002, 39.319718999999999], [45.739978000000001, 39.473998999999999], [45.298144999999998, 39.471750999999998], [45.001987, 39.740003999999999], [44.793990000000001, 39.713003], [44.400008999999997, 40.005000000000003], [43.656435999999999, 40.253563999999997], [43.752657999999997, 40.740200999999999], [43.582746, 41.092143]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0440\u043c\u0435\u043d\u0438\u044f", "fr": "Arm\u00e9nie", "en": "Armenia", "nl": "Armeni\u00eb", "pt": "Arm\u00e9nia", "no": "Armenia", "de": "Armenien", "it": "Armenia", "sv": "Armenien", "pl": "Armenia", "fi": "Armenia", "zh": "\u4e9e\u7f8e\u5c3c\u4e9e", "ja": "\u30a2\u30eb\u30e1\u30cb\u30a2", "es": "Armenia"}, "label_fr": "Arm\u00e9nie", "name": "Armenia", "dbpedia_uri": "http://dbpedia.org/resource/Armenia"}, "id": "ARM"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-59.572094999999997, -80.040178999999995], [-59.865848999999997, -80.549656999999996], [-60.159655999999998, -81.000326999999999], [-62.255392999999998, -80.863178000000005], [-64.488124999999997, -80.921933999999993], [-65.741665999999995, -80.588826999999995], [-65.741665999999995, -80.549656999999996], [-66.290030999999999, -80.255773000000005], [-64.037688000000003, -80.294944000000001], [-61.883246, -80.392870000000002], [-61.138976, -79.981370999999996], [-60.610118999999997, -79.628679000000005], [-59.572094999999997, -80.040178999999995]]], [[[-159.20818399999999, -79.497058999999993], [-161.127601, -79.634208999999998], [-162.43984699999999, -79.281464999999997], [-163.02740800000001, -78.928774000000004], [-163.06660400000001, -78.869966000000005], [-163.712896, -78.595667000000006], [-163.712896, -78.595667000000006], [-163.10580100000001, -78.223337999999998], [-161.245113, -78.380176000000006], [-160.246208, -78.693645000000004], [-159.482405, -79.046338000000006], [-159.20818399999999, -79.497058999999993]]], [[[-45.154758000000001, -78.047070000000005], [-43.920828, -78.478103000000004], [-43.48995, -79.085560000000001], [-43.372438000000002, -79.516644999999997], [-43.333266999999999, -80.026122999999998], [-44.880536999999997, -80.339644000000007], [-46.506174000000001, -80.594357000000002], [-48.386420999999999, -80.829485000000005], [-50.482106999999999, -81.025441999999998], [-52.851987999999999, -80.966684999999998], [-54.164259000000001, -80.633527999999998], [-53.987991000000001, -80.222027999999995], [-51.853133999999997, -79.947730000000007], [-50.991326000000001, -79.614622999999995], [-50.364595000000001, -79.183487], [-49.914130999999998, -78.811209000000005], [-49.306958999999999, -78.458568999999997], [-48.660615999999997, -78.047017999999994], [-48.660615999999997, -78.047019000000006], [-48.151395999999998, -78.047070000000005], [-46.662857000000002, -77.831475999999995], [-45.154758000000001, -78.047070000000005]]], [[[-121.211511, -73.500990000000002], [-119.918851, -73.657724999999999], [-118.724143, -73.481352999999999], [-119.292119, -73.834097], [-120.23221700000001, -74.088809999999995], [-121.62282999999999, -74.010468000000003], [-122.621735, -73.657777999999993], [-122.621735, -73.657776999999996], [-122.406245, -73.324618999999998], [-121.211511, -73.500990000000002]]], [[[-125.559566, -73.481352999999999], [-124.031882, -73.873267999999996], [-124.619469, -73.834097], [-125.912181, -73.736118000000005], [-127.28313, -73.461769000000004], [-127.28313, -73.461768000000006], [-126.55847199999999, -73.246225999999993], [-125.559566, -73.481352999999999]]], [[[-98.981549999999999, -71.933334000000002], [-97.884743, -72.070535000000007], [-96.787936999999999, -71.952971000000005], [-96.20035, -72.521204999999995], [-96.983765000000005, -72.442864], [-98.198082999999997, -72.482034999999996], [-99.432012999999998, -72.442864], [-100.783455, -72.501620000000003], [-101.801868, -72.305662999999996], [-102.330725, -71.894164000000004], [-102.330725, -71.894164000000004], [-101.70396700000001, -71.717792000000003], [-100.430919, -71.854992999999993], [-98.981549999999999, -71.933334000000002]]], [[[-68.451346000000001, -70.955822999999995], [-68.333833999999996, -71.406492999999998], [-68.510127999999995, -71.798406999999997], [-68.784296999999995, -72.170736000000005], [-69.959470999999994, -72.307884999999999], [-71.075889000000004, -72.503842000000006], [-72.388133999999994, -72.484256999999999], [-71.898499999999999, -72.092343], [-73.073622, -72.229491999999993], [-74.190039999999996, -72.366692999999998], [-74.953895000000003, -72.072756999999996], [-75.012625, -71.661258000000004], [-73.915818999999999, -71.269345000000001], [-73.915818999999999, -71.269344000000004], [-73.230331000000007, -71.151780000000002], [-72.074717000000007, -71.190950999999998], [-71.780962000000002, -70.681472999999997], [-71.722179999999994, -70.309196], [-71.741791000000006, -69.505781999999996], [-71.173815000000005, -69.035475000000005], [-70.253252000000003, -68.878739999999993], [-69.724446999999998, -69.251017000000004], [-69.489422000000005, -69.623345999999998], [-69.058518000000007, -70.074016], [-68.725541000000007, -70.505153000000007], [-68.451346000000001, -70.955822999999995]]], [[[-58.614142999999999, -64.152467000000001], [-59.045073000000002, -64.368009999999998], [-59.789341999999998, -64.211223000000004], [-60.611927999999999, -64.309201999999999], [-61.297415999999998, -64.544330000000002], [-62.022100000000002, -64.799093999999997], [-62.511760000000002, -65.093029999999999], [-62.648857999999997, -65.484942000000004], [-62.590128, -65.857219000000001], [-62.120078999999997, -66.190325999999999], [-62.805567000000003, -66.425505000000001], [-63.745690000000003, -66.503846999999993], [-64.294105999999999, -66.837003999999993], [-64.881692999999999, -67.150474000000003], [-65.508425000000003, -67.581609999999998], [-65.665081999999998, -67.953886999999995], [-65.312545, -68.365335000000002], [-64.783715000000001, -68.678908000000007], [-63.961103000000001, -68.913983999999999], [-63.197299999999998, -69.227556000000007], [-62.785955000000001, -69.619418999999994], [-62.570515999999998, -69.991747000000004], [-62.276736, -70.383661000000004], [-61.806660999999998, -70.716768000000002], [-61.512906000000001, -71.089044999999999], [-61.375808999999997, -72.010074000000003], [-61.081977000000002, -72.382351], [-61.003661000000001, -72.774265], [-60.690269000000001, -73.166179], [-60.827367000000002, -73.695241999999993], [-61.375808999999997, -74.106741999999997], [-61.963369999999998, -74.439847999999998], [-63.295200999999999, -74.576997000000006], [-63.745690000000003, -74.929739999999995], [-64.352835999999996, -75.262846999999994], [-65.860986999999994, -75.635124000000005], [-67.192818000000003, -75.791910000000001], [-68.446281999999997, -76.007452000000001], [-69.797724000000002, -76.222994999999997], [-70.600724, -76.634494000000004], [-72.206776000000005, -76.673665], [-73.969536000000005, -76.634494000000004], [-75.555976999999999, -76.712886999999995], [-77.240369999999999, -76.712886999999995], [-76.926979000000003, -77.104802000000007], [-75.399293999999998, -77.28107], [-74.282876000000002, -77.555419999999998], [-73.656119000000004, -77.908112000000003], [-74.772536000000002, -78.221632999999997], [-76.496099999999998, -78.123654000000002], [-77.925858000000005, -78.378418999999994], [-77.984666000000004, -78.789918], [-78.023785000000004, -79.181832999999997], [-76.848636999999997, -79.514938999999998], [-76.633223999999998, -79.887215999999995], [-75.360096999999996, -80.259545000000003], [-73.244851999999995, -80.416331], [-71.442946000000006, -80.690629999999999], [-70.013163000000006, -81.004150999999993], [-68.191646000000006, -81.317672000000002], [-65.704279, -81.474457999999998], [-63.256030000000003, -81.748756999999998], [-61.552025999999998, -82.042692000000002], [-59.691415999999997, -82.37585], [-58.712121000000003, -82.846106000000006], [-58.222487000000001, -83.218434000000002], [-57.008116999999999, -82.865690999999998], [-55.362893999999997, -82.571754999999996], [-53.619771, -82.258234999999999], [-51.543644, -82.003521000000006], [-49.76135, -81.729170999999994], [-47.273930999999997, -81.709586000000002], [-44.825707999999999, -81.846734999999995], [-42.808363, -82.081914999999995], [-42.162019999999998, -81.650829999999999], [-40.771433000000002, -81.356893999999997], [-38.244818000000002, -81.337309000000005], [-36.266669999999998, -81.121714999999995], [-34.386397000000002, -80.906171999999998], [-32.310296000000001, -80.769023000000004], [-30.097097999999999, -80.592651000000004], [-28.549802, -80.337937999999994], [-29.254901, -79.985195000000004], [-29.685804999999998, -79.632503], [-29.685804999999998, -79.260226000000003], [-31.624808000000002, -79.299396999999999], [-33.681323999999996, -79.456131999999997], [-35.639912000000002, -79.456131999999997], [-35.914107000000001, -79.083855], [-35.777009999999997, -78.339247999999998], [-35.326546, -78.123654000000002], [-33.896763, -77.888525999999999], [-32.212369000000002, -77.653450000000007], [-30.998051, -77.359515000000002], [-29.783732000000001, -77.065579], [-28.882778999999999, -76.673665], [-27.511752000000001, -76.497344999999996], [-26.160336000000001, -76.360144000000005], [-25.474822, -76.281802999999996], [-23.927551999999999, -76.242580000000004], [-22.458597999999999, -76.105430999999996], [-21.224694, -75.909474000000003], [-20.010375, -75.674346], [-18.913543000000001, -75.439217999999997], [-17.522981999999999, -75.125698], [-16.641589, -74.792540000000002], [-15.701491000000001, -74.498604], [-15.40771, -74.106741999999997], [-16.465319999999998, -73.871613999999994], [-16.112784000000001, -73.460114000000004], [-15.446854999999999, -73.146541999999997], [-14.408804999999999, -72.950585000000004], [-13.311973, -72.715457000000001], [-12.293507999999999, -72.401936000000006], [-11.510066999999999, -72.010074000000003], [-11.020433000000001, -71.539766999999998], [-10.295774, -71.265416000000002], [-9.1010150000000003, -71.324224000000001], [-8.6113809999999997, -71.657330000000002], [-7.4166220000000003, -71.696500999999998], [-7.3774509999999998, -71.324224000000001], [-6.8682319999999999, -70.932310000000001], [-5.790985, -71.030288999999996], [-5.5363749999999996, -71.402617000000006], [-4.3416670000000002, -71.461372999999995], [-3.0489809999999999, -71.285053000000005], [-1.7954920000000001, -71.167438000000004], [-0.65948899999999999, -71.226246000000003], [-0.22863700000000001, -71.637744999999995], [0.86819500000000005, -71.304638999999995], [1.8866860000000001, -71.128266999999994], [3.0226380000000002, -70.991118], [4.1390549999999999, -70.853916999999996], [5.157546, -70.618789000000007], [6.2739120000000002, -70.462055000000007], [7.1357200000000001, -70.246511999999996], [7.7428660000000002, -69.893769000000006], [8.4871099999999995, -70.148533999999998], [9.5251350000000006, -70.011332999999993], [10.249845000000001, -70.481639999999999], [10.817821, -70.834332000000003], [11.953823999999999, -70.638374999999996], [12.404287, -70.246511999999996], [13.422777999999999, -69.972161999999997], [14.734997999999999, -70.030918], [15.126757, -70.403246999999993], [15.949342, -70.030918], [17.026589000000001, -69.913353999999998], [18.201711, -69.874183000000002], [19.259373, -69.893769000000006], [20.375738999999999, -70.011332999999993], [21.452985000000002, -70.070139999999995], [21.923034000000001, -70.403246999999993], [22.569403000000001, -70.697181999999998], [23.666184000000001, -70.520810999999995], [24.841356999999999, -70.481639999999999], [25.977309000000002, -70.481639999999999], [27.093726, -70.462055000000007], [28.092580000000002, -70.324854000000002], [29.150241999999999, -70.20729], [30.031583000000001, -69.932940000000002], [30.971733, -69.756619999999998], [31.990172000000001, -69.658641000000003], [32.754052999999999, -69.384291000000005], [33.302442999999997, -68.835642000000007], [33.870418999999998, -68.502588000000003], [34.908495000000002, -68.659271000000004], [35.300201999999999, -69.012013999999994], [36.162010000000002, -69.247141999999997], [37.200035, -69.168747999999994], [37.905107999999998, -69.521439999999998], [38.649403999999997, -69.776205000000004], [39.667893999999997, -69.541077000000001], [40.020431000000002, -69.109941000000006], [40.921357999999998, -68.933621000000002], [41.959434000000002, -68.600514000000004], [42.938701999999999, -68.463312999999999], [44.113875999999998, -68.267408000000003], [44.897291000000003, -68.051866000000004], [45.719928000000003, -67.816738000000001], [46.503343000000001, -67.601196000000002], [47.443440000000002, -67.718759000000006], [48.344419000000002, -67.366067999999999], [48.990735999999998, -67.091718], [49.930885000000004, -67.111303000000007], [50.753470999999998, -66.876175000000003], [50.949325000000002, -66.523483999999996], [51.791547000000001, -66.249133], [52.614133000000002, -66.053175999999993], [53.613038000000003, -65.896389999999997], [54.533549999999998, -65.818049000000002], [55.414943000000001, -65.876805000000004], [56.355041, -65.974783000000002], [57.158093000000001, -66.249133], [57.255968000000003, -66.680217999999996], [58.137360999999999, -67.013323999999997], [58.744508000000003, -67.287674999999993], [59.939318, -67.405238999999995], [60.605221, -67.679589000000007], [61.427805999999997, -67.953886999999995], [62.387489000000002, -68.012694999999994], [63.190489999999997, -67.816738000000001], [64.052349000000007, -67.405238999999995], [64.992446999999999, -67.620728999999997], [65.971715000000003, -67.738344999999995], [66.911863999999994, -67.855908999999997], [67.891132999999996, -67.934302000000002], [68.890038000000004, -67.934302000000002], [69.712624000000005, -68.972791000000001], [69.673452999999995, -69.227556000000007], [69.555941000000004, -69.678225999999995], [68.596258000000006, -69.932940000000002], [67.812740000000005, -70.305267999999998], [67.949888999999999, -70.697181999999998], [69.066306999999995, -70.677544999999995], [68.929157000000004, -71.069458999999995], [68.419989000000001, -71.441788000000003], [67.949888999999999, -71.853286999999995], [68.713769999999997, -72.166808000000003], [69.869307000000006, -72.264786999999998], [71.024895000000001, -72.088414999999998], [71.573284999999998, -71.696500999999998], [71.906288000000004, -71.324224000000001], [72.454627000000002, -71.010703000000007], [73.081410000000005, -70.716768000000002], [73.336020000000005, -70.364024000000001], [73.864877000000007, -69.874183000000002], [74.491557, -69.776205000000004], [75.627560000000003, -69.737033999999994], [76.626464999999996, -69.619418999999994], [77.644903999999997, -69.462683999999996], [78.134539000000004, -69.070769999999996], [78.428370999999999, -68.698441000000003], [79.113859000000005, -68.326216000000002], [80.093126999999996, -68.071503000000007], [80.93535, -67.875546], [81.483791999999994, -67.542388000000003], [82.051766999999998, -67.366067999999999], [82.776426000000001, -67.209282000000002], [83.775330999999994, -67.307259999999999], [84.676205999999993, -67.209282000000002], [85.655527000000006, -67.091718], [86.752358999999998, -67.150474000000003], [87.477017000000004, -66.876175000000003], [87.986288999999999, -66.209911000000005], [88.358411000000004, -66.484261000000004], [88.828407999999996, -66.954567999999995], [89.670630000000003, -67.150474000000003], [90.630364999999998, -67.228866999999994], [91.590100000000007, -67.111303000000007], [92.608538999999993, -67.189695999999998], [93.548636999999999, -67.209282000000002], [94.175420000000003, -67.111303000000007], [95.017590999999996, -67.170111000000006], [95.781471999999994, -67.385653000000005], [96.682399000000004, -67.248503999999997], [97.759646000000004, -67.248503999999997], [98.680210000000002, -67.111303000000007], [99.718181999999999, -67.248503999999997], [100.38418799999999, -66.915346], [100.893356, -66.582239999999999], [101.578896, -66.30789], [102.83241099999999, -65.563283999999996], [103.47867599999999, -65.700485], [104.24255700000001, -65.974783000000002], [104.90846000000001, -66.327527000000003], [106.181561, -66.934931000000006], [107.160881, -66.954567999999995], [108.08139300000001, -66.954567999999995], [109.15864000000001, -66.837003999999993], [110.23583499999999, -66.699804], [111.05847199999999, -66.425505000000001], [111.74396, -66.131569999999996], [112.860378, -66.092347000000004], [113.60467300000001, -65.876805000000004], [114.388088, -66.072761999999997], [114.897308, -66.386283000000006], [115.60238099999999, -66.699804], [116.699161, -66.660633000000004], [117.38470100000001, -66.915346], [118.57946, -67.170111000000006], [119.83292400000001, -67.268089000000003], [120.871, -67.189695999999998], [121.654415, -66.876175000000003], [122.320369, -66.562653999999995], [123.221296, -66.484261000000004], [124.122274, -66.621461999999994], [125.160247, -66.719389000000007], [126.100396, -66.562653999999995], [127.00142700000001, -66.562653999999995], [127.882768, -66.660633000000004], [128.80328, -66.758611000000002], [129.70425900000001, -66.582239999999999], [130.781454, -66.425505000000001], [131.79994500000001, -66.386283000000006], [132.93589600000001, -66.386283000000006], [133.85646, -66.288303999999997], [134.75738699999999, -66.209963000000002], [135.03158199999999, -65.720070000000007], [135.070753, -65.308571000000001], [135.697485, -65.582869000000002], [135.873805, -66.033591000000001], [136.206705, -66.445089999999993], [136.61804900000001, -66.778197000000006], [137.46027100000001, -66.954567999999995], [138.59622300000001, -66.895760999999993], [139.90844200000001, -66.876175000000003], [140.80942099999999, -66.817367000000004], [142.121692, -66.817367000000004], [143.06184200000001, -66.797781999999998], [144.37406100000001, -66.837003999999993], [145.49042700000001, -66.915346], [146.19555199999999, -67.228866999999994], [145.99969899999999, -67.601196000000002], [146.64606699999999, -67.895131000000006], [147.723263, -68.130258999999995], [148.839629, -68.385024000000001], [150.13231400000001, -68.561291999999995], [151.48370499999999, -68.718130000000002], [152.50224700000001, -68.874813000000003], [153.63819899999999, -68.894502000000003], [154.28456700000001, -68.561291999999995], [155.16585699999999, -68.835642000000007], [155.92979, -69.149214999999998], [156.81113199999999, -69.384291000000005], [158.02552800000001, -69.482269000000002], [159.18101300000001, -69.599833000000004], [159.67069900000001, -69.991747000000004], [160.80664999999999, -70.226875000000007], [161.57047900000001, -70.579617999999996], [162.68689699999999, -70.736352999999994], [163.842434, -70.716768000000002], [164.919681, -70.775524000000004], [166.11444, -70.755938], [167.30909500000001, -70.834332000000003], [168.42561599999999, -70.971480999999997], [169.46358900000001, -71.206659999999999], [170.501665, -71.402617000000006], [171.20679000000001, -71.696500999999998], [171.08922699999999, -72.088414999999998], [170.56042199999999, -72.441158999999999], [170.10995800000001, -72.891829000000001], [169.75737000000001, -73.244519999999994], [169.28732099999999, -73.656019999999998], [167.975101, -73.812805999999995], [167.38748899999999, -74.165497999999999], [166.09480300000001, -74.381039999999999], [165.64439100000001, -74.772953999999999], [164.95885100000001, -75.145283000000006], [164.234193, -75.458804000000001], [163.82279700000001, -75.870303000000007], [163.56823900000001, -76.242580000000004], [163.47026, -76.693302000000003], [163.48989700000001, -77.065579], [164.057873, -77.457442], [164.27336299999999, -77.829769999999996], [164.74346399999999, -78.182513999999998], [166.60412600000001, -78.319610999999995], [166.99578099999999, -78.750748000000002], [165.19387599999999, -78.907482999999999], [163.66621699999999, -79.123024999999998], [161.76638500000001, -79.162248000000005], [160.924162, -79.730481999999995], [160.747894, -80.200737000000004], [160.31696400000001, -80.573065999999997], [159.78821099999999, -80.945395000000005], [161.12001599999999, -81.278501000000006], [161.62928700000001, -81.690000999999995], [162.49099200000001, -82.062278000000006], [163.70533599999999, -82.395435000000006], [165.09594899999999, -82.708956000000001], [166.60412600000001, -83.022476999999995], [168.89566500000001, -83.335998000000004], [169.40478200000001, -83.825890999999999], [172.28393399999999, -84.041432999999998], [172.47704899999999, -84.117913999999999], [173.22408300000001, -84.413709999999995], [175.98567199999999, -84.158996999999999], [178.27721199999999, -84.472517999999994], [180, -84.713380000000001], [-179.942499, -84.721442999999994], [-179.05867699999999, -84.139411999999993], [-177.25677200000001, -84.452933000000002], [-177.140807, -84.417940999999999], [-176.08467300000001, -84.099259000000004], [-175.94723500000001, -84.110449000000003], [-175.829882, -84.117913999999999], [-174.38250300000001, -84.534323000000001], [-173.116559, -84.117913999999999], [-172.889106, -84.061019000000002], [-169.951223, -83.884647000000001], [-168.999989, -84.117913999999999], [-168.53019900000001, -84.237390000000005], [-167.022099, -84.570497000000003], [-164.18214399999999, -84.825209999999998], [-161.92977500000001, -85.138731000000007], [-158.07138, -85.373909999999995], [-155.19225299999999, -85.099559999999997], [-150.94209900000001, -85.295517000000004], [-148.533073, -85.609037999999998], [-145.88891799999999, -85.315101999999996], [-143.10771800000001, -85.040751999999998], [-142.892279, -84.570497000000003], [-146.82906800000001, -84.531273999999996], [-150.060732, -84.296145999999993], [-150.902928, -83.904231999999993], [-153.58620099999999, -83.688689999999994], [-153.409907, -83.238020000000006], [-153.03775899999999, -82.826520000000002], [-152.665637, -82.454192000000006], [-152.86151699999999, -82.042692000000002], [-154.52629899999999, -81.768394000000001], [-155.29017999999999, -81.415649999999999], [-156.83744999999999, -81.102129000000005], [-154.40878699999999, -81.160937000000004], [-152.09766200000001, -81.004150999999993], [-150.648293, -81.337309000000005], [-148.86599799999999, -81.043373000000003], [-147.22075000000001, -80.671045000000007], [-146.41774899999999, -80.337937999999994], [-146.770286, -79.926439000000002], [-148.06294700000001, -79.652089000000004], [-149.531901, -79.358204999999998], [-151.588416, -79.299396999999999], [-153.390322, -79.162248000000005], [-155.329376, -79.064268999999996], [-155.97566800000001, -78.691940000000002], [-157.26830200000001, -78.378418999999994], [-158.05176800000001, -78.025676000000004], [-158.36513400000001, -76.889206999999999], [-157.875474, -76.987238000000005], [-156.97457299999999, -77.300758999999999], [-155.329376, -77.202727999999993], [-153.74283199999999, -77.065579], [-152.92024699999999, -77.496663999999996], [-151.33377999999999, -77.398736999999997], [-150.00194999999999, -77.183143000000001], [-148.74848600000001, -76.908844999999999], [-147.612483, -76.575738000000001], [-146.104409, -76.477760000000004], [-146.143528, -76.105430999999996], [-146.49609100000001, -75.733153999999999], [-146.20231000000001, -75.380410999999995], [-144.90962400000001, -75.204038999999995], [-144.32203699999999, -75.537197000000006], [-142.794353, -75.341239999999999], [-141.63876400000001, -75.086474999999993], [-140.20900700000001, -75.066890000000001], [-138.85758999999999, -74.968911000000006], [-137.50620000000001, -74.733783000000003], [-136.428901, -74.518241000000003], [-135.214583, -74.302699000000004], [-134.431194, -74.361455000000007], [-133.745654, -74.439847999999998], [-132.25716800000001, -74.302699000000004], [-130.92531099999999, -74.479018999999994], [-129.554284, -74.459433000000004], [-128.24203800000001, -74.322283999999996], [-126.89062199999999, -74.420263000000006], [-125.40208199999999, -74.518241000000003], [-124.01149599999999, -74.479018999999994], [-122.562152, -74.498604], [-121.07361299999999, -74.518241000000003], [-119.70256000000001, -74.479018999999994], [-118.684145, -74.185083000000006], [-117.469801, -74.028347999999994], [-116.216312, -74.243891000000005], [-115.021552, -74.067519000000004], [-113.94433100000001, -73.714827999999997], [-113.297988, -74.028347999999994], [-112.945452, -74.381039999999999], [-112.299083, -74.714197999999996], [-111.261059, -74.420263000000006], [-110.06632500000001, -74.792540000000002], [-108.71490900000001, -74.910103000000007], [-107.55934600000001, -75.184454000000002], [-106.149148, -75.125698], [-104.876074, -74.949325999999999], [-103.367949, -74.988496999999995], [-102.016507, -75.125698], [-100.64553100000001, -75.302018000000004], [-100.11669999999999, -74.870932999999994], [-100.763043, -74.537825999999995], [-101.252703, -74.185083000000006], [-102.545337, -74.106741999999997], [-103.11331300000001, -73.734413000000004], [-103.32875199999999, -73.362083999999996], [-103.68128900000001, -72.617530000000002], [-102.917485, -72.754678999999996], [-101.60523999999999, -72.813435999999996], [-100.312528, -72.754678999999996], [-99.137379999999993, -72.911413999999994], [-98.118888999999996, -73.205349999999996], [-97.688036999999994, -73.558041000000003], [-96.336595000000003, -73.616849000000002], [-95.043960999999996, -73.479699999999994], [-93.672906999999995, -73.283743000000001], [-92.439003, -73.166179], [-91.420563999999999, -73.401307000000003], [-90.088733000000005, -73.322913999999997], [-89.226951, -72.558722000000003], [-88.423951000000002, -73.009393000000003], [-87.268337000000002, -73.185764000000006], [-86.014821999999995, -73.087785999999994], [-85.192235999999994, -73.479699999999994], [-83.879991000000004, -73.518871000000004], [-82.665645999999995, -73.636433999999994], [-81.470912999999996, -73.851977000000005], [-80.687447000000006, -73.479699999999994], [-80.295790999999994, -73.126956000000007], [-79.296886000000001, -73.518871000000004], [-77.925858000000005, -73.420891999999995], [-76.907366999999994, -73.636433999999994], [-76.221879000000001, -73.969541000000007], [-74.890049000000005, -73.871613999999994], [-73.852024, -73.656019999999998], [-72.833533000000003, -73.401307000000003], [-71.619214999999997, -73.264156999999997], [-70.209041999999997, -73.146541999999997], [-68.935916000000006, -73.009393000000003], [-67.956621999999996, -72.793850000000006], [-67.369061000000002, -72.480328999999998], [-67.134035999999995, -72.049244000000002], [-67.251548, -71.637744999999995], [-67.564940000000007, -71.245830999999995], [-67.917477000000005, -70.853916999999996], [-68.230842999999993, -70.462055000000007], [-68.485451999999995, -70.109311000000005], [-68.544208999999995, -69.717397000000005], [-68.446281999999997, -69.325535000000002], [-67.976232999999993, -68.953205999999994], [-67.584500000000006, -68.541707000000002], [-67.427842999999996, -68.149844000000002], [-67.623670000000004, -67.718759000000006], [-67.741183000000007, -67.326845000000006], [-67.251548, -66.876175000000003], [-66.703183999999993, -66.582239999999999], [-66.056815, -66.209963000000002], [-65.371326999999994, -65.896389999999997], [-64.568275999999997, -65.602506000000005], [-64.176541999999998, -65.171423000000004], [-63.628152, -64.897073000000006], [-63.001393999999998, -64.642308], [-62.041685999999999, -64.583551999999997], [-61.414928000000003, -64.270031000000003], [-60.709854999999997, -64.074073999999996], [-59.887269000000003, -63.956510000000002], [-59.162585, -63.701745000000003], [-58.594557000000002, -63.388224000000001], [-57.811143000000001, -63.270659999999999], [-57.223582, -63.525424999999998], [-57.595730000000003, -63.858531999999997], [-58.614142999999999, -64.152467000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0434\u0430", "fr": "Antarctique", "en": "Antarctica", "nl": "Antarctica", "pt": "Ant\u00e1rtica", "no": "Antarktika", "de": "Antarktika", "it": "Antartide", "sv": "Antarktis", "pl": "Antarktyda", "fi": "Etel\u00e4manner", "zh": "\u5357\u6781\u6d32", "ja": "\u5357\u6975\u5927\u9678", "es": "Ant\u00e1rtida"}, "label_fr": "Antarctique", "name": "Antarctica", "dbpedia_uri": "http://dbpedia.org/resource/Antarctica"}, "id": "ATA"}, {"geometry": {"type": "Polygon", "coordinates": [[[68.935000000000002, -48.625], [69.579999999999998, -48.939999999999998], [70.525000000000006, -49.064999999999998], [70.560000000000002, -49.255000000000003], [70.280000000000001, -49.710000000000001], [68.745000000000005, -49.774999999999999], [68.719999999999999, -49.2425], [68.867500000000007, -48.829999999999998], [68.935000000000002, -48.625]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0435 \u042e\u0436\u043d\u044b\u0435 \u0438 \u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438", "fr": "Terres australes et antarctiques fran\u00e7aises", "en": "French Southern and Antarctic Lands", "nl": "Franse Zuidelijke en Antarctische Gebieden", "pt": "Terras Austrais e Ant\u00e1rticas Francesas", "no": "De franske s\u00f8rterritorier", "de": "Franz\u00f6sische S\u00fcd- und Antarktisgebiete", "it": "Terre australi e antartiche francesi", "sv": "Franska sydterritorierna", "pl": "Francuskie Terytoria Po\u0142udniowe i Antarktyczne", "fi": "Ranskan etel\u00e4iset ja antarktiset alueet", "zh": "\u6cd5\u5c5e\u5357\u90e8\u9886\u5730", "ja": "\u30d5\u30e9\u30f3\u30b9\u9818\u5357\u65b9\u30fb\u5357\u6975\u5730\u57df", "es": "Tierras Australes y Ant\u00e1rticas Francesas"}, "label_fr": "Terres australes et antarctiques fran\u00e7aises", "name": "French Southern and Antarctic Lands", "dbpedia_uri": "http://dbpedia.org/resource/French_Southern_and_Antarctic_Lands"}, "id": "ATF"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[145.39797799999999, -40.792549000000001], [146.36412100000001, -41.137695000000001], [146.90858399999999, -41.000546], [147.68925899999999, -40.808258000000002], [148.28906799999999, -40.875438000000003], [148.35986500000001, -42.062444999999997], [148.017301, -42.407024], [147.914052, -43.211522000000002], [147.56456399999999, -42.937688999999999], [146.87034299999999, -43.634596999999999], [146.66332700000001, -43.580854000000002], [146.04837800000001, -43.549745000000001], [145.43192999999999, -42.693776], [145.29508999999999, -42.033610000000003], [144.71807100000001, -41.162551999999998], [144.74375499999999, -40.703975], [145.39797799999999, -40.792549000000001]]], [[[143.56181100000001, -13.763655999999999], [143.922099, -14.548311], [144.563714, -14.171176000000001], [144.89490799999999, -14.594457999999999], [145.37472399999999, -14.984976], [145.27199100000001, -15.428205], [145.48526000000001, -16.285672000000002], [145.637033, -16.784918000000001], [145.888904, -16.906925999999999], [146.16030900000001, -17.761655000000001], [146.06367399999999, -18.280073000000002], [146.38747799999999, -18.958273999999999], [147.471082, -19.480723000000001], [148.17760200000001, -19.955939000000001], [148.84841399999999, -20.391210000000001], [148.717465, -20.633469000000002], [149.28942000000001, -21.260511000000001], [149.678337, -22.342511999999999], [150.077382, -22.122783999999999], [150.48293899999999, -22.556142000000001], [150.72726499999999, -22.402405000000002], [150.89955399999999, -23.462236999999998], [151.60917499999999, -24.076256000000001], [152.07354000000001, -24.457886999999999], [152.855197, -25.267500999999999], [153.13616200000001, -26.071173000000002], [153.16194899999999, -26.641318999999999], [153.09290899999999, -27.260300000000001], [153.569469, -28.110067000000001], [153.51210800000001, -28.995076999999998], [153.33909499999999, -29.458202], [153.06924100000001, -30.350239999999999], [153.08960200000001, -30.923642000000001], [152.89157800000001, -31.640446000000001], [152.45000200000001, -32.550002999999997], [151.70911699999999, -33.041342], [151.34397200000001, -33.816023000000001], [151.01055500000001, -34.310360000000003], [150.71413899999999, -35.173459999999999], [150.32821999999999, -35.671878999999997], [150.07521199999999, -36.420206], [149.946124, -37.109051999999998], [149.99728400000001, -37.425260999999999], [149.42388199999999, -37.772680999999999], [148.30462199999999, -37.809061], [147.381733, -38.219217], [146.922123, -38.606532000000001], [146.31792200000001, -39.035756999999997], [145.48965200000001, -38.593767999999997], [144.87697600000001, -38.417448], [145.03221199999999, -37.896188000000002], [144.485682, -38.085324], [143.60997399999999, -38.809465000000003], [142.74542700000001, -38.538268000000002], [142.17832999999999, -38.380034000000002], [141.606582, -38.308514000000002], [140.63857899999999, -38.019333000000003], [139.99215799999999, -37.402935999999997], [139.806588, -36.643602999999999], [139.57414800000001, -36.138362000000001], [139.082808, -35.732754], [138.12074799999999, -35.612296000000001], [138.44946200000001, -35.127260999999997], [138.20756399999999, -34.384723000000001], [137.71916999999999, -35.076824999999999], [136.82940600000001, -35.260534999999997], [137.35237100000001, -34.707338999999997], [137.50388599999999, -34.130268000000001], [137.89011600000001, -33.640478999999999], [137.810328, -32.900007000000002], [136.996837, -33.752771000000003], [136.37206900000001, -34.094766], [135.98904300000001, -34.890118000000001], [135.208213, -34.478670000000001], [135.23921799999999, -33.947952999999998], [134.613417, -33.222777999999998], [134.085904, -32.848072000000002], [134.27390299999999, -32.617234000000003], [132.99077700000001, -32.011223999999999], [132.28808100000001, -31.982647], [131.32633100000001, -31.495802999999999], [129.53579400000001, -31.590423000000001], [128.240938, -31.948488999999999], [127.102867, -32.282266999999997], [126.148714, -32.215966000000002], [125.088623, -32.728751000000003], [124.221648, -32.959487000000003], [124.028947, -33.483846999999997], [123.659667, -33.890179000000003], [122.811036, -33.914467000000002], [122.183064, -34.003402000000001], [121.29919099999999, -33.821035999999999], [120.580268, -33.930177], [119.89369499999999, -33.976064999999998], [119.29889900000001, -34.509366], [119.007341, -34.464148999999999], [118.505718, -34.746819000000002], [118.02497200000001, -35.064732999999997], [117.295507, -35.025458999999998], [116.62510899999999, -35.025097000000002], [115.564347, -34.386428000000002], [115.026809, -34.196517], [115.048616, -33.623424999999997], [115.545123, -33.487257999999997], [115.714674, -33.259571999999999], [115.679379, -32.900368999999998], [115.80164499999999, -32.205061999999998], [115.689611, -31.612437], [115.160909, -30.601593999999999], [114.99704300000001, -30.030725], [115.040038, -29.461095], [114.641974, -28.810231000000002], [114.61649800000001, -28.516399], [114.173579, -28.118077], [114.048884, -27.334765000000001], [113.477498, -26.543133999999998], [113.338953, -26.116544999999999], [113.778358, -26.549025], [113.440962, -25.621278], [113.93690100000001, -25.911235000000001], [114.23285199999999, -26.298445999999998], [114.216161, -25.786280999999999], [113.721255, -24.998939], [113.625344, -24.683971], [113.393523, -24.384764000000001], [113.502044, -23.806349999999998], [113.706993, -23.560214999999999], [113.843418, -23.059987], [113.736552, -22.475474999999999], [114.149756, -21.755880999999999], [114.225307, -22.517488], [114.647762, -21.829519999999999], [115.460167, -21.495173000000001], [115.947373, -21.068688000000002], [116.71161499999999, -20.701682000000002], [117.16631599999999, -20.623598999999999], [117.441545, -20.746898999999999], [118.22955899999999, -20.374207999999999], [118.836085, -20.263311000000002], [118.987807, -20.044203], [119.252494, -19.952942], [119.80522499999999, -19.976506000000001], [120.85621999999999, -19.683707999999999], [121.399856, -19.239756], [121.65513799999999, -18.705317999999998], [122.241665, -18.197648999999998], [122.286624, -17.798603], [122.312772, -17.254967000000001], [123.012574, -16.405200000000001], [123.433789, -17.268557999999999], [123.859345, -17.069035], [123.503242, -16.596506000000002], [123.81707299999999, -16.111315999999999], [124.258287, -16.327943999999999], [124.37972600000001, -15.56706], [124.926153, -15.075100000000001], [125.167275, -14.680396], [125.670087, -14.510070000000001], [125.685796, -14.230656], [126.12514899999999, -14.347341], [126.14282300000001, -14.095986999999999], [126.582589, -13.952790999999999], [127.065867, -13.817968], [127.804633, -14.276906], [128.35969, -14.86917], [128.98554300000001, -14.875991000000001], [129.62147300000001, -14.969784000000001], [129.40960000000001, -14.420669999999999], [129.88864100000001, -13.618703], [130.33946599999999, -13.357376], [130.18350599999999, -13.107519999999999], [130.617795, -12.536391999999999], [131.22349500000001, -12.183649000000001], [131.73509100000001, -12.302453], [132.575298, -12.114041], [132.55721199999999, -11.603012], [131.82469800000001, -11.273782000000001], [132.357224, -11.128519000000001], [133.01956100000001, -11.376410999999999], [133.55084600000001, -11.786515], [134.393068, -12.042365], [134.67863199999999, -11.941183000000001], [135.29849100000001, -12.248606000000001], [135.88269299999999, -11.962267000000001], [136.25838100000001, -12.049341999999999], [136.49247500000001, -11.857208999999999], [136.95161999999999, -12.351959000000001], [136.685125, -12.887223000000001], [136.305407, -13.291230000000001], [135.961758, -13.324509000000001], [136.077617, -13.724278], [135.78383600000001, -14.223989], [135.428664, -14.715432], [135.50018399999999, -14.997741], [136.295175, -15.550265], [137.06536, -15.870761999999999], [137.58047099999999, -16.215081999999999], [138.30321699999999, -16.807604000000001], [138.58516399999999, -16.806622000000001], [139.108543, -17.062678999999999], [139.26057499999999, -17.371600999999998], [140.21524500000001, -17.710805000000001], [140.875463, -17.369069], [141.07111, -16.832046999999999], [141.27409499999999, -16.388870000000001], [141.398222, -15.840532], [141.70218299999999, -15.044921], [141.56338, -14.561332999999999], [141.63552000000001, -14.270395000000001], [141.519869, -13.698078000000001], [141.65092000000001, -12.944687999999999], [141.842691, -12.741548], [141.68699000000001, -12.407614000000001], [141.928629, -11.877466], [142.11848800000001, -11.328042], [142.14370600000001, -11.042737000000001], [142.51526000000001, -10.668186], [142.79731000000001, -11.157355000000001], [142.86676299999999, -11.784706999999999], [143.11594700000001, -11.90563], [143.15863200000001, -12.325656], [143.52212399999999, -12.834358], [143.59715800000001, -13.400422000000001], [143.56181100000001, -13.763655999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f", "fr": "Australie", "en": "Australia", "nl": "Australi\u00eb (land)", "pt": "Austr\u00e1lia", "no": "Australia", "de": "Australien", "it": "Australia", "sv": "Australien", "pl": "Australia", "fi": "Australia", "zh": "\u6fb3\u5927\u5229\u4e9a", "ja": "\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2", "es": "Australia"}, "label_fr": "Australie", "name": "Australia", "dbpedia_uri": "http://dbpedia.org/resource/Australia"}, "id": "AUS"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.979666999999999, 48.123497], [16.903753999999999, 47.714866000000001], [16.340584, 47.712902], [16.534268000000001, 47.496170999999997], [16.202297999999999, 46.852386000000003], [16.011664, 46.683610999999999], [15.137092000000001, 46.658703000000003], [14.632472, 46.431817000000002], [13.806475000000001, 46.509306000000002], [12.376485000000001, 46.767558999999999], [12.153088, 47.115392999999997], [11.164828, 46.941578999999997], [11.048556, 46.751359000000001], [10.442701, 46.893546000000001], [9.9324480000000008, 46.920727999999997], [9.4799699999999998, 47.102809999999998], [9.6329320000000003, 47.347600999999997], [9.5942260000000008, 47.525058000000001], [9.8960679999999996, 47.580196999999998], [10.402084, 47.302487999999997], [10.544504, 47.566398999999997], [11.426413999999999, 47.523766000000002], [12.141356999999999, 47.703082999999999], [12.620760000000001, 47.672387999999998], [12.932627, 47.467646000000002], [13.025850999999999, 47.637583999999997], [12.884103, 48.289146000000002], [13.243357, 48.416114999999998], [13.595946, 48.877172000000002], [14.338898, 48.555304999999997], [14.901446999999999, 48.964402], [15.253416, 49.039073999999999], [16.029647000000001, 48.733899000000001], [16.499282999999998, 48.785808000000003], [16.960287999999998, 48.596981999999997], [16.879982999999999, 48.470013000000002], [16.979666999999999, 48.123497]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0432\u0441\u0442\u0440\u0438\u044f", "fr": "Autriche", "en": "Austria", "nl": "Oostenrijk", "pt": "\u00c1ustria", "no": "\u00d8sterrike", "de": "\u00d6sterreich", "it": "Austria", "sv": "\u00d6sterrike", "pl": "Austria", "fi": "It\u00e4valta", "zh": "\u5965\u5730\u5229", "ja": "\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2", "es": "Austria"}, "label_fr": "Autriche", "name": "Austria", "dbpedia_uri": "http://dbpedia.org/resource/Austria"}, "id": "AUT"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[45.001987, 39.740003999999999], [45.298144999999998, 39.471750999999998], [45.739978000000001, 39.473998999999999], [45.735379000000002, 39.319718999999999], [46.143622999999998, 38.741200999999997], [45.457721999999997, 38.874139], [44.952688000000002, 39.335765000000002], [44.793990000000001, 39.713003], [45.001987, 39.740003999999999]]], [[[47.373314999999998, 41.219732], [47.815666, 41.151415999999998], [47.987282999999998, 41.405819000000001], [48.584353, 41.808869999999999], [49.110264000000001, 41.282286999999997], [49.618915000000001, 40.572924], [50.084829999999997, 40.526156999999998], [50.392820999999998, 40.256560999999998], [49.569201999999997, 40.176101000000003], [49.395259000000003, 39.399481999999999], [49.223227999999999, 39.049219000000001], [48.856532000000001, 38.815486], [48.883248999999999, 38.320245], [48.634374999999999, 38.270378000000001], [48.010744000000003, 38.794015000000002], [48.355528999999997, 39.288764999999998], [48.060094999999997, 39.582234999999997], [47.685079000000002, 39.508364], [46.505719999999997, 38.770605000000003], [46.483499000000002, 39.464154999999998], [46.034534000000001, 39.628020999999997], [45.610011999999998, 39.899994], [45.891907000000003, 40.218476000000003], [45.359175, 40.561503999999999], [45.560350999999997, 40.812289999999997], [45.179496, 40.985354000000001], [44.972479999999997, 41.248128999999999], [45.217426000000003, 41.411451999999997], [45.962600999999999, 41.123873000000003], [46.501637000000002, 41.064444999999999], [46.637908000000003, 41.181673000000004], [46.145432, 41.722802000000001], [46.404950999999997, 41.860675000000001], [46.686070999999998, 41.827137], [47.373314999999998, 41.219732]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "fr": "Azerba\u00efdjan", "en": "Azerbaijan", "nl": "Azerbeidzjan", "pt": "Azerbaij\u00e3o", "no": "Aserbajdsjan", "de": "Aserbaidschan", "it": "Azerbaigian", "sv": "Azerbajdzjan", "pl": "Azerbejd\u017can", "fi": "Azerbaid\u017ean", "zh": "\u963f\u585e\u62dc\u7586", "ja": "\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3", "es": "Azerbaiy\u00e1n"}, "label_fr": "Azerba\u00efdjan", "name": "Azerbaijan", "dbpedia_uri": "http://dbpedia.org/resource/Azerbaijan"}, "id": "AZE"}, {"geometry": {"type": "Polygon", "coordinates": [[[29.339998000000001, -4.4999830000000003], [29.276384, -3.2939069999999999], [29.024926000000001, -2.8392580000000001], [29.632176000000001, -2.9178579999999998], [29.938358999999998, -2.348487], [30.469695999999999, -2.4138579999999998], [30.527677000000001, -2.8076319999999999], [30.743013000000001, -3.0342850000000001], [30.752262999999999, -3.3593299999999999], [30.505559999999999, -3.5685669999999998], [30.116333000000001, -4.0901379999999996], [29.753512000000001, -4.4523890000000002], [29.339998000000001, -4.4999830000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0440\u0443\u043d\u0434\u0438", "fr": "Burundi", "en": "Burundi", "nl": "Burundi", "pt": "Burundi", "no": "Burundi", "de": "Burundi", "it": "Burundi", "sv": "Burundi", "pl": "Burundi", "fi": "Burundi", "zh": "\u84b2\u9686\u5730", "ja": "\u30d6\u30eb\u30f3\u30b8", "es": "Burundi"}, "label_fr": "Burundi", "name": "Burundi", "dbpedia_uri": "http://dbpedia.org/resource/Burundi"}, "id": "BDI"}, {"geometry": {"type": "Polygon", "coordinates": [[[3.3149709999999999, 51.345781000000002], [4.0470709999999999, 51.267259000000003], [4.9739909999999998, 51.475023999999998], [5.6069760000000004, 51.037298], [6.1566580000000002, 50.803721000000003], [6.0430729999999997, 50.128051999999997], [5.7824169999999997, 50.090328], [5.6740519999999997, 49.529483999999997], [4.7992220000000003, 49.985373000000003], [4.2860230000000001, 49.907496999999999], [3.588184, 50.378991999999997], [3.1232519999999999, 50.780363000000001], [2.6584219999999998, 50.796847999999997], [2.5135730000000001, 51.148505999999998], [3.3149709999999999, 51.345781000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u044c\u0433\u0438\u044f", "fr": "Belgique", "en": "Belgium", "nl": "Belgi\u00eb", "pt": "B\u00e9lgica", "no": "Belgia", "de": "Belgien", "it": "Belgio", "sv": "Belgien", "pl": "Belgia", "fi": "Belgia", "zh": "\u6bd4\u5229\u65f6", "ja": "\u30d9\u30eb\u30ae\u30fc", "es": "B\u00e9lgica"}, "label_fr": "Belgique", "name": "Belgium", "dbpedia_uri": "http://dbpedia.org/resource/Belgium"}, "id": "BEL"}, {"geometry": {"type": "Polygon", "coordinates": [[[2.6917019999999998, 6.2588169999999996], [1.8652409999999999, 6.1421580000000002], [1.618951, 6.8320379999999998], [1.6644779999999999, 9.1285900000000009], [1.4630430000000001, 9.3346239999999998], [1.4250609999999999, 9.8253950000000003], [1.0777950000000001, 10.175606999999999], [0.77233600000000002, 10.470808], [0.899563, 10.997339], [1.2434700000000001, 11.110511000000001], [1.4471780000000001, 11.547719000000001], [1.935986, 11.64115], [2.154474, 11.940149999999999], [2.490164, 12.233052000000001], [2.848643, 12.235636], [3.6111800000000001, 11.660167], [3.5722160000000001, 11.327939000000001], [3.7971119999999998, 10.734745999999999], [3.6000700000000001, 10.332186], [3.705438, 10.06321], [3.2203520000000001, 9.444153], [2.9123079999999999, 9.1376080000000002], [2.7237930000000001, 8.5068450000000002], [2.749063, 7.8707339999999997], [2.6917019999999998, 6.2588169999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043d\u0438\u043d", "fr": "B\u00e9nin", "en": "Benin", "nl": "Benin", "pt": "Cultura do Benim", "no": "Benin", "de": "Benin", "it": "Benin", "sv": "Benin", "pl": "Benin", "fi": "Benin", "zh": "\u8d1d\u5b81", "ja": "\u30d9\u30ca\u30f3", "es": "Ben\u00edn"}, "label_fr": "B\u00e9nin", "name": "Benin", "dbpedia_uri": "http://dbpedia.org/resource/Benin"}, "id": "BEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-2.827496, 9.6424610000000008], [-3.5118990000000001, 9.9003259999999997], [-3.9804490000000001, 9.8623440000000002], [-4.330247, 9.6108349999999998], [-4.779884, 9.8219849999999997], [-4.9546530000000004, 10.152714], [-5.4043419999999998, 10.370737], [-5.4705649999999997, 10.951269999999999], [-5.1978429999999998, 11.375146000000001], [-5.220942, 11.713858999999999], [-4.4271659999999997, 12.542646], [-4.280405, 13.228444], [-4.0063909999999998, 13.472485000000001], [-3.5228030000000001, 13.337662], [-3.103707, 13.541266999999999], [-2.9676939999999998, 13.79815], [-2.1918250000000001, 14.246418], [-2.0010349999999999, 14.559008], [-1.0663629999999999, 14.973815], [-0.51585400000000003, 15.116158], [-0.26625700000000002, 14.924308999999999], [0.374892, 14.928908], [0.29564600000000002, 14.444235000000001], [0.42992799999999998, 13.988733], [0.99304599999999998, 13.335750000000001], [1.024103, 12.851826000000001], [2.177108, 12.625018000000001], [2.154474, 11.940149999999999], [1.935986, 11.64115], [1.4471780000000001, 11.547719000000001], [1.2434700000000001, 11.110511000000001], [0.899563, 10.997339], [0.023803000000000001, 11.018682], [-0.43870199999999998, 11.098341], [-0.76157600000000003, 10.93693], [-1.2033579999999999, 11.009819], [-2.9404089999999998, 10.96269], [-2.9638960000000001, 10.395334999999999], [-2.827496, 9.6424610000000008]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0440\u043a\u0438\u043d\u0430 \u0424\u0430\u0441\u043e", "fr": "Burkina Faso", "en": "Burkina Faso", "nl": "Burkina Faso", "pt": "Burkina Faso", "no": "Burkina Faso", "de": "Burkina Faso", "it": "Burkina Faso", "sv": "Burkina Faso", "pl": "Burkina Faso", "fi": "Burkina Faso", "zh": "\u5e03\u5409\u7d0d\u6cd5\u7d22", "ja": "\u30d6\u30eb\u30ad\u30ca\u30d5\u30a1\u30bd", "es": "Burkina Faso"}, "label_fr": "Burkina Faso", "name": "Burkina Faso", "dbpedia_uri": "http://dbpedia.org/resource/Burkina_Faso"}, "id": "BFA"}, {"geometry": {"type": "Polygon", "coordinates": [[[92.672720999999996, 22.041239000000001], [92.652257000000006, 21.324048000000001], [92.303234000000003, 21.475484999999999], [92.368554000000003, 20.670883], [92.082886000000002, 21.192195000000002], [92.025215000000003, 21.70157], [91.834890999999999, 22.182936000000002], [91.417086999999995, 22.765018999999999], [90.496005999999994, 22.805016999999999], [90.586956999999998, 22.392793999999999], [90.272970999999998, 21.836368], [89.847466999999995, 22.039145999999999], [89.70205, 21.857116000000001], [89.418863000000002, 21.966179], [89.031960999999995, 22.055707999999999], [88.876311999999999, 22.879145999999999], [88.529769999999999, 23.631142000000001], [88.699939999999998, 24.233715], [88.084422000000004, 24.501657000000002], [88.306372999999994, 24.866078999999999], [88.931554000000006, 25.238692], [88.209789000000001, 25.768066000000001], [88.563049000000007, 26.446525999999999], [89.355093999999994, 26.014406999999999], [89.832481000000001, 25.965081999999999], [89.920693, 25.269749999999998], [90.872210999999993, 25.132601000000001], [91.799595999999994, 25.147431999999998], [92.376202000000006, 24.976693000000001], [91.915092999999999, 24.130413999999998], [91.467730000000003, 24.072638999999999], [91.158963, 23.503526999999998], [91.706474999999998, 22.985264000000001], [91.869928000000002, 23.624345999999999], [92.146034999999998, 23.627499], [92.672720999999996, 22.041239000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448", "fr": "Bangladesh", "en": "Bangladesh", "nl": "Bangladesh", "pt": "Bangladesh", "no": "Bangladesh", "de": "Bangladesch", "it": "Bangladesh", "sv": "Bangladesh", "pl": "Bangladesz", "fi": "Bangladesh", "zh": "\u5b5f\u52a0\u62c9\u56fd", "ja": "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5", "es": "Banglad\u00e9s"}, "label_fr": "Bangladesh", "name": "Bangladesh", "dbpedia_uri": "http://dbpedia.org/resource/Bangladesh"}, "id": "BGD"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.657150000000001, 44.234923000000002], [22.944832000000002, 43.823785000000001], [23.332301999999999, 43.897010999999999], [24.100679, 43.741050999999999], [25.569272000000002, 43.688445000000002], [26.065159000000001, 43.943494000000001], [27.2424, 44.175986000000002], [27.970106999999999, 43.812468000000003], [28.558081000000001, 43.707462], [28.039095, 43.293171999999998], [27.673898000000001, 42.577891999999999], [27.99672, 42.007359000000001], [27.135739000000001, 42.141485000000003], [26.117042000000001, 41.826904999999996], [26.106138000000001, 41.328899], [25.197201, 41.234485999999997], [24.492645, 41.583896000000003], [23.692074000000002, 41.309080999999999], [22.952376999999998, 41.337994000000002], [22.881374000000001, 41.999296999999999], [22.380526, 42.320259999999998], [22.545012, 42.461362000000001], [22.436595000000001, 42.580320999999998], [22.604800999999998, 42.898519], [22.986018999999999, 43.211160999999997], [22.500157000000002, 43.642814000000001], [22.410446, 44.008063], [22.657150000000001, 44.234923000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044f", "fr": "Bulgarie", "en": "Bulgaria", "nl": "Bulgarije", "pt": "Bulg\u00e1ria", "no": "Bulgaria", "de": "Bulgarien", "it": "Bulgaria", "sv": "Bulgarien", "pl": "Bu\u0142garia", "fi": "Bulgaria", "zh": "\u4fdd\u52a0\u5229\u4e9a", "ja": "\u30d6\u30eb\u30ac\u30ea\u30a2", "es": "Bulgaria"}, "label_fr": "Bulgarie", "name": "Bulgaria", "dbpedia_uri": "http://dbpedia.org/resource/Bulgaria"}, "id": "BGR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-77.534660000000002, 23.75975], [-77.780000000000001, 23.710000000000001], [-78.034049999999993, 24.286149999999999], [-78.408479999999997, 24.57564], [-78.190870000000004, 25.2103], [-77.890000000000001, 25.170000000000002], [-77.540000000000006, 24.34], [-77.534660000000002, 23.75975]]], [[[-77.819999999999993, 26.579999999999998], [-78.909999999999997, 26.420000000000002], [-78.980000000000004, 26.789999999999999], [-78.510000000000005, 26.870000000000001], [-77.849999999999994, 26.84], [-77.819999999999993, 26.579999999999998]]], [[[-77, 26.59], [-77.172550000000001, 25.879180000000002], [-77.356409999999997, 26.007349999999999], [-77.340000000000003, 26.530000000000001], [-77.788020000000003, 26.925160000000002], [-77.790000000000006, 27.039999999999999], [-77, 26.59]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0430\u0433\u0430\u043c\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "Bahamas", "en": "The Bahamas", "nl": "Bahama's", "pt": "Bahamas", "no": "Bahamas", "de": "Bahamas", "it": "Bahamas", "sv": "Bahamas", "pl": "Bahamy", "fi": "Bahama", "zh": "\u5df4\u54c8\u9a6c", "ja": "\u30d0\u30cf\u30de", "es": "Bahamas"}, "label_fr": "Bahamas", "name": "The Bahamas", "dbpedia_uri": "http://dbpedia.org/resource/The_Bahamas"}, "id": "BHS"}, {"geometry": {"type": "Polygon", "coordinates": [[[19.005486000000001, 44.860233999999998], [19.368030000000001, 44.863], [19.117609999999999, 44.423070000000003], [19.59976, 44.038469999999997], [19.454000000000001, 43.568100000000001], [19.218520000000002, 43.52384], [19.031649999999999, 43.43253], [18.706479999999999, 43.200110000000002], [18.559999999999999, 42.649999999999999], [17.674921999999999, 43.028562999999998], [17.297373, 43.446340999999997], [16.916156000000001, 43.667721999999998], [16.456443, 44.041240000000002], [16.239660000000001, 44.351143], [15.750026, 44.818711999999998], [15.959367, 45.233777000000003], [16.318156999999999, 45.004126999999997], [16.534939000000001, 45.211607999999998], [17.002146, 45.233777000000003], [17.861782999999999, 45.067740000000001], [18.553214000000001, 45.081589999999998], [19.005486000000001, 44.860233999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u0441\u043d\u0438\u044f \u0438 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430", "fr": "Bosnie-Herz\u00e9govine", "en": "Bosnia and Herzegovina", "nl": "Bosni\u00eb en Herzegovina", "pt": "B\u00f3snia e Herzegovina", "no": "Bosnia-Hercegovina", "de": "Bosnien und Herzegowina", "it": "Bosnia-Erzegovina", "sv": "Bosnien och Hercegovina", "pl": "Bo\u015bnia i Hercegowina", "fi": "Bosnia ja Hertsegovina", "zh": "\u6ce2\u65af\u5c3c\u4e9a\u548c\u9ed1\u585e\u54e5\u7ef4\u90a3", "ja": "\u30dc\u30b9\u30cb\u30a2\u30fb\u30d8\u30eb\u30c4\u30a7\u30b4\u30d3\u30ca", "es": "Bosnia y Herzegovina"}, "label_fr": "Bosnie-Herz\u00e9govine", "name": "Bosnia and Herzegovina", "dbpedia_uri": "http://dbpedia.org/resource/Bosnia_and_Herzegovina"}, "id": "BIH"}, {"geometry": {"type": "Polygon", "coordinates": [[[23.484127999999998, 53.912497999999999], [24.450683999999999, 53.905701999999998], [25.536353999999999, 54.282423000000001], [25.768433000000002, 54.846963000000002], [26.588279, 55.167175999999998], [26.494330999999999, 55.615107000000002], [27.102460000000001, 55.783313999999997], [28.176708999999999, 56.169130000000003], [29.229513000000001, 55.918343999999998], [29.371572, 55.670090999999999], [29.896294000000001, 55.789462999999998], [30.873909000000001, 55.550975999999999], [30.971836, 55.081547999999998], [30.757534, 54.811771], [31.384471999999999, 54.157055999999997], [31.791423999999999, 53.974639000000003], [31.731273000000002, 53.794029000000002], [32.405599000000002, 53.618045000000002], [32.693643000000002, 53.351421000000002], [32.304518999999999, 53.132725999999998], [31.497644000000001, 53.167427000000004], [31.305201, 53.073996000000001], [31.540018, 52.742052000000001], [31.785997999999999, 52.101678], [30.927548999999999, 52.042352999999999], [30.619454000000001, 51.822806], [30.555116999999999, 51.319502999999997], [30.157364000000001, 51.416137999999997], [29.254937999999999, 51.368234000000001], [28.992834999999999, 51.602043999999999], [28.617612999999999, 51.427714000000002], [28.241614999999999, 51.572226999999998], [27.454066000000001, 51.592303000000001], [26.337959000000001, 51.832289000000003], [25.327788000000002, 51.910656000000003], [24.553106, 51.888461], [24.005078000000001, 51.617443999999999], [23.527070999999999, 51.578454000000001], [23.508002000000001, 52.023646999999997], [23.199494000000001, 52.486977000000003], [23.799199000000002, 52.691099000000001], [23.804935, 53.089731], [23.527536000000001, 53.470122000000003], [23.484127999999998, 53.912497999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u0438\u044f", "fr": "Bi\u00e9lorussie", "en": "Belarus", "nl": "Wit-Rusland", "pt": "Bielorr\u00fassia", "no": "Hviterussland", "de": "Wei\u00dfrussland", "it": "Bielorussia", "sv": "Vitryssland", "pl": "Bia\u0142oru\u015b", "fi": "Valko-Ven\u00e4j\u00e4", "zh": "\u767d\u4fc4\u7f57\u65af", "ja": "\u30d9\u30e9\u30eb\u30fc\u30b7", "es": "Bielorrusia"}, "label_fr": "Bi\u00e9lorussie", "name": "Belarus", "dbpedia_uri": "http://dbpedia.org/resource/Belarus"}, "id": "BLR"}, {"geometry": {"type": "Polygon", "coordinates": [[[-89.143079999999998, 17.808319000000001], [-89.150908999999999, 17.955468], [-89.029857000000007, 18.001511000000001], [-88.848343999999997, 17.883198], [-88.490122999999997, 18.486830999999999], [-88.300031000000004, 18.499981999999999], [-88.296335999999997, 18.353273000000002], [-88.106813000000002, 18.348673999999999], [-88.123479000000003, 18.076675000000002], [-88.285354999999996, 17.644143], [-88.197867000000002, 17.489474999999999], [-88.302640999999994, 17.131694], [-88.239518000000004, 17.036066000000002], [-88.355428000000003, 16.530774000000001], [-88.551824999999994, 16.265467000000001], [-88.732433999999998, 16.233635], [-88.930612999999994, 15.887273], [-89.229122000000004, 15.886938000000001], [-89.150806000000003, 17.015577], [-89.143079999999998, 17.808319000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u0438\u0437", "fr": "Belize", "en": "Belize", "nl": "Belize (land)", "pt": "Belize", "no": "Belize", "de": "Belize", "it": "Belize", "sv": "Belize", "pl": "Belize", "fi": "Belize", "zh": "\u4f2f\u5229\u5179", "ja": "\u30d9\u30ea\u30fc\u30ba", "es": "Belice"}, "label_fr": "Belize", "name": "Belize", "dbpedia_uri": "http://dbpedia.org/resource/Belize"}, "id": "BLZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-62.846468000000002, -22.034984999999999], [-63.986837999999999, -21.993644], [-64.377020999999999, -22.798090999999999], [-64.964892000000006, -22.075862000000001], [-66.273339000000007, -21.83231], [-67.106673999999998, -22.735925000000002], [-67.828180000000003, -22.872919], [-68.219913000000005, -21.494347000000001], [-68.757166999999995, -20.372658000000001], [-68.442224999999993, -19.405068], [-68.966818000000004, -18.981683], [-69.100246999999996, -18.260124999999999], [-69.590423999999999, -17.580012], [-68.959635000000006, -16.500698], [-69.389764, -15.660129], [-69.160347000000002, -15.323974], [-69.339534999999998, -14.953194999999999], [-68.948886999999999, -14.453639000000001], [-68.929224000000005, -13.602684], [-68.880080000000007, -12.899729000000001], [-68.665080000000003, -12.561299999999999], [-69.529678000000004, -10.951734], [-68.786158, -11.036379999999999], [-68.271253999999999, -11.014521], [-68.048192, -10.712059], [-67.173800999999997, -10.306812000000001], [-66.646907999999996, -9.9313310000000001], [-65.338435000000004, -9.7619880000000006], [-65.444837000000007, -10.511450999999999], [-65.321899000000002, -10.895872000000001], [-65.402281000000002, -11.566269999999999], [-64.316353000000007, -12.461978], [-63.196499000000003, -12.627033000000001], [-62.803060000000002, -13.000653], [-62.127080999999997, -13.198781], [-61.713203999999998, -13.489202000000001], [-61.084121000000003, -13.479384], [-60.503304, -13.775955], [-60.459198000000001, -14.354006999999999], [-60.264325999999997, -14.645979000000001], [-60.251148999999998, -15.077218999999999], [-60.542966, -15.093909999999999], [-60.158389999999997, -16.258284], [-58.241219999999998, -16.299572999999999], [-58.388058000000001, -16.877109000000001], [-58.280804000000003, -17.271709999999999], [-57.734558, -17.552468000000001], [-57.498370999999999, -18.174188000000001], [-57.676009000000001, -18.961839999999999], [-57.949997000000003, -19.400003999999999], [-57.853802000000002, -19.969995000000001], [-58.166392000000002, -20.176701000000001], [-58.183470999999997, -19.868399], [-59.115042000000003, -19.356905999999999], [-60.043565000000001, -19.342746999999999], [-61.786326000000003, -19.633737], [-62.265960999999997, -20.513735], [-62.291179, -21.051635000000001], [-62.685057, -22.249029], [-62.846468000000002, -22.034984999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u043b\u0438\u0432\u0438\u044f", "fr": "Bolivie", "en": "Bolivia", "nl": "Bolivia", "pt": "Bol\u00edvia", "no": "Bolivia", "de": "Bolivien", "it": "Bolivia", "sv": "Bolivia", "pl": "Boliwia", "fi": "Bolivia", "zh": "\u73bb\u5229\u7dad\u4e9e", "ja": "\u30dc\u30ea\u30d3\u30a2", "es": "Bolivia"}, "label_fr": "Bolivie", "name": "Bolivia", "dbpedia_uri": "http://dbpedia.org/resource/Bolivia"}, "id": "BOL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.625132999999998, -30.216294999999999], [-56.290900000000001, -28.852761000000001], [-55.162286000000002, -27.881914999999999], [-54.490724999999998, -27.474757], [-53.648735000000002, -26.923473000000001], [-53.628349, -26.124865], [-54.130049999999997, -25.547639], [-54.625290999999997, -25.739255], [-54.428946000000003, -25.162185000000001], [-54.293475999999998, -24.570799999999998], [-54.292960000000001, -24.021014000000001], [-54.652833999999999, -23.839577999999999], [-55.027901999999997, -24.001273999999999], [-55.400747000000003, -23.956935000000001], [-55.517639000000003, -23.571998000000001], [-55.610683000000002, -22.655619000000002], [-55.797958000000001, -22.356929999999998], [-56.473317000000002, -22.086300000000001], [-56.881509999999999, -22.282153999999998], [-57.937156000000002, -22.090176], [-57.870674000000001, -20.732688], [-58.166392000000002, -20.176701000000001], [-57.853802000000002, -19.969995000000001], [-57.949997000000003, -19.400003999999999], [-57.676009000000001, -18.961839999999999], [-57.498370999999999, -18.174188000000001], [-57.734558, -17.552468000000001], [-58.280804000000003, -17.271709999999999], [-58.388058000000001, -16.877109000000001], [-58.241219999999998, -16.299572999999999], [-60.158389999999997, -16.258284], [-60.542966, -15.093909999999999], [-60.251148999999998, -15.077218999999999], [-60.264325999999997, -14.645979000000001], [-60.459198000000001, -14.354006999999999], [-60.503304, -13.775955], [-61.084121000000003, -13.479384], [-61.713203999999998, -13.489202000000001], [-62.127080999999997, -13.198781], [-62.803060000000002, -13.000653], [-63.196499000000003, -12.627033000000001], [-64.316353000000007, -12.461978], [-65.402281000000002, -11.566269999999999], [-65.321899000000002, -10.895872000000001], [-65.444837000000007, -10.511450999999999], [-65.338435000000004, -9.7619880000000006], [-66.646907999999996, -9.9313310000000001], [-67.173800999999997, -10.306812000000001], [-68.048192, -10.712059], [-68.271253999999999, -11.014521], [-68.786158, -11.036379999999999], [-69.529678000000004, -10.951734], [-70.093751999999995, -11.123972], [-70.548686000000004, -11.009147], [-70.481893999999997, -9.4901180000000007], [-71.302412000000004, -10.079435999999999], [-72.184890999999993, -10.053597999999999], [-72.563033000000004, -9.520194], [-73.226713000000004, -9.4622130000000002], [-73.015383, -9.0328330000000001], [-73.571059000000005, -8.4244470000000007], [-73.987234999999998, -7.5238300000000002], [-73.723400999999996, -7.3409990000000001], [-73.724486999999996, -6.9185949999999998], [-73.120026999999993, -6.629931], [-73.219711000000004, -6.0891890000000002], [-72.964506999999998, -5.7412510000000001], [-72.891927999999993, -5.2745610000000003], [-71.748406000000003, -4.5939829999999997], [-70.928843000000001, -4.4015909999999998], [-70.794769000000002, -4.2512650000000001], [-69.893635000000003, -4.2981870000000004], [-69.444102000000001, -1.556287], [-69.420485999999997, -1.122619], [-69.577065000000005, -0.54999200000000004], [-70.020656000000002, -0.18515599999999999], [-70.015566000000007, 0.54141399999999995], [-69.452395999999993, 0.70615899999999998], [-69.252433999999994, 0.60265100000000005], [-69.218637999999999, 0.98567700000000003], [-69.804597000000001, 1.089081], [-69.816973000000004, 1.7148049999999999], [-67.868565000000004, 1.692455], [-67.537809999999993, 2.0371630000000001], [-67.259997999999996, 1.7199990000000001], [-67.065048000000004, 1.130112], [-66.876326000000006, 1.2533609999999999], [-66.325765000000004, 0.72445199999999998], [-65.548266999999996, 0.78925400000000001], [-65.354713000000004, 1.0952820000000001], [-64.611012000000002, 1.3287310000000001], [-64.199306000000007, 1.492855], [-64.083084999999997, 1.916369], [-63.368788000000002, 2.2008999999999999], [-63.422866999999997, 2.4110680000000002], [-64.269998999999999, 2.4970059999999998], [-64.408828, 3.1267860000000001], [-64.368493999999998, 3.7972100000000002], [-64.816063999999997, 4.0564450000000001], [-64.628658999999999, 4.1484810000000003], [-63.888342999999999, 4.0205299999999999], [-63.093198000000001, 3.7705709999999999], [-62.804532999999999, 4.0069650000000001], [-62.085430000000002, 4.1621240000000004], [-60.966892999999999, 4.5364680000000002], [-60.601179000000002, 4.9180979999999996], [-60.733573999999997, 5.2002769999999998], [-60.213683000000003, 5.2444860000000002], [-59.980958999999999, 5.0140609999999999], [-60.111001999999999, 4.574967], [-59.767406000000001, 4.4235030000000002], [-59.538040000000002, 3.9588030000000001], [-59.815412999999999, 3.6064989999999999], [-59.974525, 2.755233], [-59.718546000000003, 2.2496299999999998], [-59.646044000000003, 1.786894], [-59.030861999999999, 1.317698], [-58.540013000000002, 1.2680880000000001], [-58.429476999999999, 1.4639420000000001], [-58.11345, 1.5071950000000001], [-57.660971000000004, 1.682585], [-57.335822999999998, 1.9485380000000001], [-56.782704000000003, 1.8637109999999999], [-56.539386, 1.8995230000000001], [-55.995697999999997, 1.8176669999999999], [-55.9056, 2.0219960000000001], [-56.073341999999997, 2.2207949999999999], [-55.973322000000003, 2.510364], [-55.569755000000001, 2.4215059999999999], [-55.097586999999997, 2.5237479999999999], [-54.524754000000001, 2.311849], [-54.088062999999998, 2.1055570000000001], [-53.778520999999998, 2.376703], [-53.554839000000001, 2.3348969999999998], [-53.418464999999998, 2.0533890000000001], [-52.939656999999997, 2.1248580000000001], [-52.556424999999997, 2.504705], [-52.249338000000002, 3.2410939999999999], [-51.657797000000002, 4.1562320000000001], [-51.317146000000001, 4.2034909999999996], [-51.069771000000003, 3.650398], [-50.508875000000003, 1.901564], [-49.974075999999997, 1.736483], [-49.947101000000004, 1.04619], [-50.699250999999997, 0.22298399999999999], [-50.388210999999998, -0.078445000000000001], [-48.620567000000001, -0.235489], [-48.584496999999999, -1.237805], [-47.824956, -0.58161799999999997], [-46.566583999999999, -0.94102799999999998], [-44.905703000000003, -1.5517399999999999], [-44.417619000000002, -2.13775], [-44.581589000000001, -2.6913079999999998], [-43.418790999999999, -2.3831099999999998], [-41.472656999999998, -2.9120180000000002], [-39.978664999999999, -2.8730540000000002], [-38.500382999999999, -3.7006519999999998], [-37.223252000000002, -4.8209460000000002], [-36.452936999999999, -5.1094039999999996], [-35.597796000000002, -5.1495040000000003], [-35.235388999999998, -5.4649369999999999], [-34.896030000000003, -6.7381929999999999], [-34.729993, -7.3432209999999998], [-35.128211999999998, -8.9964010000000005], [-35.636966999999999, -9.6492819999999995], [-37.046519000000004, -11.040721], [-37.683611999999997, -12.171195000000001], [-38.423876999999997, -13.038119], [-38.673887000000001, -13.057651999999999], [-38.953276000000002, -13.793369999999999], [-38.882297999999999, -15.667054], [-39.161091999999996, -17.208407000000001], [-39.267339, -17.867746], [-39.583520999999998, -18.262295999999999], [-39.760823000000002, -19.599112999999999], [-40.774740999999999, -20.904512], [-40.944755999999998, -21.937317], [-41.754164000000003, -22.370676], [-41.988284, -22.97007], [-43.074703999999997, -22.967693000000001], [-44.647812000000002, -23.351959000000001], [-45.352136000000002, -23.796842000000002], [-46.472093000000001, -24.088968999999999], [-47.648972000000001, -24.885199], [-48.495457999999999, -25.877025], [-48.641005, -26.623698000000001], [-48.474736, -27.175912], [-48.661520000000003, -28.186135], [-48.888457000000002, -28.674115], [-49.587328999999997, -29.224468999999999], [-50.696874000000001, -30.984465], [-51.576225999999998, -31.777698000000001], [-52.256081000000002, -32.245370000000001], [-52.7121, -33.196578000000002], [-53.373662000000003, -33.768377999999998], [-53.650543999999996, -33.202004000000002], [-53.209589000000001, -32.727665999999999], [-53.787951999999997, -32.047243000000002], [-54.572451999999998, -31.494510999999999], [-55.601509999999998, -30.853878999999999], [-55.973244999999999, -30.883075999999999], [-56.976025999999997, -30.109686], [-57.625132999999998, -30.216294999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f", "fr": "Br\u00e9sil", "en": "Brazil", "nl": "Brazili\u00eb", "pt": "Brasil", "no": "Brasil", "de": "Brasilien", "it": "Brasile", "sv": "Brasilien", "pl": "Brazylia", "fi": "Brasilia", "zh": "\u5df4\u897f", "ja": "\u30d6\u30e9\u30b8\u30eb", "es": "Brasil"}, "label_fr": "Br\u00e9sil", "name": "Brazil", "dbpedia_uri": "http://dbpedia.org/resource/Brazil"}, "id": "BRA"}, {"geometry": {"type": "Polygon", "coordinates": [[[114.20401699999999, 4.525874], [114.59996099999999, 4.9000110000000001], [115.45071, 5.44773], [115.4057, 4.955228], [115.347461, 4.3166359999999999], [114.869557, 4.3483140000000002], [114.65959599999999, 4.0076369999999999], [114.20401699999999, 4.525874]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0440\u0443\u043d\u0435\u0439", "fr": "Brunei", "en": "Brunei", "nl": "Brunei", "pt": "Brunei", "no": "Brunei", "de": "Brunei", "it": "Brunei", "sv": "Brunei", "pl": "Brunei", "fi": "Brunei", "zh": "\u6587\u83b1", "ja": "\u30d6\u30eb\u30cd\u30a4", "es": "Brun\u00e9i"}, "label_fr": "Brunei", "name": "Brunei", "dbpedia_uri": "http://dbpedia.org/resource/Brunei"}, "id": "BRN"}, {"geometry": {"type": "Polygon", "coordinates": [[[91.696657000000002, 27.771742], [92.103712000000002, 27.452614000000001], [92.033484000000001, 26.83831], [91.217512999999997, 26.808648000000002], [90.373275000000007, 26.875724000000002], [89.744528000000003, 26.719403], [88.835643000000005, 27.098966000000001], [88.814248000000006, 27.299316000000001], [89.475809999999996, 28.042759], [90.015828999999997, 28.296438999999999], [90.730513999999999, 28.064954], [91.258853999999999, 28.040614000000001], [91.696657000000002, 27.771742]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0442\u0430\u043d", "fr": "Bhoutan", "en": "Bhutan", "nl": "Bhutan", "pt": "But\u00e3o", "no": "Bhutan", "de": "Bhutan", "it": "Bhutan", "sv": "Bhutan", "pl": "Bhutan", "fi": "Bhutan", "zh": "\u4e0d\u4e39", "ja": "\u30d6\u30fc\u30bf\u30f3", "es": "But\u00e1n"}, "label_fr": "Bhoutan", "name": "Bhutan", "dbpedia_uri": "http://dbpedia.org/resource/Bhutan"}, "id": "BTN"}, {"geometry": {"type": "Polygon", "coordinates": [[[25.649163000000001, -18.536026], [25.850390999999998, -18.714413], [26.164791000000001, -19.293085999999999], [27.296505, -20.39152], [27.724747000000001, -20.499058999999999], [27.727228, -20.851801999999999], [28.021370000000001, -21.485975], [28.794656, -21.639454000000001], [29.432188, -22.091313], [28.017236, -22.827753999999999], [27.119409999999998, -23.574323], [26.786407000000001, -24.240691000000002], [26.485752999999999, -24.616326999999998], [25.941652000000001, -24.696373000000001], [25.765848999999999, -25.174845000000001], [25.664666, -25.486816000000001], [25.025171, -25.719670000000001], [24.211266999999999, -25.670216], [23.73357, -25.390129000000002], [23.312097000000001, -25.268689999999999], [22.824271, -25.500458999999999], [22.579532, -25.979448000000001], [22.105969000000002, -26.280256000000001], [21.605896000000001, -26.726534000000001], [20.889609, -26.828543], [20.66647, -26.477453000000001], [20.758609, -25.868136], [20.165725999999999, -24.917961999999999], [19.895768, -24.767790000000002], [19.895458000000001, -21.849157000000002], [20.881133999999999, -21.814326999999999], [20.910640999999998, -18.252219], [21.65504, -18.219145999999999], [23.196857999999999, -17.869038], [23.579006, -18.281261000000001], [24.217365000000001, -17.889347000000001], [24.520705, -17.887125000000001], [25.084443, -17.661816000000002], [25.264226000000001, -17.736540000000002], [25.649163000000001, -18.536026]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430", "fr": "Botswana", "en": "Botswana", "nl": "Botswana", "pt": "Botswana", "no": "Botswana", "de": "Botsuana", "it": "Botswana", "sv": "Botswana", "pl": "Botswana", "fi": "Botswana", "zh": "\u6ce2\u672d\u90a3", "ja": "\u30dc\u30c4\u30ef\u30ca", "es": "Botsuana"}, "label_fr": "Botswana", "name": "Botswana", "dbpedia_uri": "http://dbpedia.org/resource/Botswana"}, "id": "BWA"}, {"geometry": {"type": "Polygon", "coordinates": [[[15.27946, 7.4219249999999999], [16.106231999999999, 7.4970879999999998], [16.290562000000001, 7.7543069999999998], [16.456185000000001, 7.7347739999999998], [16.705988000000001, 7.5083279999999997], [17.964929999999999, 7.8909140000000004], [18.389555000000001, 8.2813040000000004], [18.911021999999999, 8.6308950000000006], [18.812010000000001, 8.9829150000000002], [19.094007999999999, 9.0748470000000001], [20.059685000000002, 9.0127059999999997], [21.000868000000001, 9.4759849999999997], [21.723821999999998, 10.567055999999999], [22.231128999999999, 10.971888999999999], [22.864165, 11.142395], [22.977544000000002, 10.714463], [23.554303999999998, 10.089255], [23.55725, 9.6812179999999994], [23.394779, 9.2650679999999994], [23.459012999999999, 8.9542859999999997], [23.805813000000001, 8.6663189999999997], [24.567368999999999, 8.2291880000000006], [25.114932, 7.8251039999999996], [25.124130999999998, 7.5000850000000003], [25.796648000000001, 6.9793159999999999], [26.213418000000001, 6.5466030000000002], [26.465909, 5.9467169999999996], [27.213408999999999, 5.5509529999999998], [27.374226, 5.2339440000000002], [27.044065, 5.127853], [26.402761000000002, 5.1508750000000001], [25.650455000000001, 5.2560880000000001], [25.278797999999998, 5.1704080000000001], [25.128833, 4.9272450000000001], [24.805029000000001, 4.8972470000000001], [24.410530999999999, 5.108784], [23.297214, 4.609693], [22.841480000000001, 4.7101259999999998], [22.704124, 4.633051], [22.405124000000001, 4.0291600000000001], [21.659123000000001, 4.224342], [20.927591, 4.3227859999999998], [20.290679000000001, 4.6916779999999996], [19.467784000000002, 5.0315279999999998], [18.932312, 4.7095060000000002], [18.542981999999999, 4.2017850000000001], [18.453064999999999, 3.5043859999999998], [17.809899999999999, 3.5601959999999999], [17.133042, 3.7281970000000002], [16.537057999999998, 3.1982550000000001], [16.012851999999999, 2.2676400000000001], [15.907381000000001, 2.5573890000000001], [15.862731999999999, 3.0135369999999999], [15.405396, 3.3353009999999998], [15.03622, 3.8513670000000002], [14.950953, 4.2103890000000002], [14.478372, 4.7326050000000004], [14.558935999999999, 5.0305980000000003], [14.459407000000001, 5.4517610000000003], [14.53656, 6.2269589999999999], [14.776545, 6.4084979999999998], [15.27946, 7.4219249999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "R\u00e9publique centrafricaine", "en": "Central African Republic", "nl": "Centraal-Afrikaanse Republiek", "pt": "Rep\u00fablica Centro-Africana", "no": "Den sentralafrikanske republikk", "de": "Zentralafrikanische Republik", "it": "Repubblica Centrafricana", "sv": "Centralafrikanska republiken", "pl": "Republika \u015arodkowoafryka\u0144ska", "fi": "Keski-Afrikan tasavalta", "zh": "\u4e2d\u975e\u5171\u548c\u570b", "ja": "\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "es": "Rep\u00fablica Centroafricana"}, "label_fr": "R\u00e9publique centrafricaine", "name": "Central African Republic", "dbpedia_uri": "http://dbpedia.org/resource/Central_African_Republic"}, "id": "CAF"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-63.664499999999997, 46.55001], [-62.939300000000003, 46.415869999999998], [-62.012079999999997, 46.44314], [-62.503909999999998, 46.033389999999997], [-62.87433, 45.968179999999997], [-64.142799999999994, 46.392650000000003], [-64.392610000000005, 46.727469999999997], [-64.014859999999999, 47.036009999999997], [-63.664499999999997, 46.55001]]], [[[-61.806305000000002, 49.105060000000002], [-62.29318, 49.08717], [-63.589260000000003, 49.400689999999997], [-64.519120000000001, 49.873040000000003], [-64.173220000000001, 49.957180000000001], [-62.858289999999997, 49.706409999999998], [-61.835585000000002, 49.288550000000001], [-61.806305000000002, 49.105060000000002]]], [[[-123.510002, 48.510010999999999], [-124.012891, 48.370846], [-125.655013, 48.825004999999997], [-125.954994, 49.179996000000003], [-126.850004, 49.530000000000001], [-127.029993, 49.814996000000001], [-128.059336, 49.994959000000001], [-128.44458399999999, 50.539138000000001], [-128.35841400000001, 50.770648000000001], [-127.308581, 50.552574], [-126.695001, 50.400903], [-125.75500700000001, 50.295017999999999], [-125.415002, 49.950001], [-124.920768, 49.475275000000003], [-123.92250900000001, 49.062483999999998], [-123.510002, 48.510010999999999]]], [[[-56.134036000000002, 50.687010000000001], [-56.795881999999999, 49.812308999999999], [-56.143104999999998, 50.150117000000002], [-55.471491999999998, 49.935814999999998], [-55.822400999999999, 49.587128999999997], [-54.935142999999997, 49.313011000000003], [-54.473775000000003, 49.556691000000001], [-53.476548999999999, 49.249139], [-53.786014000000002, 48.516781000000002], [-53.086134000000001, 48.687804], [-52.958647999999997, 48.157164000000002], [-52.648099000000002, 47.535547999999999], [-53.069158000000002, 46.655498999999999], [-53.521456000000001, 46.618291999999997], [-54.178936, 46.807065999999999], [-53.961869, 47.625207000000003], [-54.240482, 47.752279000000001], [-55.400773000000001, 46.884993999999999], [-55.997481000000001, 46.919719999999998], [-55.291218999999998, 47.389561999999998], [-56.250799000000001, 47.632545], [-57.325229, 47.572806999999997], [-59.266015000000003, 47.603347999999997], [-59.419494, 47.899453999999999], [-58.796585999999998, 48.251525000000001], [-59.231625000000001, 48.523187999999998], [-58.391804999999998, 49.125580999999997], [-57.358690000000003, 50.718274000000001], [-56.73865, 51.287438000000002], [-55.870977000000003, 51.632094000000002], [-55.406973999999998, 51.588273000000001], [-55.600217999999998, 51.317075000000003], [-56.134036000000002, 50.687010000000001]]], [[[-132.71000799999999, 54.040008999999998], [-132.71000900000001, 54.040008999999998], [-132.71000799999999, 54.040008999999998], [-132.71000799999999, 54.040008999999998], [-131.74999, 54.120004000000002], [-132.04947999999999, 52.984620999999997], [-131.17904300000001, 52.180433000000001], [-131.57783000000001, 52.182371000000003], [-132.18042800000001, 52.639707000000001], [-132.549992, 53.100014999999999], [-133.05461099999999, 53.411468999999997], [-133.239664, 53.851080000000003], [-133.180004, 54.169975000000001], [-132.71000799999999, 54.040008999999998]]], [[[-79.265820000000005, 62.158675000000002], [-79.657520000000005, 61.63308], [-80.099559999999997, 61.7181], [-80.36215, 62.016489999999997], [-80.315394999999995, 62.085565000000003], [-79.929389999999998, 62.385599999999997], [-79.520020000000002, 62.363709999999998], [-79.265820000000005, 62.158675000000002]]], [[[-81.898250000000004, 62.710799999999999], [-83.068569999999994, 62.159219999999998], [-83.774619999999999, 62.182310000000001], [-83.993669999999995, 62.452800000000003], [-83.250479999999996, 62.914090000000002], [-81.876990000000006, 62.904580000000003], [-81.898250000000004, 62.710799999999999]]], [[[-85.161308000000005, 65.657285000000002], [-84.975763999999998, 65.217517999999998], [-84.464011999999997, 65.371772000000007], [-83.882626000000002, 65.109617999999998], [-82.787576999999999, 64.766693000000004], [-81.642014000000003, 64.455135999999996], [-81.553439999999995, 63.979609000000004], [-80.817361000000005, 64.057485999999997], [-80.103451000000007, 63.725980999999997], [-80.991020000000006, 63.411245999999998], [-82.547178000000002, 63.651721999999999], [-83.108797999999993, 64.101876000000004], [-84.100416999999993, 63.569712000000003], [-85.523404999999997, 63.052379000000002], [-85.866769000000005, 63.637253000000001], [-87.221982999999994, 63.541238], [-86.352760000000004, 64.035832999999997], [-86.224885999999998, 64.822917000000004], [-85.883848, 65.738777999999996], [-85.161308000000005, 65.657285000000002]]], [[[-75.865880000000004, 67.148859999999999], [-76.986869999999996, 67.098730000000003], [-77.236400000000003, 67.588089999999994], [-76.811660000000003, 68.148560000000003], [-75.895210000000006, 68.287210000000002], [-75.114500000000007, 68.010360000000006], [-75.10333, 67.58202], [-75.215969999999999, 67.444249999999997], [-75.865880000000004, 67.148859999999999]]], [[[-95.647681000000006, 69.107690000000005], [-96.269520999999997, 68.757040000000003], [-97.617401000000001, 69.060029999999998], [-98.431800999999993, 68.950699999999998], [-99.797400999999994, 69.400030000000001], [-98.917400999999998, 69.710030000000003], [-98.218260999999998, 70.143540000000002], [-97.157400999999993, 69.860029999999995], [-96.557400999999999, 69.680030000000002], [-96.257401000000002, 69.490030000000004], [-95.647681000000006, 69.107690000000005]]], [[[-90.5471, 69.497659999999996], [-90.551509999999993, 68.474990000000005], [-89.215149999999994, 69.25873], [-88.019660000000002, 68.615080000000006], [-88.317490000000006, 67.873379999999997], [-87.350170000000006, 67.198719999999994], [-86.306070000000005, 67.921459999999996], [-85.576639999999998, 68.784559999999999], [-85.521969999999996, 69.882109999999997], [-84.100809999999996, 69.805390000000003], [-82.622579999999999, 69.658259999999999], [-81.280429999999996, 69.162019999999998], [-81.220200000000006, 68.665670000000006], [-81.964359999999999, 68.132530000000003], [-81.259280000000004, 67.597160000000002], [-81.386529999999993, 67.110780000000005], [-83.344560000000001, 66.411540000000002], [-84.735420000000005, 66.257300000000001], [-85.76943, 66.558329999999998], [-86.067599999999999, 66.056250000000006], [-87.03143, 65.212969999999999], [-87.323239999999998, 64.775630000000007], [-88.482960000000006, 64.098969999999994], [-89.914439999999999, 64.032730000000001], [-90.703980000000001, 63.610169999999997], [-90.770039999999995, 62.960209999999996], [-91.933419999999998, 62.835079999999998], [-93.156980000000004, 62.02469], [-94.241529999999997, 60.898650000000004], [-94.629310000000004, 60.110210000000002], [-94.684600000000003, 58.948819999999998], [-93.215019999999996, 58.782119999999999], [-92.764619999999994, 57.845709999999997], [-92.297030000000007, 57.087090000000003], [-90.897689999999997, 57.284680000000002], [-89.039529999999999, 56.85172], [-88.039779999999993, 56.471620000000001], [-87.324209999999994, 55.999139999999997], [-86.071209999999994, 55.72383], [-85.011809999999997, 55.302599999999998], [-83.360550000000003, 55.244889999999998], [-82.272850000000005, 55.148319999999998], [-82.436199999999999, 54.282269999999997], [-82.125020000000006, 53.277030000000003], [-81.400750000000002, 52.157879999999999], [-79.912890000000004, 51.208419999999997], [-79.143010000000004, 51.533929999999998], [-78.601910000000004, 52.562080000000002], [-79.124210000000005, 54.141449999999999], [-79.829580000000007, 54.667720000000003], [-78.228740000000002, 55.136450000000004], [-77.095600000000005, 55.837409999999998], [-76.541370000000001, 56.534230000000001], [-76.623189999999994, 57.202629999999999], [-77.302260000000004, 58.05209], [-78.51688, 58.804580000000001], [-77.336759999999998, 59.852609999999999], [-77.772720000000007, 60.75788], [-78.106870000000001, 62.31964], [-77.410669999999996, 62.550530000000002], [-75.696209999999994, 62.278399999999998], [-74.668199999999999, 62.181109999999997], [-73.839879999999994, 62.443800000000003], [-72.908529999999999, 62.105069999999998], [-71.677080000000004, 61.525350000000003], [-71.373689999999996, 61.137169999999998], [-69.590419999999995, 61.061410000000002], [-69.620329999999996, 60.221249999999998], [-69.287899999999993, 58.957360000000001], [-68.374549999999999, 58.80106], [-67.649760000000001, 58.212060000000001], [-66.201779999999999, 58.767310000000002], [-65.245170000000002, 59.870710000000003], [-64.583519999999993, 60.33558], [-63.804749999999999, 59.442599999999999], [-62.502360000000003, 58.167079999999999], [-61.396549999999998, 56.967449999999999], [-61.798659999999998, 56.339449999999999], [-60.468530000000001, 55.775480000000002], [-59.56962, 55.204070000000002], [-57.975079999999998, 54.945489999999999], [-57.333199999999998, 54.6265], [-56.936889999999998, 53.780320000000003], [-56.158110000000001, 53.647489999999998], [-55.756320000000002, 53.270359999999997], [-55.68338, 52.146639999999998], [-56.40916, 51.770699999999998], [-57.126910000000002, 51.419719999999998], [-58.774819999999998, 51.064300000000003], [-60.033090000000001, 50.24277], [-61.723660000000002, 50.080460000000002], [-63.86251, 50.290990000000001], [-65.363309999999998, 50.298200000000001], [-66.399050000000003, 50.228969999999997], [-67.236310000000003, 49.511560000000003], [-68.511139999999997, 49.068359999999998], [-69.953620000000001, 47.744880000000002], [-71.104579999999999, 46.821710000000003], [-70.255219999999994, 46.986060000000002], [-68.650000000000006, 48.299999999999997], [-66.552430000000001, 49.133099999999999], [-65.056259999999995, 49.232779999999998], [-64.170990000000003, 48.74248], [-65.115449999999996, 48.07085], [-64.798540000000003, 46.99297], [-64.472189999999998, 46.238489999999999], [-63.173290000000001, 45.739019999999996], [-61.520719999999997, 45.883769999999998], [-60.518149999999999, 47.007930000000002], [-60.448599999999999, 46.282640000000001], [-59.802869999999999, 45.920400000000001], [-61.039879999999997, 45.265250000000002], [-63.254710000000003, 44.670140000000004], [-64.246560000000002, 44.265529999999998], [-65.364059999999995, 43.545229999999997], [-66.123400000000004, 43.618670000000002], [-66.161730000000006, 44.465119999999999], [-64.425489999999996, 45.29204], [-66.026049999999998, 45.259309999999999], [-67.137410000000003, 45.137529999999998], [-67.791340000000005, 45.702809999999999], [-67.790459999999996, 47.066360000000003], [-68.234440000000006, 47.354860000000002], [-68.905000000000001, 47.185000000000002], [-69.237216000000004, 47.447780999999999], [-69.999970000000005, 46.693069999999999], [-70.305000000000007, 45.914999999999999], [-70.659999999999997, 45.460000000000001], [-71.084819999999993, 45.305239999999998], [-71.405000000000001, 45.255000000000003], [-71.50506, 45.008200000000002], [-73.347830000000002, 45.007379999999998], [-74.867000000000004, 45.000480000000003], [-75.318209999999993, 44.816450000000003], [-76.375, 44.096310000000003], [-76.5, 44.018459], [-76.820034000000007, 43.628784000000003], [-77.737885000000006, 43.629055999999999], [-78.720280000000002, 43.625089000000003], [-79.171673999999996, 43.466338999999998], [-79.010000000000005, 43.270000000000003], [-78.920000000000002, 42.965000000000003], [-78.939362000000003, 42.863610999999999], [-80.247448000000006, 42.366199999999999], [-81.277747000000005, 42.209026000000001], [-82.439278000000002, 41.675105000000002], [-82.690089, 41.675105000000002], [-83.029809999999998, 41.832796000000002], [-83.141999999999996, 41.975681000000002], [-83.120000000000005, 42.079999999999998], [-82.900000000000006, 42.43], [-82.430000000000007, 42.979999999999997], [-82.137642, 43.571088000000003], [-82.337762999999995, 44.439999999999998], [-82.550925000000007, 45.347517000000003], [-83.592850999999996, 45.816893999999998], [-83.469550999999996, 45.994686000000002], [-83.616130999999996, 46.116926999999997], [-83.890765000000002, 46.116926999999997], [-84.091851000000005, 46.275418999999999], [-84.142120000000006, 46.512225999999998], [-84.336699999999993, 46.408769999999997], [-84.604900000000001, 46.439599999999999], [-84.543749000000005, 46.538684000000003], [-84.779238000000007, 46.637101999999999], [-84.876080000000002, 46.900083000000002], [-85.652362999999994, 47.220219], [-86.461990999999998, 47.553337999999997], [-87.439792999999995, 47.939999999999998], [-88.378113999999997, 48.302917999999998], [-89.272917000000007, 48.019807999999998], [-89.599999999999994, 48.009999999999998], [-90.829999999999998, 48.270000000000003], [-91.640000000000001, 48.140000000000001], [-92.609999999999999, 48.450000000000003], [-93.630870000000002, 48.609259999999999], [-94.329139999999995, 48.670740000000002], [-94.640000000000001, 48.840000000000003], [-94.817580000000007, 49.389049999999997], [-95.156090000000006, 49.384250000000002], [-95.15907, 49], [-97.228719999999996, 49.000700000000002], [-100.65000000000001, 49], [-104.04826, 48.999859999999998], [-107.05, 49], [-110.05, 49], [-113, 49], [-116.04818, 49], [-117.03121, 49], [-120, 49], [-122.84, 49], [-122.97421, 49.002538000000001], [-124.91024, 49.984560000000002], [-125.62461, 50.416559999999997], [-127.43561, 50.83061], [-127.99276, 51.715829999999997], [-127.85032, 52.329610000000002], [-129.12979000000001, 52.755380000000002], [-129.30522999999999, 53.561590000000002], [-130.51497000000001, 54.287570000000002], [-130.53611000000001, 54.802779999999998], [-129.97999999999999, 55.284999999999997], [-130.00778, 55.91583], [-131.70780999999999, 56.552120000000002], [-132.73042000000001, 57.692889999999998], [-133.35556, 58.41028], [-134.27110999999999, 58.861109999999996], [-134.94499999999999, 59.270560000000003], [-135.47583, 59.787779999999998], [-136.47971999999999, 59.463889999999999], [-137.45249999999999, 58.905000000000001], [-138.34089, 59.562109999999997], [-139.03899999999999, 60], [-140.01300000000001, 60.276820000000001], [-140.99778000000001, 60.30639], [-140.99250000000001, 66.000029999999995], [-140.98599999999999, 69.712000000000003], [-139.12052, 69.471019999999996], [-137.54635999999999, 68.990020000000001], [-136.50358, 68.898039999999995], [-135.62576000000001, 69.315119999999993], [-134.41463999999999, 69.627430000000004], [-132.92925, 69.505340000000004], [-131.43136000000001, 69.944509999999994], [-129.79471000000001, 70.193690000000004], [-129.10773, 69.779269999999997], [-128.36156, 70.012860000000003], [-128.13817, 70.483840000000001], [-127.44712, 70.377210000000005], [-125.75632, 69.480580000000003], [-124.42483, 70.1584], [-124.28968, 69.399690000000007], [-123.06108, 69.563720000000004], [-122.6835, 69.855530000000002], [-121.47226000000001, 69.797780000000003], [-119.94288, 69.377859999999998], [-117.60268000000001, 69.011279999999999], [-116.22642999999999, 68.84151], [-115.2469, 68.905910000000006], [-113.89794000000001, 68.398899999999998], [-115.30489, 67.902609999999996], [-113.49727, 67.688149999999993], [-110.798, 67.806120000000007], [-109.94619, 67.981039999999993], [-108.8802, 67.381439999999998], [-107.79239, 67.887360000000001], [-108.81299, 68.311639999999997], [-108.16721, 68.653919999999999], [-106.95, 68.700000000000003], [-106.15000000000001, 68.799999999999997], [-105.34282, 68.561220000000006], [-104.33790999999999, 68.018000000000001], [-103.22114999999999, 68.097750000000005], [-101.45433, 67.646889999999999], [-99.901949999999999, 67.805660000000003], [-98.443200000000004, 67.781649999999999], [-98.558599999999998, 68.403940000000006], [-97.669479999999993, 68.578639999999993], [-96.119910000000004, 68.23939], [-96.125879999999995, 67.293379999999999], [-95.489429999999999, 68.090699999999998], [-94.685000000000002, 68.063829999999996], [-94.232820000000004, 69.069029999999998], [-95.304079999999999, 69.68571], [-96.471310000000003, 70.089759999999998], [-96.391149999999996, 71.194820000000007], [-95.208799999999997, 71.920529999999999], [-93.889970000000005, 71.760149999999996], [-92.87818, 71.318690000000004], [-91.519639999999995, 70.191289999999995], [-92.40692, 69.699969999999993], [-90.5471, 69.497659999999996]]], [[[-114.16717, 73.121449999999996], [-114.66634000000001, 72.652770000000004], [-112.44101999999999, 72.955399999999997], [-111.05038999999999, 72.450400000000002], [-109.92035, 72.961129999999997], [-109.00654, 72.633349999999993], [-108.18835, 71.650890000000004], [-107.68599, 72.065479999999994], [-108.39639, 73.089529999999996], [-107.51645000000001, 73.235979999999998], [-106.52258999999999, 73.076009999999997], [-105.40246, 72.67259], [-104.77484, 71.698400000000007], [-104.46476, 70.99297], [-102.78537, 70.49776], [-100.98078, 70.024320000000003], [-101.08929000000001, 69.584469999999996], [-102.73116, 69.504019999999997], [-102.09329, 69.119619999999998], [-102.43024, 68.75282], [-104.23999999999999, 68.909999999999997], [-105.95999999999999, 69.180000000000007], [-107.12254, 69.119219999999999], [-109, 68.780000000000001], [-111.534149, 68.630059000000003], [-113.31319999999999, 68.535539999999997], [-113.85496000000001, 69.007440000000003], [-115.22, 69.280000000000001], [-116.10794, 69.168210000000002], [-117.34, 69.959999999999994], [-116.67473, 70.066550000000007], [-115.13112, 70.237300000000005], [-113.72141000000001, 70.192369999999997], [-112.4161, 70.366380000000007], [-114.34999999999999, 70.599999999999994], [-116.48684, 70.520449999999997], [-117.90479999999999, 70.540559999999999], [-118.43237999999999, 70.909199999999998], [-116.11311000000001, 71.309179999999998], [-117.65568, 71.295199999999994], [-119.40199, 71.558589999999995], [-118.56267, 72.307850000000002], [-117.86642000000001, 72.705939999999998], [-115.18908999999999, 73.314589999999995], [-114.16717, 73.121449999999996]]], [[[-104.5, 73.420000000000002], [-105.38, 72.760000000000005], [-106.94, 73.459999999999994], [-106.59999999999999, 73.599999999999994], [-105.26000000000001, 73.640000000000001], [-104.5, 73.420000000000002]]], [[[-76.340000000000003, 73.102684999999994], [-76.251403999999994, 72.826385000000002], [-77.314437999999996, 72.855545000000006], [-78.391670000000005, 72.876655999999997], [-79.486251999999993, 72.742203000000003], [-79.775833000000006, 72.802902000000003], [-80.876098999999996, 73.333183000000005], [-80.833884999999995, 73.693184000000002], [-80.353058000000004, 73.759720000000002], [-78.064437999999996, 73.651932000000002], [-76.340000000000003, 73.102684999999994]]], [[[-86.562179, 73.157447000000005], [-85.774371000000002, 72.534126000000001], [-84.850111999999996, 73.340277999999998], [-82.31559, 73.750951000000001], [-80.600088, 72.716543999999999], [-80.748942, 72.061907000000005], [-78.770639000000003, 72.352172999999993], [-77.824624, 72.749617000000001], [-75.605845000000002, 72.243678000000003], [-74.228616000000002, 71.767144000000002], [-74.099141000000003, 71.330839999999995], [-72.242226000000002, 71.556925000000007], [-71.200014999999993, 70.920012999999997], [-68.786053999999993, 70.525024000000002], [-67.914969999999997, 70.121948000000003], [-66.969032999999996, 69.186087000000001], [-68.805122999999995, 68.720197999999996], [-66.449866, 68.067162999999994], [-64.862313999999998, 67.847538999999998], [-63.424934, 66.928472999999997], [-61.851981000000002, 66.862121000000002], [-62.163176999999997, 66.160251000000002], [-63.918444000000001, 64.998669000000007], [-65.148859999999999, 65.426033000000004], [-66.721219000000005, 66.388041000000001], [-68.015016000000003, 66.262726000000001], [-68.141287000000005, 65.689789000000005], [-67.089646000000002, 65.108455000000006], [-65.732079999999996, 64.648405999999994], [-65.320167999999995, 64.382737000000006], [-64.669405999999995, 63.392927], [-65.013803999999993, 62.674185000000001], [-66.275045000000006, 62.945098999999999], [-68.783186000000001, 63.745669999999997], [-67.369681, 62.883966000000001], [-66.328297000000006, 62.280074999999997], [-66.165567999999993, 61.930897000000002], [-68.877367000000007, 62.330148999999999], [-71.023437000000001, 62.910708], [-72.235378999999995, 63.397835999999998], [-71.886278000000004, 63.679988999999999], [-73.378305999999995, 64.193962999999997], [-74.834418999999997, 64.679075999999995], [-74.818503000000007, 64.389093000000003], [-77.709980000000002, 64.229541999999995], [-78.555948999999998, 64.572906000000003], [-77.897281000000007, 65.309191999999996], [-76.018274000000005, 65.326969000000005], [-73.959795, 65.454764999999995], [-74.293882999999994, 65.811770999999993], [-73.944912000000002, 66.310578000000007], [-72.651167000000001, 67.284576000000001], [-72.926060000000007, 67.726926000000006], [-73.311617999999996, 68.069436999999994], [-74.843306999999996, 68.554626999999996], [-76.869101000000001, 68.894735999999995], [-76.228649000000004, 69.147768999999997], [-77.287369999999996, 69.769540000000006], [-78.168633999999997, 69.826487999999998], [-78.957241999999994, 70.166880000000006], [-79.492455000000007, 69.871808000000001], [-81.305470999999997, 69.743184999999997], [-84.944705999999996, 69.966633999999999], [-87.060002999999995, 70.260001000000003], [-88.681713000000002, 70.410741000000002], [-89.513419999999996, 70.762038000000004], [-88.467720999999997, 71.218186000000003], [-89.888150999999993, 71.222551999999993], [-90.205160000000006, 72.235073999999997], [-89.436577, 73.129463999999999], [-88.408242000000001, 73.537889000000007], [-85.826150999999996, 73.803815999999998], [-86.562179, 73.157447000000005]]], [[[-100.35642, 73.843890000000002], [-99.163870000000003, 73.633390000000006], [-97.379999999999995, 73.760000000000005], [-97.120000000000005, 73.469999999999999], [-98.05359, 72.990520000000004], [-96.540000000000006, 72.560000000000002], [-96.719999999999999, 71.659999999999997], [-98.359660000000005, 71.272850000000005], [-99.322860000000006, 71.356390000000005], [-100.01482, 71.73827], [-102.5, 72.510000000000005], [-102.48, 72.829999999999998], [-100.43836, 72.705879999999993], [-101.54000000000001, 73.359999999999999], [-100.35642, 73.843890000000002]]], [[[-93.196296000000004, 72.771991999999997], [-94.269047, 72.024596000000003], [-95.409856000000005, 72.061881], [-96.033744999999996, 72.940276999999995], [-96.018268000000006, 73.437430000000006], [-95.495793000000006, 73.862416999999994], [-94.503658000000001, 74.134906999999998], [-92.420012, 74.100025000000002], [-90.509793000000002, 73.856731999999994], [-92.003964999999994, 72.966244000000003], [-93.196296000000004, 72.771991999999997]]], [[[-120.45999999999999, 71.383601999999996], [-123.09219, 70.90164], [-123.62, 71.340000000000003], [-125.928949, 71.868688000000006], [-125.5, 72.292260999999996], [-124.80728999999999, 73.022559999999999], [-123.94, 73.680000000000007], [-124.91775, 74.292749999999998], [-121.53788, 74.448930000000004], [-120.10978, 74.241349999999997], [-117.55564, 74.185770000000005], [-116.58441999999999, 73.896069999999995], [-115.51081000000001, 73.475189999999998], [-116.76794, 73.222920000000002], [-119.22, 72.519999999999996], [-120.45999999999999, 71.819999999999993], [-120.45999999999999, 71.383601999999996]]], [[[-93.612756000000005, 74.979996999999997], [-94.156908999999999, 74.592347000000004], [-95.608681000000004, 74.666864000000004], [-96.820931999999999, 74.927622999999997], [-96.288587000000007, 75.377827999999994], [-94.850819999999999, 75.647217999999995], [-93.977746999999994, 75.296490000000006], [-93.612756000000005, 74.979996999999997]]], [[[-98.5, 76.719999999999999], [-97.735585, 76.256559999999993], [-97.704414999999997, 75.743440000000007], [-98.159999999999997, 75], [-99.80874, 74.897440000000003], [-100.88366000000001, 75.057360000000003], [-100.86292, 75.640749999999997], [-102.50209, 75.563800000000001], [-102.56552000000001, 76.336600000000004], [-101.48972999999999, 76.305369999999996], [-99.983490000000003, 76.646339999999995], [-98.576989999999995, 76.588589999999996], [-98.5, 76.719999999999999]]], [[[-108.21141, 76.201679999999996], [-107.81943, 75.845519999999993], [-106.92892999999999, 76.012820000000005], [-105.881, 75.969399999999993], [-105.70498000000001, 75.479510000000005], [-106.31347, 75.005269999999996], [-109.7, 74.849999999999994], [-112.22307000000001, 74.416960000000003], [-113.74381, 74.394270000000006], [-113.87135000000001, 74.720290000000006], [-111.79421000000001, 75.162499999999994], [-116.31220999999999, 75.043430000000001], [-117.71040000000001, 75.222200000000001], [-116.34602, 76.199029999999993], [-115.40487, 76.478870000000001], [-112.59056, 76.14134], [-110.81422000000001, 75.549189999999996], [-109.0671, 75.473209999999995], [-110.49726, 76.429820000000007], [-109.58110000000001, 76.794169999999994], [-108.54859, 76.678319999999999], [-108.21141, 76.201679999999996]]], [[[-94.684085999999994, 77.097877999999994], [-93.573920999999999, 76.776296000000002], [-91.605023000000003, 76.778518000000005], [-90.741845999999995, 76.449596999999997], [-90.969661000000002, 76.074012999999994], [-89.822237999999999, 75.847774000000001], [-89.187083000000001, 75.610166000000007], [-87.838275999999993, 75.566188999999994], [-86.379192000000003, 75.482421000000002], [-84.789625000000001, 75.699203999999995], [-82.753444999999999, 75.784315000000007], [-81.128530999999995, 75.713982999999999], [-80.057511000000005, 75.336849000000001], [-79.833933000000002, 74.923126999999994], [-80.457770999999994, 74.657303999999996], [-81.948842999999997, 74.442458999999999], [-83.228893999999997, 74.564027999999993], [-86.097452000000004, 74.410032000000001], [-88.150350000000003, 74.392307000000002], [-89.764722000000006, 74.515555000000006], [-92.422441000000006, 74.837757999999994], [-92.768285000000006, 75.38682], [-92.889905999999996, 75.882655], [-93.893823999999995, 76.319243999999998], [-95.962457000000001, 76.441381000000007], [-97.121379000000005, 76.751078000000007], [-96.745123000000007, 77.161389], [-94.684085999999994, 77.097877999999994]]], [[[-116.198587, 77.645286999999996], [-116.335813, 76.876962000000006], [-117.10605099999999, 76.530032000000006], [-118.040412, 76.481172000000001], [-119.89931799999999, 76.053213], [-121.499995, 75.900019], [-122.854924, 76.116542999999993], [-122.85492499999999, 76.116542999999993], [-121.157535, 76.864508000000001], [-119.103939, 77.512219999999999], [-117.570131, 77.498318999999995], [-116.198587, 77.645286999999996]]], [[[-93.840002999999996, 77.519997000000004], [-94.295608000000001, 77.491343000000001], [-96.169653999999994, 77.555110999999997], [-96.436304000000007, 77.834629000000007], [-94.422577000000004, 77.820004999999995], [-93.720656000000005, 77.634331000000003], [-93.840002999999996, 77.519997000000004]]], [[[-110.186938, 77.697014999999993], [-112.051191, 77.409228999999996], [-113.534279, 77.732207000000002], [-112.724587, 78.051050000000004], [-111.264443, 78.152956000000003], [-109.85445199999999, 77.996324999999999], [-110.186938, 77.697014999999993]]], [[[-109.663146, 78.601973000000001], [-110.881314, 78.40692], [-112.542091, 78.407902000000007], [-112.525891, 78.550555000000003], [-111.50001, 78.849993999999995], [-110.963661, 78.804440999999997], [-109.663146, 78.601973000000001]]], [[[-95.830295000000007, 78.056940999999995], [-97.309843000000001, 77.850596999999993], [-98.124289000000005, 78.082857000000004], [-98.552868000000004, 78.458105000000003], [-98.631984000000003, 78.871930000000006], [-97.337231000000003, 78.831984000000006], [-96.754399000000006, 78.765812999999994], [-95.559278000000006, 78.418315000000007], [-95.830295000000007, 78.056940999999995]]], [[[-100.060192, 78.324753999999999], [-99.670939000000004, 77.907544999999999], [-101.30394, 78.018985000000001], [-102.949809, 78.343228999999994], [-105.17613299999999, 78.380331999999996], [-104.210429, 78.677419999999998], [-105.41958, 78.918335999999996], [-105.492289, 79.301593999999994], [-103.52928199999999, 79.165349000000006], [-100.825158, 78.800461999999996], [-100.060192, 78.324753999999999]]], [[[-87.019999999999996, 79.659999999999997], [-85.814350000000005, 79.3369], [-87.187560000000005, 79.039299999999997], [-89.035349999999994, 78.287229999999994], [-90.804360000000003, 78.215329999999994], [-92.876689999999996, 78.343329999999995], [-93.951160000000002, 78.750990000000002], [-93.935739999999996, 79.113730000000004], [-93.145240000000001, 79.380099999999999], [-94.974000000000004, 79.372479999999996], [-96.076139999999995, 79.705020000000005], [-96.709720000000004, 80.157769999999999], [-96.016440000000003, 80.602329999999995], [-95.323449999999994, 80.907290000000003], [-94.298429999999996, 80.977270000000004], [-94.735420000000005, 81.206460000000007], [-92.409840000000003, 81.257390000000001], [-91.132890000000003, 80.72345], [-89.450000000000003, 80.509321999999997], [-87.810000000000002, 80.319999999999993], [-87.019999999999996, 79.659999999999997]]], [[[-68.5, 83.106322000000006], [-65.827349999999996, 83.028009999999995], [-63.68, 82.900000000000006], [-61.850000000000001, 82.628600000000006], [-61.893880000000003, 82.361649999999997], [-64.334000000000003, 81.927750000000003], [-66.753420000000006, 81.725269999999995], [-67.657550000000001, 81.501410000000007], [-65.480310000000003, 81.506569999999996], [-67.840000000000003, 80.900000000000006], [-69.469700000000003, 80.616829999999993], [-71.180000000000007, 79.799999999999997], [-73.242800000000003, 79.634150000000005], [-73.879999999999995, 79.430161999999996], [-76.907730000000001, 79.323089999999993], [-75.529240000000001, 79.197659999999999], [-76.220460000000003, 79.019069999999999], [-75.393450000000001, 78.525810000000007], [-76.343540000000004, 78.182959999999994], [-77.888509999999997, 77.899910000000006], [-78.362690000000001, 77.508589999999998], [-79.759510000000006, 77.209680000000006], [-79.619649999999993, 76.983360000000005], [-77.910889999999995, 77.022045000000006], [-77.889110000000002, 76.777955000000006], [-80.561250000000001, 76.178120000000007], [-83.174390000000002, 76.454030000000003], [-86.111840000000001, 76.299009999999996], [-87.599999999999994, 76.420000000000002], [-89.490679999999998, 76.472390000000004], [-89.616100000000003, 76.952129999999997], [-87.767390000000006, 77.178330000000003], [-88.260000000000005, 77.900000000000006], [-87.650000000000006, 77.970222000000007], [-84.976339999999993, 77.538730000000001], [-86.340000000000003, 78.180000000000007], [-87.961920000000006, 78.371809999999996], [-87.151979999999995, 78.758669999999995], [-85.378680000000003, 78.996899999999997], [-85.094949999999997, 79.345429999999993], [-86.507339999999999, 79.736239999999995], [-86.931790000000007, 80.251450000000006], [-84.198440000000005, 80.208359999999999], [-83.408696000000006, 80.099999999999994], [-81.848230000000001, 80.464420000000004], [-84.099999999999994, 80.579999999999998], [-87.598950000000002, 80.516270000000006], [-89.366630000000001, 80.855689999999996], [-90.200000000000003, 81.260000000000005], [-91.367859999999993, 81.553100000000001], [-91.587019999999995, 81.894289999999998], [-90.099999999999994, 82.084999999999994], [-88.932270000000003, 82.117509999999996], [-86.970240000000004, 82.279610000000005], [-85.5, 82.652272999999994], [-84.260005000000007, 82.599999999999994], [-83.180000000000007, 82.319999999999993], [-82.420000000000002, 82.859999999999999], [-81.099999999999994, 83.019999999999996], [-79.306640000000002, 83.130560000000003], [-76.25, 83.172059000000004], [-75.718779999999995, 83.064040000000006], [-72.831530000000001, 83.233239999999995], [-70.665764999999993, 83.169781], [-68.5, 83.106322000000006]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043d\u0430\u0434\u0430", "fr": "Canada", "en": "Canada", "nl": "Canada", "pt": "Canad\u00e1", "no": "Canada", "de": "Kanada", "it": "Canada", "sv": "Kanada", "pl": "Kanada", "fi": "Kanada", "zh": "\u52a0\u62ff\u5927", "ja": "\u30ab\u30ca\u30c0", "es": "Canad\u00e1"}, "label_fr": "Canada", "name": "Canada", "dbpedia_uri": "http://dbpedia.org/resource/Canada"}, "id": "CAN"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.5942260000000008, 47.525058000000001], [9.6329320000000003, 47.347600999999997], [9.4799699999999998, 47.102809999999998], [9.9324480000000008, 46.920727999999997], [10.442701, 46.893546000000001], [10.363378000000001, 46.483570999999998], [9.9228369999999995, 46.314898999999997], [9.1828819999999993, 46.440215000000002], [8.9663059999999994, 46.036932], [8.4899520000000006, 46.005150999999998], [8.31663, 46.163642000000003], [7.755992, 45.824489999999997], [7.2738509999999996, 45.776947999999997], [6.8435930000000003, 45.991146999999998], [6.5000999999999998, 46.429673000000001], [6.0226090000000001, 46.27299], [6.0373890000000001, 46.725779000000003], [6.7687140000000001, 47.287708000000002], [6.7365709999999996, 47.541801], [7.192202, 47.449765999999997], [7.4667589999999997, 47.620581999999999], [8.3173010000000005, 47.613579999999999], [8.5226120000000005, 47.830827999999997], [9.5942260000000008, 47.525058000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f", "fr": "Suisse", "en": "Switzerland", "nl": "Zwitserland", "pt": "Su\u00ed\u00e7a", "no": "Sveits", "de": "Schweiz", "it": "Svizzera", "sv": "Schweiz", "pl": "Szwajcaria", "fi": "Sveitsi", "zh": "\u745e\u58eb", "ja": "\u30b9\u30a4\u30b9", "es": "Suiza"}, "label_fr": "Suisse", "name": "Switzerland", "dbpedia_uri": "http://dbpedia.org/resource/Switzerland"}, "id": "CHE"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-68.634010000000004, -52.636369999999999], [-68.633349999999993, -54.869500000000002], [-67.562439999999995, -54.870010000000001], [-66.959919999999997, -54.896810000000002], [-67.291030000000006, -55.30124], [-68.148629999999997, -55.611829999999998], [-68.639990999999995, -55.580018000000003], [-69.232100000000003, -55.49906], [-69.958089999999999, -55.198430000000002], [-71.005679999999998, -55.053829999999998], [-72.263900000000007, -54.495139999999999], [-73.285200000000003, -53.957520000000002], [-74.662530000000004, -52.837490000000003], [-73.838099999999997, -53.047429999999999], [-72.434179999999998, -53.715400000000002], [-71.107730000000004, -54.074330000000003], [-70.59178, -53.615830000000003], [-70.267480000000006, -52.931229999999999], [-69.345650000000006, -52.518300000000004], [-68.634010000000004, -52.636369999999999]]], [[[-68.219913000000005, -21.494347000000001], [-67.828180000000003, -22.872919], [-67.106673999999998, -22.735925000000002], [-66.985234000000005, -22.986349000000001], [-67.328442999999993, -24.025303000000001], [-68.417653000000001, -24.518554999999999], [-68.386000999999993, -26.185016000000001], [-68.594800000000006, -26.506909], [-68.295541999999998, -26.899339999999999], [-69.001234999999994, -27.521214000000001], [-69.656130000000005, -28.459140999999999], [-70.013549999999995, -29.367923000000001], [-69.919008000000005, -30.336338999999999], [-70.535068999999993, -31.365010000000002], [-70.074399, -33.091209999999997], [-69.814777000000007, -33.273885999999997], [-69.817308999999995, -34.193570999999999], [-70.388048999999995, -35.169688000000001], [-70.364768999999995, -36.005088999999998], [-71.121881000000002, -36.658124000000001], [-71.118624999999994, -37.576827000000002], [-70.814663999999993, -38.552995000000003], [-71.413516999999999, -38.916021999999998], [-71.680761000000004, -39.808163999999998], [-71.915734, -40.832338999999997], [-71.746803999999997, -42.051386000000001], [-72.148898000000003, -42.254888000000001], [-71.915424000000002, -43.408565000000003], [-71.464055999999999, -43.787610999999998], [-71.793622999999997, -44.207172], [-71.329801000000003, -44.407522], [-71.222779000000003, -44.784242999999996], [-71.659316000000004, -44.973689], [-71.552008999999998, -45.560732999999999], [-71.917258000000004, -46.884838000000002], [-72.447355000000002, -47.738532999999997], [-72.331160999999994, -48.244238000000003], [-72.648246999999998, -48.878618000000003], [-73.415436, -49.318435999999998], [-73.328051000000002, -50.378785000000001], [-72.975746999999998, -50.74145], [-72.309973999999997, -50.677010000000003], [-72.329403999999997, -51.425955999999999], [-71.914804000000004, -52.009022000000002], [-69.498362, -52.142761], [-68.571545, -52.299444000000001], [-69.461284000000006, -52.291950999999997], [-69.942779999999999, -52.537931], [-70.845101999999997, -52.899200999999998], [-71.006332, -53.833252000000002], [-71.429794999999999, -53.856454999999997], [-72.557942999999995, -53.531410000000001], [-73.702757000000005, -52.835068999999997], [-73.702757000000005, -52.835070000000002], [-74.946763000000004, -52.262754000000001], [-75.260025999999996, -51.629354999999997], [-74.976631999999995, -51.043396000000001], [-75.479754, -50.378371999999999], [-75.608014999999995, -48.673772999999997], [-75.182770000000005, -47.711919000000002], [-74.126581000000002, -46.939253000000001], [-75.644395000000003, -46.647643000000002], [-74.692154000000002, -45.763976], [-74.351709, -44.103043999999997], [-73.240356000000006, -44.454960999999997], [-72.717804000000001, -42.383355999999999], [-73.388900000000007, -42.117531999999997], [-73.701335999999998, -43.365775999999997], [-74.331942999999995, -43.224958000000001], [-74.017956999999996, -41.794812999999998], [-73.677098999999998, -39.942213000000002], [-73.217592999999994, -39.258688999999997], [-73.505559000000005, -38.282882999999998], [-73.588060999999996, -37.156284999999997], [-73.166717000000006, -37.123779999999996], [-72.553137000000007, -35.508839999999999], [-71.861732000000003, -33.909092999999999], [-71.438450000000003, -32.418899000000003], [-71.668721000000005, -30.920645], [-71.370082999999994, -30.095682], [-71.489894000000007, -28.861442], [-70.905124000000001, -27.64038], [-70.724953999999997, -25.705924], [-70.403965999999997, -23.628996999999998], [-70.091245999999998, -21.393319000000002], [-70.164420000000007, -19.756468000000002], [-70.372572000000005, -18.347975000000002], [-69.858444000000006, -18.092694000000002], [-69.590423999999999, -17.580012], [-69.100246999999996, -18.260124999999999], [-68.966818000000004, -18.981683], [-68.442224999999993, -19.405068], [-68.757166999999995, -20.372658000000001], [-68.219913000000005, -21.494347000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0438\u043b\u0438", "fr": "Chili", "en": "Chile", "nl": "Chili", "pt": "Chile", "no": "Chile", "de": "Chile", "it": "Cile", "sv": "Chile", "pl": "Chile", "fi": "Chile", "zh": "\u667a\u5229", "ja": "\u30c1\u30ea", "es": "Chile"}, "label_fr": "Chili", "name": "Chile", "dbpedia_uri": "http://dbpedia.org/resource/Chile"}, "id": "CHL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[110.33918799999999, 18.678394999999998], [109.47521, 18.197700999999999], [108.655208, 18.507681999999999], [108.626217, 19.367888000000001], [109.119056, 19.821038999999999], [110.21159900000001, 20.101254000000001], [110.786551, 20.077534], [111.010051, 19.695930000000001], [110.57064699999999, 19.255879], [110.33918799999999, 18.678394999999998]]], [[[127.65740700000001, 49.760269999999998], [129.397818, 49.440600000000003], [130.58229299999999, 48.729686999999998], [130.98728199999999, 47.790132], [132.50667200000001, 47.788969999999999], [133.37359599999999, 48.183441999999999], [135.02631099999999, 48.478230000000003], [134.50081399999999, 47.578440000000001], [134.11236199999999, 47.212466999999997], [133.769644, 46.116926999999997], [133.097127, 45.144066000000002], [131.883454, 45.321162000000001], [131.02521200000001, 44.967953000000001], [131.288555, 44.111519999999999], [131.144688, 42.929989999999997], [130.63386600000001, 42.903015000000003], [130.640016, 42.395009000000002], [129.99426700000001, 42.985387000000003], [129.59666899999999, 42.424982], [128.05221499999999, 41.994284999999998], [128.20843300000001, 41.466771999999999], [127.343783, 41.503152], [126.869083, 41.816569000000001], [126.182045, 41.107335999999997], [125.079942, 40.569823999999997], [124.265625, 39.928493000000003], [122.86757, 39.637788], [122.131388, 39.170451999999997], [121.054554, 38.897471000000003], [121.585995, 39.360854000000003], [121.376757, 39.750261000000002], [122.168595, 40.422443000000001], [121.640359, 40.946390000000001], [120.768629, 40.593387999999997], [119.639602, 39.898055999999997], [119.023464, 39.252333], [118.042749, 39.204273999999998], [117.532702, 38.737636000000002], [118.05969899999999, 38.061475999999999], [118.87815000000001, 37.897325000000002], [118.911636, 37.448464000000001], [119.70280200000001, 37.156388999999997], [120.823457, 37.870427999999997], [121.711259, 37.481122999999997], [122.35793700000001, 37.454484000000001], [122.51999499999999, 36.930613999999998], [121.104164, 36.651328999999997], [120.63700900000001, 36.111440000000002], [119.664562, 35.609791000000001], [119.151208, 34.909858999999997], [120.227525, 34.360332], [120.620369, 33.376722999999998], [121.22901400000001, 32.460318999999998], [121.908146, 31.692174000000001], [121.891919, 30.949352000000001], [121.264257, 30.676266999999999], [121.503519, 30.142914999999999], [122.092114, 29.832519999999999], [121.938428, 29.018021999999998], [121.684439, 28.225512999999999], [121.12566099999999, 28.135673000000001], [120.395473, 27.053207], [119.585497, 25.740780999999998], [118.656871, 24.547391000000001], [117.281606, 23.624500999999999], [115.89073500000001, 22.782872999999999], [114.76382700000001, 22.668074000000001], [114.152547, 22.223759999999999], [113.80678, 22.54834], [113.241078, 22.051366999999999], [111.843592, 21.550494], [110.785466, 21.397144000000001], [110.444039, 20.341032999999999], [109.889861, 20.282457000000001], [109.627655, 21.008227000000002], [109.86448799999999, 21.395050999999999], [108.522813, 21.715212000000001], [108.05018, 21.552379999999999], [107.04342, 21.811899], [106.567273, 22.218205000000001], [106.725403, 22.794267999999999], [105.81124699999999, 22.976891999999999], [105.32920900000001, 23.352063000000001], [104.47685799999999, 22.81915], [103.504515, 22.703757], [102.706992, 22.708794999999999], [102.170436, 22.464753000000002], [101.652018, 22.318199], [101.80312000000001, 21.174367], [101.270026, 21.201651999999999], [101.18000499999999, 21.436572999999999], [101.15003299999999, 21.849983999999999], [100.416538, 21.558838999999999], [99.983489000000006, 21.742937000000001], [99.240898999999999, 22.118314000000002], [99.531992000000002, 22.949038999999999], [98.898748999999995, 23.142721999999999], [98.660262000000003, 24.063286000000002], [97.60472, 23.897404999999999], [97.724609000000001, 25.083637], [98.671837999999994, 25.918703000000001], [98.712093999999993, 26.743535999999999], [98.682689999999994, 27.508811999999999], [98.246230999999995, 27.747221], [97.911987999999994, 28.335944999999999], [97.327113999999995, 28.261583000000002], [96.248833000000005, 28.411031000000001], [96.586590999999999, 28.83098], [96.117678999999995, 29.452801999999998], [95.404802000000004, 29.031717], [94.565989999999999, 29.277438], [93.413347999999999, 28.640629000000001], [92.503118999999998, 27.896875999999999], [91.696657000000002, 27.771742], [91.258853999999999, 28.040614000000001], [90.730513999999999, 28.064954], [90.015828999999997, 28.296438999999999], [89.475809999999996, 28.042759], [88.814248000000006, 27.299316000000001], [88.730326000000005, 28.086865], [88.120441, 27.876542000000001], [86.954516999999996, 27.974262], [85.823319999999995, 28.203576000000002], [85.011638000000005, 28.642773999999999], [84.234579999999994, 28.839894000000001], [83.898993000000004, 29.320226000000002], [83.337114999999997, 29.463732], [82.327512999999996, 30.115268], [81.525803999999994, 30.422716999999999], [81.111255999999997, 30.183481], [79.721367000000001, 30.882715000000001], [78.738894000000002, 31.515906000000001], [78.458445999999995, 32.618164], [79.176129000000003, 32.483780000000003], [79.208892000000006, 32.994394999999997], [78.811086000000003, 33.506197999999998], [78.912268999999995, 34.321936000000001], [77.837451000000001, 35.494010000000003], [76.192847999999998, 35.898403000000002], [75.896896999999996, 36.666806000000001], [75.158028000000002, 37.133031000000003], [74.980001999999999, 37.419989999999999], [74.829986000000005, 37.990006999999999], [74.864816000000005, 38.378846000000003], [74.257514, 38.606507000000001], [73.928852000000006, 38.505814999999998], [73.675379000000007, 39.431237000000003], [73.960013000000004, 39.660007999999998], [73.822243999999998, 39.893973000000003], [74.776861999999994, 40.366425], [75.467827999999997, 40.562072000000001], [76.526368000000005, 40.427945999999999], [76.904483999999997, 41.066485999999998], [78.187196999999998, 41.185316], [78.543661, 41.582242999999998], [80.119429999999994, 42.123941000000002], [80.259990000000002, 42.349998999999997], [80.180149999999998, 42.920068000000001], [80.866206000000005, 43.180362000000002], [79.966105999999996, 44.917516999999997], [81.947070999999994, 45.317027000000003], [82.458926000000005, 45.539650000000002], [83.180484000000007, 47.330030999999998], [85.164289999999994, 47.000956000000002], [85.720483999999999, 47.452969000000003], [85.768232999999995, 48.455750999999999], [86.598776000000001, 48.549182000000002], [87.359970000000004, 49.214981000000002], [87.751264000000006, 49.297198000000002], [88.013831999999994, 48.599463], [88.854298, 48.069082000000002], [90.280826000000005, 47.693548999999997], [90.970809000000003, 46.888145999999999], [90.585768000000002, 45.719715999999998], [90.945539999999994, 45.286073000000002], [92.133891000000006, 45.115076000000002], [93.480733999999998, 44.975472000000003], [94.688929000000002, 44.352331999999997], [95.306875000000005, 44.241331000000002], [95.762455000000003, 43.319448999999999], [96.349395999999999, 42.725634999999997], [97.451757000000001, 42.748890000000003], [99.515816999999998, 42.524690999999997], [100.845866, 42.663803999999999], [101.83304, 42.514873000000001], [103.31227800000001, 41.907468000000001], [104.522282, 41.908346999999999], [104.964994, 41.597410000000004], [106.129316, 42.134327999999996], [107.744773, 42.481515999999999], [109.243596, 42.519446000000002], [110.412103, 42.871234000000001], [111.129682, 43.406834000000003], [111.829588, 43.743118000000003], [111.667737, 44.073175999999997], [111.348377, 44.457442], [111.873306, 45.102079000000003], [112.43606200000001, 45.011645999999999], [113.46390700000001, 44.808892999999998], [114.46033199999999, 45.339816999999996], [115.985096, 45.727235], [116.717868, 46.388202], [117.421701, 46.672733000000001], [118.874326, 46.805411999999997], [119.66327, 46.692680000000003], [119.772824, 47.048059000000002], [118.866574, 47.747059999999998], [118.064143, 48.06673], [117.295507, 47.697709000000003], [116.308953, 47.853409999999997], [115.74283699999999, 47.726545000000002], [115.485282, 48.135382999999997], [116.191802, 49.134597999999997], [116.67880100000001, 49.888531], [117.879244, 49.510983000000003], [119.288461, 50.142882999999998], [119.279366, 50.582908000000003], [120.18205, 51.643566], [120.738191, 51.964115], [120.72578900000001, 52.516226000000003], [120.177089, 52.753886000000001], [121.003085, 53.251401000000001], [122.24574800000001, 53.431725999999998], [123.571507, 53.458804000000001], [125.06821100000001, 53.161045000000001], [125.946349, 52.792799000000002], [126.56439899999999, 51.784255000000002], [126.93915699999999, 51.353893999999997], [127.28745600000001, 50.739797000000003], [127.65740700000001, 49.760269999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0438\u0442\u0430\u0439 (\u0441\u0442\u0440\u0430\u043d\u0430)", "fr": "Chine", "en": "China", "nl": "China", "pt": "China (civiliza\u00e7\u00e3o)", "no": "Kina", "de": "China (Kulturraum)", "sv": "Kina (region)", "pl": "Chiny", "zh": "\u4e2d\u56fd", "ja": "\u4e2d\u56fd", "es": "China (regi\u00f3n)"}, "label_fr": "Chine", "name": "China", "dbpedia_uri": "http://dbpedia.org/resource/China"}, "id": "CHN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-2.856125, 4.9944759999999997], [-3.3110840000000001, 4.9842959999999996], [-4.0088200000000001, 5.1798130000000002], [-4.6499170000000003, 5.1682639999999997], [-5.8344959999999997, 4.9937009999999997], [-6.5287689999999996, 4.7050879999999999], [-7.5189409999999999, 4.3382880000000004], [-7.7121589999999998, 4.3645659999999999], [-7.6353679999999997, 5.1881589999999997], [-7.5397150000000002, 5.313345], [-7.5701530000000004, 5.7073520000000002], [-7.9936930000000004, 6.1261900000000002], [-8.3113480000000006, 6.1930329999999998], [-8.6028800000000007, 6.4675640000000003], [-8.3854520000000008, 6.9118009999999996], [-8.4854459999999996, 7.3952080000000002], [-8.4392980000000009, 7.6860429999999997], [-8.2807030000000008, 7.6871799999999997], [-8.2217920000000007, 8.123329], [-8.2990490000000001, 8.3164440000000006], [-8.2034990000000008, 8.4554530000000003], [-7.8320999999999996, 8.575704], [-8.0791140000000006, 9.3762240000000006], [-8.3096160000000001, 9.7895319999999995], [-8.2293369999999992, 10.129020000000001], [-8.0299440000000004, 10.206535000000001], [-7.8995899999999999, 10.297382000000001], [-7.6227590000000003, 10.147235999999999], [-6.8505070000000003, 10.138994], [-6.666461, 10.430811], [-6.4939650000000002, 10.411303], [-6.2052230000000002, 10.524061], [-6.0504519999999999, 10.096361], [-5.8169259999999996, 10.222555], [-5.4043419999999998, 10.370737], [-4.9546530000000004, 10.152714], [-4.779884, 9.8219849999999997], [-4.330247, 9.6108349999999998], [-3.9804490000000001, 9.8623440000000002], [-3.5118990000000001, 9.9003259999999997], [-2.827496, 9.6424610000000008], [-2.5621900000000002, 8.2196280000000002], [-2.9835850000000002, 7.3797050000000004], [-3.24437, 6.2504720000000002], [-2.8107009999999999, 5.3890510000000003], [-2.856125, 4.9944759999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0442-\u0434\u2019\u0418\u0432\u0443\u0430\u0440", "fr": "C\u00f4te d'Ivoire", "en": "C\u00f4te d'Ivoire", "nl": "Ivoorkust", "pt": "Costa do Marfim", "no": "Elfenbenskysten", "de": "Elfenbeink\u00fcste", "it": "Costa d'Avorio", "sv": "Elfenbenskusten", "pl": "Wybrze\u017ce Ko\u015bci S\u0142oniowej", "fi": "Norsunluurannikko", "zh": "\u79d1\u7279\u8fea\u74e6", "ja": "\u30b3\u30fc\u30c8\u30b8\u30dc\u30ef\u30fc\u30eb", "es": "Costa de Marfil"}, "label_fr": "C\u00f4te d'Ivoire", "name": "Ivory Coast", "dbpedia_uri": "http://dbpedia.org/resource/C%C3%B4te_d%27Ivoire"}, "id": "CIV"}, {"geometry": {"type": "Polygon", "coordinates": [[[13.075822000000001, 2.2670970000000001], [12.951333999999999, 2.3216160000000001], [12.35938, 2.192812], [11.751664999999999, 2.3267579999999999], [11.276449, 2.2610510000000001], [9.6491579999999999, 2.2838660000000002], [9.7951960000000007, 3.073404], [9.4043670000000006, 3.7345269999999999], [8.9481160000000006, 3.9041290000000002], [8.7449239999999993, 4.3522150000000002], [8.4888159999999999, 4.4956170000000002], [8.5002879999999994, 4.7719829999999996], [8.7575330000000005, 5.4796659999999999], [9.2331629999999993, 6.4444910000000002], [9.5227059999999994, 6.4534820000000002], [10.118277000000001, 7.0387700000000004], [10.497375, 7.055358], [11.058788, 6.6444270000000003], [11.745774000000001, 6.9813830000000001], [11.839309, 7.3970419999999999], [12.063946, 7.7998079999999996], [12.218871999999999, 8.3058239999999994], [12.753672, 8.7177629999999997], [12.955468, 9.4177719999999994], [13.1676, 9.6406259999999993], [13.308676, 10.160361999999999], [13.572950000000001, 10.798565999999999], [14.415379, 11.572369], [14.468192, 11.904752], [14.577178, 12.085361000000001], [14.181336, 12.483656999999999], [14.213531, 12.802035], [14.495787, 12.859396], [14.893386, 12.219048000000001], [14.960152000000001, 11.555574], [14.923565, 10.891325], [15.467873000000001, 9.9823369999999993], [14.909354, 9.9921290000000003], [14.627200999999999, 9.9209189999999996], [14.171466000000001, 10.021378], [13.954217999999999, 9.5494950000000003], [14.544466999999999, 8.9658610000000003], [14.979996, 8.7961039999999997], [15.120865999999999, 8.3821499999999993], [15.436092, 7.692812], [15.27946, 7.4219249999999999], [14.776545, 6.4084979999999998], [14.53656, 6.2269589999999999], [14.459407000000001, 5.4517610000000003], [14.558935999999999, 5.0305980000000003], [14.478372, 4.7326050000000004], [14.950953, 4.2103890000000002], [15.03622, 3.8513670000000002], [15.405396, 3.3353009999999998], [15.862731999999999, 3.0135369999999999], [15.907381000000001, 2.5573890000000001], [16.012851999999999, 2.2676400000000001], [15.940918999999999, 1.727673], [15.146342000000001, 1.9640150000000001], [14.337813000000001, 2.227875], [13.075822000000001, 2.2670970000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043c\u0435\u0440\u0443\u043d", "fr": "Cameroun", "en": "Cameroon", "nl": "Kameroen", "pt": "Camar\u00f5es", "no": "Kamerun", "de": "Kamerun", "it": "Camerun", "sv": "Kamerun", "pl": "Kamerun", "fi": "Kamerun", "zh": "\u5580\u9ea6\u9686", "ja": "\u30ab\u30e1\u30eb\u30fc\u30f3", "es": "Camer\u00fan"}, "label_fr": "Cameroun", "name": "Cameroon", "dbpedia_uri": "http://dbpedia.org/resource/Cameroon"}, "id": "CMR"}, {"geometry": {"type": "Polygon", "coordinates": [[[30.833860000000001, 3.509166], [30.773347000000001, 2.3398829999999999], [31.174149, 2.2044649999999999], [30.85267, 1.849396], [30.468508, 1.5838049999999999], [30.086154000000001, 1.0623130000000001], [29.875779000000001, 0.59738000000000002], [29.819503000000001, -0.20530999999999999], [29.587838000000001, -0.58740599999999998], [29.579466, -1.341313], [29.291886999999999, -1.6200559999999999], [29.254835, -2.2151100000000001], [29.117478999999999, -2.292211], [29.024926000000001, -2.8392580000000001], [29.276384, -3.2939069999999999], [29.339998000000001, -4.4999830000000003], [29.519987, -5.4199789999999997], [29.419993000000002, -5.9399990000000003], [29.620031999999998, -6.5200149999999999], [30.199997, -7.0799810000000001], [30.740015, -8.3400069999999999], [30.346086, -8.2382570000000008], [29.002911999999998, -8.4070319999999992], [28.734867000000001, -8.5265590000000007], [28.449871000000002, -9.1649180000000001], [28.673681999999999, -9.6059249999999992], [28.49607, -10.789884000000001], [28.372253000000001, -11.793647], [28.642416999999998, -11.971569000000001], [29.341548, -12.360744], [29.616001000000001, -12.178895000000001], [29.699614, -13.257227], [28.934286, -13.248958], [28.523561999999998, -12.698604], [28.155108999999999, -12.272481000000001], [27.388798999999999, -12.132747], [27.16442, -11.608748], [26.553087999999999, -11.924440000000001], [25.752310000000001, -11.784965], [25.418118, -11.330935999999999], [24.783169999999998, -11.238694000000001], [24.314516000000001, -11.262826], [24.257155000000001, -10.951993], [23.912215, -10.926826], [23.456790999999999, -10.867863], [22.837344999999999, -11.017621999999999], [22.402798000000001, -10.993074999999999], [22.155268, -11.084801000000001], [22.208753000000002, -9.8947959999999995], [21.875181999999999, -9.5237079999999992], [21.801801000000001, -8.9087069999999997], [21.949131000000001, -8.3059010000000004], [21.746455999999998, -7.9200850000000003], [21.728110999999998, -7.2908720000000002], [20.514748000000001, -7.2996059999999998], [20.601823, -6.9393180000000001], [20.091622000000001, -6.9430899999999998], [20.037723, -7.1163610000000004], [19.417501999999999, -7.1554289999999998], [19.166613000000002, -7.7381840000000004], [19.016752, -7.9882460000000002], [18.464175999999998, -7.8470139999999997], [18.134222000000001, -7.9876779999999998], [17.47297, -8.0685509999999994], [17.089995999999999, -7.5456890000000003], [16.860191, -7.2222980000000003], [16.573180000000001, -6.6226450000000003], [16.326528, -5.8774699999999998], [13.375597000000001, -5.8642409999999998], [13.024869000000001, -5.9843890000000002], [12.735170999999999, -5.9656820000000002], [12.322431999999999, -6.1000920000000001], [12.182337, -5.7899310000000002], [12.436688, -5.684304], [12.468004000000001, -5.2483620000000002], [12.631612000000001, -4.9912710000000002], [12.995517, -4.7811029999999999], [13.258240000000001, -4.8829570000000002], [13.600235, -4.5001379999999997], [14.144956000000001, -4.5100090000000002], [14.209035, -4.7930919999999997], [14.582604, -4.9702390000000003], [15.170992, -4.3435069999999998], [15.753539999999999, -3.855165], [16.00629, -3.5351330000000001], [15.972803000000001, -2.7123919999999999], [16.407091999999999, -1.7409269999999999], [16.865307000000001, -1.225816], [17.523716, -0.74382999999999999], [17.638645, -0.42483199999999999], [17.663553, -0.058083999999999997], [17.826540000000001, 0.28892299999999999], [17.774191999999999, 0.85565899999999995], [17.898834999999998, 1.741832], [18.094276000000001, 2.3657219999999999], [18.393792000000001, 2.9004430000000001], [18.453064999999999, 3.5043859999999998], [18.542981999999999, 4.2017850000000001], [18.932312, 4.7095060000000002], [19.467784000000002, 5.0315279999999998], [20.290679000000001, 4.6916779999999996], [20.927591, 4.3227859999999998], [21.659123000000001, 4.224342], [22.405124000000001, 4.0291600000000001], [22.704124, 4.633051], [22.841480000000001, 4.7101259999999998], [23.297214, 4.609693], [24.410530999999999, 5.108784], [24.805029000000001, 4.8972470000000001], [25.128833, 4.9272450000000001], [25.278797999999998, 5.1704080000000001], [25.650455000000001, 5.2560880000000001], [26.402761000000002, 5.1508750000000001], [27.044065, 5.127853], [27.374226, 5.2339440000000002], [27.979977000000002, 4.4084130000000004], [28.428993999999999, 4.2871550000000003], [28.696677999999999, 4.4550770000000002], [29.159078000000001, 4.3892670000000003], [29.715994999999999, 4.6008050000000003], [29.953499999999998, 4.173699], [30.833860000000001, 3.509166]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u043d\u0433\u043e", "fr": "R\u00e9publique d\u00e9mocratique du Congo", "en": "Democratic Republic of the Congo", "nl": "Congo-Kinshasa", "pt": "Rep\u00fablica Democr\u00e1tica do Congo", "no": "Den demokratiske republikken Kongo", "de": "Demokratische Republik Kongo", "it": "Repubblica Democratica del Congo", "sv": "Demokratiska republiken Kongo", "pl": "Demokratyczna Republika Konga", "fi": "Kongon demokraattinen tasavalta", "zh": "\u521a\u679c\u6c11\u4e3b\u5171\u548c\u56fd", "ja": "\u30b3\u30f3\u30b4\u6c11\u4e3b\u5171\u548c\u56fd", "es": "Rep\u00fablica Democr\u00e1tica del Congo"}, "label_fr": "R\u00e9publique d\u00e9mocratique du Congo", "name": "Democratic Republic of the Congo", "dbpedia_uri": "http://dbpedia.org/resource/Democratic_Republic_of_the_Congo"}, "id": "COD"}, {"geometry": {"type": "Polygon", "coordinates": [[[12.995517, -4.7811029999999999], [12.620760000000001, -4.4380230000000003], [12.318607999999999, -4.60623], [11.914963, -5.0379870000000002], [11.093773000000001, -3.9788269999999999], [11.855122, -3.4268709999999998], [11.478039000000001, -2.765619], [11.820964, -2.5141610000000001], [12.495703000000001, -2.3916879999999998], [12.575284, -1.9485110000000001], [13.109619, -2.4287399999999999], [13.992407, -2.4708049999999999], [14.29921, -1.9982759999999999], [14.425456000000001, -1.333407], [14.316418000000001, -0.55262699999999998], [13.843321, 0.038758000000000001], [14.276266, 1.19693], [14.026669, 1.3956770000000001], [13.282631, 1.314184], [13.003114, 1.8308960000000001], [13.075822000000001, 2.2670970000000001], [14.337813000000001, 2.227875], [15.146342000000001, 1.9640150000000001], [15.940918999999999, 1.727673], [16.012851999999999, 2.2676400000000001], [16.537057999999998, 3.1982550000000001], [17.133042, 3.7281970000000002], [17.809899999999999, 3.5601959999999999], [18.453064999999999, 3.5043859999999998], [18.393792000000001, 2.9004430000000001], [18.094276000000001, 2.3657219999999999], [17.898834999999998, 1.741832], [17.774191999999999, 0.85565899999999995], [17.826540000000001, 0.28892299999999999], [17.663553, -0.058083999999999997], [17.638645, -0.42483199999999999], [17.523716, -0.74382999999999999], [16.865307000000001, -1.225816], [16.407091999999999, -1.7409269999999999], [15.972803000000001, -2.7123919999999999], [16.00629, -3.5351330000000001], [15.753539999999999, -3.855165], [15.170992, -4.3435069999999998], [14.582604, -4.9702390000000003], [14.209035, -4.7930919999999997], [14.144956000000001, -4.5100090000000002], [13.600235, -4.5001379999999997], [13.258240000000001, -4.8829570000000002], [12.995517, -4.7811029999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u043d\u0433\u043e", "fr": "R\u00e9publique du Congo", "en": "Republic of the Congo", "nl": "Congo-Brazzaville", "pt": "Congo", "no": "Republikken Kongo", "de": "Republik Kongo", "it": "Repubblica del Congo", "sv": "Kongo-Brazzaville", "pl": "Kongo", "fi": "Kongon tasavalta", "zh": "\u521a\u679c\u5171\u548c\u56fd", "ja": "\u30b3\u30f3\u30b4\u5171\u548c\u56fd", "es": "Rep\u00fablica del Congo"}, "label_fr": "R\u00e9publique du Congo", "name": "Republic of the Congo", "dbpedia_uri": "http://dbpedia.org/resource/Republic_of_the_Congo"}, "id": "COG"}, {"geometry": {"type": "Polygon", "coordinates": [[[-75.373222999999996, -0.152032], [-75.801466000000005, 0.084801000000000001], [-76.292314000000005, 0.416047], [-76.57638, 0.256936], [-77.424983999999995, 0.39568700000000001], [-77.668612999999993, 0.82589299999999999], [-77.855061000000006, 0.80992500000000001], [-78.855259000000004, 1.380924], [-78.990934999999993, 1.69137], [-78.617830999999995, 1.7664040000000001], [-78.662118000000007, 2.2673549999999998], [-78.427610000000001, 2.629556], [-77.931543000000005, 2.6966060000000001], [-77.510430999999997, 3.3250169999999999], [-77.127690000000001, 3.8496359999999998], [-77.496272000000005, 4.0876060000000001], [-77.307601000000005, 4.6679839999999997], [-77.533220999999998, 5.5828119999999997], [-77.318815000000001, 5.8453540000000004], [-77.476660999999993, 6.6911160000000001], [-77.881570999999994, 7.2237710000000002], [-77.753414000000006, 7.7098399999999998], [-77.431107999999995, 7.6380610000000004], [-77.242565999999997, 7.9352780000000003], [-77.474722999999997, 8.524286], [-77.353361000000007, 8.6705050000000004], [-76.836674000000002, 8.6387490000000007], [-76.086383999999995, 9.3368210000000005], [-75.674599999999998, 9.4432480000000005], [-75.664704, 9.7740030000000004], [-75.480425999999994, 10.61899], [-74.906895000000006, 11.083045], [-74.276752999999999, 11.102036], [-74.197222999999994, 11.310473], [-73.414764000000005, 11.227015], [-72.627835000000005, 11.731972000000001], [-72.238195000000005, 11.955550000000001], [-71.754090000000005, 12.437303], [-71.399822, 12.376041000000001], [-71.137461000000002, 12.112982000000001], [-71.331584000000007, 11.776284], [-71.973922000000002, 11.608672], [-72.227575000000002, 11.108701999999999], [-72.614658000000006, 10.821975], [-72.905286000000004, 10.450343999999999], [-73.027603999999997, 9.7367699999999999], [-73.304952, 9.1519999999999992], [-72.788730000000001, 9.0850270000000002], [-72.660494999999997, 8.6252879999999994], [-72.439862000000005, 8.4052749999999996], [-72.360900999999998, 8.0026379999999993], [-72.479679000000004, 7.6325060000000002], [-72.444486999999995, 7.4237849999999996], [-72.198352, 7.3404309999999997], [-71.960176000000004, 6.9916150000000004], [-70.674233999999998, 7.0877850000000002], [-70.093312999999995, 6.9603760000000001], [-69.389480000000006, 6.0998609999999998], [-68.985319000000004, 6.2068050000000001], [-68.265051999999997, 6.1532679999999997], [-67.695087000000001, 6.2673180000000004], [-67.341440000000006, 6.0954680000000003], [-67.521531999999993, 5.55687], [-67.744697000000002, 5.2211290000000004], [-67.823012000000006, 4.5039369999999996], [-67.621836000000002, 3.8394819999999998], [-67.337564, 3.5423420000000001], [-67.303173000000001, 3.318454], [-67.809938000000002, 2.8206549999999999], [-67.447091999999998, 2.6002809999999998], [-67.181293999999994, 2.2506379999999999], [-66.876326000000006, 1.2533609999999999], [-67.065048000000004, 1.130112], [-67.259997999999996, 1.7199990000000001], [-67.537809999999993, 2.0371630000000001], [-67.868565000000004, 1.692455], [-69.816973000000004, 1.7148049999999999], [-69.804597000000001, 1.089081], [-69.218637999999999, 0.98567700000000003], [-69.252433999999994, 0.60265100000000005], [-69.452395999999993, 0.70615899999999998], [-70.015566000000007, 0.54141399999999995], [-70.020656000000002, -0.18515599999999999], [-69.577065000000005, -0.54999200000000004], [-69.420485999999997, -1.122619], [-69.444102000000001, -1.556287], [-69.893635000000003, -4.2981870000000004], [-70.394043999999994, -3.766591], [-70.692682000000005, -3.7428720000000002], [-70.047708999999998, -2.7251560000000001], [-70.813475999999994, -2.2568649999999999], [-71.413646, -2.3428019999999998], [-71.774760999999998, -2.1697899999999999], [-72.325787000000005, -2.434218], [-73.070391999999998, -2.308954], [-73.659503999999998, -1.260491], [-74.122394999999997, -1.0028330000000001], [-74.441601000000006, -0.53081999999999996], [-75.106624999999994, -0.057204999999999999], [-75.373222999999996, -0.152032]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f", "fr": "Colombie", "en": "Colombia", "nl": "Colombia", "pt": "Col\u00f4mbia", "no": "Colombia", "de": "Kolumbien", "it": "Colombia", "sv": "Colombia", "pl": "Kolumbia", "fi": "Kolumbia", "zh": "\u54e5\u4f26\u6bd4\u4e9a", "ja": "\u30b3\u30ed\u30f3\u30d3\u30a2", "es": "Colombia"}, "label_fr": "Colombie", "name": "Colombia", "dbpedia_uri": "http://dbpedia.org/resource/Colombia"}, "id": "COL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-82.965783000000002, 8.225028], [-83.508437000000001, 8.4469270000000005], [-83.711473999999995, 8.6568360000000002], [-83.596312999999995, 8.8304430000000007], [-83.632642000000004, 9.0513860000000008], [-83.909886, 9.2908030000000004], [-84.303402000000006, 9.4873539999999998], [-84.647644, 9.6155369999999998], [-84.713351000000003, 9.9080519999999996], [-84.975660000000005, 10.086722999999999], [-84.911375000000007, 9.795992], [-85.110923, 9.5570400000000006], [-85.339488000000003, 9.8345420000000008], [-85.660786999999999, 9.9333469999999995], [-85.797444999999996, 10.134886], [-85.791708999999997, 10.439337], [-85.659313999999995, 10.754331000000001], [-85.941725000000005, 10.895277999999999], [-85.712540000000004, 11.088445], [-85.561852000000002, 11.217119], [-84.903002999999998, 10.952303000000001], [-84.673068999999998, 11.082656999999999], [-84.355930999999998, 10.999226], [-84.190179000000001, 10.79345], [-83.895054000000002, 10.726839], [-83.655612000000005, 10.938764000000001], [-83.402320000000003, 10.395438], [-83.015676999999997, 9.9929819999999996], [-82.546195999999995, 9.5661349999999992], [-82.932890999999998, 9.4768120000000007], [-82.927154999999999, 9.0743299999999998], [-82.719183000000001, 8.9257089999999994], [-82.868656999999999, 8.8072660000000003], [-82.829770999999994, 8.6262950000000007], [-82.913176000000007, 8.4235170000000004], [-82.965783000000002, 8.225028]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430", "fr": "Costa Rica", "en": "Costa Rica", "nl": "Costa Rica", "pt": "Costa Rica", "no": "Costa Rica", "de": "Costa Rica", "it": "Costa Rica", "sv": "Costa Rica", "pl": "Kostaryka", "fi": "Costa Rica", "zh": "\u54e5\u65af\u8fbe\u9ece\u52a0", "ja": "\u30b3\u30b9\u30bf\u30ea\u30ab", "es": "Costa Rica"}, "label_fr": "Costa Rica", "name": "Costa Rica", "dbpedia_uri": "http://dbpedia.org/resource/Costa_Rica"}, "id": "CRI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-82.268151000000003, 23.188611000000002], [-81.404456999999994, 23.117270999999999], [-80.618769, 23.105979999999999], [-79.679524000000001, 22.765302999999999], [-79.281486000000001, 22.399201999999999], [-78.347434000000007, 22.512166000000001], [-77.993296000000001, 22.277194000000001], [-77.146422000000001, 21.657851000000001], [-76.523825000000002, 21.20682], [-76.19462, 21.220565000000001], [-75.598222000000007, 21.016624], [-75.671059999999997, 20.735091000000001], [-74.933896000000004, 20.693905000000001], [-74.178025000000005, 20.284628000000001], [-74.296648000000005, 20.050379], [-74.961595000000003, 19.923435000000001], [-75.634680000000003, 19.873774000000001], [-76.323656, 19.952891000000001], [-77.755481000000003, 19.855481000000001], [-77.085108000000005, 20.413354000000002], [-77.492654999999999, 20.673105], [-78.137292000000002, 20.739948999999999], [-78.482827, 21.028613], [-78.719866999999994, 21.598113999999999], [-79.284999999999997, 21.559175], [-80.217474999999993, 21.827324000000001], [-80.517534999999995, 22.037078999999999], [-81.820943, 22.192056999999998], [-82.169991999999993, 22.387108999999999], [-81.795001999999997, 22.636965], [-82.775897999999998, 22.68815], [-83.494459000000006, 22.168517999999999], [-83.908799999999999, 22.154565000000002], [-84.052150999999995, 21.910575000000001], [-84.547030000000007, 21.801227999999998], [-84.974911000000006, 21.896028000000001], [-84.447062000000003, 22.20495], [-84.230356999999998, 22.565754999999999], [-83.778239999999997, 22.788118000000001], [-83.267548000000005, 22.983042000000001], [-82.510435999999999, 23.078747], [-82.268151000000003, 23.188611000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0443\u0431\u0430", "fr": "Cuba", "en": "Cuba", "nl": "Cuba (land)", "pt": "Cuba", "no": "Cuba", "de": "Kuba", "it": "Cuba", "sv": "Kuba", "pl": "Kuba", "fi": "Kuuba", "zh": "\u53e4\u5df4", "ja": "\u30ad\u30e5\u30fc\u30d0", "es": "Cuba"}, "label_fr": "Cuba", "name": "Cuba", "dbpedia_uri": "http://dbpedia.org/resource/Cuba"}, "id": "CUB"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.731780000000001, 35.140025999999999], [32.802473999999997, 35.145504000000003], [32.946961000000002, 35.386702999999997], [33.667226999999997, 35.373215999999999], [34.576473999999997, 35.671596000000001], [33.900804000000001, 35.245756], [33.973616999999997, 35.058506000000001], [33.866439999999997, 35.093595000000001], [33.675392000000002, 35.017862999999998], [33.525685000000003, 35.038688], [33.475816999999999, 35.000345000000003], [33.455922000000001, 35.101424000000002], [33.383833000000003, 35.162711999999999], [33.190976999999997, 35.173124999999999], [32.919572000000002, 35.087833000000003], [32.731780000000001, 35.140025999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u0435\u0446\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u041a\u0438\u043f\u0440\u0430", "fr": "Chypre du Nord", "en": "Northern Cyprus", "nl": "Turkse Republiek Noord-Cyprus", "pt": "Rep\u00fablica Turca do Chipre do Norte", "no": "Nord-Kypros", "de": "T\u00fcrkische Republik Nordzypern", "it": "Repubblica Turca di Cipro del Nord", "sv": "Nordcypern", "pl": "Cypr P\u00f3\u0142nocny", "fi": "Pohjois-Kyproksen turkkilainen tasavalta", "zh": "\u5317\u8cfd\u666e\u52d2\u65af\u571f\u8033\u5176\u5171\u548c\u570b", "ja": "\u5317\u30ad\u30d7\u30ed\u30b9\u30fb\u30c8\u30eb\u30b3\u5171\u548c\u56fd", "es": "Rep\u00fablica Turca del Norte de Chipre"}, "label_fr": "Chypre du Nord", "name": "Northern Cyprus", "dbpedia_uri": "http://dbpedia.org/resource/Northern_Cyprus"}, "id": "-99"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.973616999999997, 35.058506000000001], [34.004880999999997, 34.978098000000003], [32.979827, 34.571869], [32.490296000000001, 34.701655000000002], [32.256667, 35.103231999999998], [32.731780000000001, 35.140025999999999], [32.919572000000002, 35.087833000000003], [33.190976999999997, 35.173124999999999], [33.383833000000003, 35.162711999999999], [33.455922000000001, 35.101424000000002], [33.475816999999999, 35.000345000000003], [33.525685000000003, 35.038688], [33.675392000000002, 35.017862999999998], [33.866439999999997, 35.093595000000001], [33.973616999999997, 35.058506000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u0438\u043f\u0440", "fr": "Chypre (pays)", "en": "Cyprus", "nl": "Cyprus", "pt": "Chipre", "no": "Kypros", "de": "Republik Zypern", "it": "Cipro", "sv": "Cypern", "pl": "Cypr", "fi": "Kyproksen tasavalta", "zh": "\u8cfd\u666e\u52d2\u65af", "ja": "\u30ad\u30d7\u30ed\u30b9", "es": "Chipre"}, "label_fr": "Chypre (pays)", "name": "Cyprus", "dbpedia_uri": "http://dbpedia.org/resource/Cyprus"}, "id": "CYP"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.960287999999998, 48.596981999999997], [16.499282999999998, 48.785808000000003], [16.029647000000001, 48.733899000000001], [15.253416, 49.039073999999999], [14.901446999999999, 48.964402], [14.338898, 48.555304999999997], [13.595946, 48.877172000000002], [13.031328999999999, 49.307068000000001], [12.521024000000001, 49.547415000000001], [12.415191, 49.969121000000001], [12.240111000000001, 50.266337999999998], [12.966837, 50.484076000000002], [13.338132, 50.733234000000003], [14.056228000000001, 50.926918000000001], [14.307013, 51.117268000000003], [14.570717999999999, 51.002338999999999], [15.016996000000001, 51.106673999999998], [15.490971999999999, 50.784730000000003], [16.238627000000001, 50.697732999999999], [16.176252999999999, 50.422606999999999], [16.719476, 50.215747], [16.868769, 50.473973999999998], [17.554566999999999, 50.362146000000003], [17.649445, 50.049038000000003], [18.392914000000001, 49.988629000000003], [18.853144, 49.496229999999997], [18.554970999999998, 49.495015000000002], [18.399994, 49.315001000000002], [18.170497999999998, 49.271515000000001], [18.104973000000001, 49.043982999999997], [17.913512000000001, 48.996493000000001], [17.886485, 48.903475], [17.545006999999998, 48.800018999999999], [17.101984999999999, 48.816969], [16.960287999999998, 48.596981999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0435\u0445\u0438\u044f", "fr": "R\u00e9publique tch\u00e8que", "en": "Czech Republic", "nl": "Tsjechi\u00eb", "pt": "Rep\u00fablica Checa", "no": "Tsjekkia", "de": "Tschechien", "it": "Repubblica Ceca", "sv": "Tjeckien", "pl": "Czechy", "fi": "T\u0161ekki", "zh": "\u6377\u514b", "ja": "\u30c1\u30a7\u30b3", "es": "Rep\u00fablica Checa"}, "label_fr": "R\u00e9publique tch\u00e8que", "name": "Czech Republic", "dbpedia_uri": "http://dbpedia.org/resource/Czech_Republic"}, "id": "CZE"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.9219059999999999, 54.983103999999997], [9.9395799999999994, 54.596642000000003], [10.950112000000001, 54.363607000000002], [10.939467, 54.008693000000001], [11.956251999999999, 54.196486], [12.51844, 54.470371], [13.647467000000001, 54.075510999999999], [14.119686, 53.757029000000003], [14.353315, 53.248170999999999], [14.074521000000001, 52.981262999999998], [14.4376, 52.624850000000002], [14.685026000000001, 52.089947000000002], [14.607098000000001, 51.745187999999999], [15.016996000000001, 51.106673999999998], [14.570717999999999, 51.002338999999999], [14.307013, 51.117268000000003], [14.056228000000001, 50.926918000000001], [13.338132, 50.733234000000003], [12.966837, 50.484076000000002], [12.240111000000001, 50.266337999999998], [12.415191, 49.969121000000001], [12.521024000000001, 49.547415000000001], [13.031328999999999, 49.307068000000001], [13.595946, 48.877172000000002], [13.243357, 48.416114999999998], [12.884103, 48.289146000000002], [13.025850999999999, 47.637583999999997], [12.932627, 47.467646000000002], [12.620760000000001, 47.672387999999998], [12.141356999999999, 47.703082999999999], [11.426413999999999, 47.523766000000002], [10.544504, 47.566398999999997], [10.402084, 47.302487999999997], [9.8960679999999996, 47.580196999999998], [9.5942260000000008, 47.525058000000001], [8.5226120000000005, 47.830827999999997], [8.3173010000000005, 47.613579999999999], [7.4667589999999997, 47.620581999999999], [7.5936760000000003, 48.333019], [8.0992789999999992, 49.017783999999999], [6.6582299999999996, 49.201957999999998], [6.1863200000000003, 49.463802999999999], [6.2427510000000002, 49.902225999999999], [6.0430729999999997, 50.128051999999997], [6.1566580000000002, 50.803721000000003], [5.988658, 51.851616], [6.5893969999999999, 51.852029000000002], [6.8428699999999996, 52.228439999999999], [7.0920529999999999, 53.144043000000003], [6.9051400000000003, 53.482162000000002], [7.1004250000000004, 53.693931999999997], [7.9362389999999996, 53.748296000000003], [8.1217059999999996, 53.527791999999998], [8.8007340000000003, 54.020786000000001], [8.5721179999999997, 54.395645999999999], [8.5262290000000007, 54.962744000000001], [9.2820490000000007, 54.830865000000003], [9.9219059999999999, 54.983103999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f", "fr": "Allemagne", "en": "Germany", "nl": "Duitsland", "pt": "Alemanha", "no": "Tyskland", "de": "Deutschland", "it": "Germania", "sv": "Tyskland", "pl": "Niemcy", "fi": "Saksa", "zh": "\u5fb7\u56fd", "ja": "\u30c9\u30a4\u30c4", "es": "Alemania"}, "label_fr": "Allemagne", "name": "Germany", "dbpedia_uri": "http://dbpedia.org/resource/Germany"}, "id": "DEU"}, {"geometry": {"type": "Polygon", "coordinates": [[[43.081226000000001, 12.699638999999999], [43.317852000000002, 12.390148], [43.286380999999999, 11.974928], [42.715873999999999, 11.735640999999999], [43.145305, 11.46204], [42.776851999999998, 10.926879], [42.554929999999999, 11.10511], [42.314140000000002, 11.0342], [41.755569999999999, 11.05091], [41.73959, 11.35511], [41.661760000000001, 11.6312], [42, 12.1], [42.351559999999999, 12.54223], [42.779642000000003, 12.455416], [43.081226000000001, 12.699638999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0436\u0438\u0431\u0443\u0442\u0438", "fr": "Djibouti", "en": "Djibouti", "nl": "Djibouti (land)", "pt": "Djibouti", "no": "Djibouti", "de": "Dschibuti", "it": "Gibuti", "sv": "Djibouti", "pl": "D\u017cibuti", "fi": "Djibouti", "zh": "\u5409\u5e03\u63d0", "ja": "\u30b8\u30d6\u30c1", "es": "Yibuti"}, "label_fr": "Djibouti", "name": "Djibouti", "dbpedia_uri": "http://dbpedia.org/resource/Djibouti"}, "id": "DJI"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[12.690006, 55.609991000000001], [12.089990999999999, 54.800015000000002], [11.043543, 55.364863999999997], [10.903914, 55.779955000000001], [12.370903999999999, 56.111407], [12.690006, 55.609991000000001]]], [[[10.912182, 56.458621000000001], [10.667804, 56.081383000000002], [10.369992999999999, 56.190007000000001], [9.6499849999999991, 55.469999000000001], [9.9219059999999999, 54.983103999999997], [9.2820490000000007, 54.830865000000003], [8.5262290000000007, 54.962744000000001], [8.1203109999999992, 55.517722999999997], [8.0899769999999993, 56.540011999999997], [8.2565819999999999, 56.809969000000002], [8.5434380000000001, 57.110002999999999], [9.4244690000000002, 57.172066000000001], [9.7755589999999994, 57.447941], [10.580005999999999, 57.730016999999997], [10.546106, 57.215733], [10.25, 56.890016000000003], [10.369992999999999, 56.609982000000002], [10.912182, 56.458621000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0430\u043d\u0438\u044f", "fr": "Danemark", "en": "Denmark", "nl": "Denemarken", "pt": "Dinamarca", "no": "Danmark", "de": "D\u00e4nemark", "it": "Danimarca", "sv": "Danmark", "pl": "Dania", "fi": "Tanska", "zh": "\u4e39\u9ea6", "ja": "\u30c7\u30f3\u30de\u30fc\u30af", "es": "Dinamarca"}, "label_fr": "Danemark", "name": "Denmark", "dbpedia_uri": "http://dbpedia.org/resource/Denmark"}, "id": "DNK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-71.712361000000001, 19.714455999999998], [-71.587304000000003, 19.884910999999999], [-70.806706000000005, 19.880286000000002], [-70.214365000000001, 19.622885], [-69.950815000000006, 19.648], [-69.76925, 19.293267], [-69.222126000000003, 19.313213999999999], [-69.254345999999998, 19.015196], [-68.809411999999995, 18.979074000000001], [-68.317943, 18.612197999999999], [-68.689316000000005, 18.205141999999999], [-69.164946, 18.422647999999999], [-69.623987999999997, 18.380713], [-69.952933999999999, 18.428307], [-70.133233000000004, 18.245915], [-70.517137000000005, 18.184291000000002], [-70.669297999999998, 18.426886], [-70.999949999999998, 18.283328999999998], [-71.400210000000001, 17.598564], [-71.657662000000002, 17.757573000000001], [-71.708304999999996, 18.044996999999999], [-71.687737999999996, 18.316659999999999], [-71.945111999999995, 18.616900000000001], [-71.701302999999996, 18.785416999999999], [-71.624872999999994, 19.169837999999999], [-71.712361000000001, 19.714455999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "R\u00e9publique dominicaine", "en": "Dominican Republic", "nl": "Dominicaanse Republiek", "pt": "Rep\u00fablica Dominicana", "no": "Den dominikanske republikk", "de": "Dominikanische Republik", "it": "Repubblica Dominicana", "sv": "Dominikanska republiken", "pl": "Dominikana", "fi": "Dominikaaninen tasavalta", "zh": "\u591a\u660e\u5c3c\u52a0\u5171\u548c\u570b", "ja": "\u30c9\u30df\u30cb\u30ab\u5171\u548c\u56fd", "es": "Rep\u00fablica Dominicana"}, "label_fr": "R\u00e9publique dominicaine", "name": "Dominican Republic", "dbpedia_uri": "http://dbpedia.org/resource/Dominican_Republic"}, "id": "DOM"}, {"geometry": {"type": "Polygon", "coordinates": [[[11.999506, 23.471668000000001], [8.5728930000000005, 21.565660999999999], [5.6775659999999997, 19.601206999999999], [4.2674190000000003, 19.155265], [3.1581329999999999, 19.057364], [3.1466609999999999, 19.693579], [2.6835879999999999, 19.85623], [2.060991, 20.142233000000001], [1.8232280000000001, 20.610809], [-1.550055, 22.792666000000001], [-4.9233370000000001, 24.974574], [-8.6844000000000001, 27.395744000000001], [-8.6651240000000005, 27.589479000000001], [-8.6655899999999999, 27.656426], [-8.6741159999999997, 28.841289], [-7.0592280000000001, 29.579228000000001], [-6.060632, 29.7317], [-5.2421290000000003, 30.000443000000001], [-4.8596459999999997, 30.501187999999999], [-3.6904409999999999, 30.896951999999999], [-3.6474980000000001, 31.637294000000001], [-3.0689799999999998, 31.724498000000001], [-2.6166049999999998, 32.094346000000002], [-1.3078989999999999, 32.262889000000001], [-1.1245510000000001, 32.651522], [-1.3880490000000001, 32.864015000000002], [-1.733455, 33.919713000000002], [-1.792986, 34.527918999999997], [-2.1699139999999999, 35.168396000000001], [-1.2086030000000001, 35.714849000000001], [-0.12745400000000001, 35.888661999999997], [0.50387700000000002, 36.301273000000002], [1.4669190000000001, 36.605646999999998], [3.161699, 36.783904999999997], [4.8157579999999998, 36.865037000000001], [5.3201200000000002, 36.716518999999998], [6.2618200000000002, 37.110655000000001], [7.3303849999999997, 37.118380999999999], [7.7370780000000003, 36.885708000000001], [8.4209639999999997, 36.946427], [8.2178240000000002, 36.433177000000001], [8.3763679999999994, 35.479875999999997], [8.140981, 34.655146000000002], [7.5244819999999999, 34.097375999999997], [7.6126420000000001, 33.344115000000002], [8.4304729999999992, 32.748336999999999], [8.4391029999999994, 32.506284999999998], [9.0556029999999996, 32.102691999999998], [9.4821399999999993, 30.307556000000002], [9.8056339999999995, 29.424638000000002], [9.8599979999999992, 28.959990000000001], [9.6838850000000001, 28.144174], [9.7561280000000004, 27.688258999999999], [9.6290560000000003, 27.140953], [9.7162860000000002, 26.512205999999999], [9.3194110000000006, 26.094325000000001], [9.9106930000000002, 25.365455000000001], [9.9482610000000005, 24.936954], [10.303846999999999, 24.379313], [10.771364, 24.562532000000001], [11.560669000000001, 24.097909000000001], [11.999506, 23.471668000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043b\u0436\u0438\u0440", "fr": "Alg\u00e9rie", "en": "Algeria", "nl": "Algerije", "pt": "Arg\u00e9lia", "no": "Algerie", "de": "Algerien", "it": "Algeria", "sv": "Algeriet", "pl": "Algieria", "fi": "Algeria", "zh": "\u963f\u5c14\u53ca\u5229\u4e9a", "ja": "\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2", "es": "Argelia"}, "label_fr": "Alg\u00e9rie", "name": "Algeria", "dbpedia_uri": "http://dbpedia.org/resource/Algeria"}, "id": "DZA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-80.302560999999997, -3.4048560000000001], [-79.770292999999995, -2.6575120000000001], [-79.986559, -2.2207940000000002], [-80.368784000000005, -2.6851590000000001], [-80.967765, -2.2469429999999999], [-80.764805999999993, -1.9650479999999999], [-80.933659000000006, -1.057455], [-80.583370000000002, -0.906663], [-80.399325000000005, -0.28370299999999998], [-80.020898000000003, 0.36033999999999999], [-80.090609999999998, 0.76842900000000003], [-79.542761999999996, 0.98293799999999998], [-78.855259000000004, 1.380924], [-77.855061000000006, 0.80992500000000001], [-77.668612999999993, 0.82589299999999999], [-77.424983999999995, 0.39568700000000001], [-76.57638, 0.256936], [-76.292314000000005, 0.416047], [-75.801466000000005, 0.084801000000000001], [-75.373222999999996, -0.152032], [-75.233722999999998, -0.91141700000000003], [-75.544995999999998, -1.5616099999999999], [-76.635394000000005, -2.6086779999999998], [-77.837905000000006, -3.0030209999999999], [-78.450683999999995, -3.873097], [-78.639897000000005, -4.547784], [-79.205288999999993, -4.9591289999999999], [-79.624978999999996, -4.4541979999999999], [-80.028908000000001, -4.3460910000000004], [-80.442241999999993, -4.4257239999999998], [-80.469295000000002, -4.0592870000000003], [-80.184015000000002, -3.8211620000000002], [-80.302560999999997, -3.4048560000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u043a\u0432\u0430\u0434\u043e\u0440", "fr": "\u00c9quateur (pays)", "en": "Ecuador", "nl": "Ecuador", "pt": "Equador", "no": "Ecuador", "de": "Ecuador", "it": "Ecuador", "sv": "Ecuador", "pl": "Ekwador", "fi": "Ecuador", "zh": "\u5384\u74dc\u591a\u5c14", "ja": "\u30a8\u30af\u30a2\u30c9\u30eb", "es": "Ecuador"}, "label_fr": "\u00c9quateur (pays)", "name": "Ecuador", "dbpedia_uri": "http://dbpedia.org/resource/Ecuador"}, "id": "ECU"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.922600000000003, 29.501329999999999], [34.641739999999999, 29.099419999999999], [34.426549999999999, 28.343990000000002], [34.154510000000002, 27.8233], [33.92136, 27.648700000000002], [33.58811, 27.971360000000001], [33.136760000000002, 28.417649999999998], [32.423229999999997, 29.85108], [32.320459999999997, 29.760429999999999], [32.734819999999999, 28.70523], [33.348759999999999, 27.69989], [34.104550000000003, 26.14227], [34.473869999999998, 25.598559999999999], [34.795070000000003, 25.033750000000001], [35.692410000000002, 23.92671], [35.493720000000003, 23.752369999999999], [35.525979999999997, 23.102440000000001], [36.690689999999996, 22.20485], [36.866230000000002, 22], [32.899999999999999, 22], [29.02, 22], [25, 22], [25, 25.682500000000001], [25, 29.238655000000001], [24.70007, 30.04419], [24.957619999999999, 30.6616], [24.802869999999999, 31.089289999999998], [25.164819999999999, 31.56915], [26.495329999999999, 31.58568], [27.457619999999999, 31.321259999999999], [28.450479999999999, 31.025770000000001], [28.913530000000002, 30.870049999999999], [29.683420000000002, 31.186859999999999], [30.095030000000001, 31.473400000000002], [30.976929999999999, 31.555859999999999], [31.68796, 31.429600000000001], [31.96041, 30.933599999999998], [32.19247, 31.260339999999999], [32.993920000000003, 31.024069999999998], [33.773400000000002, 30.967459999999999], [34.265439999999998, 31.219360000000002], [34.922600000000003, 29.501329999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0415\u0433\u0438\u043f\u0435\u0442", "fr": "\u00c9gypte", "en": "Egypt", "nl": "Egypte (land)", "pt": "Egito", "no": "Egypt", "de": "\u00c4gypten", "it": "Egitto", "sv": "Egypten", "pl": "Egipt", "fi": "Egypti", "zh": "\u57c3\u53ca", "ja": "\u30a8\u30b8\u30d7\u30c8", "es": "Egipto"}, "label_fr": "\u00c9gypte", "name": "Egypt", "dbpedia_uri": "http://dbpedia.org/resource/Egypt"}, "id": "EGY"}, {"geometry": {"type": "Polygon", "coordinates": [[[42.351559999999999, 12.54223], [42.009749999999997, 12.865819999999999], [41.598559999999999, 13.45209], [41.155194000000002, 13.77332], [40.896599999999999, 14.118639999999999], [40.026218999999998, 14.519579], [39.340609999999998, 14.531549999999999], [39.099400000000003, 14.740640000000001], [38.512949999999996, 14.505470000000001], [37.90607, 14.959429999999999], [37.593769999999999, 14.213100000000001], [36.429510000000001, 14.42211], [36.323188999999999, 14.822481], [36.753860000000003, 16.291874], [36.852530000000002, 16.95655], [37.167470000000002, 17.26314], [37.904000000000003, 17.42754], [38.410089999999997, 17.998307], [38.990622999999999, 16.840626], [39.266109999999998, 15.922723], [39.814293999999997, 15.435646999999999], [41.179274999999997, 14.49108], [41.734952, 13.921037], [42.276831000000001, 13.343992], [42.589576000000001, 13.000420999999999], [43.081226000000001, 12.699638999999999], [42.779642000000003, 12.455416], [42.351559999999999, 12.54223]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0440\u0438\u0442\u0440\u0435\u044f", "fr": "\u00c9rythr\u00e9e", "en": "Eritrea", "nl": "Eritrea", "pt": "Eritreia", "no": "Eritrea", "de": "Eritrea", "it": "Eritrea", "sv": "Eritrea", "pl": "Erytrea", "fi": "Eritrea", "zh": "\u5384\u7acb\u7279\u91cc\u4e9a", "ja": "\u30a8\u30ea\u30c8\u30ea\u30a2", "es": "Eritrea"}, "label_fr": "\u00c9rythr\u00e9e", "name": "Eritrea", "dbpedia_uri": "http://dbpedia.org/resource/Eritrea"}, "id": "ERI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-9.0348179999999996, 41.880571000000003], [-8.9844329999999992, 42.592775000000003], [-9.3928840000000005, 43.026625000000003], [-7.9781899999999997, 43.748337999999997], [-6.7544919999999999, 43.567909], [-5.411886, 43.574240000000003], [-4.3478430000000001, 43.403449000000002], [-3.5175320000000001, 43.455900999999997], [-1.901351, 43.422801999999997], [-1.5027710000000001, 43.034013999999999], [0.33804699999999999, 42.579546000000001], [0.70159099999999996, 42.795734000000003], [1.8267929999999999, 42.343384999999998], [2.9859990000000001, 42.473014999999997], [3.0394839999999999, 41.892119999999998], [2.0918420000000002, 41.226089000000002], [0.81052500000000005, 41.014732000000002], [0.72133100000000006, 40.678317999999997], [0.106692, 40.123933999999998], [-0.27871099999999999, 39.309978000000001], [0.111291, 38.738514000000002], [-0.46712399999999998, 38.292366000000001], [-0.68338900000000002, 37.642353999999997], [-1.438382, 37.443064], [-2.1464530000000002, 36.674143999999998], [-3.415781, 36.658900000000003], [-4.3689010000000001, 36.677838999999999], [-4.9952189999999996, 36.324708000000001], [-5.3771599999999999, 35.946849999999998], [-5.8664319999999996, 36.029817000000001], [-6.236694, 36.367677], [-6.5201909999999996, 36.942912999999997], [-7.4537259999999996, 37.097788000000001], [-7.5371050000000004, 37.428904000000003], [-7.1665080000000003, 37.803894], [-7.0292810000000001, 38.075763999999999], [-7.3740920000000001, 38.373058999999998], [-7.0980369999999997, 39.030073000000002], [-7.4986319999999997, 39.629570999999999], [-7.066592, 39.711891999999999], [-7.0264129999999998, 40.184524000000003], [-6.86402, 40.330871999999999], [-6.851127, 41.111083000000001], [-6.3890880000000001, 41.381815000000003], [-6.6686059999999996, 41.883386999999999], [-7.251309, 41.918346], [-7.4225130000000004, 41.792074999999997], [-8.0131750000000004, 41.790886], [-8.2638569999999998, 42.280468999999997], [-8.6719460000000002, 42.134689000000002], [-9.0348179999999996, 41.880571000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0441\u043f\u0430\u043d\u0438\u044f", "fr": "Espagne", "en": "Spain", "nl": "Spanje", "pt": "Espanha", "no": "Spania", "de": "Spanien", "it": "Spagna", "sv": "Spanien", "pl": "Hiszpania", "fi": "Espanja", "zh": "\u897f\u73ed\u7259", "ja": "\u30b9\u30da\u30a4\u30f3", "es": "Espa\u00f1a"}, "label_fr": "Espagne", "name": "Spain", "dbpedia_uri": "http://dbpedia.org/resource/Spain"}, "id": "ESP"}, {"geometry": {"type": "Polygon", "coordinates": [[[24.312863, 57.793424000000002], [24.428927999999999, 58.383412999999997], [24.061198000000001, 58.257375000000003], [23.426559999999998, 58.612752999999998], [23.339794999999999, 59.187240000000003], [24.604213999999999, 59.465854], [25.864189, 59.611089999999997], [26.949135999999999, 59.445802999999998], [27.981114000000002, 59.475388000000002], [28.131699000000001, 59.300825000000003], [27.420165999999998, 58.724581000000001], [27.716685999999999, 57.791899000000001], [27.288184999999999, 57.474527999999999], [26.463532000000001, 57.476388999999998], [25.602810000000002, 57.847529000000002], [25.164594000000001, 57.970157], [24.312863, 57.793424000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0441\u0442\u043e\u043d\u0438\u044f", "fr": "Estonie", "en": "Estonia", "nl": "Estland", "pt": "Est\u00f3nia", "no": "Estland", "de": "Estland", "it": "Estonia", "sv": "Estland", "pl": "Estonia", "fi": "Viro", "zh": "\u7231\u6c99\u5c3c\u4e9a", "ja": "\u30a8\u30b9\u30c8\u30cb\u30a2", "es": "Estonia"}, "label_fr": "Estonie", "name": "Estonia", "dbpedia_uri": "http://dbpedia.org/resource/Estonia"}, "id": "EST"}, {"geometry": {"type": "Polygon", "coordinates": [[[37.90607, 14.959429999999999], [38.512949999999996, 14.505470000000001], [39.099400000000003, 14.740640000000001], [39.340609999999998, 14.531549999999999], [40.026249999999997, 14.519590000000001], [40.896599999999999, 14.118639999999999], [41.155200000000001, 13.77333], [41.598559999999999, 13.45209], [42.009749999999997, 12.865819999999999], [42.351559999999999, 12.54223], [42, 12.1], [41.661760000000001, 11.6312], [41.73959, 11.35511], [41.755569999999999, 11.05091], [42.314140000000002, 11.0342], [42.554929999999999, 11.10511], [42.776851999999998, 10.926879], [42.558759999999999, 10.57258], [42.92812, 10.021940000000001], [43.296990000000001, 9.5404800000000005], [43.678750000000001, 9.1835799999999992], [46.948340000000002, 7.99688], [47.78942, 8.0030000000000001], [44.9636, 5.00162], [43.660870000000003, 4.9575500000000003], [42.769669999999998, 4.2525899999999996], [42.128610000000002, 4.2341300000000004], [41.855083, 3.9189120000000002], [41.171799999999998, 3.9190900000000002], [40.768479999999997, 4.2570199999999998], [39.854939999999999, 3.8387899999999999], [39.559384000000001, 3.4220600000000001], [38.892510000000001, 3.50074], [38.671140000000001, 3.6160700000000001], [38.436970000000002, 3.5885099999999999], [38.120914999999997, 3.5986050000000001], [36.855092999999997, 4.447864], [36.159078999999998, 4.447864], [35.817447999999999, 4.7769659999999998], [35.817447999999999, 5.3382319999999996], [35.298006999999998, 5.5060000000000002], [34.70702, 6.59422], [34.250320000000002, 6.8260699999999996], [34.075099999999999, 7.2259500000000001], [33.568289999999998, 7.7133399999999996], [32.954180000000001, 7.7849700000000004], [33.294800000000002, 8.3545800000000003], [33.825499999999998, 8.3791600000000006], [33.974980000000002, 8.6845599999999994], [33.961620000000003, 9.5835799999999995], [34.257449999999999, 10.630089999999999], [34.73115, 10.910170000000001], [34.831629999999997, 11.318960000000001], [35.260489999999997, 12.08286], [35.863630000000001, 12.578279999999999], [36.270220000000002, 13.563330000000001], [36.429510000000001, 14.42211], [37.593769999999999, 14.213100000000001], [37.90607, 14.959429999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0444\u0438\u043e\u043f\u0438\u044f", "fr": "\u00c9thiopie", "en": "Ethiopia", "nl": "Ethiopi\u00eb", "pt": "Eti\u00f3pia", "no": "Etiopia", "de": "\u00c4thiopien", "it": "Etiopia", "sv": "Etiopien", "pl": "Etiopia", "fi": "Etiopia", "zh": "\u57c3\u585e\u4fc4\u6bd4\u4e9a", "ja": "\u30a8\u30c1\u30aa\u30d4\u30a2", "es": "Etiop\u00eda"}, "label_fr": "\u00c9thiopie", "name": "Ethiopia", "dbpedia_uri": "http://dbpedia.org/resource/Ethiopia"}, "id": "ETH"}, {"geometry": {"type": "Polygon", "coordinates": [[[28.591930000000001, 69.064777000000007], [28.445944000000001, 68.364613000000006], [29.977426000000001, 67.698296999999997], [29.054589, 66.944286000000005], [30.217649999999999, 65.805980000000005], [29.544429999999998, 64.948672000000002], [30.444685, 64.204453000000001], [30.035872000000001, 63.552813999999998], [31.516092, 62.867686999999997], [31.139990999999998, 62.357692999999998], [30.211106999999998, 61.780028000000001], [28.069997999999998, 60.503517000000002], [26.255172999999999, 60.423960999999998], [24.496624000000001, 60.057316], [22.869695, 59.846373], [22.290763999999999, 60.391921000000004], [21.322244000000001, 60.720170000000003], [21.544865999999999, 61.705328999999999], [21.059211000000001, 62.607393000000002], [21.536028999999999, 63.189734999999999], [22.442744000000001, 63.817810000000001], [24.730512000000001, 64.902343999999999], [25.398067999999999, 65.111427000000006], [25.294042999999999, 65.534345999999999], [23.903379000000001, 66.006927000000005], [23.56588, 66.396051], [23.539473000000001, 67.936008999999999], [21.978535000000001, 68.616845999999995], [20.645593000000002, 69.106246999999996], [21.244935999999999, 69.370442999999995], [22.356238000000001, 68.841740999999999], [23.662050000000001, 68.891247000000007], [24.735679000000001, 68.649557000000001], [25.689212999999999, 69.092113999999995], [26.179621999999998, 69.825299000000001], [27.732292000000001, 70.164192999999997], [29.015573, 69.766491000000002], [28.591930000000001, 69.064777000000007]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u043d\u043b\u044f\u043d\u0434\u0438\u044f", "fr": "Finlande", "en": "Finland", "nl": "Finland", "pt": "Finl\u00e2ndia", "no": "Finland", "de": "Finnland", "it": "Finlandia", "sv": "Finland", "pl": "Finlandia", "fi": "Suomi", "zh": "\u82ac\u5170", "ja": "\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9", "es": "Finlandia"}, "label_fr": "Finlande", "name": "Finland", "dbpedia_uri": "http://dbpedia.org/resource/Finland"}, "id": "FIN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[178.37360000000001, -17.339919999999999], [178.71806000000001, -17.62846], [178.55270999999999, -18.150590000000001], [177.93266, -18.287990000000001], [177.38146, -18.16432], [177.28504000000001, -17.72465], [177.67087000000001, -17.381139999999998], [178.12557000000001, -17.504809999999999], [178.37360000000001, -17.339919999999999]]], [[[179.36414300000001, -16.801354], [178.72505899999999, -17.012042000000001], [178.59683899999999, -16.639150000000001], [179.096609, -16.433983999999999], [179.413509, -16.379054], [180, -16.067132999999998], [180, -16.555216999999999], [179.36414300000001, -16.801354]]], [[[-179.91736900000001, -16.501783], [-180, -16.555216999999999], [-180, -16.067132999999998], [-179.79331999999999, -16.020882], [-179.91736900000001, -16.501783]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u0434\u0436\u0438", "fr": "Fidji", "en": "Fiji", "nl": "Fiji", "pt": "Fiji", "no": "Fiji", "de": "Fidschi", "it": "Figi", "sv": "Fiji", "pl": "Fid\u017ci", "fi": "Fid\u017ei", "zh": "\u6590\u6fdf", "ja": "\u30d5\u30a3\u30b8\u30fc", "es": "Fiyi"}, "label_fr": "Fidji", "name": "Fiji", "dbpedia_uri": "http://dbpedia.org/resource/Fiji"}, "id": "FJI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-61.200000000000003, -51.850000000000001], [-60, -51.25], [-59.149999999999999, -51.5], [-58.549999999999997, -51.100000000000001], [-57.75, -51.549999999999997], [-58.049999999999997, -51.899999999999999], [-59.399999999999999, -52.200000000000003], [-59.850000000000001, -51.850000000000001], [-60.700000000000003, -52.299999999999997], [-61.200000000000003, -51.850000000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "\u00celes Malouines", "en": "Falkland Islands", "nl": "Falklandeilanden", "pt": "Ilhas Malvinas", "no": "Falklands\u00f8yene", "de": "Falklandinseln", "it": "Isole Falkland", "sv": "Falklands\u00f6arna", "pl": "Falklandy", "fi": "Falklandinsaaret", "zh": "\u798f\u514b\u5170\u7fa4\u5c9b", "ja": "\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6", "es": "Islas Malvinas (Territorio Brit\u00e1nico de Ultramar)"}, "label_fr": "\u00celes Malouines", "name": "Falkland Islands", "dbpedia_uri": "http://dbpedia.org/resource/Falkland_Islands"}, "id": "FLK"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-52.556424999999997, 2.504705], [-52.939656999999997, 2.1248580000000001], [-53.418464999999998, 2.0533890000000001], [-53.554839000000001, 2.3348969999999998], [-53.778520999999998, 2.376703], [-54.088062999999998, 2.1055570000000001], [-54.524754000000001, 2.311849], [-54.271230000000003, 2.7387480000000002], [-54.184283999999998, 3.194172], [-54.011504000000002, 3.6225700000000001], [-54.399541999999997, 4.2126109999999999], [-54.478633000000002, 4.8967559999999999], [-53.958044999999998, 5.7565480000000004], [-53.618453000000002, 5.6465290000000001], [-52.882140999999997, 5.4098509999999997], [-51.823343000000001, 4.5657680000000003], [-51.657797000000002, 4.1562320000000001], [-52.249338000000002, 3.2410939999999999], [-52.556424999999997, 2.504705]]], [[[9.5600159999999992, 42.152492000000002], [9.2297519999999995, 41.380006999999999], [8.7757229999999993, 41.583612000000002], [8.5442129999999992, 42.256517000000002], [8.7460090000000008, 42.628121999999998], [9.3900009999999998, 43.009985], [9.5600159999999992, 42.152492000000002]]], [[[3.588184, 50.378991999999997], [4.2860230000000001, 49.907496999999999], [4.7992220000000003, 49.985373000000003], [5.6740519999999997, 49.529483999999997], [5.8977589999999998, 49.442667], [6.1863200000000003, 49.463802999999999], [6.6582299999999996, 49.201957999999998], [8.0992789999999992, 49.017783999999999], [7.5936760000000003, 48.333019], [7.4667589999999997, 47.620581999999999], [7.192202, 47.449765999999997], [6.7365709999999996, 47.541801], [6.7687140000000001, 47.287708000000002], [6.0373890000000001, 46.725779000000003], [6.0226090000000001, 46.27299], [6.5000999999999998, 46.429673000000001], [6.8435930000000003, 45.991146999999998], [6.8023550000000004, 45.708579999999998], [7.0966519999999997, 45.333098999999997], [6.7499549999999999, 45.028517999999998], [7.0075620000000001, 44.254767000000001], [7.5495960000000002, 44.127901000000001], [7.4351849999999997, 43.693845000000003], [6.5292450000000004, 43.128892], [4.5569629999999997, 43.399650999999999], [3.1004109999999998, 43.075201], [2.9859990000000001, 42.473014999999997], [1.8267929999999999, 42.343384999999998], [0.70159099999999996, 42.795734000000003], [0.33804699999999999, 42.579546000000001], [-1.5027710000000001, 43.034013999999999], [-1.901351, 43.422801999999997], [-1.384225, 44.02261], [-1.1937979999999999, 46.014918000000002], [-2.225724, 47.064363], [-2.963276, 47.570326999999999], [-4.491555, 47.954954000000001], [-4.5923499999999997, 48.684159999999999], [-3.295814, 48.901691999999997], [-1.616511, 48.644421000000001], [-1.933494, 49.776342], [-0.98946900000000004, 49.347375999999997], [1.3387610000000001, 50.127172999999999], [1.6390009999999999, 50.946606000000003], [2.5135730000000001, 51.148505999999998], [2.6584219999999998, 50.796847999999997], [3.1232519999999999, 50.780363000000001], [3.588184, 50.378991999999997]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0440\u0430\u043d\u0446\u0438\u044f", "fr": "France", "en": "France", "nl": "Frankrijk", "pt": "Fran\u00e7a", "no": "Frankrike", "de": "Frankreich", "it": "Francia", "sv": "Frankrike", "pl": "Francja", "fi": "Ranska", "zh": "\u6cd5\u56fd", "ja": "\u30d5\u30e9\u30f3\u30b9", "es": "Francia"}, "label_fr": "France", "name": "France", "dbpedia_uri": "http://dbpedia.org/resource/France"}, "id": "FRA"}, {"geometry": {"type": "Polygon", "coordinates": [[[11.093773000000001, -3.9788269999999999], [10.066134999999999, -2.9694829999999999], [9.4052450000000007, -2.1443129999999999], [8.7979959999999995, -1.1113010000000001], [8.8300870000000007, -0.77907400000000004], [9.0484200000000001, -0.45935100000000001], [9.2913510000000006, 0.26866600000000002], [9.4928889999999999, 1.0101199999999999], [9.8302840000000007, 1.0678939999999999], [11.285079, 1.0576620000000001], [11.276449, 2.2610510000000001], [11.751664999999999, 2.3267579999999999], [12.35938, 2.192812], [12.951333999999999, 2.3216160000000001], [13.075822000000001, 2.2670970000000001], [13.003114, 1.8308960000000001], [13.282631, 1.314184], [14.026669, 1.3956770000000001], [14.276266, 1.19693], [13.843321, 0.038758000000000001], [14.316418000000001, -0.55262699999999998], [14.425456000000001, -1.333407], [14.29921, -1.9982759999999999], [13.992407, -2.4708049999999999], [13.109619, -2.4287399999999999], [12.575284, -1.9485110000000001], [12.495703000000001, -2.3916879999999998], [11.820964, -2.5141610000000001], [11.478039000000001, -2.765619], [11.855122, -3.4268709999999998], [11.093773000000001, -3.9788269999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u0431\u043e\u043d", "fr": "Gabon", "en": "Gabon", "nl": "Gabon", "pt": "Gab\u00e3o", "no": "Gabon", "de": "Gabun", "it": "Gabon", "sv": "Gabon", "pl": "Gabon", "fi": "Gabon", "zh": "\u52a0\u84ec", "ja": "\u30ac\u30dc\u30f3", "es": "Gab\u00f3n"}, "label_fr": "Gabon", "name": "Gabon", "dbpedia_uri": "http://dbpedia.org/resource/Gabon"}, "id": "GAB"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-5.6619489999999999, 54.554603], [-6.1978850000000003, 53.867564999999999], [-6.9537300000000002, 54.073701999999997], [-7.5721679999999996, 54.059956], [-7.3660310000000004, 54.595841], [-7.5721679999999996, 55.131622], [-6.7338469999999999, 55.17286], [-5.6619489999999999, 54.554603]]], [[[-3.0050050000000001, 58.634999999999998], [-4.0738279999999998, 57.553024999999998], [-3.055002, 57.690018999999999], [-1.9592810000000001, 57.684800000000003], [-2.2199879999999999, 56.870016999999997], [-3.1190030000000002, 55.973793000000001], [-2.0850089999999999, 55.909998000000002], [-2.0056759999999998, 55.804903000000003], [-1.1149910000000001, 54.624986], [-0.43048500000000001, 54.464376000000001], [0.18498100000000001, 53.325014000000003], [0.46997699999999998, 52.929999000000002], [1.6815310000000001, 52.739519999999999], [1.5599879999999999, 52.099997999999999], [1.050562, 51.806761000000002], [1.449865, 51.289428000000001], [0.55033399999999999, 50.765739000000004], [-0.78751700000000002, 50.774988999999998], [-2.4899979999999999, 50.500019000000002], [-2.9562740000000001, 50.69688], [-3.617448, 50.228355999999998], [-4.5425079999999998, 50.341836999999998], [-5.2450229999999998, 49.960000000000001], [-5.776567, 50.159678], [-4.30999, 51.210000999999998], [-3.4148510000000001, 51.426009000000001], [-3.4227189999999998, 51.426848], [-4.9843669999999998, 51.593465999999999], [-5.267296, 51.991399999999999], [-4.2223470000000001, 52.301355999999998], [-4.7700129999999996, 52.840004999999998], [-4.5799989999999999, 53.495004000000002], [-3.0938310000000002, 53.404547000000001], [-3.0920800000000002, 53.404440999999998], [-2.9450090000000002, 53.984999999999999], [-3.6147010000000002, 54.600937000000002], [-3.6300050000000001, 54.615012999999998], [-4.8441689999999999, 54.790970999999999], [-5.0825269999999998, 55.061601000000003], [-4.719112, 55.508473000000002], [-5.0479810000000001, 55.783985999999999], [-5.586398, 55.311146000000001], [-5.6449990000000003, 56.275015000000003], [-6.1499810000000004, 56.78501], [-5.7868250000000003, 57.818848000000003], [-5.0099989999999996, 58.630012999999998], [-4.2114950000000002, 58.550845000000002], [-3.0050050000000001, 58.634999999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "fr": "Royaume-Uni", "en": "United Kingdom", "nl": "Verenigd Koninkrijk", "pt": "Reino Unido", "no": "Storbritannia", "de": "Vereinigtes K\u00f6nigreich", "it": "Regno Unito", "sv": "Storbritannien", "pl": "Wielka Brytania", "fi": "Yhdistynyt kuningaskunta", "zh": "\u82f1\u56fd", "ja": "\u30a4\u30ae\u30ea\u30b9", "es": "Reino Unido"}, "label_fr": "Royaume-Uni", "name": "United Kingdom", "dbpedia_uri": "http://dbpedia.org/resource/United_Kingdom"}, "id": "GBR"}, {"geometry": {"type": "Polygon", "coordinates": [[[41.554084000000003, 41.535656000000003], [41.703170999999998, 41.962943000000003], [41.453470000000003, 42.645122999999998], [40.875469000000002, 43.013627999999997], [40.321393999999998, 43.128633999999998], [39.955008999999997, 43.434998], [40.076965000000001, 43.553103999999998], [40.922184999999999, 43.382159000000001], [42.394395000000003, 43.220308000000003], [43.756017, 42.740828], [43.931199999999997, 42.554974000000001], [44.537623000000004, 42.711993], [45.470278999999998, 42.502780999999999], [45.776409999999998, 42.092444], [46.404950999999997, 41.860675000000001], [46.145432, 41.722802000000001], [46.637908000000003, 41.181673000000004], [46.501637000000002, 41.064444999999999], [45.962600999999999, 41.123873000000003], [45.217426000000003, 41.411451999999997], [44.972479999999997, 41.248128999999999], [43.582746, 41.092143], [42.619548999999999, 41.583173000000002], [41.554084000000003, 41.535656000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0436\u043e\u0440\u0434\u0436\u0438\u044f (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f)", "fr": "G\u00e9orgie", "en": "Georgia", "nl": "Georgia", "pt": "Ge\u00f3rgia (desambigua\u00e7\u00e3o)", "no": "Georgia (andre betydninger)", "de": "Georgia (Begriffskl\u00e4rung)", "it": "Georgia (disambigua)", "sv": "Georgia (olika betydelser)", "pl": "Georgia (ujednoznacznienie)", "fi": "Georgia (t\u00e4smennyssivu)", "zh": "\u55ac\u6cbb\u4e9e (\u6d88\u6b67\u7fa9)", "ja": "\u30b8\u30e7\u30fc\u30b8\u30a2", "es": "Georgia (desambiguaci\u00f3n)"}, "label_fr": "G\u00e9orgie", "name": "Georgia", "dbpedia_uri": "http://dbpedia.org/resource/Georgia"}, "id": "GEO"}, {"geometry": {"type": "Polygon", "coordinates": [[[1.060122, 5.9288369999999997], [-0.50763800000000003, 5.3434730000000004], [-1.063625, 5.0005480000000002], [-1.964707, 4.7104619999999997], [-2.856125, 4.9944759999999997], [-2.8107009999999999, 5.3890510000000003], [-3.24437, 6.2504720000000002], [-2.9835850000000002, 7.3797050000000004], [-2.5621900000000002, 8.2196280000000002], [-2.827496, 9.6424610000000008], [-2.9638960000000001, 10.395334999999999], [-2.9404089999999998, 10.96269], [-1.2033579999999999, 11.009819], [-0.76157600000000003, 10.93693], [-0.43870199999999998, 11.098341], [0.023803000000000001, 11.018682], [-0.049785000000000003, 10.706918], [0.36758000000000002, 10.191212999999999], [0.36590099999999998, 9.4650040000000004], [0.46119199999999999, 8.6772229999999997], [0.71202900000000002, 8.3124649999999995], [0.49095699999999998, 7.4117439999999997], [0.570384, 6.9143590000000001], [0.83693099999999998, 6.279979], [1.060122, 5.9288369999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430 (\u043d\u0430\u0440\u043e\u0434)", "fr": "Ghana", "en": "Ghana", "nl": "Ghana", "pt": "Gana", "no": "Ghana", "de": "Ghana", "it": "Ghana", "sv": "Ghana", "pl": "Ghana", "fi": "Ghana", "ja": "\u30ac\u30fc\u30ca", "es": "Ghana"}, "label_fr": "Ghana", "name": "Ghana", "dbpedia_uri": "http://dbpedia.org/resource/Ghana"}, "id": "GHA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-8.4392980000000009, 7.6860429999999997], [-8.7221240000000009, 7.7116740000000004], [-8.9260649999999995, 7.309037], [-9.2087859999999999, 7.3139209999999997], [-9.4033479999999994, 7.5269050000000002], [-9.3372799999999998, 7.928534], [-9.7553420000000006, 8.5410550000000001], [-10.016567, 8.4285040000000002], [-10.230093999999999, 8.4062059999999992], [-10.505477000000001, 8.3488959999999999], [-10.494315, 8.715541], [-10.654769999999999, 8.9771780000000003], [-10.622394999999999, 9.2679100000000005], [-10.839152, 9.6882459999999995], [-11.117481, 10.045873], [-11.917277, 10.046984], [-12.150338, 9.8585720000000006], [-12.425929, 9.8358340000000002], [-12.596719, 9.6201880000000006], [-12.711957999999999, 9.3427120000000006], [-13.246549999999999, 8.9030489999999993], [-13.685154000000001, 9.4947440000000007], [-14.074045, 9.8861670000000004], [-14.330076, 10.01572], [-14.579699, 10.214467000000001], [-14.693232, 10.656300999999999], [-14.839554, 10.876571999999999], [-15.130311000000001, 11.040412], [-14.685687, 11.527824000000001], [-14.382192, 11.509271999999999], [-14.121406, 11.677117000000001], [-13.9008, 11.678718999999999], [-13.743161000000001, 11.811268999999999], [-13.828272, 12.142644000000001], [-13.718743999999999, 12.247185999999999], [-13.700476, 12.586183], [-13.217817999999999, 12.575874000000001], [-12.499051, 12.332090000000001], [-12.278599, 12.35444], [-12.203564999999999, 12.465648], [-11.658301, 12.386583], [-11.513942999999999, 12.442988], [-11.456168999999999, 12.076834], [-11.297573999999999, 12.077971], [-11.036555999999999, 12.211245], [-10.87083, 12.177887], [-10.593223999999999, 11.923975], [-10.165214000000001, 11.844084000000001], [-9.8909929999999999, 12.060479000000001], [-9.5679119999999998, 12.194243], [-9.3276160000000008, 12.334286000000001], [-9.1274739999999994, 12.308059999999999], [-8.905265, 12.088357999999999], [-8.7860990000000001, 11.812561000000001], [-8.3763050000000003, 11.393646], [-8.5813050000000004, 11.136246], [-8.6203210000000006, 10.810891], [-8.407311, 10.909257], [-8.2823569999999993, 10.792597000000001], [-8.3353769999999994, 10.494812], [-8.0299440000000004, 10.206535000000001], [-8.2293369999999992, 10.129020000000001], [-8.3096160000000001, 9.7895319999999995], [-8.0791140000000006, 9.3762240000000006], [-7.8320999999999996, 8.575704], [-8.2034990000000008, 8.4554530000000003], [-8.2990490000000001, 8.3164440000000006], [-8.2217920000000007, 8.123329], [-8.2807030000000008, 7.6871799999999997], [-8.4392980000000009, 7.6860429999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Guin\u00e9e", "en": "Guinea", "nl": "Guinee", "pt": "Guin\u00e9", "no": "Guinea", "de": "Guinea", "it": "Guinea", "sv": "Guinea", "pl": "Gwinea", "fi": "Guinea", "zh": "\u51e0\u5185\u4e9a", "ja": "\u30ae\u30cb\u30a2", "es": "Guinea"}, "label_fr": "Guin\u00e9e", "name": "Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Guinea"}, "id": "GIN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-16.841525000000001, 13.151394], [-16.713729000000001, 13.594958999999999], [-15.624596, 13.623587000000001], [-15.398770000000001, 13.860369], [-15.081735, 13.876492000000001], [-14.687030999999999, 13.630357], [-14.376714, 13.625679999999999], [-14.046991999999999, 13.794067999999999], [-13.844963, 13.505042], [-14.277702, 13.280585], [-14.712197, 13.298207], [-15.141163000000001, 13.509512000000001], [-15.511813, 13.27857], [-15.691001, 13.270353], [-15.931296, 13.130284], [-16.841525000000001, 13.151394]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u043c\u0431\u0438\u044f", "fr": "Gambie", "en": "The Gambia", "nl": "Gambia (land)", "pt": "G\u00e2mbia", "no": "Gambia", "de": "Gambia", "it": "Gambia", "sv": "Gambia", "pl": "Gambia", "fi": "Gambia", "zh": "\u5188\u6bd4\u4e9a", "ja": "\u30ac\u30f3\u30d3\u30a2", "es": "Gambia"}, "label_fr": "Gambie", "name": "Gambia", "dbpedia_uri": "http://dbpedia.org/resource/The_Gambia"}, "id": "GMB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-15.130311000000001, 11.040412], [-15.66418, 11.458474000000001], [-16.085214000000001, 11.524594], [-16.314786999999999, 11.806514999999999], [-16.308947, 11.958702000000001], [-16.613838000000001, 12.170911], [-16.677451999999999, 12.384852], [-16.147717, 12.547762000000001], [-15.816573999999999, 12.515567000000001], [-15.548477, 12.628170000000001], [-13.700476, 12.586183], [-13.718743999999999, 12.247185999999999], [-13.828272, 12.142644000000001], [-13.743161000000001, 11.811268999999999], [-13.9008, 11.678718999999999], [-14.121406, 11.677117000000001], [-14.382192, 11.509271999999999], [-14.685687, 11.527824000000001], [-15.130311000000001, 11.040412]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0438\u043d\u0435\u044f-\u0411\u0438\u0441\u0430\u0443", "fr": "Guin\u00e9e-Bissau", "en": "Guinea-Bissau", "nl": "Guinee-Bissau", "pt": "Guin\u00e9-Bissau", "no": "Guinea-Bissau", "de": "Guinea-Bissau", "it": "Guinea-Bissau", "sv": "Guinea-Bissau", "pl": "Gwinea Bissau", "fi": "Guinea-Bissau", "zh": "\u5e7e\u5167\u4e9e\u6bd4\u7d22", "ja": "\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6", "es": "Guinea-Bissau"}, "label_fr": "Guin\u00e9e-Bissau", "name": "Guinea Bissau", "dbpedia_uri": "http://dbpedia.org/resource/Guinea-Bissau"}, "id": "GNB"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.4928889999999999, 1.0101199999999999], [9.3056129999999992, 1.160911], [9.6491579999999999, 2.2838660000000002], [11.276449, 2.2610510000000001], [11.285079, 1.0576620000000001], [9.8302840000000007, 1.0678939999999999], [9.4928889999999999, 1.0101199999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u043a\u0432\u0430\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Guin\u00e9e \u00e9quatoriale", "en": "Equatorial Guinea", "nl": "Equatoriaal-Guinea", "pt": "Guin\u00e9 Equatorial", "no": "Ekvatorial-Guinea", "de": "\u00c4quatorialguinea", "it": "Guinea Equatoriale", "sv": "Ekvatorialguinea", "pl": "Gwinea R\u00f3wnikowa", "fi": "P\u00e4iv\u00e4ntasaajan Guinea", "zh": "\u8d64\u9053\u51e0\u5185\u4e9a", "ja": "\u8d64\u9053\u30ae\u30cb\u30a2", "es": "Guinea Ecuatorial"}, "label_fr": "Guin\u00e9e \u00e9quatoriale", "name": "Equatorial Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Equatorial_Guinea"}, "id": "GNQ"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[23.69998, 35.705004000000002], [24.246665, 35.368022000000003], [25.025015, 35.424996], [25.769207999999999, 35.354018000000003], [25.745023, 35.179997999999998], [26.290002999999999, 35.299990000000001], [26.164998000000001, 35.004995000000001], [24.724982000000001, 34.919987999999996], [24.735007, 35.084991000000002], [23.514977999999999, 35.279992], [23.69998, 35.705004000000002]]], [[[26.604196000000002, 41.562114999999999], [26.294602000000001, 40.936261000000002], [26.056941999999999, 40.824123], [25.447676999999999, 40.852544999999999], [24.925847999999998, 40.947062000000003], [23.714811000000001, 40.687128999999999], [24.407999, 40.124993000000003], [23.899968000000001, 39.962006000000002], [23.342998999999999, 39.960997999999996], [22.813987999999998, 40.476005000000001], [22.626298999999999, 40.256560999999998], [22.849748000000002, 39.659311000000002], [23.350027000000001, 39.190010999999998], [22.973099000000001, 38.970903], [23.530016, 38.510001000000003], [24.025024999999999, 38.219993000000002], [24.040011, 37.655014999999999], [23.115003000000002, 37.920011000000002], [23.409972, 37.409990999999998], [22.774972000000002, 37.305010000000003], [23.154225, 36.422505999999998], [22.490027999999999, 36.409999999999997], [21.670026, 36.844985999999999], [21.295010999999999, 37.644989000000002], [21.120034, 38.310322999999997], [20.730032000000001, 38.769984999999998], [20.217711999999999, 39.340235], [20.150016000000001, 39.624997999999998], [20.614999999999998, 40.110007000000003], [20.674997000000001, 40.435000000000002], [20.99999, 40.580004000000002], [21.020040000000002, 40.842726999999996], [21.674161000000002, 40.931274999999999], [22.055378000000001, 41.149866000000003], [22.597308000000002, 41.130487000000002], [22.761769999999999, 41.3048], [22.952376999999998, 41.337994000000002], [23.692074000000002, 41.309080999999999], [24.492645, 41.583896000000003], [25.197201, 41.234485999999997], [26.106138000000001, 41.328899], [26.117042000000001, 41.826904999999996], [26.604196000000002, 41.562114999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0440\u0435\u0446\u0438\u044f", "fr": "Gr\u00e8ce", "en": "Greece", "nl": "Griekenland", "pt": "Gr\u00e9cia", "no": "Hellas", "de": "Griechenland", "it": "Grecia", "sv": "Grekland", "pl": "Grecja", "fi": "Kreikka", "zh": "\u5e0c\u814a", "ja": "\u30ae\u30ea\u30b7\u30e3", "es": "Grecia"}, "label_fr": "Gr\u00e8ce", "name": "Greece", "dbpedia_uri": "http://dbpedia.org/resource/Greece"}, "id": "GRC"}, {"geometry": {"type": "Polygon", "coordinates": [[[-46.76379, 82.627960000000002], [-43.406440000000003, 83.225160000000002], [-39.897530000000003, 83.180179999999993], [-38.622140000000002, 83.549049999999994], [-35.087870000000002, 83.645129999999995], [-27.100460000000002, 83.519660000000002], [-20.845389999999998, 82.726690000000005], [-22.69182, 82.341650000000001], [-26.517530000000001, 82.297650000000004], [-31.899999999999999, 82.200000000000003], [-31.396460000000001, 82.021540000000002], [-27.856660000000002, 82.131780000000006], [-24.844480000000001, 81.786969999999997], [-22.903279999999999, 82.093170000000001], [-22.071750000000002, 81.734489999999994], [-23.169609999999999, 81.152709999999999], [-20.623629999999999, 81.524619999999999], [-15.768179999999999, 81.912450000000007], [-12.77018, 81.718850000000003], [-12.208550000000001, 81.291539999999998], [-16.285329999999998, 80.580039999999997], [-16.850000000000001, 80.349999999999994], [-20.046240000000001, 80.177080000000004], [-17.730350000000001, 80.12912], [-18.899999999999999, 79.400000000000006], [-19.704989999999999, 78.751279999999994], [-19.67353, 77.638589999999994], [-18.472850000000001, 76.985650000000007], [-20.035029999999999, 76.944339999999997], [-21.67944, 76.627949999999998], [-19.834070000000001, 76.098079999999996], [-19.598960000000002, 75.248379999999997], [-20.66818, 75.155850000000001], [-19.372810000000001, 74.295609999999996], [-21.59422, 74.223820000000003], [-20.434539999999998, 73.817130000000006], [-20.762339999999998, 73.464359999999999], [-22.17221, 73.309550000000002], [-23.565930000000002, 73.306629999999998], [-22.313110000000002, 72.629279999999994], [-22.29954, 72.184089999999998], [-24.27834, 72.597880000000004], [-24.792960000000001, 72.330200000000005], [-23.442959999999999, 72.080160000000006], [-22.132809999999999, 71.468980000000002], [-21.75356, 70.663690000000003], [-23.53603, 70.471000000000004], [-24.307020000000001, 70.856489999999994], [-25.543410000000002, 71.430940000000007], [-25.201350000000001, 70.752260000000007], [-26.362760000000002, 70.226460000000003], [-23.727419999999999, 70.184010000000001], [-22.349019999999999, 70.129459999999995], [-25.02927, 69.258799999999994], [-27.74737, 68.470460000000003], [-30.67371, 68.125029999999995], [-31.77665, 68.120779999999996], [-32.811050000000002, 67.735470000000007], [-34.20196, 66.679739999999995], [-36.35284, 65.978899999999996], [-37.043779999999998, 65.93768], [-38.375050000000002, 65.692130000000006], [-39.812220000000003, 65.458479999999994], [-40.668990000000001, 64.839969999999994], [-40.682810000000003, 64.139020000000002], [-41.188699999999997, 63.482460000000003], [-42.819380000000002, 62.68233], [-42.41666, 61.900930000000002], [-42.866190000000003, 61.074039999999997], [-43.378399999999999, 60.097720000000002], [-44.787500000000001, 60.036760000000001], [-46.263640000000002, 60.853279999999998], [-48.26294, 60.858429999999998], [-49.233080000000001, 61.40681], [-49.900390000000002, 62.383360000000003], [-51.633249999999997, 63.626910000000002], [-52.140140000000002, 64.278419999999997], [-52.276589999999999, 65.176699999999997], [-53.661659999999998, 66.09957], [-53.301609999999997, 66.836500000000001], [-53.969110000000001, 67.188990000000004], [-52.980400000000003, 68.357590000000002], [-51.475360000000002, 68.729579999999999], [-51.080410000000001, 69.147810000000007], [-50.871220000000001, 69.929100000000005], [-52.013584999999999, 69.574924999999993], [-52.557920000000003, 69.426159999999996], [-53.456290000000003, 69.283625000000001], [-54.68336, 69.610029999999995], [-54.750010000000003, 70.289320000000004], [-54.358840000000001, 70.821314999999998], [-53.431314999999998, 70.835755000000006], [-51.390140000000002, 70.569779999999994], [-53.109369999999998, 71.204849999999993], [-54.004219999999997, 71.547190000000001], [-55, 71.406537], [-55.834679999999999, 71.654439999999994], [-54.71819, 72.586250000000007], [-55.326340000000002, 72.958609999999993], [-56.12003, 73.649770000000004], [-57.323630000000001, 74.710260000000005], [-58.596789999999999, 75.098609999999994], [-58.585160000000002, 75.517269999999996], [-61.268610000000002, 76.102379999999997], [-63.391649999999998, 76.175200000000004], [-66.064269999999993, 76.134860000000003], [-68.504379999999998, 76.061409999999995], [-69.664850000000001, 76.379750000000001], [-71.402569999999997, 77.008570000000006], [-68.776709999999994, 77.323120000000003], [-66.76397, 77.375950000000003], [-71.042929999999998, 77.635949999999994], [-73.296999999999997, 78.04419], [-73.159379999999999, 78.43271], [-69.373450000000005, 78.913880000000006], [-65.710700000000003, 79.394360000000006], [-65.323899999999995, 79.758139999999997], [-68.022980000000004, 80.11721], [-67.151290000000003, 80.515820000000005], [-63.689250000000001, 81.21396], [-62.234439999999999, 81.321100000000001], [-62.651159999999997, 81.770420000000001], [-60.282490000000003, 82.033630000000002], [-57.207439999999998, 82.190740000000005], [-54.134419999999999, 82.199619999999996], [-53.043280000000003, 81.888329999999996], [-50.390610000000002, 82.438829999999996], [-48.003860000000003, 82.064809999999994], [-46.59984, 81.985945000000001], [-44.523000000000003, 81.660700000000006], [-46.900700000000001, 82.199789999999993], [-46.76379, 82.627960000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Groenland", "en": "Greenland", "nl": "Groenland", "pt": "Gronel\u00e2ndia", "no": "Gr\u00f8nland", "de": "Gr\u00f6nland", "it": "Groenlandia", "sv": "Gr\u00f6nland", "pl": "Grenlandia", "fi": "Gr\u00f6nlanti", "zh": "\u683c\u9675\u5170", "ja": "\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9", "es": "Groenlandia"}, "label_fr": "Groenland", "name": "Greenland", "dbpedia_uri": "http://dbpedia.org/resource/Greenland"}, "id": "GRL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-90.095555000000004, 13.735338], [-90.608624000000006, 13.909770999999999], [-91.232410000000002, 13.927832], [-91.689746999999997, 14.126218], [-92.22775, 14.538829], [-92.203230000000005, 14.830102999999999], [-92.087215999999998, 15.064584999999999], [-92.229248999999996, 15.251447000000001], [-91.747960000000006, 16.066565000000001], [-90.464472999999998, 16.069562000000001], [-90.438867000000002, 16.41011], [-90.600847000000002, 16.470777999999999], [-90.711821999999998, 16.687483], [-91.081670000000003, 16.918476999999999], [-91.453920999999994, 17.252177], [-91.002268999999998, 17.254657999999999], [-91.001519999999999, 17.817595000000001], [-90.067933999999994, 17.819326], [-89.143079999999998, 17.808319000000001], [-89.150806000000003, 17.015577], [-89.229122000000004, 15.886938000000001], [-88.930612999999994, 15.887273], [-88.604585999999998, 15.706379999999999], [-88.518364000000005, 15.855389000000001], [-88.225022999999993, 15.727722], [-88.680679999999995, 15.346247], [-89.154810999999995, 15.066419], [-89.225219999999993, 14.874286], [-89.145534999999995, 14.678019000000001], [-89.353325999999996, 14.424132999999999], [-89.587343000000004, 14.362586], [-89.534218999999993, 14.244816], [-89.721934000000005, 14.134228], [-90.064678000000001, 13.881970000000001], [-90.095555000000004, 13.735338]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430", "fr": "Guatemala", "en": "Guatemala", "nl": "Guatemala", "pt": "Guatemala", "no": "Guatemala", "de": "Guatemala", "it": "Guatemala", "sv": "Guatemala", "pl": "Gwatemala", "fi": "Guatemala", "zh": "\u5371\u5730\u9a6c\u62c9", "ja": "\u30b0\u30a2\u30c6\u30de\u30e9", "es": "Guatemala"}, "label_fr": "Guatemala", "name": "Guatemala", "dbpedia_uri": "http://dbpedia.org/resource/Guatemala"}, "id": "GTM"}, {"geometry": {"type": "Polygon", "coordinates": [[[-59.758285000000001, 8.3670349999999996], [-59.101683999999999, 7.9992020000000004], [-58.482962000000001, 7.3476910000000002], [-58.454875999999999, 6.8327869999999997], [-58.078102999999999, 6.809094], [-57.542219000000003, 6.3212679999999999], [-57.147435999999999, 5.9731500000000004], [-57.307245999999999, 5.0735669999999997], [-57.914288999999997, 4.8126259999999998], [-57.860210000000002, 4.5768009999999997], [-58.044694, 4.0608639999999996], [-57.601568999999998, 3.3346550000000001], [-57.281433, 3.3334920000000001], [-57.150098, 2.7689270000000001], [-56.539386, 1.8995230000000001], [-56.782704000000003, 1.8637109999999999], [-57.335822999999998, 1.9485380000000001], [-57.660971000000004, 1.682585], [-58.11345, 1.5071950000000001], [-58.429476999999999, 1.4639420000000001], [-58.540013000000002, 1.2680880000000001], [-59.030861999999999, 1.317698], [-59.646044000000003, 1.786894], [-59.718546000000003, 2.2496299999999998], [-59.974525, 2.755233], [-59.815412999999999, 3.6064989999999999], [-59.538040000000002, 3.9588030000000001], [-59.767406000000001, 4.4235030000000002], [-60.111001999999999, 4.574967], [-59.980958999999999, 5.0140609999999999], [-60.213683000000003, 5.2444860000000002], [-60.733573999999997, 5.2002769999999998], [-61.410302999999999, 5.9590680000000003], [-61.139415, 6.2342969999999998], [-61.159336000000003, 6.6960769999999998], [-60.543998999999999, 6.8565839999999998], [-60.295667999999999, 7.0439109999999996], [-60.637973000000002, 7.415], [-60.550587999999998, 7.7796029999999998], [-59.758285000000001, 8.3670349999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u0439\u0430\u043d\u0430", "fr": "Guyana", "en": "Guyana", "nl": "Guyana", "pt": "Guiana", "no": "Guyana", "de": "Guyana", "it": "Guyana", "sv": "Guyana", "pl": "Gujana", "fi": "Guyana", "zh": "\u572d\u4e9a\u90a3", "ja": "\u30ac\u30a4\u30a2\u30ca", "es": "Guyana"}, "label_fr": "Guyana", "name": "Guyana", "dbpedia_uri": "http://dbpedia.org/resource/Guyana"}, "id": "GUY"}, {"geometry": {"type": "Polygon", "coordinates": [[[-87.316654, 12.984686], [-87.489408999999995, 13.297535], [-87.793110999999996, 13.38448], [-87.723502999999994, 13.78505], [-87.859515000000002, 13.893312], [-88.065342999999999, 13.964626000000001], [-88.503997999999996, 13.845485999999999], [-88.541230999999996, 13.980155], [-88.843073000000004, 14.140506999999999], [-89.058511999999993, 14.340028999999999], [-89.353325999999996, 14.424132999999999], [-89.145534999999995, 14.678019000000001], [-89.225219999999993, 14.874286], [-89.154810999999995, 15.066419], [-88.680679999999995, 15.346247], [-88.225022999999993, 15.727722], [-88.121153000000007, 15.688655000000001], [-87.901813000000004, 15.864458000000001], [-87.615679999999998, 15.878799000000001], [-87.522920999999997, 15.797279], [-87.367761999999999, 15.84694], [-86.903191000000007, 15.756713], [-86.440945999999997, 15.782835], [-86.119234000000006, 15.893449], [-86.001953999999998, 16.005406000000001], [-85.683317000000002, 15.953652], [-85.444004000000007, 15.885749000000001], [-85.182444000000004, 15.909158], [-84.983722, 15.995922999999999], [-84.526979999999995, 15.857224], [-84.368256000000002, 15.835158], [-84.063055000000006, 15.648244], [-83.773977000000002, 15.424072000000001], [-83.410381000000001, 15.270903000000001], [-83.147219000000007, 14.995829000000001], [-83.489988999999994, 15.016266999999999], [-83.628585000000001, 14.880074], [-83.975720999999993, 14.749435999999999], [-84.228341999999998, 14.748764], [-84.449336000000002, 14.621613999999999], [-84.649581999999995, 14.666805], [-84.820036999999999, 14.819587], [-84.924501000000006, 14.790493], [-85.052786999999995, 14.551541], [-85.148751000000004, 14.560197000000001], [-85.165364999999994, 14.354369999999999], [-85.514413000000005, 14.079012000000001], [-85.698665000000005, 13.960077999999999], [-85.801294999999996, 13.836055], [-86.096264000000005, 14.038187000000001], [-86.312141999999994, 13.771356000000001], [-86.520707999999999, 13.778487], [-86.755087000000003, 13.754845], [-86.733822000000004, 13.263093], [-86.880556999999996, 13.254204], [-87.005769000000001, 13.025793999999999], [-87.316654, 12.984686]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441", "fr": "Honduras", "en": "Honduras", "nl": "Honduras", "pt": "Honduras", "no": "Honduras", "de": "Honduras", "it": "Honduras", "sv": "Honduras", "pl": "Honduras", "fi": "Honduras", "zh": "\u6d2a\u90fd\u62c9\u65af", "ja": "\u30db\u30f3\u30b8\u30e5\u30e9\u30b9", "es": "Honduras"}, "label_fr": "Honduras", "name": "Honduras", "dbpedia_uri": "http://dbpedia.org/resource/Honduras"}, "id": "HND"}, {"geometry": {"type": "Polygon", "coordinates": [[[18.829837999999999, 45.908878000000001], [19.072769000000001, 45.521510999999997], [19.390476, 45.236516000000002], [19.005486000000001, 44.860233999999998], [18.553214000000001, 45.081589999999998], [17.861782999999999, 45.067740000000001], [17.002146, 45.233777000000003], [16.534939000000001, 45.211607999999998], [16.318156999999999, 45.004126999999997], [15.959367, 45.233777000000003], [15.750026, 44.818711999999998], [16.239660000000001, 44.351143], [16.456443, 44.041240000000002], [16.916156000000001, 43.667721999999998], [17.297373, 43.446340999999997], [17.674921999999999, 43.028562999999998], [18.559999999999999, 42.649999999999999], [18.450016000000002, 42.479990999999998], [17.509969999999999, 42.849995], [16.930005999999999, 43.209997999999999], [16.015384999999998, 43.507215000000002], [15.174454000000001, 44.243191000000003], [15.376250000000001, 44.317914999999999], [14.920309, 44.738484], [14.901602, 45.076059999999998], [14.258748000000001, 45.233777000000003], [13.952254999999999, 44.802123999999999], [13.656976, 45.136935000000001], [13.679403000000001, 45.484149000000002], [13.715059999999999, 45.500323999999999], [14.411968, 45.466166000000001], [14.595109000000001, 45.634940999999998], [14.935244000000001, 45.471694999999997], [15.327674999999999, 45.452316000000003], [15.323954000000001, 45.731783], [15.671530000000001, 45.834153999999998], [15.768732999999999, 46.238107999999997], [16.564807999999999, 46.503751000000001], [16.882515000000001, 46.380631999999999], [17.630065999999999, 45.951768999999999], [18.456061999999999, 45.759481000000001], [18.829837999999999, 45.908878000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0425\u043e\u0440\u0432\u0430\u0442\u0438\u044f", "fr": "Croatie", "en": "Croatia", "nl": "Kroati\u00eb", "pt": "Cro\u00e1cia", "no": "Kroatia", "de": "Kroatien", "it": "Croazia", "sv": "Kroatien", "pl": "Chorwacja", "fi": "Kroatia", "zh": "\u514b\u7f57\u5730\u4e9a", "ja": "\u30af\u30ed\u30a2\u30c1\u30a2", "es": "Croacia"}, "label_fr": "Croatie", "name": "Croatia", "dbpedia_uri": "http://dbpedia.org/resource/Croatia"}, "id": "HRV"}, {"geometry": {"type": "Polygon", "coordinates": [[[-73.189791, 19.915683999999999], [-72.579673, 19.871500999999999], [-71.712361000000001, 19.714455999999998], [-71.624872999999994, 19.169837999999999], [-71.701302999999996, 18.785416999999999], [-71.945111999999995, 18.616900000000001], [-71.687737999999996, 18.316659999999999], [-71.708304999999996, 18.044996999999999], [-72.372476000000006, 18.214960999999999], [-72.844410999999994, 18.145610999999999], [-73.454554999999999, 18.217905999999999], [-73.922432999999998, 18.030992999999999], [-74.458033999999998, 18.342549999999999], [-74.369924999999995, 18.664908], [-73.449541999999994, 18.526053000000001], [-72.694936999999996, 18.445799000000001], [-72.334881999999993, 18.668422], [-72.791650000000004, 19.101624999999999], [-72.784104999999997, 19.483591000000001], [-73.415021999999993, 19.639551000000001], [-73.189791, 19.915683999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0413\u0430\u0438\u0442\u0438", "fr": "Ha\u00efti", "en": "Haiti", "nl": "Ha\u00efti", "pt": "Haiti", "no": "Haiti", "de": "Haiti", "it": "Haiti", "sv": "Haiti", "pl": "Haiti", "fi": "Haiti", "zh": "\u6d77\u5730", "ja": "\u30cf\u30a4\u30c1", "es": "Hait\u00ed"}, "label_fr": "Ha\u00efti", "name": "Haiti", "dbpedia_uri": "http://dbpedia.org/resource/Haiti"}, "id": "HTI"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.202297999999999, 46.852386000000003], [16.534268000000001, 47.496170999999997], [16.340584, 47.712902], [16.903753999999999, 47.714866000000001], [16.979666999999999, 48.123497], [17.488472999999999, 47.867466], [17.857133000000001, 47.758429], [18.696512999999999, 47.880954000000003], [18.777024999999998, 48.081767999999997], [19.174365000000002, 48.111378999999999], [19.661363999999999, 48.266615000000002], [19.769470999999999, 48.202691000000002], [20.239053999999999, 48.327567000000002], [20.473562000000001, 48.562849999999997], [20.801293999999999, 48.623854000000001], [21.872236000000001, 48.319971000000002], [22.085608000000001, 48.422263999999998], [22.640820000000001, 48.150239999999997], [22.710531, 47.882193999999998], [22.099768000000001, 47.672438999999997], [21.626515000000001, 46.994238000000003], [21.021951999999999, 46.316088000000001], [20.220192000000001, 46.127468999999998], [19.596045, 46.171729999999997], [18.829837999999999, 45.908878000000001], [18.456061999999999, 45.759481000000001], [17.630065999999999, 45.951768999999999], [16.882515000000001, 46.380631999999999], [16.564807999999999, 46.503751000000001], [16.370505000000001, 46.841327], [16.202297999999999, 46.852386000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043d\u0433\u0440\u0438\u044f", "fr": "Hongrie", "en": "Hungary", "nl": "Hongarije", "pt": "Hungria", "no": "Ungarn", "de": "Ungarn", "it": "Ungheria", "sv": "Ungern", "pl": "W\u0119gry", "fi": "Unkari", "zh": "\u5308\u7259\u5229", "ja": "\u30cf\u30f3\u30ac\u30ea\u30fc", "es": "Hungr\u00eda"}, "label_fr": "Hongrie", "name": "Hungary", "dbpedia_uri": "http://dbpedia.org/resource/Hungary"}, "id": "HUN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[120.715609, -10.239580999999999], [120.29501399999999, -10.258649999999999], [118.96780800000001, -9.5579689999999999], [119.90031, -9.3613400000000002], [120.42575600000001, -9.6659210000000009], [120.775502, -9.9696750000000005], [120.715609, -10.239580999999999]]], [[[124.43595000000001, -10.140001], [123.579982, -10.359987], [123.45998899999999, -10.239995], [123.550009, -9.9000160000000008], [123.980009, -9.2900270000000003], [124.968682, -8.8927899999999998], [125.07002, -9.0899870000000007], [125.08852, -9.3931730000000009], [124.43595000000001, -10.140001]]], [[[117.900018, -8.0956810000000008], [118.260616, -8.3623829999999995], [118.87846, -8.2806829999999998], [119.126507, -8.7058250000000008], [117.97040200000001, -8.9066390000000002], [117.277731, -9.0408950000000008], [116.74014099999999, -9.0329370000000004], [117.083737, -8.4571579999999997], [117.632024, -8.4493030000000005], [117.900018, -8.0956810000000008]]], [[[122.903537, -8.0942340000000002], [122.75698300000001, -8.6498080000000002], [121.254491, -8.9336660000000006], [119.924391, -8.8104180000000003], [119.920929, -8.4448589999999992], [120.715092, -8.2369649999999996], [121.341669, -8.53674], [122.00736499999999, -8.4606200000000005], [122.903537, -8.0942340000000002]]], [[[108.623479, -6.7776740000000002], [110.539227, -6.8773580000000001], [110.759576, -6.4651860000000001], [112.614811, -6.9460360000000003], [112.978768, -7.5942129999999999], [114.47893500000001, -7.7765279999999999], [115.705527, -8.3708069999999992], [114.564511, -8.7518170000000008], [113.46473400000001, -8.3489470000000008], [112.55967200000001, -8.3761810000000008], [111.52206099999999, -8.3021290000000008], [110.58615, -8.1226050000000001], [109.427667, -7.7406639999999998], [108.69365500000001, -7.6416000000000004], [108.27776299999999, -7.7666570000000004], [106.45410200000001, -7.3548999999999998], [106.280624, -6.9249000000000001], [105.365486, -6.8514160000000004], [106.05164600000001, -5.8959190000000001], [107.26500900000001, -5.9549849999999998], [108.072091, -6.3457619999999997], [108.486846, -6.4219850000000003], [108.623479, -6.7776740000000002]]], [[[134.72462400000001, -6.2144009999999996], [134.21013400000001, -6.895238], [134.112776, -6.1424669999999999], [134.290336, -5.7830579999999996], [134.49962500000001, -5.4450419999999999], [134.727002, -5.7375819999999997], [134.72462400000001, -6.2144009999999996]]], [[[127.24921500000001, -3.4590649999999998], [126.874923, -3.7909830000000002], [126.183802, -3.6073759999999999], [125.989034, -3.177273], [127.000651, -3.129318], [127.24921500000001, -3.4590649999999998]]], [[[130.47134399999999, -3.0937640000000002], [130.834836, -3.8584719999999999], [129.99054699999999, -3.4463010000000001], [129.155249, -3.3626369999999999], [128.59068400000001, -3.4286789999999998], [127.89889100000001, -3.3934359999999999], [128.13587899999999, -2.8436499999999998], [129.37099799999999, -2.8021539999999998], [130.47134399999999, -3.0937640000000002]]], [[[134.14336800000001, -1.151867], [134.42262700000001, -2.7691849999999998], [135.45760300000001, -3.367753], [136.29331400000001, -2.307042], [137.44073800000001, -1.7035130000000001], [138.32972699999999, -1.7026859999999999], [139.184921, -2.0512959999999998], [139.92668399999999, -2.409052], [141.00021000000001, -2.6001509999999999], [141.01705699999999, -5.8590220000000004], [141.033852, -9.1178930000000005], [140.143415, -8.2971679999999992], [139.12776700000001, -8.0960429999999999], [138.88147699999999, -8.3809349999999991], [137.614474, -8.411683], [138.03909899999999, -7.5978820000000002], [138.668621, -7.3202249999999998], [138.40791400000001, -6.2328489999999999], [137.92784, -5.3933660000000003], [135.98925, -4.5465439999999999], [135.16459800000001, -4.4629310000000002], [133.66288, -3.538853], [133.367705, -4.0248189999999999], [132.98395600000001, -4.1129790000000002], [132.75694100000001, -3.746283], [132.75378900000001, -3.3117869999999998], [131.98980399999999, -2.820551], [133.066845, -2.4604180000000002], [133.78003100000001, -2.4798480000000001], [133.696212, -2.2145419999999998], [132.232373, -2.212526], [131.83622199999999, -1.617162], [130.94283999999999, -1.4325220000000001], [130.51955799999999, -0.93772], [131.867538, -0.695461], [132.38011599999999, -0.36953799999999998], [133.98554799999999, -0.78020999999999996], [134.14336800000001, -1.151867]]], [[[125.24050099999999, 1.4198360000000001], [124.43703499999999, 0.42788100000000001], [123.68550500000001, 0.235593], [122.723083, 0.43113699999999999], [121.056725, 0.38121699999999997], [120.183083, 0.23724700000000001], [120.04087, -0.51965799999999995], [120.93590500000001, -1.408906], [121.475821, -0.95596199999999998], [123.340565, -0.61567300000000003], [123.258399, -1.0762130000000001], [122.822715, -0.93095099999999997], [122.38853, -1.516858], [121.508274, -1.9044829999999999], [122.454572, -3.1860580000000001], [122.271896, -3.5295000000000001], [123.170963, -4.6836929999999999], [123.162333, -5.3406039999999999], [122.62851499999999, -5.6345910000000003], [122.236394, -5.2829329999999999], [122.71956900000001, -4.4641719999999996], [121.73823400000001, -4.8513310000000001], [121.489463, -4.5745529999999999], [121.61917099999999, -4.1884779999999999], [120.89818200000001, -3.6021049999999999], [120.97238900000001, -2.627643], [120.305453, -2.9316040000000001], [120.390047, -4.0975789999999996], [120.430717, -5.5282410000000004], [119.796543, -5.6734], [119.366906, -5.3798779999999997], [119.653606, -4.4594170000000002], [119.498835, -3.4944120000000001], [119.078344, -3.4870220000000001], [118.767769, -2.8019989999999999], [119.18097400000001, -2.1471040000000001], [119.32339399999999, -1.3531470000000001], [119.825999, 0.154254], [120.035702, 0.56647700000000001], [120.885779, 1.309223], [121.66681699999999, 1.013944], [122.927567, 0.87519199999999997], [124.077522, 0.91710199999999997], [125.065989, 1.643259], [125.24050099999999, 1.4198360000000001]]], [[[128.68824900000001, 1.1323859999999999], [128.635952, 0.25848599999999999], [128.12017, 0.35641299999999998], [127.968034, -0.252077], [128.379999, -0.78000400000000003], [128.10001600000001, -0.89999600000000002], [127.69647500000001, -0.266598], [127.39949, 1.011722], [127.60051199999999, 1.8106910000000001], [127.932378, 2.1745960000000002], [128.00415599999999, 1.628531], [128.594559, 1.5408109999999999], [128.68824900000001, 1.1323859999999999]]], [[[117.87562699999999, 1.8276410000000001], [118.996747, 0.90221899999999999], [117.811858, 0.78424199999999999], [117.47833900000001, 0.102475], [117.52164399999999, -0.80372299999999997], [116.56004799999999, -1.4876609999999999], [116.53379700000001, -2.483517], [116.148084, -4.0127259999999998], [116.00085799999999, -3.6570369999999999], [114.86480299999999, -4.1069839999999997], [114.46865200000001, -3.4957039999999999], [113.755672, -3.4391699999999998], [113.25699400000001, -3.118776], [112.06812600000001, -3.4783919999999999], [111.70329099999999, -2.9944419999999998], [111.04824000000001, -3.049426], [110.22384599999999, -2.9340320000000002], [110.070936, -1.5928739999999999], [109.57194800000001, -1.314907], [109.091874, -0.459507], [108.952658, 0.41537499999999999], [109.069136, 1.341934], [109.66325999999999, 2.0064669999999998], [109.83022699999999, 1.338136], [110.514061, 0.77313100000000001], [111.159138, 0.97647799999999996], [111.79754800000001, 0.90444100000000005], [112.380252, 1.410121], [112.859809, 1.49779], [113.80585000000001, 1.217549], [114.62135499999999, 1.430688], [115.13403700000001, 2.821482], [115.51907799999999, 3.169238], [115.865517, 4.306559], [117.015214, 4.3060939999999999], [117.882035, 4.1375510000000002], [117.313232, 3.2344279999999999], [118.04833000000001, 2.28769], [117.87562699999999, 1.8276410000000001]]], [[[105.817655, -5.8523560000000003], [104.710384, -5.8732850000000001], [103.868213, -5.0373150000000004], [102.584261, -4.2202590000000004], [102.156173, -3.6141459999999999], [101.399113, -2.7997770000000002], [100.902503, -2.050262], [100.141981, -0.65034800000000004], [99.263739999999999, 0.183142], [98.970011, 1.0428820000000001], [98.601350999999994, 1.823507], [97.699597999999995, 2.4531839999999998], [97.176941999999997, 3.3087909999999998], [96.424017000000006, 3.8688600000000002], [95.380876000000001, 4.9707819999999998], [95.293025999999998, 5.4798210000000003], [95.936863000000002, 5.4395129999999998], [97.484881999999999, 5.246321], [98.369168999999999, 4.26837], [99.142559000000006, 3.5903499999999999], [99.693997999999993, 3.1743290000000002], [100.641434, 2.0993810000000002], [101.658012, 2.0836969999999999], [102.498271, 1.3987000000000001], [103.07684, 0.561361], [103.838396, 0.104542], [103.437645, -0.71194599999999997], [104.010789, -1.059212], [104.369991, -1.084843], [104.53949, -1.7823720000000001], [104.88789300000001, -2.3404250000000002], [105.622111, -2.4288439999999998], [106.108593, -3.0617770000000002], [105.857446, -4.3055250000000003], [105.817655, -5.8523560000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u044f", "fr": "Indon\u00e9sie", "en": "Indonesia", "nl": "Indonesi\u00eb", "pt": "Indon\u00e9sia", "no": "Indonesia", "de": "Indonesien", "it": "Indonesia", "sv": "Indonesien", "pl": "Indonezja", "fi": "Indonesia", "zh": "\u5370\u5ea6\u5c3c\u897f\u4e9a", "ja": "\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2", "es": "Indonesia"}, "label_fr": "Indon\u00e9sie", "name": "Indonesia", "dbpedia_uri": "http://dbpedia.org/resource/Indonesia"}, "id": "IDN"}, {"geometry": {"type": "Polygon", "coordinates": [[[77.837451000000001, 35.494010000000003], [78.912268999999995, 34.321936000000001], [78.811086000000003, 33.506197999999998], [79.208892000000006, 32.994394999999997], [79.176129000000003, 32.483780000000003], [78.458445999999995, 32.618164], [78.738894000000002, 31.515906000000001], [79.721367000000001, 30.882715000000001], [81.111255999999997, 30.183481], [80.476720999999998, 29.729865], [80.088425000000001, 28.79447], [81.057203000000001, 28.416094999999999], [81.999987000000004, 27.925478999999999], [83.304248999999999, 27.364505999999999], [84.675017999999994, 27.234901000000001], [85.251778999999999, 26.726198], [86.024393000000003, 26.630984999999999], [87.227472000000006, 26.397898000000001], [88.060237999999998, 26.414615000000001], [88.174803999999995, 26.810404999999999], [88.043132999999997, 27.445819], [88.120441, 27.876542000000001], [88.730326000000005, 28.086865], [88.814248000000006, 27.299316000000001], [88.835643000000005, 27.098966000000001], [89.744528000000003, 26.719403], [90.373275000000007, 26.875724000000002], [91.217512999999997, 26.808648000000002], [92.033484000000001, 26.83831], [92.103712000000002, 27.452614000000001], [91.696657000000002, 27.771742], [92.503118999999998, 27.896875999999999], [93.413347999999999, 28.640629000000001], [94.565989999999999, 29.277438], [95.404802000000004, 29.031717], [96.117678999999995, 29.452801999999998], [96.586590999999999, 28.83098], [96.248833000000005, 28.411031000000001], [97.327113999999995, 28.261583000000002], [97.402561000000006, 27.882536000000002], [97.051989000000006, 27.699058999999998], [97.133999000000003, 27.083773999999998], [96.419365999999997, 27.264589000000001], [95.124768000000003, 26.573571999999999], [95.155152999999999, 26.001307000000001], [94.603249000000005, 25.162495], [94.552657999999994, 24.675238], [94.106741999999997, 23.850740999999999], [93.325187999999997, 24.078555999999999], [93.286327, 23.043658000000001], [93.060293999999999, 22.703111], [93.166128, 22.278459999999999], [92.672720999999996, 22.041239000000001], [92.146034999999998, 23.627499], [91.869928000000002, 23.624345999999999], [91.706474999999998, 22.985264000000001], [91.158963, 23.503526999999998], [91.467730000000003, 24.072638999999999], [91.915092999999999, 24.130413999999998], [92.376202000000006, 24.976693000000001], [91.799595999999994, 25.147431999999998], [90.872210999999993, 25.132601000000001], [89.920693, 25.269749999999998], [89.832481000000001, 25.965081999999999], [89.355093999999994, 26.014406999999999], [88.563049000000007, 26.446525999999999], [88.209789000000001, 25.768066000000001], [88.931554000000006, 25.238692], [88.306372999999994, 24.866078999999999], [88.084422000000004, 24.501657000000002], [88.699939999999998, 24.233715], [88.529769999999999, 23.631142000000001], [88.876311999999999, 22.879145999999999], [89.031960999999995, 22.055707999999999], [88.888766000000004, 21.690588000000002], [88.208496999999994, 21.703171999999999], [86.975703999999993, 21.495562], [87.033169000000001, 20.743307999999999], [86.499351000000004, 20.151637999999998], [85.060265999999999, 19.478579], [83.941006000000002, 18.302009999999999], [83.189216999999999, 17.671220999999999], [82.192791999999997, 17.016635999999998], [82.191242000000003, 16.556664000000001], [81.692718999999997, 16.310219], [80.791999000000004, 15.951972], [80.324895999999995, 15.899184999999999], [80.025069000000002, 15.136415], [80.233273999999994, 13.835770999999999], [80.286293999999998, 13.006261], [79.862547000000006, 12.056215], [79.857999000000007, 10.357275], [79.340512000000004, 10.308854], [78.885345000000001, 9.5461360000000006], [79.189719999999994, 9.2165440000000007], [78.277940999999998, 8.9330470000000002], [77.941164999999998, 8.2529590000000006], [77.539897999999994, 7.965535], [76.592979, 8.8992760000000004], [76.130060999999998, 10.299630000000001], [75.746466999999996, 11.308251], [75.396101000000002, 11.781245], [74.864816000000005, 12.741936000000001], [74.616716999999994, 13.992583], [74.443859000000003, 14.617222], [73.534199000000001, 15.990652000000001], [73.119909000000007, 17.928570000000001], [72.820909, 19.208234000000001], [72.824475000000007, 20.419502999999999], [72.630533, 21.356009], [71.175273000000004, 20.757441], [70.470459000000005, 20.877331000000002], [69.16413, 22.089297999999999], [69.644927999999993, 22.450775], [69.349597000000003, 22.84318], [68.176644999999994, 23.691965], [68.842599000000007, 24.359134000000001], [71.043239999999997, 24.356524], [70.844699000000006, 25.215102000000002], [70.282872999999995, 25.722228999999999], [70.168926999999996, 26.491872000000001], [69.514392999999998, 26.940966], [70.616495999999998, 27.989196], [71.777665999999996, 27.913180000000001], [72.823751999999999, 28.961592], [73.450637999999998, 29.976413000000001], [74.421379999999999, 30.979814999999999], [74.405929, 31.692639], [75.258641999999995, 32.271104999999999], [74.451559000000003, 32.764899999999997], [74.104293999999996, 33.441473000000002], [73.749948000000003, 34.317698999999998], [74.240202999999994, 34.748887000000003], [75.757060999999993, 34.504922999999998], [76.871722000000005, 34.653543999999997], [77.837451000000001, 35.494010000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043d\u0434\u0438\u044f", "fr": "Inde", "en": "India", "nl": "India", "pt": "\u00cdndia", "no": "India", "de": "Indien", "it": "India", "sv": "Indien", "pl": "Indie", "fi": "Intia", "zh": "\u5370\u5ea6", "ja": "\u30a4\u30f3\u30c9", "es": "India"}, "label_fr": "Inde", "name": "India", "dbpedia_uri": "http://dbpedia.org/resource/India"}, "id": "IND"}, {"geometry": {"type": "Polygon", "coordinates": [[[-6.1978850000000003, 53.867564999999999], [-6.032985, 53.153163999999997], [-6.7888570000000001, 52.260117999999999], [-8.561617, 51.669300999999997], [-9.9770859999999999, 51.820455000000003], [-9.166283, 52.864629000000001], [-9.6885250000000003, 53.881363], [-8.3279870000000003, 54.664518999999999], [-7.5721679999999996, 55.131622], [-7.3660310000000004, 54.595841], [-7.5721679999999996, 54.059956], [-6.9537300000000002, 54.073701999999997], [-6.1978850000000003, 53.867564999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u043b\u0430\u043d\u0434\u0438\u044f (\u043e\u0441\u0442\u0440\u043e\u0432)", "fr": "Irlande (\u00eele)", "en": "Ireland", "nl": "Ierland (eiland)", "pt": "Irlanda (ilha)", "no": "Irland (\u00f8y)", "de": "Irland (Insel)", "it": "Irlanda (isola)", "pl": "Irlandia (wyspa)", "fi": "Irlanti (saari)", "zh": "\u7231\u5c14\u5170\u5c9b", "ja": "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u5cf6", "es": "Irlanda (isla)"}, "label_fr": "Irlande (\u00eele)", "name": "Ireland", "dbpedia_uri": "http://dbpedia.org/resource/Ireland"}, "id": "IRL"}, {"geometry": {"type": "Polygon", "coordinates": [[[53.921598000000003, 37.198917999999999], [54.800303999999997, 37.392420999999999], [55.511578, 37.964117000000002], [56.180374999999998, 37.935127000000001], [56.619365999999999, 38.121394000000002], [57.330433999999997, 38.029229000000001], [58.436154000000002, 37.522309], [59.234762000000003, 37.412987999999999], [60.377637999999997, 36.527383], [61.123071000000003, 36.491596999999999], [61.210816999999999, 35.650072000000002], [60.803193, 34.404102000000002], [60.52843, 33.676445999999999], [60.963700000000003, 33.528832000000001], [60.536078000000003, 32.981268999999998], [60.863655000000001, 32.182920000000003], [60.941944999999997, 31.548075000000001], [61.699314000000001, 31.379505999999999], [61.781222, 30.735849999999999], [60.874248000000001, 29.829239000000001], [61.369309000000001, 29.303276], [61.771867999999998, 28.699334], [62.727829999999997, 28.259644999999999], [62.755426, 27.378923], [63.233898000000003, 27.217047000000001], [63.316631999999998, 26.756532], [61.874186999999999, 26.239975000000001], [61.497363, 25.078237000000001], [59.616134000000002, 25.380157000000001], [58.525761000000003, 25.609961999999999], [57.397250999999997, 25.739902000000001], [56.970765999999998, 26.966106], [56.492139000000002, 27.143305000000002], [55.723709999999997, 26.964632999999999], [54.715089999999996, 26.480657999999998], [53.493096999999999, 26.812369], [52.483598000000001, 27.580849000000001], [51.520763000000002, 27.865690000000001], [50.852947999999998, 28.814520999999999], [50.115009000000001, 30.147773000000001], [49.57685, 29.985714999999999], [48.941333, 30.31709], [48.567971, 29.926777999999999], [48.014567999999997, 30.452456999999999], [48.004697999999998, 30.985137000000002], [47.685285999999998, 30.984853000000001], [47.849204, 31.709175999999999], [47.334660999999997, 32.469155000000001], [46.109361999999997, 33.017287000000003], [45.416691, 33.967798000000002], [45.64846, 34.748137999999997], [46.151788000000003, 35.093259000000003], [46.076340000000002, 35.677382999999999], [45.420617999999997, 35.977545999999997], [44.772669999999998, 37.170450000000002], [44.225755999999997, 37.971584], [44.421402999999998, 38.281281], [44.109225000000002, 39.428136000000002], [44.793990000000001, 39.713003], [44.952688000000002, 39.335765000000002], [45.457721999999997, 38.874139], [46.143622999999998, 38.741200999999997], [46.505719999999997, 38.770605000000003], [47.685079000000002, 39.508364], [48.060094999999997, 39.582234999999997], [48.355528999999997, 39.288764999999998], [48.010744000000003, 38.794015000000002], [48.634374999999999, 38.270378000000001], [48.883248999999999, 38.320245], [49.199612000000002, 37.582873999999997], [50.147770999999999, 37.374566999999999], [50.842354, 36.872813999999998], [52.264024999999997, 36.700422000000003], [53.825789999999998, 36.965031000000003], [53.921598000000003, 37.198917999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u0430\u043d", "fr": "Iran", "en": "Iran", "nl": "Iran", "pt": "Ir\u00e3o", "no": "Iran", "de": "Iran", "it": "Iran", "sv": "Iran", "pl": "Iran", "fi": "Iran", "zh": "\u4f0a\u6717", "ja": "\u30a4\u30e9\u30f3", "es": "Ir\u00e1n"}, "label_fr": "Iran", "name": "Iran", "dbpedia_uri": "http://dbpedia.org/resource/Iran"}, "id": "IRN"}, {"geometry": {"type": "Polygon", "coordinates": [[[45.420617999999997, 35.977545999999997], [46.076340000000002, 35.677382999999999], [46.151788000000003, 35.093259000000003], [45.64846, 34.748137999999997], [45.416691, 33.967798000000002], [46.109361999999997, 33.017287000000003], [47.334660999999997, 32.469155000000001], [47.849204, 31.709175999999999], [47.685285999999998, 30.984853000000001], [48.004697999999998, 30.985137000000002], [48.014567999999997, 30.452456999999999], [48.567971, 29.926777999999999], [47.974519000000001, 29.975819000000001], [47.302622, 30.059069999999998], [46.568713000000002, 29.099025000000001], [44.709499000000001, 29.178891], [41.889980999999999, 31.190009], [40.399994, 31.889991999999999], [39.195467999999998, 32.161009], [38.792341, 33.378686000000002], [41.006158999999997, 34.419372000000003], [41.383965000000003, 35.628317000000003], [41.289707, 36.358815], [41.837063999999998, 36.605854000000001], [42.349590999999997, 37.229872999999998], [42.779125999999998, 37.385263999999999], [43.942259, 37.256228], [44.293452000000002, 37.001514], [44.772699000000003, 37.170445000000001], [45.420617999999997, 35.977545999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u0430\u043a", "fr": "Irak", "en": "Iraq", "nl": "Irak", "pt": "Iraque", "no": "Irak", "de": "Irak", "it": "Iraq", "sv": "Irak", "pl": "Irak", "fi": "Irak", "zh": "\u4f0a\u62c9\u514b", "ja": "\u30a4\u30e9\u30af", "es": "Irak"}, "label_fr": "Irak", "name": "Iraq", "dbpedia_uri": "http://dbpedia.org/resource/Iraq"}, "id": "IRQ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-14.508694999999999, 66.455892000000006], [-14.739637, 65.808747999999994], [-13.609731999999999, 65.126671000000002], [-14.909834, 64.364081999999996], [-17.794438, 63.678749000000003], [-18.656245999999999, 63.496383000000002], [-19.972754999999999, 63.643635000000003], [-22.762972000000001, 63.960178999999997], [-21.778483999999999, 64.402116000000007], [-23.955044000000001, 64.891130000000004], [-22.184403, 65.084968000000003], [-22.227423000000002, 65.378594000000007], [-24.326184000000001, 65.611188999999996], [-23.650514999999999, 66.262518999999998], [-22.134922, 66.410469000000006], [-20.576284000000001, 65.732112000000001], [-19.056842, 66.276600999999999], [-17.798624, 65.993853000000001], [-16.167819000000001, 66.526792], [-14.508694999999999, 66.455892000000006]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0441\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Islande", "en": "Iceland", "nl": "IJsland", "pt": "Isl\u00e2ndia", "no": "Island", "de": "Island", "it": "Islanda", "sv": "Island", "pl": "Islandia", "fi": "Islanti", "zh": "\u51b0\u5c9b", "ja": "\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9", "es": "Islandia"}, "label_fr": "Islande", "name": "Iceland", "dbpedia_uri": "http://dbpedia.org/resource/Iceland"}, "id": "ISL"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.719918, 32.709192000000002], [35.545665, 32.393991999999997], [35.183929999999997, 32.532511], [34.974640999999998, 31.866582000000001], [35.225892000000002, 31.754341], [34.970506999999998, 31.616778], [34.927408, 31.353435000000001], [35.397561000000003, 31.489086], [35.420918, 31.100066000000002], [34.922603000000002, 29.501325999999999], [34.265433000000002, 31.219360999999999], [34.556372000000003, 31.548824], [34.488106999999999, 31.605539], [34.752586999999998, 32.072926000000002], [34.955416999999997, 32.827376000000001], [35.098457000000003, 33.080539000000002], [35.126052999999999, 33.090899999999998], [35.460709000000001, 33.089039999999997], [35.552796999999998, 33.264274999999998], [35.821100999999999, 33.277425999999998], [35.836396999999998, 32.868122999999997], [35.700797999999999, 32.716014000000001], [35.719918, 32.709192000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0437\u0440\u0430\u0438\u043b\u044c", "fr": "Isra\u00ebl", "en": "Israel", "nl": "Isra\u00ebl", "pt": "Israel", "no": "Israel", "de": "Israel", "it": "Israele", "sv": "Israel", "pl": "Izrael", "fi": "Israel", "zh": "\u4ee5\u8272\u5217", "ja": "\u30a4\u30b9\u30e9\u30a8\u30eb", "es": "Israel"}, "label_fr": "Isra\u00ebl", "name": "Israel", "dbpedia_uri": "http://dbpedia.org/resource/Israel"}, "id": "ISR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[15.520376000000001, 38.231155000000001], [15.160242999999999, 37.444046], [15.309898, 37.134219000000002], [15.099988, 36.619987000000002], [14.335229, 36.996631000000001], [13.826733000000001, 37.104531000000001], [12.431004, 37.612949999999998], [12.570944000000001, 38.126381000000002], [13.741156, 38.034965999999997], [14.761248999999999, 38.143873999999997], [15.520376000000001, 38.231155000000001]]], [[[9.2100120000000008, 41.209991000000002], [9.8099749999999997, 40.500008999999999], [9.6695189999999993, 39.177376000000002], [9.2148179999999993, 39.240473000000001], [8.8069360000000003, 38.906618000000002], [8.4283020000000004, 39.171847], [8.3882530000000006, 40.378310999999997], [8.1599979999999999, 40.950006999999999], [8.7099910000000005, 40.899984000000003], [9.2100120000000008, 41.209991000000002]]], [[[12.376485000000001, 46.767558999999999], [13.806475000000001, 46.509306000000002], [13.69811, 46.016778000000002], [13.93763, 45.591016000000003], [13.141605999999999, 45.736691999999998], [12.328581, 45.381777999999997], [12.383875, 44.885373999999999], [12.261452999999999, 44.600482], [12.589237000000001, 44.091366000000001], [13.526906, 43.587727000000001], [14.029821, 42.761007999999997], [15.142569999999999, 41.95514], [15.926190999999999, 41.961314999999999], [16.169896999999999, 41.740295000000003], [15.889346, 41.541082000000003], [16.785001999999999, 41.179606], [17.519169000000002, 40.877142999999997], [18.376687, 40.355625000000003], [18.480246999999999, 40.168866000000001], [18.293385000000001, 39.810774000000002], [17.738379999999999, 40.277670999999998], [16.869596000000001, 40.442234999999997], [16.448743, 39.795400999999998], [17.171489999999999, 39.424700000000001], [17.052841000000001, 38.902870999999998], [16.635088, 38.843572000000002], [16.100961000000002, 37.985899000000003], [15.684087, 37.908848999999996], [15.687963, 38.214593000000001], [15.891980999999999, 38.750942000000002], [16.109331999999998, 38.964547000000003], [15.718814, 39.544072], [15.413613, 40.048357000000003], [14.998495999999999, 40.172949000000003], [14.703268, 40.604550000000003], [14.060672, 40.786347999999997], [13.627985000000001, 41.188287000000003], [12.888082000000001, 41.25309], [12.106683, 41.704535], [11.191905999999999, 42.355424999999997], [10.511948, 42.931463000000001], [10.200029000000001, 43.920006999999998], [9.7024880000000007, 44.036279], [8.8889460000000007, 44.366335999999997], [8.4285610000000002, 44.231228000000002], [7.8507670000000003, 43.767147999999999], [7.4351849999999997, 43.693845000000003], [7.5495960000000002, 44.127901000000001], [7.0075620000000001, 44.254767000000001], [6.7499549999999999, 45.028517999999998], [7.0966519999999997, 45.333098999999997], [6.8023550000000004, 45.708579999999998], [6.8435930000000003, 45.991146999999998], [7.2738509999999996, 45.776947999999997], [7.755992, 45.824489999999997], [8.31663, 46.163642000000003], [8.4899520000000006, 46.005150999999998], [8.9663059999999994, 46.036932], [9.1828819999999993, 46.440215000000002], [9.9228369999999995, 46.314898999999997], [10.363378000000001, 46.483570999999998], [10.442701, 46.893546000000001], [11.048556, 46.751359000000001], [11.164828, 46.941578999999997], [12.153088, 47.115392999999997], [12.376485000000001, 46.767558999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0442\u0430\u043b\u0438\u044f", "fr": "Italie", "en": "Italy", "nl": "Itali\u00eb", "pt": "It\u00e1lia", "no": "Italia", "de": "Italien", "it": "Italia", "sv": "Italien", "pl": "W\u0142ochy", "fi": "Italia", "zh": "\u610f\u5927\u5229", "ja": "\u30a4\u30bf\u30ea\u30a2", "es": "Italia"}, "label_fr": "Italie", "name": "Italy", "dbpedia_uri": "http://dbpedia.org/resource/Italy"}, "id": "ITA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-77.569601000000006, 18.490525000000002], [-76.896619000000001, 18.400867000000002], [-76.365358999999998, 18.160701], [-76.199658999999997, 17.886866999999999], [-76.902561000000006, 17.868238000000002], [-77.206340999999995, 17.701115999999999], [-77.766023000000004, 17.861597], [-78.337719000000007, 18.225968000000002], [-78.217726999999996, 18.454533000000001], [-77.797364999999999, 18.524218000000001], [-77.569601000000006, 18.490525000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042f\u043c\u0430\u0439\u043a\u0430", "fr": "Jama\u00efque", "en": "Jamaica", "nl": "Jamaica", "pt": "Jamaica", "no": "Jamaica", "de": "Jamaika", "it": "Giamaica", "sv": "Jamaica", "pl": "Jamajka", "fi": "Jamaika", "zh": "\u7259\u4e70\u52a0", "ja": "\u30b8\u30e3\u30de\u30a4\u30ab", "es": "Jamaica"}, "label_fr": "Jama\u00efque", "name": "Jamaica", "dbpedia_uri": "http://dbpedia.org/resource/Jamaica"}, "id": "JAM"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.545665, 32.393991999999997], [35.719918, 32.709192000000002], [36.834062000000003, 32.312938000000003], [38.792341, 33.378686000000002], [39.195467999999998, 32.161009], [39.004885999999999, 32.010216999999997], [37.002166000000003, 31.508413000000001], [37.998849, 30.508500000000002], [37.668120000000002, 30.338664999999999], [37.503582000000002, 30.003775999999998], [36.740527999999998, 29.865283000000002], [36.501213999999997, 29.505254000000001], [36.068941000000002, 29.197495], [34.956037000000002, 29.356555], [34.922603000000002, 29.501325999999999], [35.420918, 31.100066000000002], [35.397561000000003, 31.489086], [35.545251999999998, 31.782505], [35.545665, 32.393991999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043e\u0440\u0434\u0430\u043d\u0438\u044f", "fr": "Jordanie", "en": "Jordan", "nl": "Jordani\u00eb", "pt": "Jord\u00e2nia", "no": "Jordan", "de": "Jordanien", "it": "Giordania", "sv": "Jordanien", "pl": "Jordania", "fi": "Jordania", "zh": "\u7ea6\u65e6", "ja": "\u30e8\u30eb\u30c0\u30f3", "es": "Jordania"}, "label_fr": "Jordanie", "name": "Jordan", "dbpedia_uri": "http://dbpedia.org/resource/Jordan"}, "id": "JOR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[134.638428, 34.149234], [134.766379, 33.806334999999997], [134.203416, 33.201177999999999], [133.79294999999999, 33.521985000000001], [133.28026800000001, 33.289569999999998], [133.014858, 32.704566999999997], [132.36311499999999, 32.989381999999999], [132.37117599999999, 33.463642], [132.924373, 34.060299000000001], [133.49296799999999, 33.944620999999998], [133.90410600000001, 34.364930999999999], [134.638428, 34.149234]]], [[[140.97638799999999, 37.142074000000001], [140.59977000000001, 36.343983000000001], [140.77407400000001, 35.842877000000001], [140.25327899999999, 35.138114000000002], [138.975528, 34.6676], [137.21759900000001, 34.606285999999997], [135.79298299999999, 33.464804999999998], [135.120983, 33.849071000000002], [135.07943499999999, 34.596544999999999], [133.340316, 34.375937999999998], [132.15677099999999, 33.904933], [130.98614499999999, 33.885761000000002], [132.00003599999999, 33.149991999999997], [131.33278999999999, 31.450354999999998], [130.686318, 31.029578999999998], [130.20241999999999, 31.418237999999999], [130.447676, 32.319474999999997], [129.81469200000001, 32.610309999999998], [129.40846300000001, 33.296056], [130.35393500000001, 33.604151000000002], [130.87845100000001, 34.232742999999999], [131.884229, 34.749713999999997], [132.617673, 35.433393000000002], [134.60830100000001, 35.731617999999997], [135.677538, 35.527133999999997], [136.72383099999999, 37.304983999999997], [137.390612, 36.827390999999999], [138.85760200000001, 37.827485000000003], [139.42640499999999, 38.215961999999998], [140.05479, 39.438806999999997], [139.88337899999999, 40.563312000000003], [140.30578299999999, 41.195005000000002], [141.36897300000001, 41.37856], [141.91426300000001, 39.991616], [141.884601, 39.180864999999997], [140.95948899999999, 38.174000999999997], [140.97638799999999, 37.142074000000001]]], [[[143.91016200000001, 44.174100000000003], [144.613427, 43.960883000000003], [145.32082500000001, 44.384732999999997], [145.543137, 43.262087999999999], [144.059662, 42.988357999999998], [143.18385000000001, 41.995215000000002], [141.611491, 42.678790999999997], [141.067286, 41.584594000000003], [139.955106, 41.569555999999999], [139.817544, 42.563758999999997], [140.31208699999999, 43.333272999999998], [141.380549, 43.388824999999997], [141.671952, 44.772125000000003], [141.967645, 45.551482999999998], [143.14286999999999, 44.510357999999997], [143.91016200000001, 44.174100000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042f\u043f\u043e\u043d\u0438\u044f", "fr": "Japon", "en": "Japan", "nl": "Japan", "pt": "Jap\u00e3o", "no": "Japan", "de": "Japan", "it": "Giappone", "sv": "Japan", "pl": "Japonia", "fi": "Japani", "zh": "\u65e5\u672c", "ja": "\u65e5\u672c", "es": "Jap\u00f3n"}, "label_fr": "Japon", "name": "Japan", "dbpedia_uri": "http://dbpedia.org/resource/Japan"}, "id": "JPN"}, {"geometry": {"type": "Polygon", "coordinates": [[[70.962315000000004, 42.266154], [70.388964999999999, 42.081308], [69.070026999999996, 41.384244000000002], [68.632482999999993, 40.668680999999999], [68.259895999999998, 40.662325000000003], [67.985855999999998, 41.135990999999997], [66.714046999999994, 41.168444000000001], [66.510649000000001, 41.987644000000003], [66.023392000000001, 41.994646000000003], [66.098011999999997, 42.997660000000003], [64.900824, 43.728081000000003], [63.185786999999998, 43.650075000000001], [62.013300000000001, 43.504477000000001], [61.058320000000002, 44.405816999999999], [60.239972000000002, 44.784036999999998], [58.689988999999997, 45.500014], [58.503126999999999, 45.586804000000001], [55.928916999999998, 44.995857999999998], [55.968190999999997, 41.308641999999999], [55.455250999999997, 41.259858999999999], [54.755344999999998, 42.043970999999999], [54.079417999999997, 42.324109], [52.944293000000002, 42.116033999999999], [52.502459999999999, 41.783315999999999], [52.446339000000002, 42.027151000000003], [52.692112000000002, 42.443894999999998], [52.501426000000002, 42.792298000000002], [51.342427000000001, 43.132975000000002], [50.891292, 44.031033999999998], [50.339129, 44.284016000000001], [50.305643000000003, 44.609836000000001], [51.278503000000001, 44.514854], [51.316898999999999, 45.245998], [52.167389999999997, 45.408391000000002], [53.040875999999997, 45.259047000000002], [53.220866000000001, 46.234645999999998], [53.042737000000002, 46.853006000000001], [52.042023, 46.804637], [51.191944999999997, 47.048704999999998], [50.034083000000003, 46.608989999999999], [49.10116, 46.399329999999999], [48.593240999999999, 46.561033999999999], [48.694733999999997, 47.075628000000002], [48.057253000000003, 47.743752999999998], [47.315230999999997, 47.715846999999997], [46.466445999999998, 48.394151999999998], [47.043672000000001, 49.152039000000002], [46.751595999999999, 49.356006000000001], [47.549480000000003, 50.454698], [48.577840999999999, 49.874760000000002], [48.702382, 50.605128000000001], [50.766648000000004, 51.692762000000002], [52.328724000000001, 51.718651999999999], [54.532877999999997, 51.026240000000001], [55.716940999999998, 50.621716999999997], [56.777960999999998, 51.043551000000001], [58.363290999999997, 51.063653000000002], [59.642282000000002, 50.545442000000001], [59.932806999999997, 50.842193999999999], [61.337423999999999, 50.79907], [61.588003, 51.272658999999997], [59.967534000000001, 51.960419999999999], [60.927269000000003, 52.447547999999998], [60.739992999999998, 52.719985999999999], [61.699986000000003, 52.979996], [60.978065999999998, 53.664993000000003], [61.436591, 54.006264999999999], [65.178533999999999, 54.354227999999999], [65.666876000000002, 54.601267], [68.1691, 54.970391999999997], [69.068167000000003, 55.385249999999999], [70.865267000000003, 55.169733999999998], [71.180131000000003, 54.133285000000001], [72.224149999999995, 54.376655], [73.508516, 54.035617000000002], [73.425679000000002, 53.489809999999999], [74.384844999999999, 53.546861], [76.891099999999994, 54.490524000000001], [76.525178999999994, 54.177002999999999], [77.800916000000001, 53.404415], [80.035560000000004, 50.864750999999998], [80.568447000000006, 51.388336000000002], [81.945986000000005, 50.812196], [83.383004, 51.069183000000002], [83.935114999999996, 50.889246], [84.416376999999997, 50.311399999999999], [85.115560000000002, 50.117303], [85.541269999999997, 49.692858999999999], [86.829357000000002, 49.826675000000002], [87.359970000000004, 49.214981000000002], [86.598776000000001, 48.549182000000002], [85.768232999999995, 48.455750999999999], [85.720483999999999, 47.452969000000003], [85.164289999999994, 47.000956000000002], [83.180484000000007, 47.330030999999998], [82.458926000000005, 45.539650000000002], [81.947070999999994, 45.317027000000003], [79.966105999999996, 44.917516999999997], [80.866206000000005, 43.180362000000002], [80.180149999999998, 42.920068000000001], [80.259990000000002, 42.349998999999997], [79.643645000000006, 42.496682999999997], [79.142177000000004, 42.856091999999997], [77.658392000000006, 42.960686000000003], [76.000354000000002, 42.988022000000001], [75.636965000000004, 42.877899999999997], [74.212866000000005, 43.298338999999999], [73.645303999999996, 43.091271999999996], [73.489757999999995, 42.500894000000002], [71.844638000000003, 42.845395000000003], [71.186280999999994, 42.704293], [70.962315000000004, 42.266154]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "fr": "Kazakhstan", "en": "Kazakhstan", "nl": "Kazachstan", "pt": "Cazaquist\u00e3o", "no": "Kasakhstan", "de": "Kasachstan", "it": "Kazakistan", "sv": "Kazakstan", "pl": "Kazachstan", "fi": "Kazakstan", "zh": "\u54c8\u8428\u514b\u65af\u5766", "ja": "\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3", "es": "Kazajist\u00e1n"}, "label_fr": "Kazakhstan", "name": "Kazakhstan", "dbpedia_uri": "http://dbpedia.org/resource/Kazakhstan"}, "id": "KAZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[40.993000000000002, -0.85829], [41.585129999999999, -1.6832499999999999], [40.884770000000003, -2.0825499999999999], [40.63785, -2.49979], [40.263039999999997, -2.5730900000000001], [40.121189999999999, -3.2776800000000001], [39.800060000000002, -3.6811600000000002], [39.604889999999997, -4.3465299999999996], [39.202219999999997, -4.6767700000000003], [37.7669, -3.6771199999999999], [37.698689999999999, -3.0969899999999999], [34.072620000000001, -1.05982], [33.903711000000001, -0.94999999999999996], [33.893568999999999, 0.10981399999999999], [34.18, 0.51500000000000001], [34.6721, 1.1769400000000001], [35.035989999999998, 1.90584], [34.596069999999997, 3.0537399999999999], [34.479129999999998, 3.5556000000000001], [34.005000000000003, 4.2498849999999999], [34.620196, 4.8471229999999998], [35.298006999999998, 5.5060000000000002], [35.817447999999999, 5.3382319999999996], [35.817447999999999, 4.7769659999999998], [36.159078999999998, 4.447864], [36.855092999999997, 4.447864], [38.120914999999997, 3.5986050000000001], [38.436970000000002, 3.5885099999999999], [38.671140000000001, 3.6160700000000001], [38.892510000000001, 3.50074], [39.559384000000001, 3.4220600000000001], [39.854939999999999, 3.8387899999999999], [40.768479999999997, 4.2570199999999998], [41.171799999999998, 3.9190900000000002], [41.855083, 3.9189120000000002], [40.981050000000003, 2.7845200000000001], [40.993000000000002, -0.85829]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0435\u043d\u0438\u044f", "fr": "Kenya", "en": "Kenya", "nl": "Kenia", "pt": "Qu\u00e9nia", "no": "Kenya", "de": "Kenia", "it": "Kenya", "sv": "Kenya", "pl": "Kenia", "fi": "Kenia", "zh": "\u80af\u5c3c\u4e9a", "ja": "\u30b1\u30cb\u30a2", "es": "Kenia"}, "label_fr": "Kenya", "name": "Kenya", "dbpedia_uri": "http://dbpedia.org/resource/Kenya"}, "id": "KEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[70.962315000000004, 42.266154], [71.186280999999994, 42.704293], [71.844638000000003, 42.845395000000003], [73.489757999999995, 42.500894000000002], [73.645303999999996, 43.091271999999996], [74.212866000000005, 43.298338999999999], [75.636965000000004, 42.877899999999997], [76.000354000000002, 42.988022000000001], [77.658392000000006, 42.960686000000003], [79.142177000000004, 42.856091999999997], [79.643645000000006, 42.496682999999997], [80.259990000000002, 42.349998999999997], [80.119429999999994, 42.123941000000002], [78.543661, 41.582242999999998], [78.187196999999998, 41.185316], [76.904483999999997, 41.066485999999998], [76.526368000000005, 40.427945999999999], [75.467827999999997, 40.562072000000001], [74.776861999999994, 40.366425], [73.822243999999998, 39.893973000000003], [73.960013000000004, 39.660007999999998], [73.675379000000007, 39.431237000000003], [71.784694000000002, 39.279463], [70.549161999999995, 39.604197999999997], [69.464887000000004, 39.526682999999998], [69.559610000000006, 40.103211000000002], [70.648019000000005, 39.935754000000003], [71.014197999999993, 40.244365999999999], [71.774874999999994, 40.145843999999997], [73.055417000000006, 40.866033000000002], [71.870114999999998, 41.392899999999997], [71.157859000000002, 41.143586999999997], [70.420022000000003, 41.519998000000001], [71.259247999999999, 42.167710999999997], [70.962315000000004, 42.266154]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0438\u0440\u0433\u0438\u0437\u0438\u044f", "fr": "Kirghizistan", "en": "Kyrgyzstan", "nl": "Kirgizi\u00eb", "pt": "Quirguist\u00e3o", "no": "Kirgisistan", "de": "Kirgisistan", "it": "Kirghizistan", "sv": "Kirgizistan", "pl": "Kirgistan", "fi": "Kirgisia", "zh": "\u5409\u5c14\u5409\u65af\u65af\u5766", "ja": "\u30ad\u30eb\u30ae\u30b9", "es": "Kirguist\u00e1n"}, "label_fr": "Kirghizistan", "name": "Kyrgyzstan", "dbpedia_uri": "http://dbpedia.org/resource/Kyrgyzstan"}, "id": "KGZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[103.49728, 10.632555], [103.09069, 11.153661], [102.58493199999999, 12.186595000000001], [102.348099, 13.394247], [102.988422, 14.225721], [104.281418, 14.416743], [105.218777, 14.273211999999999], [106.04394600000001, 13.881091], [106.49637300000001, 14.570584], [107.382727, 14.202441], [107.614548, 13.535531000000001], [107.49140300000001, 12.337206], [105.810524, 11.567615], [106.24966999999999, 10.961812], [105.199915, 10.88931], [104.334335, 10.486544], [103.49728, 10.632555]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430", "fr": "Cambodge", "en": "Cambodia", "nl": "Cambodja", "pt": "Camboja", "no": "Kambodsja", "de": "Kambodscha", "it": "Cambogia", "sv": "Kambodja", "pl": "Kambod\u017ca", "fi": "Kambod\u017ea", "zh": "\u67ec\u57d4\u5be8", "ja": "\u30ab\u30f3\u30dc\u30b8\u30a2", "es": "Camboya"}, "label_fr": "Cambodge", "name": "Cambodia", "dbpedia_uri": "http://dbpedia.org/resource/Cambodia"}, "id": "KHM"}, {"geometry": {"type": "Polygon", "coordinates": [[[128.349716, 38.612242999999999], [129.21292, 37.432392], [129.46045000000001, 36.784188999999998], [129.46830399999999, 35.632140999999997], [129.09137699999999, 35.082484000000001], [128.18584999999999, 34.890377000000001], [127.38651900000001, 34.475673999999998], [126.485748, 34.390045999999998], [126.37392, 34.934559999999998], [126.559231, 35.684541000000003], [126.11739799999999, 36.725484999999999], [126.86014299999999, 36.893923999999998], [126.17475899999999, 37.749685999999997], [126.23733900000001, 37.840378000000001], [126.68371999999999, 37.804772999999997], [127.07330899999999, 38.256115000000001], [127.780035, 38.304535999999999], [128.205746, 38.370396999999997], [128.349716, 38.612242999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u0440\u0435\u044f", "fr": "Cor\u00e9e du Sud", "en": "South Korea", "nl": "Zuid-Korea", "pt": "Coreia do Sul", "no": "S\u00f8r-Korea", "de": "S\u00fcdkorea", "it": "Corea del Sud", "sv": "Sydkorea", "pl": "Korea Po\u0142udniowa", "fi": "Korean tasavalta", "zh": "\u5927\u97e9\u6c11\u56fd", "ja": "\u5927\u97d3\u6c11\u56fd", "es": "Corea del Sur"}, "label_fr": "Cor\u00e9e du Sud", "name": "South Korea", "dbpedia_uri": "http://dbpedia.org/resource/South_Korea"}, "id": "KOR"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.762160000000002, 42.051859999999998], [20.717310000000001, 41.847110000000001], [20.590229999999998, 41.855409999999999], [20.522950000000002, 42.217869999999998], [20.283740000000002, 42.320250000000001], [20.070699999999999, 42.588630000000002], [20.257580000000001, 42.812750000000001], [20.496790000000001, 42.884689999999999], [20.635079999999999, 43.216709999999999], [20.81448, 43.27205], [20.956510000000002, 43.130940000000002], [21.143395000000002, 43.068685000000002], [21.27421, 42.909590000000001], [21.438659999999999, 42.862549999999999], [21.633019999999998, 42.677169999999997], [21.77505, 42.682699999999997], [21.66292, 42.439219999999999], [21.543320000000001, 42.320250000000001], [21.576636000000001, 42.245224], [21.352699999999999, 42.206800000000001], [20.762160000000002, 42.051859999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0441\u043e\u0432\u043e (\u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0433\u0438\u043e\u043d)", "fr": "Kosovo", "en": "Kosovo", "nl": "Kosovo", "pt": "Kosovo", "no": "Kosovo", "de": "Kosovo", "it": "Kosovo", "sv": "Kosovo", "pl": "Kosowo", "fi": "Kosovo", "zh": "\u79d1\u7d22\u6c83", "ja": "\u30b3\u30bd\u30dc", "es": "Kosovo"}, "label_fr": "Kosovo", "name": "Kosovo", "dbpedia_uri": "http://dbpedia.org/resource/Kosovo"}, "id": "CS-KM"}, {"geometry": {"type": "Polygon", "coordinates": [[[47.974519000000001, 29.975819000000001], [48.183188999999999, 29.534476999999999], [48.093943000000003, 29.306298999999999], [48.416094000000001, 28.552004], [47.708851000000003, 28.526063000000001], [47.459822000000003, 29.002518999999999], [46.568713000000002, 29.099025000000001], [47.302622, 30.059069999999998], [47.974519000000001, 29.975819000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0443\u0432\u0435\u0439\u0442", "fr": "Kowe\u00eft", "en": "Kuwait", "nl": "Koeweit", "pt": "Kuwait", "no": "Kuwait", "de": "Kuwait", "it": "Kuwait", "sv": "Kuwait", "pl": "Kuwejt", "fi": "Kuwait", "zh": "\u79d1\u5a01\u7279", "ja": "\u30af\u30a6\u30a7\u30fc\u30c8", "es": "Kuwait"}, "label_fr": "Kowe\u00eft", "name": "Kuwait", "dbpedia_uri": "http://dbpedia.org/resource/Kuwait"}, "id": "KWT"}, {"geometry": {"type": "Polygon", "coordinates": [[[105.218777, 14.273211999999999], [105.544338, 14.723934], [105.589039, 15.570316], [104.779321, 16.441865], [104.716947, 17.428858999999999], [103.95647700000001, 18.240953999999999], [103.200192, 18.309632000000001], [102.998706, 17.961694999999999], [102.413005, 17.932782], [102.113592, 18.109102], [101.05954800000001, 17.512497], [101.03593100000001, 18.408928], [101.282015, 19.462585000000001], [100.60629400000001, 19.508344000000001], [100.54888099999999, 20.109238000000001], [100.115988, 20.417850000000001], [100.32910099999999, 20.786121999999999], [101.18000499999999, 21.436572999999999], [101.270026, 21.201651999999999], [101.80312000000001, 21.174367], [101.652018, 22.318199], [102.170436, 22.464753000000002], [102.754896, 21.675136999999999], [103.203861, 20.766562], [104.435, 20.758732999999999], [104.822574, 19.886641999999998], [104.18338799999999, 19.624668], [103.89653199999999, 19.265180999999998], [105.094598, 18.666975000000001], [105.92576200000001, 17.485315], [106.55600800000001, 16.604284], [107.31270600000001, 15.908538], [107.564525, 15.202173], [107.382727, 14.202441], [106.49637300000001, 14.570584], [106.04394600000001, 13.881091], [105.218777, 14.273211999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0430\u043e\u0441", "fr": "Laos", "en": "Laos", "nl": "Laos", "pt": "Laos", "no": "Laos", "de": "Laos", "it": "Laos", "sv": "Laos", "pl": "Laos", "fi": "Laos", "zh": "\u8001\u631d", "ja": "\u30e9\u30aa\u30b9", "es": "Laos"}, "label_fr": "Laos", "name": "Laos", "dbpedia_uri": "http://dbpedia.org/resource/Laos"}, "id": "LAO"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.821100999999999, 33.277425999999998], [35.552796999999998, 33.264274999999998], [35.460709000000001, 33.089039999999997], [35.126052999999999, 33.090899999999998], [35.482207000000002, 33.905450000000002], [35.979591999999997, 34.610058000000002], [35.998403000000003, 34.644914], [36.448194000000001, 34.593935000000002], [36.611750000000001, 34.201788999999998], [36.066459999999999, 33.824911999999998], [35.821100999999999, 33.277425999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0432\u0430\u043d", "fr": "Liban", "en": "Lebanon", "nl": "Libanon", "pt": "L\u00edbano", "no": "Libanon", "de": "Libanon", "it": "Libano", "sv": "Libanon", "pl": "Liban", "fi": "Libanon", "zh": "\u9ece\u5df4\u5ae9", "ja": "\u30ec\u30d0\u30ce\u30f3", "es": "L\u00edbano"}, "label_fr": "Liban", "name": "Lebanon", "dbpedia_uri": "http://dbpedia.org/resource/Lebanon"}, "id": "LBN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-7.7121589999999998, 4.3645659999999999], [-7.9741070000000001, 4.3557550000000003], [-9.0047940000000004, 4.8324189999999998], [-9.9134200000000003, 5.5935610000000002], [-10.765383999999999, 6.1407109999999996], [-11.438779, 6.7859170000000004], [-11.199802, 7.1058459999999997], [-11.146704, 7.396706], [-10.695595000000001, 7.9394640000000001], [-10.230093999999999, 8.4062059999999992], [-10.016567, 8.4285040000000002], [-9.7553420000000006, 8.5410550000000001], [-9.3372799999999998, 7.928534], [-9.4033479999999994, 7.5269050000000002], [-9.2087859999999999, 7.3139209999999997], [-8.9260649999999995, 7.309037], [-8.7221240000000009, 7.7116740000000004], [-8.4392980000000009, 7.6860429999999997], [-8.4854459999999996, 7.3952080000000002], [-8.3854520000000008, 6.9118009999999996], [-8.6028800000000007, 6.4675640000000003], [-8.3113480000000006, 6.1930329999999998], [-7.9936930000000004, 6.1261900000000002], [-7.5701530000000004, 5.7073520000000002], [-7.5397150000000002, 5.313345], [-7.6353679999999997, 5.1881589999999997], [-7.7121589999999998, 4.3645659999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0431\u0435\u0440\u0438\u044f", "fr": "Liberia", "en": "Liberia", "nl": "Liberia", "pt": "Lib\u00e9ria", "no": "Liberia", "it": "Liberia", "sv": "Liberia", "pl": "Liberia", "fi": "Liberia", "zh": "\u5229\u6bd4\u91cc\u4e9a", "ja": "\u30ea\u30d9\u30ea\u30a2", "es": "Liberia"}, "label_fr": "Liberia", "name": "Liberia", "dbpedia_uri": "http://dbpedia.org/resource/Liberia"}, "id": "LBR"}, {"geometry": {"type": "Polygon", "coordinates": [[[14.8513, 22.862950000000001], [14.143871000000001, 22.491288999999998], [13.581424999999999, 23.040506000000001], [11.999506, 23.471668000000001], [11.560669000000001, 24.097909000000001], [10.771364, 24.562532000000001], [10.303846999999999, 24.379313], [9.9482610000000005, 24.936954], [9.9106930000000002, 25.365455000000001], [9.3194110000000006, 26.094325000000001], [9.7162860000000002, 26.512205999999999], [9.6290560000000003, 27.140953], [9.7561280000000004, 27.688258999999999], [9.6838850000000001, 28.144174], [9.8599979999999992, 28.959990000000001], [9.8056339999999995, 29.424638000000002], [9.4821399999999993, 30.307556000000002], [9.9700170000000004, 30.539325000000002], [10.056575, 30.961831], [9.9502249999999997, 31.376069999999999], [10.636901, 31.761420999999999], [10.944789999999999, 32.081814999999999], [11.432252999999999, 32.368903000000003], [11.488787, 33.136996000000003], [12.663309999999999, 32.79278], [13.083259999999999, 32.878819999999997], [13.91868, 32.711959999999998], [15.24563, 32.265079999999998], [15.713939999999999, 31.376259999999998], [16.611619999999998, 31.182179999999999], [18.021090000000001, 30.763570000000001], [19.086410000000001, 30.266390000000001], [19.57404, 30.52582], [20.053349999999998, 30.985759999999999], [19.820329999999998, 31.75179], [20.133970000000001, 32.238199999999999], [20.854520000000001, 32.706800000000001], [21.54298, 32.843200000000003], [22.895759999999999, 32.638579999999997], [23.236799999999999, 32.191490000000002], [23.60913, 32.187260000000002], [23.927499999999998, 32.016669999999998], [24.921140000000001, 31.899360000000001], [25.164819999999999, 31.56915], [24.802869999999999, 31.089289999999998], [24.957619999999999, 30.6616], [24.70007, 30.04419], [25, 29.238655000000001], [25, 25.682500000000001], [25, 22], [25, 20.003039999999999], [23.850000000000001, 20], [23.83766, 19.580469999999998], [19.849260000000001, 21.495090000000001], [15.860849999999999, 23.40972], [14.8513, 22.862950000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0432\u0438\u044f", "fr": "Libye", "en": "Libya", "nl": "Libi\u00eb", "pt": "L\u00edbia", "no": "Libya", "de": "Libyen", "it": "Libia", "sv": "Libyen", "pl": "Libia", "fi": "Libya", "zh": "\u5229\u6bd4\u4e9a", "ja": "\u30ea\u30d3\u30a2", "es": "Libia"}, "label_fr": "Libye", "name": "Libya", "dbpedia_uri": "http://dbpedia.org/resource/Libya"}, "id": "LBY"}, {"geometry": {"type": "Polygon", "coordinates": [[[81.787959000000001, 7.5230550000000003], [81.637321999999998, 6.4817749999999998], [81.218019999999996, 6.1971410000000002], [80.348356999999993, 5.9683700000000002], [79.872468999999995, 6.7634629999999998], [79.695166999999998, 8.2008430000000008], [80.147801000000001, 9.8240780000000001], [80.838818000000003, 9.2684270000000009], [81.304319000000007, 8.5642060000000004], [81.787959000000001, 7.5230550000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0440\u0438-\u041b\u0430\u043d\u043a\u0430", "fr": "Sri Lanka", "en": "Sri Lanka", "nl": "Sri Lanka", "pt": "Sri Lanka", "no": "Sri Lanka", "de": "Sri Lanka", "it": "Sri Lanka", "sv": "Sri Lanka", "pl": "Sri Lanka", "fi": "Sri Lanka", "zh": "\u65af\u91cc\u862d\u5361", "ja": "\u30b9\u30ea\u30e9\u30f3\u30ab", "es": "Sri Lanka"}, "label_fr": "Sri Lanka", "name": "Sri Lanka", "dbpedia_uri": "http://dbpedia.org/resource/Sri_Lanka"}, "id": "LKA"}, {"geometry": {"type": "Polygon", "coordinates": [[[28.978262999999998, -28.955597000000001], [29.325165999999999, -29.257387000000001], [29.018415000000001, -29.743766000000001], [28.848400000000002, -30.070050999999999], [28.291069, -30.226216999999998], [28.107205, -30.545732000000001], [27.749396999999998, -30.645105999999998], [26.999262000000002, -29.875954], [27.532511, -29.242711], [28.074338000000001, -28.851469000000002], [28.541699999999999, -28.647501999999999], [28.978262999999998, -28.955597000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0435\u0441\u043e\u0442\u043e", "fr": "Lesotho", "en": "Lesotho", "nl": "Lesotho", "pt": "Lesoto", "no": "Lesotho", "de": "Lesotho", "it": "Lesotho", "sv": "Lesotho", "pl": "Lesotho", "fi": "Lesotho", "zh": "\u83b1\u7d22\u6258", "ja": "\u30ec\u30bd\u30c8", "es": "Lesoto"}, "label_fr": "Lesotho", "name": "Lesotho", "dbpedia_uri": "http://dbpedia.org/resource/Lesotho"}, "id": "LSO"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.731099, 54.327537], [22.651052, 54.582740999999999], [22.757764000000002, 54.856574000000002], [22.315723999999999, 55.015298999999999], [21.268449, 55.190482000000003], [21.055800000000001, 56.031075999999999], [22.201156999999998, 56.337802000000003], [23.878264000000001, 56.273671], [24.860683999999999, 56.372528000000003], [25.000934000000001, 56.164530999999997], [25.533047, 56.100296999999998], [26.494330999999999, 55.615107000000002], [26.588279, 55.167175999999998], [25.768433000000002, 54.846963000000002], [25.536353999999999, 54.282423000000001], [24.450683999999999, 53.905701999999998], [23.484127999999998, 53.912497999999999], [23.243987000000001, 54.220567000000003], [22.731099, 54.327537]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0442\u0432\u0430", "fr": "Lituanie", "en": "Lithuania", "nl": "Litouwen", "pt": "Litu\u00e2nia", "no": "Litauen", "de": "Litauen", "it": "Lituania", "sv": "Litauen", "pl": "Litwa", "fi": "Liettua", "zh": "\u7acb\u9676\u5b9b", "ja": "\u30ea\u30c8\u30a2\u30cb\u30a2", "es": "Lituania"}, "label_fr": "Lituanie", "name": "Lithuania", "dbpedia_uri": "http://dbpedia.org/resource/Lithuania"}, "id": "LTU"}, {"geometry": {"type": "Polygon", "coordinates": [[[6.0430729999999997, 50.128051999999997], [6.2427510000000002, 49.902225999999999], [6.1863200000000003, 49.463802999999999], [5.8977589999999998, 49.442667], [5.6740519999999997, 49.529483999999997], [5.7824169999999997, 50.090328], [6.0430729999999997, 50.128051999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433", "fr": "Luxembourg (pays)", "en": "Luxembourg", "nl": "Luxemburg (land)", "pt": "Luxemburgo", "no": "Luxembourg", "de": "Luxemburg", "it": "Lussemburgo", "sv": "Luxemburg", "pl": "Luksemburg", "fi": "Luxemburg", "zh": "\u5362\u68ee\u5821", "ja": "\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30af", "es": "Luxemburgo"}, "label_fr": "Luxembourg (pays)", "name": "Luxembourg", "dbpedia_uri": "http://dbpedia.org/resource/Luxembourg"}, "id": "LUX"}, {"geometry": {"type": "Polygon", "coordinates": [[[21.055800000000001, 56.031075999999999], [21.090423999999999, 56.783873], [21.581866000000002, 57.411870999999998], [22.524341, 57.753374000000001], [23.318453000000002, 57.006236000000001], [24.120729999999998, 57.025692999999997], [24.312863, 57.793424000000002], [25.164594000000001, 57.970157], [25.602810000000002, 57.847529000000002], [26.463532000000001, 57.476388999999998], [27.288184999999999, 57.474527999999999], [27.770015999999998, 57.244258000000002], [27.855281999999999, 56.759326000000001], [28.176708999999999, 56.169130000000003], [27.102460000000001, 55.783313999999997], [26.494330999999999, 55.615107000000002], [25.533047, 56.100296999999998], [25.000934000000001, 56.164530999999997], [24.860683999999999, 56.372528000000003], [23.878264000000001, 56.273671], [22.201156999999998, 56.337802000000003], [21.055800000000001, 56.031075999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0430\u0442\u0432\u0438\u044f", "fr": "Lettonie", "en": "Latvia", "nl": "Letland", "pt": "Let\u00f3nia", "no": "Latvia", "de": "Lettland", "it": "Lettonia", "sv": "Lettland", "pl": "\u0141otwa", "fi": "Latvia", "zh": "\u62c9\u812b\u7dad\u4e9e", "ja": "\u30e9\u30c8\u30d3\u30a2", "es": "Letonia"}, "label_fr": "Lettonie", "name": "Latvia", "dbpedia_uri": "http://dbpedia.org/resource/Latvia"}, "id": "LVA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-5.1938630000000003, 35.755181999999998], [-4.5910060000000001, 35.330711999999998], [-3.6400570000000001, 35.399855000000002], [-2.6043059999999998, 35.179093000000002], [-2.1699139999999999, 35.168396000000001], [-1.792986, 34.527918999999997], [-1.733455, 33.919713000000002], [-1.3880490000000001, 32.864015000000002], [-1.1245510000000001, 32.651522], [-1.3078989999999999, 32.262889000000001], [-2.6166049999999998, 32.094346000000002], [-3.0689799999999998, 31.724498000000001], [-3.6474980000000001, 31.637294000000001], [-3.6904409999999999, 30.896951999999999], [-4.8596459999999997, 30.501187999999999], [-5.2421290000000003, 30.000443000000001], [-6.060632, 29.7317], [-7.0592280000000001, 29.579228000000001], [-8.6741159999999997, 28.841289], [-8.6655899999999999, 27.656426], [-8.8178090000000005, 27.656426], [-8.8178280000000004, 27.656426], [-8.7948839999999997, 27.120695999999999], [-9.4130369999999992, 27.088476], [-9.7353430000000003, 26.860945000000001], [-10.189424000000001, 26.860945000000001], [-10.551263000000001, 26.990808000000001], [-11.392555, 26.883424000000002], [-11.718220000000001, 26.104092000000001], [-12.030759, 26.030866], [-12.500963, 24.770116000000002], [-13.891109999999999, 23.691009000000001], [-14.221168, 22.310162999999999], [-14.630833000000001, 21.860939999999999], [-14.750954999999999, 21.500599999999999], [-17.002962, 21.420733999999999], [-17.020427999999999, 21.42231], [-16.973248000000002, 21.885745], [-16.589137000000001, 22.158234], [-16.261921999999998, 22.67934], [-16.326414, 23.017768], [-15.982611, 23.723358000000001], [-15.426004000000001, 24.359134000000001], [-15.089332000000001, 24.520261000000001], [-14.824645, 25.103532999999999], [-14.800926, 25.636265000000002], [-14.43994, 26.254418000000001], [-13.773804999999999, 26.618891999999999], [-13.139942, 27.640148], [-13.121613, 27.654147999999999], [-12.618836999999999, 28.038186], [-11.688919, 28.148644000000001], [-10.900957, 28.832142000000001], [-10.399592, 29.098586000000001], [-9.5648110000000006, 29.933574], [-9.8147179999999992, 31.177735999999999], [-9.4347930000000009, 32.038096000000003], [-9.3006930000000008, 32.564678999999998], [-8.6574760000000008, 33.240245000000002], [-7.6541779999999999, 33.697065000000002], [-6.9125439999999996, 34.110475999999998], [-6.2443419999999996, 35.145865000000001], [-5.9299939999999998, 35.759988], [-5.1938630000000003, 35.755181999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0440\u043e\u043a\u043a\u043e", "fr": "Maroc", "en": "Morocco", "nl": "Marokko", "pt": "Marrocos", "no": "Marokko", "de": "Marokko", "it": "Marocco", "sv": "Marocko", "pl": "Maroko", "fi": "Marokko", "zh": "\u6469\u6d1b\u54e5", "ja": "\u30e2\u30ed\u30c3\u30b3", "es": "Marruecos"}, "label_fr": "Maroc", "name": "Morocco", "dbpedia_uri": "http://dbpedia.org/resource/Morocco"}, "id": "MAR"}, {"geometry": {"type": "Polygon", "coordinates": [[[26.619337000000002, 48.220725999999999], [26.857824000000001, 48.368211000000002], [27.522537, 48.467118999999997], [28.259547000000001, 48.155562000000003], [28.670891000000001, 48.118149000000003], [29.122698, 47.849094999999998], [29.050868000000001, 47.510227], [29.415134999999999, 47.346645000000002], [29.559674000000001, 46.928583000000003], [29.908852, 46.674360999999998], [29.83821, 46.525326], [30.024659, 46.423937000000002], [29.759972000000001, 46.349988000000003], [29.170653999999999, 46.379261999999997], [29.072106999999999, 46.517677999999997], [28.862971999999999, 46.437888999999998], [28.933717000000001, 46.258830000000003], [28.659987000000001, 45.939987000000002], [28.485268999999999, 45.596907000000002], [28.233554000000002, 45.488283000000003], [28.054442999999999, 45.944586000000001], [28.160018000000001, 46.371563000000002], [28.128029999999999, 46.810476000000001], [27.551165999999998, 47.405116999999997], [27.233872999999999, 47.826771000000001], [26.924175999999999, 48.123263999999999], [26.619337000000002, 48.220725999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u043b\u0434\u0430\u0432\u0438\u044f", "fr": "Moldavie", "en": "Moldova", "nl": "Moldavi\u00eb (land)", "pt": "Mold\u00e1via", "no": "Moldova", "de": "Moldawien", "it": "Moldavia", "sv": "Moldavien", "pl": "Mo\u0142dawia", "fi": "Moldova", "zh": "\u6469\u5c14\u591a\u74e6", "ja": "\u30e2\u30eb\u30c9\u30d0", "es": "Moldavia"}, "label_fr": "Moldavie", "name": "Moldova", "dbpedia_uri": "http://dbpedia.org/resource/Moldova"}, "id": "MDA"}, {"geometry": {"type": "Polygon", "coordinates": [[[49.543519000000003, -12.469833], [49.808981000000003, -12.895284999999999], [50.056511, -13.555761], [50.217430999999998, -14.758789], [50.476537, -15.226512], [50.377110999999999, -15.706068999999999], [50.200274999999998, -16.000263], [49.860605999999997, -15.414253], [49.672606999999999, -15.710203999999999], [49.863343999999998, -16.451036999999999], [49.774563999999998, -16.875042000000001], [49.498612000000001, -17.106036], [49.435619000000003, -17.953064000000001], [49.041792000000001, -19.118780999999998], [48.548541, -20.496887999999998], [47.930748999999999, -22.391501000000002], [47.547722999999998, -23.781959000000001], [47.095761000000003, -24.94163], [46.282477999999998, -25.178463000000001], [45.409508000000002, -25.601434000000001], [44.833573999999999, -25.346101000000001], [44.039720000000003, -24.988344999999999], [43.763767999999999, -24.460677], [43.697778, -23.574116], [43.345654000000003, -22.776903999999998], [43.254187000000002, -22.057413], [43.433298000000001, -21.336475], [43.893683000000003, -21.163307], [43.896369999999997, -20.830459000000001], [44.374324999999999, -20.072365999999999], [44.464396999999998, -19.435454], [44.232422, -18.961995000000002], [44.042976000000003, -18.331386999999999], [43.963084000000002, -17.409945], [44.312469, -16.850496], [44.446517, -16.216218999999999], [44.944937000000003, -16.179373999999999], [45.502732000000002, -15.974373], [45.872993999999998, -15.793454000000001], [46.312243000000002, -15.780018], [46.882182999999998, -15.210182], [47.705129999999997, -14.594303], [48.005215, -14.091233000000001], [47.869047000000002, -13.663869], [48.293827999999998, -13.784068], [48.845059999999997, -13.089174999999999], [48.863509000000001, -12.487868000000001], [49.194651, -12.040557], [49.543519000000003, -12.469833]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440", "fr": "Madagascar", "en": "Madagascar", "nl": "Madagaskar", "pt": "Madag\u00e1scar", "no": "Madagaskar", "de": "Madagaskar", "it": "Madagascar", "sv": "Madagaskar", "pl": "Madagaskar", "fi": "Madagaskar", "zh": "\u9a6c\u8fbe\u52a0\u65af\u52a0", "ja": "\u30de\u30c0\u30ac\u30b9\u30ab\u30eb", "es": "Madagascar"}, "label_fr": "Madagascar", "name": "Madagascar", "dbpedia_uri": "http://dbpedia.org/resource/Madagascar"}, "id": "MDG"}, {"geometry": {"type": "Polygon", "coordinates": [[[-97.140007999999995, 25.869997000000001], [-97.528071999999995, 24.992144], [-97.702945999999997, 24.272342999999999], [-97.776042000000004, 22.932580000000002], [-97.872366999999997, 22.444212], [-97.699044000000001, 21.898689000000001], [-97.388959999999997, 21.411019], [-97.189333000000005, 20.635432999999999], [-96.525576000000001, 19.890930999999998], [-96.292126999999994, 19.320371000000002], [-95.900885000000002, 18.828023999999999], [-94.839062999999996, 18.562716999999999], [-94.425730000000001, 18.144371], [-93.548651000000007, 18.423836999999999], [-92.786113999999998, 18.524839], [-92.037347999999994, 18.704568999999999], [-91.407903000000005, 18.876083000000001], [-90.771870000000007, 19.284120000000001], [-90.533590000000004, 19.867418000000001], [-90.451476, 20.707522000000001], [-90.278617999999994, 20.999855], [-89.601320999999999, 21.261725999999999], [-88.543865999999994, 21.493675], [-87.658417, 21.458846000000001], [-87.05189, 21.543543], [-86.811982, 21.331515], [-86.845907999999994, 20.849865000000001], [-87.383291, 20.255405], [-87.621054000000001, 19.646553000000001], [-87.436750000000004, 19.472403], [-87.586560000000006, 19.040130000000001], [-87.837191000000004, 18.259816000000001], [-88.090664000000004, 18.516648], [-88.300031000000004, 18.499981999999999], [-88.490122999999997, 18.486830999999999], [-88.848343999999997, 17.883198], [-89.029857000000007, 18.001511000000001], [-89.150908999999999, 17.955468], [-89.143079999999998, 17.808319000000001], [-90.067933999999994, 17.819326], [-91.001519999999999, 17.817595000000001], [-91.002268999999998, 17.254657999999999], [-91.453920999999994, 17.252177], [-91.081670000000003, 16.918476999999999], [-90.711821999999998, 16.687483], [-90.600847000000002, 16.470777999999999], [-90.438867000000002, 16.41011], [-90.464472999999998, 16.069562000000001], [-91.747960000000006, 16.066565000000001], [-92.229248999999996, 15.251447000000001], [-92.087215999999998, 15.064584999999999], [-92.203230000000005, 14.830102999999999], [-92.22775, 14.538829], [-93.359464000000003, 15.61543], [-93.875169, 15.940163999999999], [-94.691655999999995, 16.200975], [-95.250226999999995, 16.128318], [-96.053381999999999, 15.752088000000001], [-96.557434000000001, 15.653515000000001], [-97.263592000000003, 15.917064999999999], [-98.013030000000001, 16.107312], [-98.947676000000001, 16.566043000000001], [-99.697396999999995, 16.706164000000001], [-100.829499, 17.171071000000001], [-101.666089, 17.649025999999999], [-101.91852799999999, 17.916090000000001], [-102.478132, 17.975750999999999], [-103.50099, 18.292294999999999], [-103.91752700000001, 18.748571999999999], [-104.99200999999999, 19.316134000000002], [-105.493038, 19.946767000000001], [-105.731396, 20.434101999999999], [-105.397773, 20.531718999999999], [-105.50066099999999, 20.816894999999999], [-105.270752, 21.076284999999999], [-105.265817, 21.422104000000001], [-105.603161, 21.871146], [-105.693414, 22.269079999999999], [-106.028716, 22.773752000000002], [-106.90998, 23.767773999999999], [-107.915449, 24.548915000000001], [-108.401905, 25.172314], [-109.260199, 25.580608999999999], [-109.44408900000001, 25.824884000000001], [-109.29164400000001, 26.442934000000001], [-109.801458, 26.676176000000002], [-110.391732, 27.162115], [-110.641019, 27.859876], [-111.17891899999999, 27.941241000000002], [-111.759607, 28.467953000000001], [-112.228235, 28.954408999999998], [-112.271824, 29.266843999999999], [-112.809594, 30.021114000000001], [-113.163811, 30.786881000000001], [-113.148669, 31.170966], [-113.871881, 31.567608], [-114.205737, 31.524045000000001], [-114.77645099999999, 31.799531999999999], [-114.9367, 31.393484999999998], [-114.771232, 30.913616999999999], [-114.67389900000001, 30.162680999999999], [-114.330974, 29.750432], [-113.588875, 29.061610999999999], [-113.424053, 28.826174000000002], [-113.271969, 28.754783], [-113.140039, 28.411289], [-112.962298, 28.425190000000001], [-112.76158700000001, 27.780217], [-112.457911, 27.525814], [-112.244952, 27.171727000000001], [-111.616489, 26.662817], [-111.28467499999999, 25.732589999999998], [-110.987819, 25.294606000000002], [-110.710007, 24.826004000000001], [-110.65504900000001, 24.298594999999999], [-110.172856, 24.265547999999999], [-109.77184699999999, 23.811183], [-109.409104, 23.364671999999999], [-109.433392, 23.185587999999999], [-109.854219, 22.818272], [-110.031392, 22.823077999999999], [-110.29507099999999, 23.430973000000002], [-110.949501, 24.000964], [-111.670568, 24.484423], [-112.182036, 24.738413000000001], [-112.148989, 25.470124999999999], [-112.30071100000001, 26.012004000000001], [-112.777297, 26.321960000000001], [-113.464671, 26.768186], [-113.59672999999999, 26.63946], [-113.84893700000001, 26.900064], [-114.46574699999999, 27.14209], [-115.055142, 27.722726999999999], [-114.982253, 27.798200000000001], [-114.57036600000001, 27.741485000000001], [-114.19932900000001, 28.115003000000002], [-114.162018, 28.566112], [-114.931842, 29.279478999999998], [-115.518654, 29.556362], [-115.887365, 30.180793999999999], [-116.25834999999999, 30.836463999999999], [-116.721526, 31.635743999999999], [-117.12775999999999, 32.535339999999998], [-115.99135, 32.612389999999998], [-114.72139, 32.720829999999999], [-114.815, 32.525280000000002], [-113.30498, 32.039140000000003], [-111.02361000000001, 31.334720000000001], [-109.035, 31.341940000000001], [-108.24194, 31.342220000000001], [-108.23999999999999, 31.754854000000002], [-106.50758999999999, 31.754519999999999], [-106.1429, 31.39995], [-105.63159, 31.083829999999999], [-105.03737, 30.644020000000001], [-104.70574999999999, 30.121729999999999], [-104.45697, 29.571960000000001], [-103.94, 29.27], [-103.11, 28.969999999999999], [-102.48, 29.760000000000002], [-101.66240000000001, 29.779299999999999], [-100.9576, 29.380710000000001], [-100.45583999999999, 28.696120000000001], [-100.11, 28.109999999999999], [-99.519999999999996, 27.539999999999999], [-99.299999999999997, 26.84], [-99.019999999999996, 26.370000000000001], [-98.239999999999995, 26.059999999999999], [-97.530000000000001, 25.84], [-97.140007999999995, 25.869997000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0435\u043a\u0441\u0438\u043a\u0430", "fr": "Mexique", "en": "Mexico", "nl": "Mexico (land)", "pt": "M\u00e9xico", "no": "Mexico", "de": "Mexiko", "it": "Messico", "sv": "Mexiko", "pl": "Meksyk", "fi": "Meksiko", "zh": "\u58a8\u897f\u54e5", "ja": "\u30e1\u30ad\u30b7\u30b3", "es": "M\u00e9xico"}, "label_fr": "Mexique", "name": "Mexico", "dbpedia_uri": "http://dbpedia.org/resource/Mexico"}, "id": "MEX"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.590229999999998, 41.855409999999999], [20.717310000000001, 41.847110000000001], [20.762160000000002, 42.051859999999998], [21.352699999999999, 42.206800000000001], [21.576636000000001, 42.245224], [21.917079999999999, 42.303640000000001], [22.380526, 42.320259999999998], [22.881374000000001, 41.999296999999999], [22.952376999999998, 41.337994000000002], [22.761769999999999, 41.3048], [22.597308000000002, 41.130487000000002], [22.055378000000001, 41.149866000000003], [21.674161000000002, 40.931274999999999], [21.020040000000002, 40.842726999999996], [20.605180000000001, 41.086219999999997], [20.463149999999999, 41.515090000000001], [20.590229999999998, 41.855409999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f", "fr": "Mac\u00e9doine", "en": "Macedonia", "nl": "Macedoni\u00eb", "pt": "Maced\u00f3nia", "no": "Makedonia", "de": "Mazedonien (Begriffskl\u00e4rung)", "it": "Macedonia", "sv": "Makedonien (olika betydelser)", "pl": "Macedonia (ujednoznacznienie)", "fi": "Makedonia (t\u00e4smennyssivu)", "zh": "\u99ac\u5176\u9813 (\u6d88\u6b67\u7fa9)", "ja": "\u30de\u30b1\u30c9\u30cb\u30a2 (\u66d6\u6627\u3055\u56de\u907f)", "es": "Macedonia"}, "label_fr": "Mac\u00e9doine", "name": "Macedonia", "dbpedia_uri": "http://dbpedia.org/resource/Macedonia"}, "id": "MKD"}, {"geometry": {"type": "Polygon", "coordinates": [[[-12.17075, 14.616834000000001], [-11.834208, 14.799097], [-11.666078000000001, 15.388208000000001], [-11.349095, 15.411256], [-10.650791, 15.132745999999999], [-10.086846, 15.330486000000001], [-9.7002550000000003, 15.264106999999999], [-9.5502380000000002, 15.486497], [-5.537744, 15.50169], [-5.315277, 16.201854000000001], [-5.4885229999999998, 16.325102000000001], [-5.9711290000000004, 20.640833000000001], [-6.4537870000000002, 24.956591], [-4.9233370000000001, 24.974574], [-1.550055, 22.792666000000001], [1.8232280000000001, 20.610809], [2.060991, 20.142233000000001], [2.6835879999999999, 19.85623], [3.1466609999999999, 19.693579], [3.1581329999999999, 19.057364], [4.2674190000000003, 19.155265], [4.2702099999999996, 16.852226999999999], [3.7234219999999998, 16.184284000000002], [3.6382590000000001, 15.56812], [2.7499929999999999, 15.409525], [1.3855280000000001, 15.323561], [1.0157830000000001, 14.968182000000001], [0.374892, 14.928908], [-0.26625700000000002, 14.924308999999999], [-0.51585400000000003, 15.116158], [-1.0663629999999999, 14.973815], [-2.0010349999999999, 14.559008], [-2.1918250000000001, 14.246418], [-2.9676939999999998, 13.79815], [-3.103707, 13.541266999999999], [-3.5228030000000001, 13.337662], [-4.0063909999999998, 13.472485000000001], [-4.280405, 13.228444], [-4.4271659999999997, 12.542646], [-5.220942, 11.713858999999999], [-5.1978429999999998, 11.375146000000001], [-5.4705649999999997, 10.951269999999999], [-5.4043419999999998, 10.370737], [-5.8169259999999996, 10.222555], [-6.0504519999999999, 10.096361], [-6.2052230000000002, 10.524061], [-6.4939650000000002, 10.411303], [-6.666461, 10.430811], [-6.8505070000000003, 10.138994], [-7.6227590000000003, 10.147235999999999], [-7.8995899999999999, 10.297382000000001], [-8.0299440000000004, 10.206535000000001], [-8.3353769999999994, 10.494812], [-8.2823569999999993, 10.792597000000001], [-8.407311, 10.909257], [-8.6203210000000006, 10.810891], [-8.5813050000000004, 11.136246], [-8.3763050000000003, 11.393646], [-8.7860990000000001, 11.812561000000001], [-8.905265, 12.088357999999999], [-9.1274739999999994, 12.308059999999999], [-9.3276160000000008, 12.334286000000001], [-9.5679119999999998, 12.194243], [-9.8909929999999999, 12.060479000000001], [-10.165214000000001, 11.844084000000001], [-10.593223999999999, 11.923975], [-10.87083, 12.177887], [-11.036555999999999, 12.211245], [-11.297573999999999, 12.077971], [-11.456168999999999, 12.076834], [-11.513942999999999, 12.442988], [-11.467898999999999, 12.754519], [-11.553398, 13.141214], [-11.927716, 13.422075], [-12.124886999999999, 13.994726999999999], [-12.17075, 14.616834000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0438", "fr": "Mali", "en": "Mali", "nl": "Mali", "pt": "Mali", "no": "Mali", "de": "Mali", "it": "Mali", "sv": "Mali", "pl": "Mali", "fi": "Mali", "zh": "\u9a6c\u91cc\u5171\u548c\u56fd", "ja": "\u30de\u30ea\u5171\u548c\u56fd", "es": "Mal\u00ed"}, "label_fr": "Mali", "name": "Mali", "dbpedia_uri": "http://dbpedia.org/resource/Mali"}, "id": "MLI"}, {"geometry": {"type": "Polygon", "coordinates": [[[99.543308999999994, 20.186598], [98.959676000000002, 19.752980999999998], [98.253724000000005, 19.708203000000001], [97.797782999999995, 18.627079999999999], [97.375895999999997, 18.445437999999999], [97.859122999999997, 17.567945999999999], [98.493761000000006, 16.837835999999999], [98.903347999999994, 16.177824000000001], [98.537375999999995, 15.308496999999999], [98.192074000000005, 15.123703000000001], [98.430819, 14.622028], [99.097755000000006, 13.827503], [99.212012000000001, 13.269294], [99.196353999999999, 12.804748], [99.587286000000006, 11.892763], [99.038121000000004, 10.960546000000001], [98.553550999999999, 9.9329599999999996], [98.457173999999995, 10.675266000000001], [98.764545999999996, 11.441292000000001], [98.428338999999994, 12.032987], [98.509574000000001, 13.122377999999999], [98.103604000000004, 13.640459999999999], [97.777732, 14.837286000000001], [97.597071999999997, 16.100567999999999], [97.164540000000002, 16.928733999999999], [96.505769000000001, 16.427240999999999], [95.369352000000006, 15.71439], [94.808404999999993, 15.803454], [94.188804000000005, 16.037935999999998], [94.533485999999996, 17.277239999999999], [94.324816999999996, 18.213514], [93.540987999999999, 19.366492999999998], [93.663255000000007, 19.726962], [93.078277999999997, 19.855145], [92.368554000000003, 20.670883], [92.303234000000003, 21.475484999999999], [92.652257000000006, 21.324048000000001], [92.672720999999996, 22.041239000000001], [93.166128, 22.278459999999999], [93.060293999999999, 22.703111], [93.286327, 23.043658000000001], [93.325187999999997, 24.078555999999999], [94.106741999999997, 23.850740999999999], [94.552657999999994, 24.675238], [94.603249000000005, 25.162495], [95.155152999999999, 26.001307000000001], [95.124768000000003, 26.573571999999999], [96.419365999999997, 27.264589000000001], [97.133999000000003, 27.083773999999998], [97.051989000000006, 27.699058999999998], [97.402561000000006, 27.882536000000002], [97.327113999999995, 28.261583000000002], [97.911987999999994, 28.335944999999999], [98.246230999999995, 27.747221], [98.682689999999994, 27.508811999999999], [98.712093999999993, 26.743535999999999], [98.671837999999994, 25.918703000000001], [97.724609000000001, 25.083637], [97.60472, 23.897404999999999], [98.660262000000003, 24.063286000000002], [98.898748999999995, 23.142721999999999], [99.531992000000002, 22.949038999999999], [99.240898999999999, 22.118314000000002], [99.983489000000006, 21.742937000000001], [100.416538, 21.558838999999999], [101.15003299999999, 21.849983999999999], [101.18000499999999, 21.436572999999999], [100.32910099999999, 20.786121999999999], [100.115988, 20.417850000000001], [99.543308999999994, 20.186598]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u044c\u044f\u043d\u043c\u0430", "fr": "Birmanie", "en": "Burma", "nl": "Myanmar", "pt": "Myanmar", "no": "Burma", "de": "Myanmar", "it": "Birmania", "sv": "Burma", "pl": "Birma", "fi": "Myanmar", "zh": "\u7f05\u7538", "ja": "\u30df\u30e3\u30f3\u30de\u30fc", "es": "Birmania"}, "label_fr": "Birmanie", "name": "Myanmar", "dbpedia_uri": "http://dbpedia.org/resource/Burma"}, "id": "MMR"}, {"geometry": {"type": "Polygon", "coordinates": [[[19.801613, 42.500093], [19.738050999999999, 42.688246999999997], [19.304490000000001, 42.195740000000001], [19.371770000000001, 41.877549999999999], [19.162459999999999, 41.955019999999998], [18.88214, 42.281509999999997], [18.449999999999999, 42.479999999999997], [18.559999999999999, 42.649999999999999], [18.706479999999999, 43.200110000000002], [19.031649999999999, 43.43253], [19.218520000000002, 43.52384], [19.483889999999999, 43.352290000000004], [19.629999999999999, 43.21378], [19.958570000000002, 43.10604], [20.3398, 42.898519999999998], [20.257580000000001, 42.812750000000001], [20.070699999999999, 42.588630000000002], [19.801613, 42.500093]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0435\u0440\u043d\u043e\u0433\u043e\u0440\u0438\u044f", "fr": "Mont\u00e9n\u00e9gro", "en": "Montenegro", "nl": "Montenegro", "pt": "Montenegro", "no": "Montenegro", "de": "Montenegro", "it": "Montenegro", "sv": "Montenegro", "pl": "Czarnog\u00f3ra", "fi": "Montenegro", "zh": "\u8499\u7279\u5167\u54e5\u7f85", "ja": "\u30e2\u30f3\u30c6\u30cd\u30b0\u30ed", "es": "Montenegro"}, "label_fr": "Mont\u00e9n\u00e9gro", "name": "Montenegro", "dbpedia_uri": "http://dbpedia.org/resource/Montenegro"}, "id": "MNE"}, {"geometry": {"type": "Polygon", "coordinates": [[[87.751264000000006, 49.297198000000002], [88.805566999999996, 49.470520999999998], [90.713667000000001, 50.331811999999999], [92.234712000000002, 50.802171000000001], [93.104219000000001, 50.495289999999997], [94.147565999999998, 50.480536999999998], [94.815949000000003, 50.013432999999999], [95.814027999999993, 49.977466999999997], [97.259727999999996, 49.726061000000001], [98.231762000000003, 50.422401000000001], [97.825739999999996, 51.010995000000001], [98.861491000000001, 52.047365999999997], [99.981731999999994, 51.634005999999999], [100.88948000000001, 51.516855999999997], [102.065223, 51.259920999999999], [102.255909, 50.510561000000003], [103.676545, 50.089965999999997], [104.62155199999999, 50.275328999999999], [105.886591, 50.406019000000001], [106.88880399999999, 50.274296], [107.86817600000001, 49.793705000000003], [108.475167, 49.282547999999998], [109.402449, 49.292960999999998], [110.66201100000001, 49.130127999999999], [111.581231, 49.377968000000003], [112.89774, 49.543565000000001], [114.36245599999999, 50.248303], [114.96211, 50.140247000000002], [115.48569500000001, 49.805177], [116.67880100000001, 49.888531], [116.191802, 49.134597999999997], [115.485282, 48.135382999999997], [115.74283699999999, 47.726545000000002], [116.308953, 47.853409999999997], [117.295507, 47.697709000000003], [118.064143, 48.06673], [118.866574, 47.747059999999998], [119.772824, 47.048059000000002], [119.66327, 46.692680000000003], [118.874326, 46.805411999999997], [117.421701, 46.672733000000001], [116.717868, 46.388202], [115.985096, 45.727235], [114.46033199999999, 45.339816999999996], [113.46390700000001, 44.808892999999998], [112.43606200000001, 45.011645999999999], [111.873306, 45.102079000000003], [111.348377, 44.457442], [111.667737, 44.073175999999997], [111.829588, 43.743118000000003], [111.129682, 43.406834000000003], [110.412103, 42.871234000000001], [109.243596, 42.519446000000002], [107.744773, 42.481515999999999], [106.129316, 42.134327999999996], [104.964994, 41.597410000000004], [104.522282, 41.908346999999999], [103.31227800000001, 41.907468000000001], [101.83304, 42.514873000000001], [100.845866, 42.663803999999999], [99.515816999999998, 42.524690999999997], [97.451757000000001, 42.748890000000003], [96.349395999999999, 42.725634999999997], [95.762455000000003, 43.319448999999999], [95.306875000000005, 44.241331000000002], [94.688929000000002, 44.352331999999997], [93.480733999999998, 44.975472000000003], [92.133891000000006, 45.115076000000002], [90.945539999999994, 45.286073000000002], [90.585768000000002, 45.719715999999998], [90.970809000000003, 46.888145999999999], [90.280826000000005, 47.693548999999997], [88.854298, 48.069082000000002], [88.013831999999994, 48.599463], [87.751264000000006, 49.297198000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f", "fr": "Mongolie", "en": "Mongolia", "nl": "Mongoli\u00eb", "pt": "Mong\u00f3lia", "no": "Mongolia", "de": "Mongolei", "it": "Mongolia", "sv": "Mongoliet", "pl": "Mongolia", "fi": "Mongolia", "zh": "\u8499\u53e4\u56fd", "ja": "\u30e2\u30f3\u30b4\u30eb\u56fd", "es": "Mongolia"}, "label_fr": "Mongolie", "name": "Mongolia", "dbpedia_uri": "http://dbpedia.org/resource/Mongolia"}, "id": "MNG"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.559989000000002, -11.520020000000001], [35.312398000000002, -11.439145999999999], [36.514082000000002, -11.720938], [36.775151000000001, -11.594537000000001], [37.471283999999997, -11.568751000000001], [37.827644999999997, -11.268769000000001], [38.427557, -11.285202], [39.521030000000003, -10.896853999999999], [40.316589, -10.317095999999999], [40.478386999999998, -10.765440999999999], [40.437252999999998, -11.761711], [40.560811000000001, -12.639177], [40.599620000000002, -14.201974999999999], [40.775475, -14.691763999999999], [40.477251000000003, -15.406294000000001], [40.089264, -16.100774000000001], [39.452559000000001, -16.720891000000002], [38.538350999999999, -17.101023000000001], [37.411133, -17.586368], [36.281278999999998, -18.659687999999999], [35.896496999999997, -18.84226], [35.198399999999999, -19.552810999999998], [34.786383000000001, -19.784012000000001], [34.701892999999998, -20.497043000000001], [35.176127000000001, -21.254360999999999], [35.373427999999997, -21.840837000000001], [35.385848000000003, -22.140000000000001], [35.562545999999998, -22.09], [35.533935, -23.070788], [35.371774000000002, -23.535359], [35.607469999999999, -23.706562999999999], [35.458745999999998, -24.122610000000002], [35.040734999999998, -24.478351], [34.215823999999998, -24.816313999999998], [33.013210000000001, -25.357572999999999], [32.574632000000001, -25.727318], [32.660362999999997, -26.148584], [32.915954999999997, -26.215866999999999], [32.830120000000001, -26.742191999999999], [32.071665000000003, -26.733820000000001], [31.985779000000001, -26.291779999999999], [31.837778, -25.843332], [31.752407999999999, -25.484283999999999], [31.930589000000001, -24.369416999999999], [31.670397999999999, -23.658968999999999], [31.191409, -22.25151], [32.244987999999999, -21.116489000000001], [32.508693000000001, -20.395292000000001], [32.659742999999999, -20.304290000000002], [32.772708000000002, -19.715592000000001], [32.611994000000003, -19.419383], [32.654885999999998, -18.672090000000001], [32.849860999999997, -17.979057000000001], [32.847639000000001, -16.713398000000002], [32.328239000000004, -16.392074000000001], [31.852041, -16.319417000000001], [31.636498, -16.07199], [31.173064, -15.860944], [30.338954999999999, -15.880839], [30.274256000000001, -15.507787], [30.179480999999999, -14.796099], [33.214024999999999, -13.97186], [33.789700000000003, -14.451831], [34.064824999999999, -14.35995], [34.459632999999997, -14.613009999999999], [34.517665999999998, -15.013709], [34.307290999999999, -15.478641], [34.381292000000002, -16.18356], [35.033810000000003, -16.801300000000001], [35.339063000000003, -16.10744], [35.771904999999997, -15.896858999999999], [35.686844999999998, -14.611046], [35.267955999999998, -13.887834], [34.907150999999999, -13.565424999999999], [34.559989000000002, -13.579998], [34.280006, -12.280025], [34.559989000000002, -11.520020000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a", "fr": "Mozambique", "en": "Mozambique", "nl": "Mozambique", "pt": "Mo\u00e7ambique", "no": "Mosambik", "de": "Mosambik", "it": "Mozambico", "sv": "Mo\u00e7ambique", "pl": "Mozambik", "fi": "Mosambik", "zh": "\u83ab\u6851\u6bd4\u514b", "ja": "\u30e2\u30b6\u30f3\u30d3\u30fc\u30af", "es": "Mozambique"}, "label_fr": "Mozambique", "name": "Mozambique", "dbpedia_uri": "http://dbpedia.org/resource/Mozambique"}, "id": "MOZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-12.17075, 14.616834000000001], [-12.830658, 15.303692], [-13.435738000000001, 16.039383000000001], [-14.099520999999999, 16.304302], [-14.577348000000001, 16.598264], [-15.135737000000001, 16.587281999999998], [-15.623666, 16.369337000000002], [-16.12069, 16.455663000000001], [-16.463097999999999, 16.135035999999999], [-16.549707999999999, 16.673891999999999], [-16.270551999999999, 17.166962999999999], [-16.146346999999999, 18.108481999999999], [-16.256882999999998, 19.096716000000001], [-16.377651, 19.593817000000001], [-16.277837999999999, 20.092521000000001], [-16.536324, 20.567865999999999], [-17.063423, 20.999752000000001], [-16.845193999999999, 21.333323], [-12.929102, 21.327071], [-13.118753999999999, 22.77122], [-12.874222, 23.284832000000002], [-11.937224000000001, 23.374593999999998], [-11.969419, 25.933353], [-8.6872939999999996, 25.881056000000001], [-8.6844000000000001, 27.395744000000001], [-4.9233370000000001, 24.974574], [-6.4537870000000002, 24.956591], [-5.9711290000000004, 20.640833000000001], [-5.4885229999999998, 16.325102000000001], [-5.315277, 16.201854000000001], [-5.537744, 15.50169], [-9.5502380000000002, 15.486497], [-9.7002550000000003, 15.264106999999999], [-10.086846, 15.330486000000001], [-10.650791, 15.132745999999999], [-11.349095, 15.411256], [-11.666078000000001, 15.388208000000001], [-11.834208, 14.799097], [-12.17075, 14.616834000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "fr": "Mauritanie", "en": "Mauritania", "nl": "Mauritani\u00eb", "pt": "Maurit\u00e2nia", "no": "Mauritania", "de": "Mauretanien", "it": "Mauritania", "sv": "Mauretanien", "pl": "Mauretania", "fi": "Mauritania", "zh": "\u6bdb\u91cc\u5854\u5c3c\u4e9a", "ja": "\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2", "es": "Mauritania"}, "label_fr": "Mauritanie", "name": "Mauritania", "dbpedia_uri": "http://dbpedia.org/resource/Mauritania"}, "id": "MRT"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.559989000000002, -11.520020000000001], [34.280006, -12.280025], [34.559989000000002, -13.579998], [34.907150999999999, -13.565424999999999], [35.267955999999998, -13.887834], [35.686844999999998, -14.611046], [35.771904999999997, -15.896858999999999], [35.339063000000003, -16.10744], [35.033810000000003, -16.801300000000001], [34.381292000000002, -16.18356], [34.307290999999999, -15.478641], [34.517665999999998, -15.013709], [34.459632999999997, -14.613009999999999], [34.064824999999999, -14.35995], [33.789700000000003, -14.451831], [33.214024999999999, -13.97186], [32.688164999999998, -13.712858000000001], [32.991764000000003, -12.783871], [33.306421999999998, -12.435778000000001], [33.114288999999999, -11.607198], [33.315309999999997, -10.79655], [33.485688000000003, -10.525558999999999], [33.231388000000003, -9.6767219999999998], [32.759374999999999, -9.2305989999999998], [33.739728999999997, -9.4171510000000005], [33.940837999999999, -9.6936739999999997], [34.280006, -10.16], [34.559989000000002, -11.520020000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0430\u0432\u0438", "fr": "Malawi", "en": "Malawi", "nl": "Malawi", "pt": "Malawi", "no": "Malawi", "de": "Malawi", "it": "Malawi", "sv": "Malawi", "pl": "Malawi", "fi": "Malawi", "zh": "\u9a6c\u62c9\u7ef4", "ja": "\u30de\u30e9\u30a6\u30a4", "es": "Malaui"}, "label_fr": "Malawi", "name": "Malawi", "dbpedia_uri": "http://dbpedia.org/resource/Malawi"}, "id": "MWI"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[101.07551599999999, 6.2048670000000001], [101.154219, 5.6913840000000002], [101.81428200000001, 5.8108079999999998], [102.141187, 6.2216360000000002], [102.37114699999999, 6.1282050000000003], [102.96170499999999, 5.5244949999999999], [103.381215, 4.8550009999999997], [103.438575, 4.1816060000000004], [103.332122, 3.7266979999999998], [103.429429, 3.3828689999999999], [103.502448, 2.7910189999999999], [103.854674, 2.5154540000000001], [104.24793200000001, 1.631141], [104.22881099999999, 1.293048], [103.519707, 1.226334], [102.573615, 1.9671149999999999], [101.390638, 2.7608139999999999], [101.27354, 3.270292], [100.695435, 3.9391400000000001], [100.557408, 4.7672800000000004], [100.19670600000001, 5.3124929999999999], [100.30625999999999, 6.0405620000000004], [100.085757, 6.4644890000000004], [100.259596, 6.6428250000000002], [101.07551599999999, 6.2048670000000001]]], [[[118.61832099999999, 4.4782019999999996], [117.882035, 4.1375510000000002], [117.015214, 4.3060939999999999], [115.865517, 4.306559], [115.51907799999999, 3.169238], [115.13403700000001, 2.821482], [114.62135499999999, 1.430688], [113.80585000000001, 1.217549], [112.859809, 1.49779], [112.380252, 1.410121], [111.79754800000001, 0.90444100000000005], [111.159138, 0.97647799999999996], [110.514061, 0.77313100000000001], [109.83022699999999, 1.338136], [109.66325999999999, 2.0064669999999998], [110.396135, 1.663775], [111.168853, 1.8506370000000001], [111.370081, 2.6973029999999998], [111.79692799999999, 2.8858969999999999], [112.995615, 3.102395], [113.712935, 3.8935089999999999], [114.20401699999999, 4.525874], [114.65959599999999, 4.0076369999999999], [114.869557, 4.3483140000000002], [115.347461, 4.3166359999999999], [115.4057, 4.955228], [115.45071, 5.44773], [116.220741, 6.1431909999999998], [116.725103, 6.9247709999999998], [117.129626, 6.9280530000000002], [117.643393, 6.4221659999999998], [117.689075, 5.9874900000000002], [118.347691, 5.7086959999999998], [119.181904, 5.4078359999999996], [119.110694, 5.0161280000000001], [118.439727, 4.9665189999999999], [118.61832099999999, 4.4782019999999996]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f", "fr": "Malaisie", "en": "Malaysia", "nl": "Maleisi\u00eb", "pt": "Mal\u00e1sia", "no": "Malaysia", "de": "Malaysia", "it": "Malesia", "sv": "Malaysia", "pl": "Malezja", "fi": "Malesia", "zh": "\u9a6c\u6765\u897f\u4e9a", "ja": "\u30de\u30ec\u30fc\u30b7\u30a2", "es": "Malasia"}, "label_fr": "Malaisie", "name": "Malaysia", "dbpedia_uri": "http://dbpedia.org/resource/Malaysia"}, "id": "MYS"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.344977, -28.576705], [15.601818, -27.821247], [15.210471999999999, -27.090955999999998], [14.989711, -26.117372], [14.743214, -25.39292], [14.408144, -23.853014000000002], [14.385717, -22.656652999999999], [14.257714, -22.111208000000001], [13.868641999999999, -21.699037000000001], [13.352498000000001, -20.872834000000001], [12.826845, -19.673165999999998], [12.608563999999999, -19.045349000000002], [11.794919, -18.069129], [11.734199, -17.301888999999999], [12.215460999999999, -17.111668000000002], [12.814081, -16.941343], [13.462362000000001, -16.971212000000001], [14.058501, -17.423380999999999], [14.209707, -17.353100999999999], [18.263309, -17.309951000000002], [18.956187, -17.789095], [21.377175999999999, -17.930636], [23.215047999999999, -17.523116000000002], [24.033861999999999, -17.295843000000001], [24.682348999999999, -17.353411000000001], [25.07695, -17.578823], [25.084443, -17.661816000000002], [24.520705, -17.887125000000001], [24.217365000000001, -17.889347000000001], [23.579006, -18.281261000000001], [23.196857999999999, -17.869038], [21.65504, -18.219145999999999], [20.910640999999998, -18.252219], [20.881133999999999, -21.814326999999999], [19.895458000000001, -21.849157000000002], [19.895768, -24.767790000000002], [19.894734, -28.461105], [19.002127000000002, -28.972442999999998], [18.464898999999999, -29.045462000000001], [17.836151999999998, -28.856377999999999], [17.387497, -28.783514], [17.218928999999999, -28.355943], [16.824017000000001, -28.082162], [16.344977, -28.576705]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0430\u043c\u0438\u0431\u0438\u044f", "fr": "Namibie", "en": "Namibia", "nl": "Namibi\u00eb", "pt": "Nam\u00edbia", "no": "Namibia", "de": "Namibia", "it": "Namibia", "sv": "Namibia", "pl": "Namibia", "fi": "Namibia", "zh": "\u7eb3\u7c73\u6bd4\u4e9a", "ja": "\u30ca\u30df\u30d3\u30a2", "es": "Namibia"}, "label_fr": "Namibie", "name": "Namibia", "dbpedia_uri": "http://dbpedia.org/resource/Namibia"}, "id": "NAM"}, {"geometry": {"type": "Polygon", "coordinates": [[[165.77999, -21.080005], [166.59999099999999, -21.700019000000001], [167.12001100000001, -22.159991000000002], [166.74003500000001, -22.399975999999999], [166.18973199999999, -22.129708000000001], [165.47437500000001, -21.679607000000001], [164.829815, -21.149819999999998], [164.16799499999999, -20.444747], [164.029606, -20.105646], [164.45996700000001, -20.120011999999999], [165.020036, -20.459990999999999], [165.46000900000001, -20.800021999999998], [165.77999, -21.080005]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0432\u0430\u044f \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u044f", "fr": "Nouvelle-Cal\u00e9donie", "en": "New Caledonia", "nl": "Nieuw-Caledoni\u00eb (eiland)", "pt": "Nova Caled\u00f3nia", "no": "Ny-Caledonia", "de": "Neukaledonien", "it": "Nuova Caledonia", "sv": "Nya Kaledonien", "pl": "Nowa Kaledonia", "fi": "Uusi-Kaledonia", "zh": "\u65b0\u5580\u91cc\u591a\u5c3c\u4e9e", "ja": "\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2", "es": "Nueva Caledonia"}, "label_fr": "Nouvelle-Cal\u00e9donie", "name": "New Caledonia", "dbpedia_uri": "http://dbpedia.org/resource/New_Caledonia"}, "id": "NCL"}, {"geometry": {"type": "Polygon", "coordinates": [[[2.154474, 11.940149999999999], [2.177108, 12.625018000000001], [1.024103, 12.851826000000001], [0.99304599999999998, 13.335750000000001], [0.42992799999999998, 13.988733], [0.29564600000000002, 14.444235000000001], [0.374892, 14.928908], [1.0157830000000001, 14.968182000000001], [1.3855280000000001, 15.323561], [2.7499929999999999, 15.409525], [3.6382590000000001, 15.56812], [3.7234219999999998, 16.184284000000002], [4.2702099999999996, 16.852226999999999], [4.2674190000000003, 19.155265], [5.6775659999999997, 19.601206999999999], [8.5728930000000005, 21.565660999999999], [11.999506, 23.471668000000001], [13.581424999999999, 23.040506000000001], [14.143871000000001, 22.491288999999998], [14.8513, 22.862950000000001], [15.096888, 21.308519], [15.471076999999999, 21.048456999999999], [15.487147999999999, 20.730415000000001], [15.903247, 20.387619000000001], [15.685741, 19.957180000000001], [15.300440999999999, 17.927949999999999], [15.247731, 16.627306000000001], [13.972201999999999, 15.684366000000001], [13.540393999999999, 14.367134], [13.956699, 13.996691], [13.954477000000001, 13.353448999999999], [14.595781000000001, 13.330427], [14.495787, 12.859396], [14.213531, 12.802035], [14.181336, 12.483656999999999], [13.995353, 12.461565], [13.318702, 13.556355999999999], [13.083987, 13.596147], [12.302071, 13.037189], [11.527803, 13.32898], [10.989592999999999, 13.387323], [10.701032, 13.246918000000001], [10.114814000000001, 13.277252000000001], [9.5249279999999992, 12.851101999999999], [9.0149329999999992, 12.826658999999999], [7.8046709999999999, 13.343527], [7.3307469999999997, 13.098038000000001], [6.8204419999999999, 13.115091], [6.4454260000000003, 13.492768], [5.4430579999999997, 13.865924], [4.3683439999999996, 13.747482], [4.1079460000000001, 13.531216000000001], [3.9672830000000001, 12.956109], [3.680634, 12.552903000000001], [3.6111800000000001, 11.660167], [2.848643, 12.235636], [2.490164, 12.233052000000001], [2.154474, 11.940149999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0433\u0435\u0440", "fr": "Niger", "en": "Niger", "nl": "Niger (land)", "pt": "N\u00edger", "no": "Niger", "de": "Niger", "it": "Niger", "sv": "Niger", "pl": "Niger", "fi": "Niger", "zh": "\u5c3c\u65e5\u5c14", "ja": "\u30cb\u30b8\u30a7\u30fc\u30eb", "es": "N\u00edger"}, "label_fr": "Niger", "name": "Niger", "dbpedia_uri": "http://dbpedia.org/resource/Niger"}, "id": "NER"}, {"geometry": {"type": "Polygon", "coordinates": [[[8.5002879999999994, 4.7719829999999996], [7.4621079999999997, 4.4121079999999999], [7.0825959999999997, 4.4646889999999999], [6.6980719999999998, 4.2405939999999998], [5.8981729999999999, 4.2624529999999998], [5.3628049999999998, 4.8879710000000003], [5.0335739999999998, 5.611802], [4.3256069999999998, 6.270651], [3.5741800000000001, 6.2583000000000002], [2.6917019999999998, 6.2588169999999996], [2.749063, 7.8707339999999997], [2.7237930000000001, 8.5068450000000002], [2.9123079999999999, 9.1376080000000002], [3.2203520000000001, 9.444153], [3.705438, 10.06321], [3.6000700000000001, 10.332186], [3.7971119999999998, 10.734745999999999], [3.5722160000000001, 11.327939000000001], [3.6111800000000001, 11.660167], [3.680634, 12.552903000000001], [3.9672830000000001, 12.956109], [4.1079460000000001, 13.531216000000001], [4.3683439999999996, 13.747482], [5.4430579999999997, 13.865924], [6.4454260000000003, 13.492768], [6.8204419999999999, 13.115091], [7.3307469999999997, 13.098038000000001], [7.8046709999999999, 13.343527], [9.0149329999999992, 12.826658999999999], [9.5249279999999992, 12.851101999999999], [10.114814000000001, 13.277252000000001], [10.701032, 13.246918000000001], [10.989592999999999, 13.387323], [11.527803, 13.32898], [12.302071, 13.037189], [13.083987, 13.596147], [13.318702, 13.556355999999999], [13.995353, 12.461565], [14.181336, 12.483656999999999], [14.577178, 12.085361000000001], [14.468192, 11.904752], [14.415379, 11.572369], [13.572950000000001, 10.798565999999999], [13.308676, 10.160361999999999], [13.1676, 9.6406259999999993], [12.955468, 9.4177719999999994], [12.753672, 8.7177629999999997], [12.218871999999999, 8.3058239999999994], [12.063946, 7.7998079999999996], [11.839309, 7.3970419999999999], [11.745774000000001, 6.9813830000000001], [11.058788, 6.6444270000000003], [10.497375, 7.055358], [10.118277000000001, 7.0387700000000004], [9.5227059999999994, 6.4534820000000002], [9.2331629999999993, 6.4444910000000002], [8.7575330000000005, 5.4796659999999999], [8.5002879999999994, 4.7719829999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0433\u0435\u0440\u0438\u044f", "fr": "Nigeria", "en": "Nigeria", "nl": "Nigeria", "pt": "Nig\u00e9ria", "no": "Nigeria", "de": "Nigeria", "it": "Nigeria", "sv": "Nigeria", "pl": "Nigeria", "fi": "Nigeria", "zh": "\u5948\u53ca\u5229\u4e9e", "ja": "\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2", "es": "Nigeria"}, "label_fr": "Nigeria", "name": "Nigeria", "dbpedia_uri": "http://dbpedia.org/resource/Nigeria"}, "id": "NGA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-85.712540000000004, 11.088445], [-86.058487999999997, 11.403439000000001], [-86.525850000000005, 11.806877], [-86.745992000000001, 12.143962], [-87.167516000000006, 12.458258000000001], [-87.668492999999998, 12.90991], [-87.557467000000003, 13.064552000000001], [-87.392386000000002, 12.914018], [-87.316654, 12.984686], [-87.005769000000001, 13.025793999999999], [-86.880556999999996, 13.254204], [-86.733822000000004, 13.263093], [-86.755087000000003, 13.754845], [-86.520707999999999, 13.778487], [-86.312141999999994, 13.771356000000001], [-86.096264000000005, 14.038187000000001], [-85.801294999999996, 13.836055], [-85.698665000000005, 13.960077999999999], [-85.514413000000005, 14.079012000000001], [-85.165364999999994, 14.354369999999999], [-85.148751000000004, 14.560197000000001], [-85.052786999999995, 14.551541], [-84.924501000000006, 14.790493], [-84.820036999999999, 14.819587], [-84.649581999999995, 14.666805], [-84.449336000000002, 14.621613999999999], [-84.228341999999998, 14.748764], [-83.975720999999993, 14.749435999999999], [-83.628585000000001, 14.880074], [-83.489988999999994, 15.016266999999999], [-83.147219000000007, 14.995829000000001], [-83.233233999999996, 14.899865999999999], [-83.284161999999995, 14.676624], [-83.182125999999997, 14.310703], [-83.412499999999994, 13.970078000000001], [-83.519831999999994, 13.567698999999999], [-83.552206999999996, 13.127053999999999], [-83.498514999999998, 12.869292], [-83.473322999999993, 12.419086999999999], [-83.626103999999998, 12.32085], [-83.719612999999995, 11.893124], [-83.650857999999999, 11.629032], [-83.855469999999997, 11.373310999999999], [-83.808936000000003, 11.103044000000001], [-83.655612000000005, 10.938764000000001], [-83.895054000000002, 10.726839], [-84.190179000000001, 10.79345], [-84.355930999999998, 10.999226], [-84.673068999999998, 11.082656999999999], [-84.903002999999998, 10.952303000000001], [-85.561852000000002, 11.217119], [-85.712540000000004, 11.088445]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430", "fr": "Nicaragua", "en": "Nicaragua", "nl": "Nicaragua", "pt": "Nicar\u00e1gua", "no": "Nicaragua", "de": "Nicaragua", "it": "Nicaragua", "sv": "Nicaragua", "pl": "Nikaragua", "fi": "Nicaragua", "zh": "\u5c3c\u52a0\u62c9\u74dc", "ja": "\u30cb\u30ab\u30e9\u30b0\u30a2", "es": "Nicaragua"}, "label_fr": "Nicaragua", "name": "Nicaragua", "dbpedia_uri": "http://dbpedia.org/resource/Nicaragua"}, "id": "NIC"}, {"geometry": {"type": "Polygon", "coordinates": [[[6.0741829999999997, 53.510402999999997], [6.9051400000000003, 53.482162000000002], [7.0920529999999999, 53.144043000000003], [6.8428699999999996, 52.228439999999999], [6.5893969999999999, 51.852029000000002], [5.988658, 51.851616], [6.1566580000000002, 50.803721000000003], [5.6069760000000004, 51.037298], [4.9739909999999998, 51.475023999999998], [4.0470709999999999, 51.267259000000003], [3.3149709999999999, 51.345754999999997], [3.8302890000000001, 51.620545], [4.705997, 53.091797999999997], [6.0741829999999997, 53.510402999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u044b", "fr": "Pays-Bas", "en": "Netherlands", "nl": "Nederland", "pt": "Pa\u00edses Baixos", "no": "Nederland", "de": "Niederlande", "it": "Paesi Bassi", "sv": "Nederl\u00e4nderna", "pl": "Holandia", "fi": "Alankomaat", "zh": "\u8377\u5170", "ja": "\u30aa\u30e9\u30f3\u30c0", "es": "Pa\u00edses Bajos"}, "label_fr": "Pays-Bas", "name": "Netherlands", "dbpedia_uri": "http://dbpedia.org/resource/Netherlands"}, "id": "NLD"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[28.165547, 71.185473999999999], [31.293417999999999, 70.453788000000003], [30.005434999999999, 70.186259000000007], [31.101078999999999, 69.558080000000004], [29.399581000000001, 69.156915999999995], [28.591930000000001, 69.064777000000007], [29.015573, 69.766491000000002], [27.732292000000001, 70.164192999999997], [26.179621999999998, 69.825299000000001], [25.689212999999999, 69.092113999999995], [24.735679000000001, 68.649557000000001], [23.662050000000001, 68.891247000000007], [22.356238000000001, 68.841740999999999], [21.244935999999999, 69.370442999999995], [20.645593000000002, 69.106246999999996], [20.025269000000002, 69.065139000000002], [19.87856, 68.407194000000004], [17.993867999999999, 68.567391000000001], [17.729182000000002, 68.010552000000004], [16.768878999999998, 68.013936999999999], [16.108712000000001, 67.302456000000006], [15.108411, 66.193866999999997], [13.55569, 64.787028000000007], [13.919905, 64.445420999999996], [13.571916, 64.049114000000003], [12.579935000000001, 64.066219000000004], [11.930569, 63.128318], [11.992063999999999, 61.800362], [12.631147, 61.293571999999998], [12.300366, 60.117933000000001], [11.468272000000001, 59.432392999999998], [11.027369, 58.856149000000002], [10.356557, 59.469807000000003], [8.3819999999999997, 58.313288], [7.0487479999999998, 58.078884000000002], [5.6658350000000004, 58.588155], [5.3082339999999997, 59.663232000000001], [4.9920780000000002, 61.970998000000002], [5.9128999999999996, 62.614472999999997], [8.5534110000000005, 63.454008000000002], [10.527709, 64.486037999999994], [12.358347, 65.879726000000005], [14.761146, 67.810642000000001], [16.435927, 68.563204999999996], [19.184028000000001, 69.817443999999995], [21.378416000000001, 70.255168999999995], [23.023741999999999, 70.202072000000001], [24.546543, 71.030496999999997], [26.370049999999999, 70.986261999999996], [28.165547, 71.185473999999999]]], [[[24.724119999999999, 77.853849999999994], [22.490320000000001, 77.444929999999999], [20.726009999999999, 77.677040000000005], [21.41611, 77.935040000000001], [20.811900000000001, 78.254630000000006], [22.884260000000001, 78.454939999999993], [23.28134, 78.079539999999994], [24.724119999999999, 77.853849999999994]]], [[[18.251830000000002, 79.701750000000004], [21.54383, 78.956109999999995], [19.027370000000001, 78.562600000000003], [18.471720000000001, 77.826689999999999], [17.59441, 77.637960000000007], [17.118200000000002, 76.80941], [15.91315, 76.770449999999997], [13.762589999999999, 77.380350000000007], [14.669560000000001, 77.735650000000007], [13.1706, 78.024929999999998], [11.22231, 78.869299999999996], [10.44453, 79.652389999999997], [13.170769999999999, 80.010459999999995], [13.71852, 79.660390000000007], [15.14282, 79.674310000000006], [15.522550000000001, 80.016080000000002], [16.990849999999998, 80.05086], [18.251830000000002, 79.701750000000004]]], [[[25.447624999999999, 80.407340000000005], [27.407506000000001, 80.056405999999996], [25.924651000000001, 79.517833999999993], [23.024466, 79.400012000000004], [20.075188000000001, 79.566822999999999], [19.897265999999998, 79.842361999999994], [18.462264000000001, 79.859880000000004], [17.368015, 80.318895999999995], [20.455991999999998, 80.598156000000003], [21.907945000000002, 80.357679000000005], [22.919253000000001, 80.657144000000002], [25.447624999999999, 80.407340000000005]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0440\u0432\u0435\u0433\u0438\u044f", "fr": "Norv\u00e8ge", "en": "Norway", "nl": "Noorwegen", "pt": "Noruega", "no": "Norge", "de": "Norwegen", "it": "Norvegia", "sv": "Norge", "pl": "Norwegia", "fi": "Norja", "zh": "\u632a\u5a01", "ja": "\u30ce\u30eb\u30a6\u30a7\u30fc", "es": "Noruega"}, "label_fr": "Norv\u00e8ge", "name": "Norway", "dbpedia_uri": "http://dbpedia.org/resource/Norway"}, "id": "NOR"}, {"geometry": {"type": "Polygon", "coordinates": [[[88.120441, 27.876542000000001], [88.043132999999997, 27.445819], [88.174803999999995, 26.810404999999999], [88.060237999999998, 26.414615000000001], [87.227472000000006, 26.397898000000001], [86.024393000000003, 26.630984999999999], [85.251778999999999, 26.726198], [84.675017999999994, 27.234901000000001], [83.304248999999999, 27.364505999999999], [81.999987000000004, 27.925478999999999], [81.057203000000001, 28.416094999999999], [80.088425000000001, 28.79447], [80.476720999999998, 29.729865], [81.111255999999997, 30.183481], [81.525803999999994, 30.422716999999999], [82.327512999999996, 30.115268], [83.337114999999997, 29.463732], [83.898993000000004, 29.320226000000002], [84.234579999999994, 28.839894000000001], [85.011638000000005, 28.642773999999999], [85.823319999999995, 28.203576000000002], [86.954516999999996, 27.974262], [88.120441, 27.876542000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0435\u043f\u0430\u043b", "fr": "N\u00e9pal", "en": "Nepal", "nl": "Nepal", "pt": "Nepal", "no": "Nepal", "de": "Nepal", "it": "Nepal", "sv": "Nepal", "pl": "Nepal", "fi": "Nepal", "zh": "\u5c3c\u6cca\u5c14", "ja": "\u30cd\u30d1\u30fc\u30eb", "es": "Nepal"}, "label_fr": "N\u00e9pal", "name": "Nepal", "dbpedia_uri": "http://dbpedia.org/resource/Nepal"}, "id": "NPL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[173.020375, -40.919052000000001], [173.24723399999999, -41.331999000000003], [173.958405, -40.926701000000001], [174.24758700000001, -41.349155000000003], [174.24851699999999, -41.770007999999997], [173.87644700000001, -42.233184000000001], [173.22273999999999, -42.970038000000002], [172.71124599999999, -43.372287999999998], [173.08011300000001, -43.853344], [172.308584, -43.865693999999998], [171.45292499999999, -44.242519000000001], [171.18513799999999, -44.897103999999999], [170.61669699999999, -45.908929000000001], [169.831422, -46.355775000000001], [169.33233100000001, -46.641235000000002], [168.41135399999999, -46.619945000000001], [167.763745, -46.290196999999999], [166.676886, -46.219917000000002], [166.50914399999999, -45.852705], [167.046424, -45.110940999999997], [168.303763, -44.123972999999999], [168.949409, -43.935819000000002], [169.66781499999999, -43.555326000000001], [170.52492000000001, -43.031688000000003], [171.12509, -42.512754000000001], [171.569714, -41.767423999999998], [171.94870900000001, -41.514417000000002], [172.097227, -40.956104000000003], [172.79857999999999, -40.493962000000003], [173.020375, -40.919052000000001]]], [[[174.612009, -36.156396999999998], [175.33661599999999, -37.209097999999997], [175.357596, -36.526193999999997], [175.808887, -36.798941999999997], [175.95849000000001, -37.555382000000002], [176.763195, -37.881253000000001], [177.43881300000001, -37.961247999999998], [178.01035400000001, -37.579825], [178.51709399999999, -37.695372999999996], [178.274731, -38.582813000000002], [177.97046, -39.166342999999998], [177.20699300000001, -39.145775999999998], [176.93998099999999, -39.449736000000001], [177.03294600000001, -39.879942999999997], [176.88582400000001, -40.065978000000001], [176.508017, -40.604807999999998], [176.01244, -41.289624000000003], [175.23956699999999, -41.688307999999999], [175.06789800000001, -41.425894999999997], [174.65097299999999, -41.281821000000001], [175.22763, -40.459235999999997], [174.90015700000001, -39.908932999999998], [173.82404700000001, -39.508853999999999], [173.852262, -39.146602000000001], [174.57480200000001, -38.797682999999999], [174.74347399999999, -38.027808], [174.69701699999999, -37.381129000000001], [174.29202799999999, -36.711092000000001], [174.31900400000001, -36.534824], [173.84099699999999, -36.121980999999998], [173.054171, -35.237124999999999], [172.63600500000001, -34.529107000000003], [173.00704200000001, -34.450662000000001], [173.551298, -35.006183], [174.32938999999999, -35.265495999999999], [174.612009, -36.156396999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0432\u0430\u044f \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Nouvelle-Z\u00e9lande", "en": "New Zealand", "nl": "Nieuw-Zeeland", "pt": "Nova Zel\u00e2ndia", "no": "New Zealand", "de": "Neuseeland", "it": "Nuova Zelanda", "sv": "Nya Zeeland", "pl": "Nowa Zelandia", "fi": "Uusi-Seelanti", "zh": "\u65b0\u897f\u5170", "ja": "\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9", "es": "Nueva Zelanda"}, "label_fr": "Nouvelle-Z\u00e9lande", "name": "New Zealand", "dbpedia_uri": "http://dbpedia.org/resource/New_Zealand"}, "id": "NZL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[58.861141000000003, 21.114035000000001], [58.487985999999999, 20.428985999999998], [58.034317999999999, 20.481437], [57.826372999999997, 20.243002000000001], [57.665762000000001, 19.736004999999999], [57.788699999999999, 19.06757], [57.694391000000003, 18.944710000000001], [57.234264000000003, 18.947990999999998], [56.609650999999999, 18.574266999999999], [56.512188999999999, 18.087112999999999], [56.283521, 17.876066999999999], [55.661492000000003, 17.884128], [55.269939000000001, 17.632308999999999], [55.274900000000002, 17.228354], [54.791001999999999, 16.950697000000002], [54.239252999999998, 17.044981], [53.570507999999997, 16.707663], [53.108573, 16.651050999999999], [52.782184000000001, 17.349741999999999], [52.000010000000003, 19.000003], [54.999982000000003, 19.999994000000001], [55.666659000000003, 22.000001000000001], [55.208340999999997, 22.70833], [55.234489000000004, 23.110993000000001], [55.525841, 23.524868999999999], [55.528632000000002, 23.933603999999999], [55.981214000000001, 24.130542999999999], [55.804119, 24.269604000000001], [55.886232999999997, 24.920831], [56.396847000000001, 24.924731999999999], [56.845140000000001, 24.241672999999999], [57.403452999999999, 23.878594], [58.136947999999997, 23.747931000000001], [58.729210999999999, 23.565667999999999], [59.180501999999997, 22.992394999999998], [59.450097999999997, 22.660271000000002], [59.808059999999998, 22.533612000000002], [59.806148, 22.310524999999998], [59.442191000000001, 21.714541000000001], [59.282407999999997, 21.433886000000001], [58.861141000000003, 21.114035000000001]]], [[[56.391421000000001, 25.895990999999999], [56.261042000000003, 25.714606], [56.070821000000002, 26.055464000000001], [56.362017000000002, 26.395934], [56.485678999999998, 26.309118000000002], [56.391421000000001, 25.895990999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041e\u043c\u0430\u043d", "fr": "Oman", "en": "Oman", "nl": "Oman", "pt": "Om\u00e3", "no": "Oman", "de": "Oman", "it": "Oman", "sv": "Oman", "pl": "Oman", "fi": "Oman", "zh": "\u963f\u66fc", "ja": "\u30aa\u30de\u30fc\u30f3", "es": "Om\u00e1n"}, "label_fr": "Oman", "name": "Oman", "dbpedia_uri": "http://dbpedia.org/resource/Oman"}, "id": "OMN"}, {"geometry": {"type": "Polygon", "coordinates": [[[75.158028000000002, 37.133031000000003], [75.896896999999996, 36.666806000000001], [76.192847999999998, 35.898403000000002], [77.837451000000001, 35.494010000000003], [76.871722000000005, 34.653543999999997], [75.757060999999993, 34.504922999999998], [74.240202999999994, 34.748887000000003], [73.749948000000003, 34.317698999999998], [74.104293999999996, 33.441473000000002], [74.451559000000003, 32.764899999999997], [75.258641999999995, 32.271104999999999], [74.405929, 31.692639], [74.421379999999999, 30.979814999999999], [73.450637999999998, 29.976413000000001], [72.823751999999999, 28.961592], [71.777665999999996, 27.913180000000001], [70.616495999999998, 27.989196], [69.514392999999998, 26.940966], [70.168926999999996, 26.491872000000001], [70.282872999999995, 25.722228999999999], [70.844699000000006, 25.215102000000002], [71.043239999999997, 24.356524], [68.842599000000007, 24.359134000000001], [68.176644999999994, 23.691965], [67.443667000000005, 23.944844], [67.145442000000003, 24.663611], [66.372827999999998, 25.425141], [64.530407999999994, 25.237038999999999], [62.905701000000001, 25.218409000000001], [61.497363, 25.078237000000001], [61.874186999999999, 26.239975000000001], [63.316631999999998, 26.756532], [63.233898000000003, 27.217047000000001], [62.755426, 27.378923], [62.727829999999997, 28.259644999999999], [61.771867999999998, 28.699334], [61.369309000000001, 29.303276], [60.874248000000001, 29.829239000000001], [62.549857000000003, 29.318572], [63.550260999999999, 29.468330999999999], [64.148002000000005, 29.340819], [64.350419000000002, 29.560030999999999], [65.046862000000004, 29.472180999999999], [66.346473000000003, 29.887943], [66.381457999999995, 30.738899], [66.938890999999998, 31.304911000000001], [67.683394000000007, 31.303153999999999], [67.792688999999996, 31.582930000000001], [68.556932000000003, 31.71331], [68.926676999999998, 31.620189], [69.317763999999997, 31.901412000000001], [69.262522000000004, 32.501944000000002], [69.687146999999996, 33.105499000000002], [70.323594, 33.358533000000001], [69.930543, 34.020119999999999], [70.881803000000005, 33.988855999999998], [71.156773000000001, 34.348911000000001], [71.115019000000004, 34.733125999999999], [71.613076000000007, 35.153202999999998], [71.498767999999998, 35.650562999999998], [71.262348000000003, 36.074387999999999], [71.846292000000005, 36.509942000000002], [72.920024999999995, 36.720007000000003], [74.067552000000006, 36.836176000000002], [74.575892999999994, 37.020840999999997], [75.158028000000002, 37.133031000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Pakistan", "en": "Pakistan", "nl": "Pakistan", "pt": "Paquist\u00e3o", "no": "Pakistan", "de": "Pakistan", "it": "Pakistan", "sv": "Pakistan", "pl": "Pakistan", "fi": "Pakistan", "zh": "\u5df4\u57fa\u65af\u5766", "ja": "\u30d1\u30ad\u30b9\u30bf\u30f3", "es": "Pakist\u00e1n"}, "label_fr": "Pakistan", "name": "Pakistan", "dbpedia_uri": "http://dbpedia.org/resource/Pakistan"}, "id": "PAK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-77.881570999999994, 7.2237710000000002], [-78.214935999999994, 7.5122549999999997], [-78.429160999999993, 8.0520409999999991], [-78.182096000000001, 8.3191819999999996], [-78.435464999999994, 8.3877050000000004], [-78.622121000000007, 8.7181239999999995], [-79.120306999999997, 8.9960920000000009], [-79.557877000000005, 8.9323750000000004], [-79.760577999999995, 8.5845149999999997], [-80.164480999999995, 8.3333159999999999], [-80.382659000000004, 8.2984089999999995], [-80.480688999999998, 8.0903080000000003], [-80.003690000000006, 7.5475240000000001], [-80.276670999999993, 7.4197540000000002], [-80.421158000000005, 7.2715719999999999], [-80.886401000000006, 7.2205409999999999], [-81.059543000000005, 7.8179210000000001], [-81.189716000000004, 7.6479059999999999], [-81.519514999999998, 7.7066100000000004], [-81.721311, 8.1089629999999993], [-82.131440999999995, 8.1753929999999997], [-82.390934000000001, 8.2923620000000007], [-82.820081000000002, 8.2908639999999991], [-82.850958000000006, 8.0738230000000009], [-82.965783000000002, 8.225028], [-82.913176000000007, 8.4235170000000004], [-82.829770999999994, 8.6262950000000007], [-82.868656999999999, 8.8072660000000003], [-82.719183000000001, 8.9257089999999994], [-82.927154999999999, 9.0743299999999998], [-82.932890999999998, 9.4768120000000007], [-82.546195999999995, 9.5661349999999992], [-82.187123, 9.2074490000000004], [-82.207586000000006, 8.9955750000000005], [-81.808566999999996, 8.9506169999999994], [-81.714153999999994, 9.031955], [-81.439286999999993, 8.7862340000000003], [-80.947301999999993, 8.8585039999999999], [-80.521901, 9.1110720000000001], [-79.914599999999993, 9.3127650000000006], [-79.573302999999996, 9.6116100000000007], [-79.021191999999999, 9.5529309999999992], [-79.058449999999993, 9.4545650000000006], [-78.500888000000003, 9.4204589999999993], [-78.055927999999994, 9.2477300000000007], [-77.729513999999995, 8.9468440000000005], [-77.353361000000007, 8.6705050000000004], [-77.474722999999997, 8.524286], [-77.242565999999997, 7.9352780000000003], [-77.431107999999995, 7.6380610000000004], [-77.753414000000006, 7.7098399999999998], [-77.881570999999994, 7.2237710000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043d\u0430\u043c\u0430", "fr": "Panam\u00e1", "en": "Panama", "nl": "Panama (land)", "pt": "Panam\u00e1", "no": "Panama", "de": "Panama", "it": "Panam\u00e1", "sv": "Panama", "pl": "Panama", "fi": "Panama", "zh": "\u5df4\u62ff\u9a6c", "ja": "\u30d1\u30ca\u30de", "es": "Panam\u00e1"}, "label_fr": "Panam\u00e1", "name": "Panama", "dbpedia_uri": "http://dbpedia.org/resource/Panama"}, "id": "PAN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-69.590423999999999, -17.580012], [-69.858444000000006, -18.092694000000002], [-70.372572000000005, -18.347975000000002], [-71.375249999999994, -17.773799], [-71.462040999999999, -17.363488], [-73.44453, -16.359362999999998], [-75.237882999999997, -15.265682999999999], [-76.009204999999994, -14.649286], [-76.423468999999997, -13.823187000000001], [-76.259242, -13.535038999999999], [-77.106191999999993, -12.222716], [-78.092152999999996, -10.377712000000001], [-79.036952999999997, -8.3865680000000005], [-79.445920000000001, -7.9308329999999998], [-79.760577999999995, -7.1943409999999997], [-80.537481999999997, -6.5416679999999996], [-81.249995999999996, -6.1368340000000003], [-80.926347000000007, -5.6905570000000001], [-81.410943000000003, -4.7367650000000001], [-81.099670000000003, -4.0363939999999996], [-80.302560999999997, -3.4048560000000001], [-80.184015000000002, -3.8211620000000002], [-80.469295000000002, -4.0592870000000003], [-80.442241999999993, -4.4257239999999998], [-80.028908000000001, -4.3460910000000004], [-79.624978999999996, -4.4541979999999999], [-79.205288999999993, -4.9591289999999999], [-78.639897000000005, -4.547784], [-78.450683999999995, -3.873097], [-77.837905000000006, -3.0030209999999999], [-76.635394000000005, -2.6086779999999998], [-75.544995999999998, -1.5616099999999999], [-75.233722999999998, -0.91141700000000003], [-75.373222999999996, -0.152032], [-75.106624999999994, -0.057204999999999999], [-74.441601000000006, -0.53081999999999996], [-74.122394999999997, -1.0028330000000001], [-73.659503999999998, -1.260491], [-73.070391999999998, -2.308954], [-72.325787000000005, -2.434218], [-71.774760999999998, -2.1697899999999999], [-71.413646, -2.3428019999999998], [-70.813475999999994, -2.2568649999999999], [-70.047708999999998, -2.7251560000000001], [-70.692682000000005, -3.7428720000000002], [-70.394043999999994, -3.766591], [-69.893635000000003, -4.2981870000000004], [-70.794769000000002, -4.2512650000000001], [-70.928843000000001, -4.4015909999999998], [-71.748406000000003, -4.5939829999999997], [-72.891927999999993, -5.2745610000000003], [-72.964506999999998, -5.7412510000000001], [-73.219711000000004, -6.0891890000000002], [-73.120026999999993, -6.629931], [-73.724486999999996, -6.9185949999999998], [-73.723400999999996, -7.3409990000000001], [-73.987234999999998, -7.5238300000000002], [-73.571059000000005, -8.4244470000000007], [-73.015383, -9.0328330000000001], [-73.226713000000004, -9.4622130000000002], [-72.563033000000004, -9.520194], [-72.184890999999993, -10.053597999999999], [-71.302412000000004, -10.079435999999999], [-70.481893999999997, -9.4901180000000007], [-70.548686000000004, -11.009147], [-70.093751999999995, -11.123972], [-69.529678000000004, -10.951734], [-68.665080000000003, -12.561299999999999], [-68.880080000000007, -12.899729000000001], [-68.929224000000005, -13.602684], [-68.948886999999999, -14.453639000000001], [-69.339534999999998, -14.953194999999999], [-69.160347000000002, -15.323974], [-69.389764, -15.660129], [-68.959635000000006, -16.500698], [-69.590423999999999, -17.580012]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0435\u0440\u0443", "fr": "P\u00e9rou", "en": "Peru", "nl": "Peru", "pt": "Peru", "no": "Peru", "de": "Peru", "it": "Per\u00f9", "sv": "Peru", "pl": "Peru", "fi": "Peru", "zh": "\u79d8\u9c81", "ja": "\u30da\u30eb\u30fc", "es": "Per\u00fa"}, "label_fr": "P\u00e9rou", "name": "Peru", "dbpedia_uri": "http://dbpedia.org/resource/Peru"}, "id": "PER"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[126.376814, 8.4147060000000007], [126.47851300000001, 7.7503539999999997], [126.537424, 7.189381], [126.19677299999999, 6.2742940000000003], [125.83142100000001, 7.2937149999999997], [125.36385199999999, 6.7864849999999999], [125.683161, 6.0496569999999998], [125.396512, 5.5810029999999999], [124.21978799999999, 6.1613550000000004], [123.93872, 6.8851360000000001], [124.243662, 7.3606100000000003], [123.610212, 7.8335270000000001], [123.296071, 7.418876], [122.825506, 7.4573749999999999], [122.085499, 6.8994239999999998], [121.919928, 7.1921189999999999], [122.312359, 8.0349620000000002], [122.942398, 8.3162369999999992], [123.48768800000001, 8.6930099999999992], [123.841154, 8.2403239999999993], [124.60147000000001, 8.5141580000000001], [124.764612, 8.9604090000000003], [125.471391, 8.9869970000000006], [125.41211800000001, 9.7603349999999995], [126.222714, 9.2860739999999993], [126.30663699999999, 8.7824869999999997], [126.376814, 8.4147060000000007]]], [[[123.982438, 10.278779], [123.623183, 9.9500910000000005], [123.309921, 9.3182690000000008], [122.99588300000001, 9.0221889999999991], [122.380055, 9.7133610000000008], [122.586089, 9.9810449999999999], [122.837081, 10.261157000000001], [122.947411, 10.881868000000001], [123.49885, 10.940624], [123.337774, 10.267384], [124.07793599999999, 11.232726], [123.982438, 10.278779]]], [[[118.504581, 9.3163830000000001], [117.17427499999999, 8.3674999999999997], [117.66447700000001, 9.0668889999999998], [118.386914, 9.6844999999999999], [118.987342, 10.376291999999999], [119.51149599999999, 11.369668000000001], [119.689677, 10.554290999999999], [119.02945800000001, 10.003653], [118.504581, 9.3163830000000001]]], [[[121.883548, 11.891755], [122.48382100000001, 11.582186999999999], [123.120217, 11.58366], [123.100838, 11.165934], [122.637714, 10.741308], [122.00261, 10.441017], [121.967367, 10.905690999999999], [122.03837, 11.415841], [121.883548, 11.891755]]], [[[125.50255199999999, 12.162694999999999], [125.78346500000001, 11.046122], [125.01188399999999, 11.311455], [125.03276099999999, 10.975816], [125.277449, 10.358722], [124.80181899999999, 10.134679], [124.76016799999999, 10.837994999999999], [124.459101, 10.88993], [124.302522, 11.495371], [124.891013, 11.415583], [124.87799, 11.79419], [124.266762, 12.557760999999999], [125.227116, 12.535721000000001], [125.50255199999999, 12.162694999999999]]], [[[121.527394, 13.06959], [121.26219, 12.20556], [120.833896, 12.704496000000001], [120.323436, 13.466412999999999], [121.180128, 13.429697000000001], [121.527394, 13.06959]]], [[[121.321308, 18.504065000000001], [121.937601, 18.218551999999999], [122.24600599999999, 18.478950000000001], [122.336957, 18.224882999999998], [122.174279, 17.810282999999998], [122.515654, 17.093505], [122.25231100000001, 16.262443999999999], [121.662786, 15.931018], [121.50507, 15.124814000000001], [121.728829, 14.328376], [122.258925, 14.218202], [122.70127599999999, 14.336541], [123.950295, 13.782131], [123.855107, 13.237771], [124.18128900000001, 12.997527], [124.07741900000001, 12.536676999999999], [123.298035, 13.027526], [122.928652, 13.55292], [122.67135500000001, 13.185836], [122.03465, 13.784482000000001], [121.126385, 13.636687], [120.628637, 13.857656], [120.679384, 14.271015999999999], [120.99181900000001, 14.525392999999999], [120.693336, 14.756671000000001], [120.564145, 14.396279], [120.070429, 14.970869], [119.920929, 15.406347], [119.88377300000001, 16.363703999999998], [120.28648800000001, 16.034628999999999], [120.390047, 17.599081000000002], [120.715867, 18.505227000000001], [121.321308, 18.504065000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u043b\u0438\u043f\u043f\u0438\u043d\u044b", "fr": "Philippines", "en": "Philippines", "nl": "Filipijnen", "pt": "Filipinas", "no": "Filippinene", "de": "Philippinen", "it": "Filippine", "sv": "Filippinerna", "pl": "Filipiny", "fi": "Filippiinit", "ja": "\u30d5\u30a3\u30ea\u30d4\u30f3", "es": "Filipinas"}, "label_fr": "Philippines", "name": "Philippines", "dbpedia_uri": "http://dbpedia.org/resource/Philippines"}, "id": "PHL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[155.88002599999999, -6.8199969999999999], [155.59999099999999, -6.9199909999999996], [155.16699399999999, -6.5359309999999997], [154.72919200000001, -5.9008279999999997], [154.51411400000001, -5.1391179999999999], [154.65250399999999, -5.0424309999999997], [154.75999100000001, -5.3399840000000003], [155.062918, -5.5667920000000004], [155.54774599999999, -6.2006550000000002], [156.01996500000001, -6.5400140000000002], [155.88002599999999, -6.8199969999999999]]], [[[151.98279600000001, -5.4780629999999997], [151.45910699999999, -5.5602799999999997], [151.30139, -5.8407280000000004], [150.754447, -6.0837630000000003], [150.241197, -6.3177539999999999], [149.70996299999999, -6.3165129999999996], [148.89006499999999, -6.0260400000000001], [148.31893700000001, -5.7471420000000002], [148.401826, -5.4377560000000003], [149.29841200000001, -5.583742], [149.845562, -5.505503], [149.99625, -5.0261009999999997], [150.13975600000001, -5.0013480000000001], [150.236908, -5.5322199999999997], [150.807467, -5.4558419999999996], [151.08967200000001, -5.1136929999999996], [151.64788100000001, -4.7570740000000002], [151.53786199999999, -4.1678069999999998], [152.13679200000001, -4.14879], [152.33874299999999, -4.3129660000000003], [152.318693, -4.867661], [151.98279600000001, -5.4780629999999997]]], [[[147.19187400000001, -7.3880239999999997], [148.08463599999999, -8.0441079999999996], [148.734105, -9.1046639999999996], [149.30683500000001, -9.0714360000000003], [149.26663099999999, -9.5144059999999993], [150.03872799999999, -9.6843179999999993], [149.738798, -9.8729370000000003], [150.80162799999999, -10.293687], [150.690575, -10.582713], [150.02839299999999, -10.652476], [149.78231, -10.393267], [148.92313799999999, -10.280923], [147.91301799999999, -10.130440999999999], [147.13544300000001, -9.4924440000000008], [146.567881, -8.9425550000000005], [146.04848100000001, -8.0674139999999994], [144.744168, -7.630128], [143.897088, -7.91533], [143.28637599999999, -8.2454909999999995], [143.41391300000001, -8.9830690000000004], [142.62843100000001, -9.3268210000000007], [142.06825900000001, -9.1595960000000005], [141.033852, -9.1178930000000005], [141.01705699999999, -5.8590220000000004], [141.00021000000001, -2.6001509999999999], [142.73524699999999, -3.2891530000000002], [144.58397099999999, -3.861418], [145.27318, -4.3737380000000003], [145.82978600000001, -4.8764979999999998], [145.981922, -5.4656089999999997], [147.64807300000001, -6.0836589999999999], [147.891108, -6.6140150000000002], [146.97090499999999, -6.7216570000000004], [147.19187400000001, -7.3880239999999997]]], [[[153.140038, -4.4999830000000003], [152.827292, -4.7664270000000002], [152.63867300000001, -4.1761270000000001], [152.406026, -3.7897430000000001], [151.953237, -3.462062], [151.38427899999999, -3.0354220000000001], [150.66204999999999, -2.7414860000000001], [150.939965, -2.5000019999999998], [151.479984, -2.7799849999999999], [151.82001500000001, -2.9999720000000001], [152.23998900000001, -3.2400090000000001], [152.640017, -3.659983], [153.019994, -3.9800149999999999], [153.140038, -4.4999830000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043f\u0443\u0430 \u2014 \u041d\u043e\u0432\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Papouasie-Nouvelle-Guin\u00e9e", "en": "Papua New Guinea", "nl": "Papoea-Nieuw-Guinea", "pt": "Papua-Nova Guin\u00e9", "no": "Papua Ny-Guinea", "de": "Papua-Neuguinea", "it": "Papua Nuova Guinea", "sv": "Papua Nya Guinea", "pl": "Papua-Nowa Gwinea", "fi": "Papua-Uusi-Guinea", "zh": "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a", "ja": "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2", "es": "Pap\u00faa Nueva Guinea"}, "label_fr": "Papouasie-Nouvelle-Guin\u00e9e", "name": "Papua New Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Papua_New_Guinea"}, "id": "PNG"}, {"geometry": {"type": "Polygon", "coordinates": [[[15.016996000000001, 51.106673999999998], [14.607098000000001, 51.745187999999999], [14.685026000000001, 52.089947000000002], [14.4376, 52.624850000000002], [14.074521000000001, 52.981262999999998], [14.353315, 53.248170999999999], [14.119686, 53.757029000000003], [14.802899999999999, 54.050705999999998], [16.363477, 54.513159000000002], [17.622831999999999, 54.851536000000003], [18.620858999999999, 54.682606], [18.696255000000001, 54.438718999999999], [19.660640000000001, 54.426084000000003], [20.892244999999999, 54.312525000000001], [22.731099, 54.327537], [23.243987000000001, 54.220567000000003], [23.484127999999998, 53.912497999999999], [23.527536000000001, 53.470122000000003], [23.804935, 53.089731], [23.799199000000002, 52.691099000000001], [23.199494000000001, 52.486977000000003], [23.508002000000001, 52.023646999999997], [23.527070999999999, 51.578454000000001], [24.029986000000001, 50.705407000000001], [23.922757000000001, 50.424880999999999], [23.426507999999998, 50.308506000000001], [22.518450000000001, 49.476773999999999], [22.776419000000001, 49.027394999999999], [22.558138, 49.085737999999999], [21.607807999999999, 49.470106999999999], [20.887955000000002, 49.328772000000001], [20.415838999999998, 49.431452999999998], [19.825023000000002, 49.217125000000003], [19.320713000000001, 49.571573999999998], [18.909575, 49.435845999999998], [18.853144, 49.496229999999997], [18.392914000000001, 49.988629000000003], [17.649445, 50.049038000000003], [17.554566999999999, 50.362146000000003], [16.868769, 50.473973999999998], [16.719476, 50.215747], [16.176252999999999, 50.422606999999999], [16.238627000000001, 50.697732999999999], [15.490971999999999, 50.784730000000003], [15.016996000000001, 51.106673999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u043e\u043b\u044c\u0448\u0430", "fr": "Pologne", "en": "Poland", "nl": "Polen", "pt": "Pol\u00f3nia", "no": "Polen", "de": "Polen", "it": "Polonia", "sv": "Polen", "pl": "Polska", "fi": "Puola", "zh": "\u6ce2\u5170", "ja": "\u30dd\u30fc\u30e9\u30f3\u30c9", "es": "Polonia"}, "label_fr": "Pologne", "name": "Poland", "dbpedia_uri": "http://dbpedia.org/resource/Poland"}, "id": "POL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-66.282433999999995, 18.514762000000001], [-65.771303000000003, 18.426679], [-65.591003999999998, 18.228034999999998], [-65.847164000000006, 17.975905999999998], [-66.599934000000005, 17.981822999999999], [-67.184162000000001, 17.946553000000002], [-67.242428000000004, 18.374459999999999], [-67.100679, 18.520600999999999], [-66.282433999999995, 18.514762000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0443\u044d\u0440\u0442\u043e-\u0420\u0438\u043a\u043e", "fr": "Porto Rico", "en": "Puerto Rico", "nl": "Puerto Rico", "pt": "Porto Rico", "no": "Puerto Rico", "de": "Puerto Rico", "it": "Porto Rico", "sv": "Puerto Rico", "pl": "Portoryko", "fi": "Puerto Rico", "zh": "\u6ce2\u591a\u9ece\u5404", "ja": "\u30d7\u30a8\u30eb\u30c8\u30ea\u30b3", "es": "Puerto Rico"}, "label_fr": "Porto Rico", "name": "Puerto Rico", "dbpedia_uri": "http://dbpedia.org/resource/Puerto_Rico"}, "id": "PRI"}, {"geometry": {"type": "Polygon", "coordinates": [[[130.640016, 42.395009000000002], [130.78000700000001, 42.220007000000003], [130.40003100000001, 42.280003999999998], [129.96594899999999, 41.941367999999997], [129.667362, 41.601103999999999], [129.70518899999999, 40.882828000000003], [129.18811500000001, 40.661808000000001], [129.0104, 40.485436], [128.63336799999999, 40.189847], [127.96741400000001, 40.025413], [127.53343599999999, 39.75685], [127.50212000000001, 39.323931000000002], [127.385434, 39.213472000000003], [127.783343, 39.050897999999997], [128.349716, 38.612242999999999], [128.205746, 38.370396999999997], [127.780035, 38.304535999999999], [127.07330899999999, 38.256115000000001], [126.68371999999999, 37.804772999999997], [126.23733900000001, 37.840378000000001], [126.17475899999999, 37.749685999999997], [125.689104, 37.940010000000001], [125.568439, 37.752088999999998], [125.27533, 37.669071000000002], [125.240087, 37.857224000000002], [124.981033, 37.948821000000002], [124.71216099999999, 38.108345999999997], [124.98599400000001, 38.548473999999999], [125.221949, 38.665857000000003], [125.132859, 38.848559000000002], [125.38659, 39.387957999999998], [125.321116, 39.551385000000003], [124.737482, 39.660344000000002], [124.265625, 39.928493000000003], [125.079942, 40.569823999999997], [126.182045, 41.107335999999997], [126.869083, 41.816569000000001], [127.343783, 41.503152], [128.20843300000001, 41.466771999999999], [128.05221499999999, 41.994284999999998], [129.59666899999999, 42.424982], [129.99426700000001, 42.985387000000003], [130.640016, 42.395009000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0430\u044f \u041d\u0430\u0440\u043e\u0434\u043d\u043e-\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "Cor\u00e9e du Nord", "en": "North Korea", "nl": "Noord-Korea", "pt": "Coreia do Norte", "no": "Nord-Korea", "de": "Nordkorea", "it": "Corea del Nord", "sv": "Nordkorea", "pl": "Korea P\u00f3\u0142nocna", "fi": "Korean demokraattinen kansantasavalta", "zh": "\u671d\u9c9c\u6c11\u4e3b\u4e3b\u4e49\u4eba\u6c11\u5171\u548c\u56fd", "ja": "\u671d\u9bae\u6c11\u4e3b\u4e3b\u7fa9\u4eba\u6c11\u5171\u548c\u56fd", "es": "Corea del Norte"}, "label_fr": "Cor\u00e9e du Nord", "name": "North Korea", "dbpedia_uri": "http://dbpedia.org/resource/North_Korea"}, "id": "PRK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-9.0348179999999996, 41.880571000000003], [-8.6719460000000002, 42.134689000000002], [-8.2638569999999998, 42.280468999999997], [-8.0131750000000004, 41.790886], [-7.4225130000000004, 41.792074999999997], [-7.251309, 41.918346], [-6.6686059999999996, 41.883386999999999], [-6.3890880000000001, 41.381815000000003], [-6.851127, 41.111083000000001], [-6.86402, 40.330871999999999], [-7.0264129999999998, 40.184524000000003], [-7.066592, 39.711891999999999], [-7.4986319999999997, 39.629570999999999], [-7.0980369999999997, 39.030073000000002], [-7.3740920000000001, 38.373058999999998], [-7.0292810000000001, 38.075763999999999], [-7.1665080000000003, 37.803894], [-7.5371050000000004, 37.428904000000003], [-7.4537259999999996, 37.097788000000001], [-7.855613, 36.838268999999997], [-8.382816, 36.978879999999997], [-8.8988569999999996, 36.868808999999999], [-8.7461009999999995, 37.651345999999997], [-8.8399979999999996, 38.266243000000003], [-9.2874639999999999, 38.358485999999999], [-9.5265710000000006, 38.737428999999999], [-9.4469890000000003, 39.392066], [-9.0483049999999992, 39.755093000000002], [-8.9773530000000008, 40.159306000000001], [-8.7686840000000004, 40.760638999999998], [-8.7908530000000003, 41.184334], [-8.9907889999999995, 41.543458999999999], [-9.0348179999999996, 41.880571000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f", "fr": "Portugal", "en": "Portugal", "nl": "Portugal", "pt": "Portugal", "no": "Portugal", "de": "Portugal", "it": "Portogallo", "sv": "Portugal", "pl": "Portugalia", "fi": "Portugali", "zh": "\u8461\u8404\u7259", "ja": "\u30dd\u30eb\u30c8\u30ac\u30eb", "es": "Portugal"}, "label_fr": "Portugal", "name": "Portugal", "dbpedia_uri": "http://dbpedia.org/resource/Portugal"}, "id": "PRT"}, {"geometry": {"type": "Polygon", "coordinates": [[[-62.685057, -22.249029], [-62.291179, -21.051635000000001], [-62.265960999999997, -20.513735], [-61.786326000000003, -19.633737], [-60.043565000000001, -19.342746999999999], [-59.115042000000003, -19.356905999999999], [-58.183470999999997, -19.868399], [-58.166392000000002, -20.176701000000001], [-57.870674000000001, -20.732688], [-57.937156000000002, -22.090176], [-56.881509999999999, -22.282153999999998], [-56.473317000000002, -22.086300000000001], [-55.797958000000001, -22.356929999999998], [-55.610683000000002, -22.655619000000002], [-55.517639000000003, -23.571998000000001], [-55.400747000000003, -23.956935000000001], [-55.027901999999997, -24.001273999999999], [-54.652833999999999, -23.839577999999999], [-54.292960000000001, -24.021014000000001], [-54.293475999999998, -24.570799999999998], [-54.428946000000003, -25.162185000000001], [-54.625290999999997, -25.739255], [-54.788795, -26.621786], [-55.695846000000003, -27.387837000000001], [-56.486702000000001, -27.548499], [-57.609760000000001, -27.395899], [-58.618174000000003, -27.123719000000001], [-57.633659999999999, -25.603656999999998], [-57.777217, -25.16234], [-58.807127999999999, -24.771459], [-60.028965999999997, -24.032796000000001], [-60.846564999999998, -23.880713], [-62.685057, -22.249029]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439", "fr": "Paraguay", "en": "Paraguay", "nl": "Paraguay", "pt": "Paraguai", "no": "Paraguay", "de": "Paraguay", "it": "Paraguay", "sv": "Paraguay", "pl": "Paragwaj", "fi": "Paraguay", "zh": "\u5df4\u62c9\u572d", "ja": "\u30d1\u30e9\u30b0\u30a2\u30a4", "es": "Paraguay"}, "label_fr": "Paraguay", "name": "Paraguay", "dbpedia_uri": "http://dbpedia.org/resource/Paraguay"}, "id": "PRY"}, {"geometry": {"type": "Polygon", "coordinates": [[[50.810108, 24.754743000000001], [50.743910999999997, 25.482424000000002], [51.013351999999998, 26.006992], [51.286462, 26.114581999999999], [51.589078999999998, 25.801113000000001], [51.606699999999996, 25.215669999999999], [51.389608000000003, 24.627386000000001], [51.112414999999999, 24.556331], [50.810108, 24.754743000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u0442\u0430\u0440", "fr": "Qatar", "en": "Qatar", "nl": "Qatar", "pt": "Qatar", "no": "Qatar", "de": "Katar", "it": "Qatar", "sv": "Qatar", "pl": "Katar", "fi": "Qatar", "zh": "\u5361\u5854\u5c14", "ja": "\u30ab\u30bf\u30fc\u30eb", "es": "Catar"}, "label_fr": "Qatar", "name": "Qatar", "dbpedia_uri": "http://dbpedia.org/resource/Qatar"}, "id": "QAT"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.710531, 47.882193999999998], [23.142236, 48.096341000000002], [23.760957999999999, 47.985598000000003], [24.402056000000002, 47.981878000000002], [24.866316999999999, 47.737526000000003], [25.207743000000001, 47.891055999999999], [25.945941000000001, 47.987149000000002], [26.19745, 48.220880999999999], [26.619337000000002, 48.220725999999999], [26.924175999999999, 48.123263999999999], [27.233872999999999, 47.826771000000001], [27.551165999999998, 47.405116999999997], [28.128029999999999, 46.810476000000001], [28.160018000000001, 46.371563000000002], [28.054442999999999, 45.944586000000001], [28.233554000000002, 45.488283000000003], [28.679779, 45.304031000000002], [29.149725, 45.464925000000001], [29.603289, 45.293308000000003], [29.626543000000002, 45.035390999999997], [29.141611999999999, 44.820210000000003], [28.837858000000001, 44.913874], [28.558081000000001, 43.707462], [27.970106999999999, 43.812468000000003], [27.2424, 44.175986000000002], [26.065159000000001, 43.943494000000001], [25.569272000000002, 43.688445000000002], [24.100679, 43.741050999999999], [23.332301999999999, 43.897010999999999], [22.944832000000002, 43.823785000000001], [22.657150000000001, 44.234923000000002], [22.474008000000001, 44.409227999999999], [22.705725999999999, 44.578003000000002], [22.459022000000001, 44.702517], [22.145088000000001, 44.478422000000002], [21.562023, 44.768946999999997], [21.483526000000001, 45.181170000000002], [20.874313000000001, 45.416375000000002], [20.762174999999999, 45.734572999999997], [20.220192000000001, 46.127468999999998], [21.021951999999999, 46.316088000000001], [21.626515000000001, 46.994238000000003], [22.099768000000001, 47.672438999999997], [22.710531, 47.882193999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0443\u043c\u044b\u043d\u0438\u044f", "fr": "Roumanie", "en": "Romania", "nl": "Roemeni\u00eb", "pt": "Rom\u00e9nia", "no": "Romania", "de": "Rum\u00e4nien", "it": "Romania", "sv": "Rum\u00e4nien", "pl": "Rumunia", "fi": "Romania", "zh": "\u7f85\u99ac\u5c3c\u4e9e", "ja": "\u30eb\u30fc\u30de\u30cb\u30a2", "es": "Rumania"}, "label_fr": "Roumanie", "name": "Romania", "dbpedia_uri": "http://dbpedia.org/resource/Romania"}, "id": "ROU"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[143.64800700000001, 50.747599999999998], [144.65414799999999, 48.976391], [143.17392799999999, 49.306550999999999], [142.55866800000001, 47.861575000000002], [143.533492, 46.836728000000001], [143.50527700000001, 46.137908000000003], [142.74770100000001, 46.740765000000003], [142.09202999999999, 45.966754999999999], [141.906925, 46.805928999999999], [142.01844299999999, 47.780132999999999], [141.90444500000001, 48.859189000000001], [142.13579999999999, 49.615163000000003], [142.17998299999999, 50.952342000000002], [141.594076, 51.935434999999998], [141.682546, 53.301966], [142.606934, 53.762144999999997], [142.20974899999999, 54.225476], [142.654786, 54.365881000000002], [142.914616, 53.704577999999998], [143.26084800000001, 52.740760000000002], [143.23526799999999, 51.756659999999997], [143.64800700000001, 50.747599999999998]]], [[[22.731099, 54.327537], [20.892244999999999, 54.312525000000001], [19.660640000000001, 54.426084000000003], [19.888480999999999, 54.866160000000001], [21.268449, 55.190482000000003], [22.315723999999999, 55.015298999999999], [22.757764000000002, 54.856574000000002], [22.651052, 54.582740999999999], [22.731099, 54.327537]]], [[[-175.01425, 66.584350000000001], [-174.33983000000001, 66.335560000000001], [-174.57182, 67.062190000000001], [-171.85731000000001, 66.913079999999994], [-169.89957999999999, 65.977239999999995], [-170.89107000000001, 65.541390000000007], [-172.53025, 65.437910000000002], [-172.55500000000001, 64.460790000000003], [-172.95533, 64.252690000000001], [-173.89184, 64.282600000000002], [-174.65392, 64.631249999999994], [-175.98353, 64.922880000000006], [-176.20715999999999, 65.356669999999994], [-177.22265999999999, 65.520240000000001], [-178.35992999999999, 65.390519999999995], [-178.90332000000001, 65.740440000000007], [-178.68611000000001, 66.112110000000001], [-179.88377, 65.874560000000002], [-179.43268, 65.404110000000003], [-180, 64.979709], [-180, 68.963635999999994], [-177.55000000000001, 68.200000000000003], [-174.92824999999999, 67.205889999999997], [-175.01425, 66.584350000000001]]], [[[180, 70.832199000000003], [178.903425, 70.781139999999994], [178.7253, 71.098799999999997], [180, 71.515714000000003], [180, 70.832199000000003]]], [[[-178.69378, 70.893020000000007], [-180, 70.832199000000003], [-180, 71.515714000000003], [-179.87187499999999, 71.55762], [-179.02432999999999, 71.555530000000005], [-177.577945, 71.269480000000001], [-177.66357500000001, 71.132769999999994], [-178.69378, 70.893020000000007]]], [[[143.60384999999999, 73.212440000000001], [142.08762999999999, 73.205439999999996], [140.03815499999999, 73.316919999999996], [139.86312000000001, 73.369829999999993], [140.81171000000001, 73.765060000000005], [142.06207000000001, 73.857579999999999], [143.48283000000001, 73.475250000000003], [143.60384999999999, 73.212440000000001]]], [[[150.73167000000001, 75.084059999999994], [149.57592500000001, 74.688919999999996], [147.977465, 74.778355000000005], [146.11919, 75.172979999999995], [146.358485, 75.49682], [148.22223, 75.345844999999997], [150.73167000000001, 75.084059999999994]]], [[[145.086285, 75.562624999999997], [144.30000000000001, 74.819999999999993], [140.61381, 74.847679999999997], [138.95544000000001, 74.61148], [136.97439, 75.261669999999995], [137.51176000000001, 75.949169999999995], [138.831075, 76.136759999999995], [141.47161500000001, 76.092889999999997], [145.086285, 75.562624999999997]]], [[[57.535693000000002, 70.720464000000007], [56.944978999999996, 70.632743000000005], [53.677374999999998, 70.762658000000002], [53.412016999999999, 71.206661999999994], [51.601894999999999, 71.474759000000006], [51.455753999999999, 72.014881000000003], [52.478274999999996, 72.229442000000006], [52.444169000000002, 72.774731000000003], [54.427613999999998, 73.627548000000004], [53.508290000000002, 73.749814000000001], [55.902459, 74.627486000000005], [55.631932999999997, 75.081412], [57.868644000000003, 75.609390000000005], [61.170043999999997, 76.251883000000007], [64.498367999999999, 76.439054999999996], [66.210977, 76.809781999999998], [68.157060000000001, 76.939696999999995], [68.852210999999997, 76.544810999999996], [68.180572999999995, 76.233642000000003], [64.637326000000002, 75.737755000000007], [61.583508000000002, 75.260885000000002], [58.477082000000003, 74.309055999999998], [56.986786000000002, 73.333044000000001], [55.419336000000001, 72.371268000000001], [55.622838000000002, 71.540594999999996], [57.535693000000002, 70.720464000000007]]], [[[106.97013, 76.974189999999993], [107.23999999999999, 76.480000000000004], [108.1538, 76.723349999999996], [111.07726, 76.709999999999994], [113.33150999999999, 76.222239999999999], [114.13417, 75.847639999999998], [113.88539, 75.327789999999993], [112.77918, 75.031859999999995], [110.15125, 74.476730000000003], [109.40000000000001, 74.180000000000007], [110.64, 74.040000000000006], [112.11919, 73.787739999999999], [113.01954000000001, 73.976929999999996], [113.52958, 73.335049999999995], [113.96881, 73.594880000000003], [115.56782, 73.752849999999995], [118.77633, 73.587720000000004], [119.02, 73.120000000000005], [123.20066, 72.971220000000002], [123.25776999999999, 73.735029999999995], [125.38, 73.560000000000002], [126.97644, 73.565489999999997], [128.59126000000001, 73.038709999999995], [129.05157, 72.398719999999997], [128.46000000000001, 71.980000000000004], [129.71599000000001, 71.193039999999996], [131.28858, 70.786990000000003], [132.2535, 71.836299999999994], [133.85766000000001, 71.386420000000001], [135.56192999999999, 71.655249999999995], [137.49754999999999, 71.347629999999995], [138.23409000000001, 71.628029999999995], [139.86983000000001, 71.487830000000002], [139.14791, 72.41619], [140.46816999999999, 72.849410000000006], [149.5, 72.200000000000003], [150.35118, 71.606430000000003], [152.96889999999999, 70.842219999999998], [157.00688, 71.031409999999994], [158.99779000000001, 70.866720000000001], [159.83031, 70.453239999999994], [159.70866000000001, 69.721980000000002], [160.94053, 69.437280000000001], [162.27906999999999, 69.642039999999994], [164.05248, 69.668229999999994], [165.94037, 69.471990000000005], [167.83566999999999, 69.582689999999999], [169.57763, 68.693799999999996], [170.81688, 69.013630000000006], [170.00819999999999, 69.652760000000001], [170.45345, 70.097030000000004], [173.64391000000001, 69.817430000000002], [175.72403, 69.877250000000004], [178.59999999999999, 69.400000000000006], [180, 68.963635999999994], [180, 64.979709], [179.99280999999999, 64.974329999999995], [178.7072, 64.534930000000003], [177.41128, 64.60821], [178.31299999999999, 64.07593], [178.90825000000001, 63.25197], [179.37034, 62.982619999999997], [179.48635999999999, 62.568939999999998], [179.22825, 62.304099999999998], [177.36429999999999, 62.521900000000002], [174.56929, 61.769150000000003], [173.68012999999999, 61.652610000000003], [172.15000000000001, 60.950000000000003], [170.6985, 60.336179999999999], [170.33085, 59.881770000000003], [168.90046000000001, 60.573549999999997], [166.29498000000001, 59.788550000000001], [165.84, 60.159999999999997], [164.87674000000001, 59.7316], [163.53928999999999, 59.86871], [163.21710999999999, 59.211010000000002], [162.01732999999999, 58.243279999999999], [162.05296999999999, 57.839120000000001], [163.19191000000001, 57.615029999999997], [163.05794, 56.159239999999997], [162.12958, 56.122190000000003], [161.70146, 55.285679999999999], [162.11749, 54.855139999999999], [160.36877000000001, 54.344329999999999], [160.02172999999999, 53.202570000000001], [158.53093999999999, 52.958680000000001], [158.23117999999999, 51.942689999999999], [156.78979000000001, 51.011049999999997], [156.41999999999999, 51.700000000000003], [155.99181999999999, 53.158949999999997], [155.43366, 55.381030000000003], [155.91442000000001, 56.767919999999997], [156.75815, 57.364699999999999], [156.81035, 57.832039999999999], [158.36433, 58.055750000000003], [160.15064000000001, 59.314770000000003], [161.87204, 60.343000000000004], [163.66969, 61.140900000000002], [164.47354999999999, 62.550609999999999], [163.25842, 62.466270000000002], [162.65790999999999, 61.642499999999998], [160.12147999999999, 60.544229999999999], [159.30232000000001, 61.773960000000002], [156.72067999999999, 61.434420000000003], [154.21806000000001, 59.758180000000003], [155.04374999999999, 59.144950000000001], [152.81184999999999, 58.883850000000002], [151.26572999999999, 58.780889999999999], [151.33815000000001, 59.503959999999999], [149.78371000000001, 59.655729999999998], [148.54481000000001, 59.164479999999998], [145.48722000000001, 59.336370000000002], [142.19782000000001, 59.03998], [138.95848000000001, 57.088050000000003], [135.12619000000001, 54.729590000000002], [136.70170999999999, 54.603549999999998], [137.19342, 53.977319999999999], [138.16470000000001, 53.755009999999999], [138.80463, 54.254550000000002], [139.90151, 54.189680000000003], [141.34531000000001, 53.089570000000002], [141.37923000000001, 52.238770000000002], [140.59742, 51.239669999999997], [140.51308, 50.045529999999999], [140.06192999999999, 48.446710000000003], [138.55472, 46.999650000000003], [138.21970999999999, 46.307949999999998], [136.86232000000001, 45.143500000000003], [135.51535000000001, 43.988999999999997], [134.86939000000001, 43.398209999999999], [133.53686999999999, 42.81147], [132.90627000000001, 42.798490000000001], [132.27807000000001, 43.284559999999999], [130.93586999999999, 42.55274], [130.78, 42.219999999999999], [130.63999999999999, 42.395000000000003], [130.63386600000001, 42.903015000000003], [131.144688, 42.929989999999997], [131.288555, 44.111519999999999], [131.02519000000001, 44.967959999999998], [131.883454, 45.321162000000001], [133.09711999999999, 45.144089999999998], [133.769644, 46.116926999999997], [134.11234999999999, 47.212479999999999], [134.50081, 47.578449999999997], [135.02631099999999, 48.478230000000003], [133.37359599999999, 48.183441999999999], [132.50668999999999, 47.788960000000003], [130.98725999999999, 47.790129999999998], [130.58229299999999, 48.729686999999998], [129.397818, 49.440600000000003], [127.6574, 49.760269999999998], [127.28745600000001, 50.739797000000003], [126.93915699999999, 51.353893999999997], [126.56439899999999, 51.784255000000002], [125.946349, 52.792799000000002], [125.06821100000001, 53.161045000000001], [123.57147000000001, 53.458799999999997], [122.24574800000001, 53.431725999999998], [121.003085, 53.251401000000001], [120.177089, 52.753886000000001], [120.72578900000001, 52.516226000000003], [120.73820000000001, 51.964109999999998], [120.18208, 51.643549999999998], [119.27939000000001, 50.582920000000001], [119.288461, 50.142882999999998], [117.879244, 49.510983000000003], [116.67880100000001, 49.888531], [115.48569500000001, 49.805177], [114.96211, 50.140247000000002], [114.36245599999999, 50.248303], [112.89774, 49.543565000000001], [111.581231, 49.377968000000003], [110.66201100000001, 49.130127999999999], [109.402449, 49.292960999999998], [108.475167, 49.282547999999998], [107.86817600000001, 49.793705000000003], [106.88880399999999, 50.274296], [105.886591, 50.406019000000001], [104.62157999999999, 50.275320000000001], [103.676545, 50.089965999999997], [102.25588999999999, 50.510559999999998], [102.06520999999999, 51.259909999999998], [100.88948000000001, 51.516855999999997], [99.981731999999994, 51.634005999999999], [98.861491000000001, 52.047365999999997], [97.825739999999996, 51.010995000000001], [98.231762000000003, 50.422401000000001], [97.25976, 49.726050000000001], [95.814019999999999, 49.977460000000001], [94.815949000000003, 50.013432999999999], [94.147565999999998, 50.480536999999998], [93.104209999999995, 50.495289999999997], [92.234712000000002, 50.802171000000001], [90.713667000000001, 50.331811999999999], [88.805566999999996, 49.470520999999998], [87.751264000000006, 49.297198000000002], [87.359970000000004, 49.214981000000002], [86.829357000000002, 49.826675000000002], [85.541269999999997, 49.692858999999999], [85.115560000000002, 50.117303], [84.416376999999997, 50.311399999999999], [83.935114999999996, 50.889246], [83.383004, 51.069183000000002], [81.945986000000005, 50.812196], [80.568447000000006, 51.388336000000002], [80.035560000000004, 50.864750999999998], [77.800916000000001, 53.404415], [76.525178999999994, 54.177002999999999], [76.891099999999994, 54.490524000000001], [74.384820000000005, 53.546849999999999], [73.425679000000002, 53.489809999999999], [73.508516, 54.035617000000002], [72.224149999999995, 54.376655], [71.180131000000003, 54.133285000000001], [70.865267000000003, 55.169733999999998], [69.068167000000003, 55.385249999999999], [68.1691, 54.970391999999997], [65.666870000000003, 54.60125], [65.178533999999999, 54.354227999999999], [61.436599999999999, 54.006250000000001], [60.978065999999998, 53.664993000000003], [61.699986000000003, 52.979996], [60.739992999999998, 52.719985999999999], [60.927269000000003, 52.447547999999998], [59.967534000000001, 51.960419999999999], [61.588003, 51.272658999999997], [61.337423999999999, 50.79907], [59.932806999999997, 50.842193999999999], [59.642282000000002, 50.545442000000001], [58.363320000000002, 51.063639999999999], [56.777979999999999, 51.043550000000003], [55.716940000000001, 50.62171], [54.532877999999997, 51.026240000000001], [52.328724000000001, 51.718651999999999], [50.766648000000004, 51.692762000000002], [48.702382, 50.605128000000001], [48.577840999999999, 49.874760000000002], [47.549480000000003, 50.454698], [46.751595999999999, 49.356006000000001], [47.043672000000001, 49.152039000000002], [46.466445999999998, 48.394151999999998], [47.315240000000003, 47.715850000000003], [48.057250000000003, 47.743769999999998], [48.694733999999997, 47.075628000000002], [48.593249999999998, 46.561039999999998], [49.10116, 46.399329999999999], [48.645409999999998, 45.806289999999997], [47.675910000000002, 45.641489999999997], [46.682009999999998, 44.609200000000001], [47.590940000000003, 43.660159999999998], [47.492519999999999, 42.986579999999996], [48.58437, 41.808880000000002], [47.987282999999998, 41.405819000000001], [47.815666, 41.151415999999998], [47.373314999999998, 41.219732], [46.686070999999998, 41.827137], [46.404950999999997, 41.860675000000001], [45.776400000000002, 42.092440000000003], [45.470278999999998, 42.502780999999999], [44.537623000000004, 42.711993], [43.93121, 42.554960000000001], [43.755989999999997, 42.740830000000003], [42.394399999999997, 43.220300000000002], [40.922190000000001, 43.382150000000003], [40.076965000000001, 43.553103999999998], [39.955008999999997, 43.434998], [38.68, 44.280000000000001], [37.539119999999997, 44.657209999999999], [36.675460000000001, 45.244689999999999], [37.403170000000003, 45.404510000000002], [38.232950000000002, 46.240870000000001], [37.673720000000003, 46.636569999999999], [39.147669999999998, 47.044750000000001], [39.121200000000002, 47.263359999999999], [38.223537999999998, 47.10219], [38.255111999999997, 47.546399999999998], [38.770569999999999, 47.825620000000001], [39.738278000000001, 47.898936999999997], [39.895620000000001, 48.232410000000002], [39.67465, 48.783819999999999], [40.080789000000003, 49.307429999999997], [40.069040000000001, 49.601050000000001], [38.594988000000001, 49.926462000000001], [38.010630999999997, 49.915661999999998], [37.393459999999997, 50.383952999999998], [36.626168, 50.225591000000001], [35.356116, 50.577196999999998], [35.37791, 50.773940000000003], [35.022182999999998, 51.207571999999999], [34.224815999999997, 51.255992999999997], [34.141978000000002, 51.566412999999997], [34.391731, 51.768881999999998], [33.752699999999997, 52.335075000000003], [32.715761000000001, 52.238464999999998], [32.412058000000002, 52.288694999999997], [32.159439999999996, 52.061250000000001], [31.785969999999999, 52.101680000000002], [31.540018, 52.742052000000001], [31.305201, 53.073996000000001], [31.497640000000001, 53.167430000000003], [32.304518999999999, 53.132725999999998], [32.693643000000002, 53.351421000000002], [32.405599000000002, 53.618045000000002], [31.731273000000002, 53.794029000000002], [31.791423999999999, 53.974639000000003], [31.384471999999999, 54.157055999999997], [30.757534, 54.811771], [30.971836, 55.081547999999998], [30.873909000000001, 55.550975999999999], [29.896294000000001, 55.789462999999998], [29.371572, 55.670090999999999], [29.229513000000001, 55.918343999999998], [28.176708999999999, 56.169130000000003], [27.855281999999999, 56.759326000000001], [27.770015999999998, 57.244258000000002], [27.288184999999999, 57.474527999999999], [27.716685999999999, 57.791899000000001], [27.42015, 58.72457], [28.131699000000001, 59.300825000000003], [27.981120000000001, 59.475369999999998], [29.117699999999999, 60.02805], [28.07, 60.503520000000002], [30.211106999999998, 61.780028000000001], [31.139990999999998, 62.357692999999998], [31.516092, 62.867686999999997], [30.035872000000001, 63.552813999999998], [30.444685, 64.204453000000001], [29.544429999999998, 64.948672000000002], [30.217649999999999, 65.805980000000005], [29.054589, 66.944286000000005], [29.977426000000001, 67.698296999999997], [28.445944000000001, 68.364613000000006], [28.591930000000001, 69.064777000000007], [29.399550000000001, 69.15692], [31.10108, 69.558109999999999], [32.132719999999999, 69.905950000000004], [33.775469999999999, 69.301419999999993], [36.513959999999997, 69.063419999999994], [40.292340000000003, 67.932400000000001], [41.059869999999997, 67.457130000000006], [41.125950000000003, 66.791579999999996], [40.015830000000001, 66.266180000000006], [38.382950000000001, 65.999529999999993], [33.918709999999997, 66.759609999999995], [33.184440000000002, 66.632530000000003], [34.814770000000003, 65.900149999999996], [34.878574, 65.436212999999995], [34.943910000000002, 64.414370000000005], [36.231290000000001, 64.109449999999995], [37.012729999999998, 63.849829999999997], [37.141970000000001, 64.334710000000001], [36.539579000000003, 64.76446], [37.17604, 65.143219999999999], [39.593449999999997, 64.520790000000005], [40.435600000000001, 64.76446], [39.762599999999999, 65.49682], [42.093089999999997, 66.476230000000001], [43.016039999999997, 66.418580000000006], [43.949750000000002, 66.06908], [44.532260000000001, 66.756339999999994], [43.698390000000003, 67.352450000000005], [44.187950000000001, 67.950509999999994], [43.452820000000003, 68.570790000000002], [46.25, 68.25], [46.821339999999999, 67.689970000000002], [45.555169999999997, 67.566519999999997], [45.562019999999997, 67.010050000000007], [46.349150000000002, 66.667670000000001], [47.894159999999999, 66.884550000000004], [48.138759999999998, 67.522379999999998], [50.22766, 67.998670000000004], [53.71743, 68.857380000000006], [54.471710000000002, 68.808149999999998], [53.485819999999997, 68.201310000000007], [54.726280000000003, 68.097020000000001], [55.442680000000003, 68.438659999999999], [57.317019999999999, 68.466279999999998], [58.802, 68.88082], [59.941420000000001, 68.278440000000003], [61.077840000000002, 68.940690000000004], [60.030000000000001, 69.519999999999996], [60.549999999999997, 69.849999999999994], [63.503999999999998, 69.547389999999993], [64.888114999999999, 69.234835000000004], [68.512159999999994, 68.092330000000004], [69.180679999999995, 68.615629999999996], [68.164439999999999, 69.144360000000006], [68.135220000000004, 69.356489999999994], [66.930080000000004, 69.454610000000002], [67.25976, 69.928730000000002], [66.724919999999997, 70.708889999999997], [66.694659999999999, 71.028970000000001], [68.540059999999997, 71.9345], [69.196359999999999, 72.843360000000004], [69.939999999999998, 73.040000000000006], [72.587540000000004, 72.776290000000003], [72.796030000000002, 72.220060000000004], [71.848110000000005, 71.40898], [72.470110000000005, 71.090190000000007], [72.791880000000006, 70.391139999999993], [72.564700000000002, 69.020849999999996], [73.667869999999994, 68.407899999999998], [73.238699999999994, 67.740399999999994], [71.280000000000001, 66.319999999999993], [72.423010000000005, 66.172669999999997], [72.820769999999996, 66.532669999999996], [73.920990000000003, 66.789460000000005], [74.186509999999998, 67.284289999999999], [75.052000000000007, 67.760469999999998], [74.469260000000006, 68.328990000000005], [74.935839999999999, 68.989180000000005], [73.842359999999999, 69.071460000000002], [73.601870000000005, 69.627629999999996], [74.399799999999999, 70.631749999999997], [73.101100000000002, 71.44717], [74.890820000000005, 72.121189999999999], [74.659260000000003, 72.832269999999994], [75.158010000000004, 72.854969999999994], [75.683509999999998, 72.300560000000004], [75.288979999999995, 71.335560000000001], [76.359110000000001, 71.152869999999993], [75.903130000000004, 71.874009999999998], [77.576650000000001, 72.267169999999993], [79.652019999999993, 72.32011], [81.5, 71.75], [80.610709999999997, 72.582849999999993], [80.511089999999996, 73.648200000000003], [82.25, 73.849999999999994], [84.655259999999998, 73.805909999999997], [86.822299999999998, 73.936880000000002], [86.009559999999993, 74.459670000000003], [87.166820000000001, 75.116429999999994], [88.315709999999996, 75.143929999999997], [90.260000000000005, 75.640000000000001], [92.900580000000005, 75.773330000000001], [93.234210000000004, 76.047200000000004], [95.859999999999999, 76.140000000000001], [96.678210000000007, 75.915480000000002], [98.922539999999998, 76.446889999999996], [100.75967, 76.430279999999996], [101.03532, 76.861890000000002], [101.99084000000001, 77.287540000000007], [104.3516, 77.697919999999996], [106.06664000000001, 77.373890000000003], [104.705, 77.127399999999994], [106.97013, 76.974189999999993]]], [[[105.07547, 78.306889999999996], [99.438140000000004, 77.921000000000006], [101.2649, 79.233990000000006], [102.08635, 79.346410000000006], [102.83781500000001, 79.281289999999998], [105.37242999999999, 78.713340000000002], [105.07547, 78.306889999999996]]], [[[51.136187, 80.547280000000001], [49.793685000000004, 80.415428000000006], [48.894410999999998, 80.339567000000002], [48.754936999999998, 80.175467999999995], [47.586118999999997, 80.010181000000003], [46.502825999999999, 80.247247000000002], [47.072454999999998, 80.559424000000007], [44.846958000000001, 80.58981], [46.799138999999997, 80.771917999999999], [48.318477000000001, 80.784009999999995], [48.522806000000003, 80.514568999999995], [49.097189999999998, 80.753985999999998], [50.039768000000002, 80.918885000000003], [51.522933000000002, 80.699725999999998], [51.136187, 80.547280000000001]]], [[[99.939760000000007, 78.880939999999995], [97.757940000000005, 78.756200000000007], [94.972589999999997, 79.044745000000006], [93.312880000000007, 79.426500000000004], [92.545400000000001, 80.143789999999996], [91.181070000000005, 80.341459999999998], [93.777659999999997, 81.024600000000007], [95.940894999999998, 81.250399999999999], [97.883849999999995, 80.746975000000006], [100.186655, 79.780135000000001], [99.939760000000007, 78.880939999999995]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u043e\u0441\u0441\u0438\u044f", "fr": "Russie", "en": "Russia", "nl": "Rusland", "pt": "R\u00fassia", "no": "Russland", "de": "Russland", "it": "Russia", "sv": "Ryssland", "pl": "Rosja", "fi": "Ven\u00e4j\u00e4", "zh": "\u4fc4\u7f57\u65af", "ja": "\u30ed\u30b7\u30a2", "es": "Rusia"}, "label_fr": "Russie", "name": "Russia", "dbpedia_uri": "http://dbpedia.org/resource/Russia"}, "id": "RUS"}, {"geometry": {"type": "Polygon", "coordinates": [[[30.419104999999998, -1.1346590000000001], [30.816134999999999, -1.698914], [30.758309000000001, -2.2872499999999998], [30.469695999999999, -2.4138579999999998], [29.938358999999998, -2.348487], [29.632176000000001, -2.9178579999999998], [29.024926000000001, -2.8392580000000001], [29.117478999999999, -2.292211], [29.254835, -2.2151100000000001], [29.291886999999999, -1.6200559999999999], [29.579466, -1.341313], [29.821518999999999, -1.443322], [30.419104999999998, -1.1346590000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0443\u0430\u043d\u0434\u0430", "fr": "Rwanda", "en": "Rwanda", "nl": "Rwanda", "pt": "Ruanda", "no": "Rwanda", "de": "Ruanda", "it": "Ruanda", "sv": "Rwanda", "pl": "Rwanda", "fi": "Ruanda", "zh": "\u5362\u65fa\u8fbe", "ja": "\u30eb\u30ef\u30f3\u30c0", "es": "Ruanda"}, "label_fr": "Rwanda", "name": "Rwanda", "dbpedia_uri": "http://dbpedia.org/resource/Rwanda"}, "id": "RWA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-8.7948839999999997, 27.120695999999999], [-8.8178280000000004, 27.656426], [-8.6655899999999999, 27.656426], [-8.6651240000000005, 27.589479000000001], [-8.6844000000000001, 27.395744000000001], [-8.6872939999999996, 25.881056000000001], [-11.969419, 25.933353], [-11.937224000000001, 23.374593999999998], [-12.874222, 23.284832000000002], [-13.118753999999999, 22.77122], [-12.929102, 21.327071], [-16.845193999999999, 21.333323], [-17.063423, 20.999752000000001], [-17.020427999999999, 21.42231], [-17.002962, 21.420733999999999], [-14.750954999999999, 21.500599999999999], [-14.630833000000001, 21.860939999999999], [-14.221168, 22.310162999999999], [-13.891109999999999, 23.691009000000001], [-12.500963, 24.770116000000002], [-12.030759, 26.030866], [-11.718220000000001, 26.104092000000001], [-11.392555, 26.883424000000002], [-10.551263000000001, 26.990808000000001], [-10.189424000000001, 26.860945000000001], [-9.7353430000000003, 26.860945000000001], [-9.4130369999999992, 27.088476], [-8.7948839999999997, 27.120695999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0421\u0430\u0445\u0430\u0440\u0430", "fr": "Sahara occidental", "en": "Western Sahara", "nl": "Westelijke Sahara", "pt": "Saara Ocidental", "no": "Vest-Sahara", "de": "Westsahara", "it": "Sahara Occidentale", "sv": "V\u00e4stsahara", "pl": "Sahara Zachodnia", "fi": "L\u00e4nsi-Sahara", "zh": "\u897f\u6492\u54c8\u62c9", "ja": "\u897f\u30b5\u30cf\u30e9", "es": "Sahara Occidental"}, "label_fr": "Sahara occidental", "name": "Western Sahara", "dbpedia_uri": "http://dbpedia.org/resource/Western_Sahara"}, "id": "ESH"}, {"geometry": {"type": "Polygon", "coordinates": [[[42.779331999999997, 16.347891000000001], [42.649572999999997, 16.774635], [42.347988999999998, 17.075806], [42.270887999999999, 17.474722], [41.754382, 17.833046], [41.221390999999997, 18.671600000000002], [40.939340999999999, 19.486484999999998], [40.247652000000002, 20.174634999999999], [39.801684999999999, 20.338861999999999], [39.139398999999997, 21.291905], [39.023696000000001, 21.986875000000001], [39.066329000000003, 22.579656], [38.492772000000002, 23.688451000000001], [38.023859999999999, 24.078686000000001], [37.483635, 24.285495000000001], [37.154817999999999, 24.858483], [37.209491, 25.084541999999999], [36.931626999999999, 25.602958999999998], [36.639603999999999, 25.826228], [36.249136999999997, 26.570136000000002], [35.640182000000003, 27.376519999999999], [35.130186999999999, 28.063351999999998], [34.632336000000002, 28.058546], [34.787779, 28.607427000000001], [34.83222, 28.957483], [34.956037000000002, 29.356555], [36.068941000000002, 29.197495], [36.501213999999997, 29.505254000000001], [36.740527999999998, 29.865283000000002], [37.503582000000002, 30.003775999999998], [37.668120000000002, 30.338664999999999], [37.998849, 30.508500000000002], [37.002166000000003, 31.508413000000001], [39.004885999999999, 32.010216999999997], [39.195467999999998, 32.161009], [40.399994, 31.889991999999999], [41.889980999999999, 31.190009], [44.709499000000001, 29.178891], [46.568713000000002, 29.099025000000001], [47.459822000000003, 29.002518999999999], [47.708851000000003, 28.526063000000001], [48.416094000000001, 28.552004], [48.807594999999999, 27.689627999999999], [49.299554000000001, 27.461217999999999], [49.470914, 27.109998999999998], [50.152422000000001, 26.689662999999999], [50.212935000000002, 26.277027], [50.113303000000002, 25.943971999999999], [50.239859000000003, 25.608049999999999], [50.527386999999997, 25.327808000000001], [50.660556999999997, 24.999896], [50.810108, 24.754743000000001], [51.112414999999999, 24.556331], [51.389608000000003, 24.627386000000001], [51.579518999999998, 24.245497], [51.617708, 24.014219000000001], [52.000732999999997, 23.001154], [55.006802999999998, 22.496948], [55.208340999999997, 22.70833], [55.666659000000003, 22.000001000000001], [54.999982000000003, 19.999994000000001], [52.000010000000003, 19.000003], [49.116672000000001, 18.616668000000001], [48.183343999999998, 18.166668999999999], [47.466695000000001, 17.116682000000001], [47.000005000000002, 16.949998999999998], [46.749994000000001, 17.283338000000001], [46.366658999999999, 17.233315000000001], [45.399999000000001, 17.333335000000002], [45.216650999999999, 17.433329000000001], [44.062612999999999, 17.410359], [43.791519000000001, 17.319977000000002], [43.380794000000002, 17.579986999999999], [43.115797999999998, 17.088439999999999], [43.218375000000002, 16.666889999999999], [42.779331999999997, 16.347891000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0430\u0443\u0434\u043e\u0432\u0441\u043a\u0430\u044f \u0410\u0440\u0430\u0432\u0438\u044f", "fr": "Arabie saoudite", "en": "Saudi Arabia", "nl": "Saoedi-Arabi\u00eb", "pt": "Ar\u00e1bia Saudita", "no": "Saudi-Arabia", "de": "Saudi-Arabien", "it": "Arabia Saudita", "sv": "Saudiarabien", "pl": "Arabia Saudyjska", "fi": "Saudi-Arabia", "zh": "\u6c99\u7279\u963f\u62c9\u4f2f", "ja": "\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2", "es": "Arabia Saudita"}, "label_fr": "Arabie saoudite", "name": "Saudi Arabia", "dbpedia_uri": "http://dbpedia.org/resource/Saudi_Arabia"}, "id": "SAU"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.963393000000003, 9.4642850000000003], [33.824962999999997, 9.4840610000000005], [33.842131000000002, 9.9819150000000008], [33.721958999999998, 10.325262], [33.206938000000001, 10.720112], [33.086765999999997, 11.441141], [33.206938000000001, 12.179338], [32.743419000000003, 12.248008], [32.674750000000003, 12.024832], [32.073892000000001, 11.973330000000001], [32.314234999999996, 11.681483999999999], [32.400072000000002, 11.080626000000001], [31.850715999999998, 10.531271], [31.352861999999998, 9.8102409999999995], [30.837841000000001, 9.7072369999999992], [29.996638999999998, 10.290927], [29.618957000000002, 10.084918999999999], [29.515953, 9.7930740000000007], [29.000931999999999, 9.6042319999999997], [28.966597, 9.3982240000000008], [27.970890000000001, 9.3982240000000008], [27.833551, 9.6042319999999997], [27.112521000000001, 9.6385670000000001], [26.752006000000002, 9.4668930000000007], [26.477328, 9.5527300000000004], [25.962306999999999, 10.136421], [25.790633, 10.411099], [25.069604000000002, 10.273759999999999], [24.794926, 9.8102409999999995], [24.537414999999999, 8.9175380000000004], [24.194068000000001, 8.7286959999999993], [23.886980000000001, 8.6197300000000006], [23.805813000000001, 8.6663189999999997], [23.459012999999999, 8.9542859999999997], [23.394779, 9.2650679999999994], [23.55725, 9.6812179999999994], [23.554303999999998, 10.089255], [22.977544000000002, 10.714463], [22.864165, 11.142395], [22.87622, 11.38461], [22.508690000000001, 11.679360000000001], [22.497620000000001, 12.26024], [22.28801, 12.646050000000001], [21.936810000000001, 12.588179999999999], [22.037590000000002, 12.95546], [22.296579999999999, 13.37232], [22.18329, 13.786479999999999], [22.51202, 14.09318], [22.303509999999999, 14.32682], [22.56795, 14.944290000000001], [23.02459, 15.680720000000001], [23.886890000000001, 15.61084], [23.83766, 19.580469999999998], [23.850000000000001, 20], [25, 20.003039999999999], [25, 22], [29.02, 22], [32.899999999999999, 22], [36.866230000000002, 22], [37.188720000000004, 21.01885], [36.969410000000003, 20.837440000000001], [37.114699999999999, 19.807960000000001], [37.481789999999997, 18.614090000000001], [37.862760000000002, 18.36786], [38.410089999999997, 17.998307], [37.904000000000003, 17.42754], [37.167470000000002, 17.26314], [36.852530000000002, 16.95655], [36.753889999999998, 16.29186], [36.323219999999999, 14.82249], [36.429510000000001, 14.42211], [36.270220000000002, 13.563330000000001], [35.863630000000001, 12.578279999999999], [35.260489999999997, 12.08286], [34.831629999999997, 11.318960000000001], [34.73115, 10.910170000000001], [34.257449999999999, 10.630089999999999], [33.961620000000003, 9.5835799999999995], [33.963393000000003, 9.4642850000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0443\u0434\u0430\u043d", "fr": "Soudan", "en": "Sudan", "nl": "Soedan", "pt": "Sud\u00e3o", "no": "Sudan", "de": "Sudan", "it": "Sudan", "sv": "Sudan", "pl": "Sudan", "fi": "Sudan", "zh": "\u82cf\u4e39\u5171\u548c\u56fd", "ja": "\u30b9\u30fc\u30c0\u30f3", "es": "Sud\u00e1n"}, "label_fr": "Soudan", "name": "Sudan", "dbpedia_uri": "http://dbpedia.org/resource/Sudan"}, "id": "SDN"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.963393000000003, 9.4642850000000003], [33.974980000000002, 8.6845599999999994], [33.825499999999998, 8.3791600000000006], [33.294800000000002, 8.3545800000000003], [32.954180000000001, 7.7849700000000004], [33.568289999999998, 7.7133399999999996], [34.075099999999999, 7.2259500000000001], [34.250320000000002, 6.8260699999999996], [34.70702, 6.59422], [35.298006999999998, 5.5060000000000002], [34.620196, 4.8471229999999998], [34.005000000000003, 4.2498849999999999], [33.390000000000001, 3.79], [32.686419999999998, 3.7923200000000001], [31.881450000000001, 3.5582699999999998], [31.245560000000001, 3.7818999999999998], [30.833850000000002, 3.5091700000000001], [29.953489999999999, 4.1737000000000002], [29.715994999999999, 4.6008050000000003], [29.159078000000001, 4.3892670000000003], [28.696677999999999, 4.4550770000000002], [28.428993999999999, 4.2871550000000003], [27.979977000000002, 4.4084130000000004], [27.374226, 5.2339440000000002], [27.213408999999999, 5.5509529999999998], [26.465909, 5.9467169999999996], [26.213418000000001, 6.5466030000000002], [25.796648000000001, 6.9793159999999999], [25.124130999999998, 7.5000850000000003], [25.114932, 7.8251039999999996], [24.567368999999999, 8.2291880000000006], [23.886980000000001, 8.6197300000000006], [24.194068000000001, 8.7286959999999993], [24.537414999999999, 8.9175380000000004], [24.794926, 9.8102409999999995], [25.069604000000002, 10.273759999999999], [25.790633, 10.411099], [25.962306999999999, 10.136421], [26.477328, 9.5527300000000004], [26.752006000000002, 9.4668930000000007], [27.112521000000001, 9.6385670000000001], [27.833551, 9.6042319999999997], [27.970890000000001, 9.3982240000000008], [28.966597, 9.3982240000000008], [29.000931999999999, 9.6042319999999997], [29.515953, 9.7930740000000007], [29.618957000000002, 10.084918999999999], [29.996638999999998, 10.290927], [30.837841000000001, 9.7072369999999992], [31.352861999999998, 9.8102409999999995], [31.850715999999998, 10.531271], [32.400072000000002, 11.080626000000001], [32.314234999999996, 11.681483999999999], [32.073892000000001, 11.973330000000001], [32.674750000000003, 12.024832], [32.743419000000003, 12.248008], [33.206938000000001, 12.179338], [33.086765999999997, 11.441141], [33.206938000000001, 10.720112], [33.721958999999998, 10.325262], [33.842131000000002, 9.9819150000000008], [33.824962999999997, 9.4840610000000005], [33.963393000000003, 9.4642850000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042e\u0436\u043d\u044b\u0439 \u0421\u0443\u0434\u0430\u043d", "fr": "Soudan du Sud", "en": "South Sudan", "nl": "Zuid-Soedan", "pt": "Sud\u00e3o do Sul", "no": "S\u00f8r-Sudan", "de": "S\u00fcdsudan", "it": "Sudan del Sud", "sv": "Sydsudan", "pl": "Sudan Po\u0142udniowy", "fi": "Etel\u00e4-Sudan", "zh": "\u5357\u8607\u4e39", "ja": "\u5357\u30b9\u30fc\u30c0\u30f3", "es": "Sud\u00e1n del Sur"}, "label_fr": "Soudan du Sud", "name": "South Sudan", "dbpedia_uri": "http://dbpedia.org/resource/South_Sudan"}, "id": "SDS"}, {"geometry": {"type": "Polygon", "coordinates": [[[-16.713729000000001, 13.594958999999999], [-17.126107000000001, 14.373516], [-17.625043000000002, 14.729540999999999], [-17.185172999999999, 14.919477000000001], [-16.700706, 15.621527], [-16.463097999999999, 16.135035999999999], [-16.12069, 16.455663000000001], [-15.623666, 16.369337000000002], [-15.135737000000001, 16.587281999999998], [-14.577348000000001, 16.598264], [-14.099520999999999, 16.304302], [-13.435738000000001, 16.039383000000001], [-12.830658, 15.303692], [-12.17075, 14.616834000000001], [-12.124886999999999, 13.994726999999999], [-11.927716, 13.422075], [-11.553398, 13.141214], [-11.467898999999999, 12.754519], [-11.513942999999999, 12.442988], [-11.658301, 12.386583], [-12.203564999999999, 12.465648], [-12.278599, 12.35444], [-12.499051, 12.332090000000001], [-13.217817999999999, 12.575874000000001], [-13.700476, 12.586183], [-15.548477, 12.628170000000001], [-15.816573999999999, 12.515567000000001], [-16.147717, 12.547762000000001], [-16.677451999999999, 12.384852], [-16.841525000000001, 13.151394], [-15.931296, 13.130284], [-15.691001, 13.270353], [-15.511813, 13.27857], [-15.141163000000001, 13.509512000000001], [-14.712197, 13.298207], [-14.277702, 13.280585], [-13.844963, 13.505042], [-14.046991999999999, 13.794067999999999], [-14.376714, 13.625679999999999], [-14.687030999999999, 13.630357], [-15.081735, 13.876492000000001], [-15.398770000000001, 13.860369], [-15.624596, 13.623587000000001], [-16.713729000000001, 13.594958999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0435\u043d\u0435\u0433\u0430\u043b", "fr": "S\u00e9n\u00e9gal", "en": "Senegal", "nl": "Senegal", "pt": "Senegal", "no": "Senegal", "de": "Senegal", "it": "Senegal", "sv": "Senegal", "pl": "Senegal", "fi": "Senegal", "zh": "\u585e\u5185\u52a0\u5c14", "ja": "\u30bb\u30cd\u30ac\u30eb", "es": "Senegal"}, "label_fr": "S\u00e9n\u00e9gal", "name": "Senegal", "dbpedia_uri": "http://dbpedia.org/resource/Senegal"}, "id": "SEN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[162.11902499999999, -10.482718999999999], [162.39864600000001, -10.826366999999999], [161.70003199999999, -10.820010999999999], [161.31979699999999, -10.204751], [161.917383, -10.446700999999999], [162.11902499999999, -10.482718999999999]]], [[[160.85222899999999, -9.8729370000000003], [160.46258800000001, -9.8952100000000005], [159.849447, -9.7940269999999998], [159.64000300000001, -9.6399799999999995], [159.702945, -9.2429500000000004], [160.362956, -9.4003040000000002], [160.68851799999999, -9.6101620000000008], [160.85222899999999, -9.8729370000000003]]], [[[161.679982, -9.5999820000000007], [161.52939699999999, -9.7843119999999999], [160.788253, -8.9175430000000002], [160.57999699999999, -8.3200090000000007], [160.920028, -8.3200090000000007], [161.28000599999999, -9.1200109999999999], [161.679982, -9.5999820000000007]]], [[[159.87502699999999, -8.3373200000000001], [159.91740200000001, -8.5382899999999999], [159.13367700000001, -8.1141810000000003], [158.58611400000001, -7.7548240000000002], [158.21115, -7.4218719999999996], [158.35997800000001, -7.3200180000000001], [158.82000099999999, -7.560003], [159.64000300000001, -8.0200270000000007], [159.87502699999999, -8.3373200000000001]]], [[[157.53842599999999, -7.3478199999999996], [157.33941999999999, -7.4047669999999997], [156.90203, -7.1768739999999998], [156.49135799999999, -6.765943], [156.54282799999999, -6.5993380000000004], [157.13999999999999, -7.0216380000000003], [157.53842599999999, -7.3478199999999996]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u044b \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "Salomon (pays)", "en": "Solomon Islands", "nl": "Salomonseilanden", "pt": "Ilhas Salom\u00e3o", "no": "Salomon\u00f8yene", "de": "Salomonen", "it": "Isole Salomone", "sv": "Salomon\u00f6arna", "pl": "Wyspy Salomona", "fi": "Salomonsaaret", "zh": "\u6240\u7f57\u95e8\u7fa4\u5c9b", "ja": "\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6", "es": "Islas Salom\u00f3n"}, "label_fr": "Salomon (pays)", "name": "Solomon Islands", "dbpedia_uri": "http://dbpedia.org/resource/Solomon_Islands"}, "id": "SLB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-11.438779, 6.7859170000000004], [-11.708195, 6.8600979999999998], [-12.428099, 7.2629419999999998], [-12.949049, 7.7986459999999997], [-13.124025, 8.1639459999999993], [-13.246549999999999, 8.9030489999999993], [-12.711957999999999, 9.3427120000000006], [-12.596719, 9.6201880000000006], [-12.425929, 9.8358340000000002], [-12.150338, 9.8585720000000006], [-11.917277, 10.046984], [-11.117481, 10.045873], [-10.839152, 9.6882459999999995], [-10.622394999999999, 9.2679100000000005], [-10.654769999999999, 8.9771780000000003], [-10.494315, 8.715541], [-10.505477000000001, 8.3488959999999999], [-10.230093999999999, 8.4062059999999992], [-10.695595000000001, 7.9394640000000001], [-11.146704, 7.396706], [-11.199802, 7.1058459999999997], [-11.438779, 6.7859170000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u044c\u0435\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435", "fr": "Sierra Leone", "en": "Sierra Leone", "nl": "Sierra Leone", "pt": "Serra Leoa", "no": "Sierra Leone", "de": "Sierra Leone", "it": "Sierra Leone", "sv": "Sierra Leone", "pl": "Sierra Leone", "fi": "Sierra Leone", "zh": "\u585e\u62c9\u5229\u6602", "ja": "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd", "es": "Sierra Leona"}, "label_fr": "Sierra Leone", "name": "Sierra Leone", "dbpedia_uri": "http://dbpedia.org/resource/Sierra_Leone"}, "id": "SLE"}, {"geometry": {"type": "Polygon", "coordinates": [[[-87.793110999999996, 13.38448], [-87.904111999999998, 13.149017000000001], [-88.483301999999995, 13.163951000000001], [-88.843227999999996, 13.259734], [-89.256743, 13.458532999999999], [-89.812393999999998, 13.520621999999999], [-90.095555000000004, 13.735338], [-90.064678000000001, 13.881970000000001], [-89.721934000000005, 14.134228], [-89.534218999999993, 14.244816], [-89.587343000000004, 14.362586], [-89.353325999999996, 14.424132999999999], [-89.058511999999993, 14.340028999999999], [-88.843073000000004, 14.140506999999999], [-88.541230999999996, 13.980155], [-88.503997999999996, 13.845485999999999], [-88.065342999999999, 13.964626000000001], [-87.859515000000002, 13.893312], [-87.723502999999994, 13.78505], [-87.793110999999996, 13.38448]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440", "fr": "Salvador", "en": "El Salvador", "nl": "El Salvador", "pt": "El Salvador", "no": "El Salvador", "de": "El Salvador", "it": "El Salvador", "sv": "El Salvador", "pl": "Salwador", "fi": "El Salvador", "zh": "\u8428\u5c14\u74e6\u591a", "ja": "\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb", "es": "El Salvador"}, "label_fr": "Salvador", "name": "El Salvador", "dbpedia_uri": "http://dbpedia.org/resource/El_Salvador"}, "id": "SLV"}, {"geometry": {"type": "Polygon", "coordinates": [[[48.938130000000001, 9.4517489999999995], [48.486736000000001, 8.8376260000000002], [47.78942, 8.0030000000000001], [46.948327999999997, 7.9968769999999996], [43.678750000000001, 9.1835799999999992], [43.296975000000003, 9.5404769999999992], [42.92812, 10.021940000000001], [42.558759999999999, 10.57258], [42.776851999999998, 10.926879], [43.145305, 11.46204], [43.470660000000002, 11.277710000000001], [43.666668000000001, 10.864169], [44.117804, 10.445538000000001], [44.614258999999997, 10.442205], [45.556941000000002, 10.698029], [46.645401, 10.816549], [47.525658, 11.127228000000001], [48.021596000000002, 11.193064], [48.378784000000003, 11.375482], [48.948205999999999, 11.410622], [48.942005000000002, 11.394266], [48.938490999999999, 10.982327], [48.938232999999997, 9.9734999999999996], [48.938130000000001, 9.4517489999999995]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043c\u0430\u043b\u0438\u043b\u0435\u043d\u0434", "fr": "Somaliland", "en": "Somaliland", "nl": "Somaliland", "pt": "Somalil\u00e2ndia", "no": "Somaliland", "de": "Somaliland", "it": "Somaliland", "sv": "Somaliland", "pl": "Somaliland", "fi": "Somalimaa", "zh": "\u7d22\u9a6c\u91cc\u5170", "ja": "\u30bd\u30de\u30ea\u30e9\u30f3\u30c9", "es": "Somalilandia"}, "label_fr": "Somaliland", "name": "Somaliland", "dbpedia_uri": "http://dbpedia.org/resource/Somaliland"}, "id": "-99"}, {"geometry": {"type": "Polygon", "coordinates": [[[49.728619999999999, 11.578900000000001], [50.258780000000002, 11.67957], [50.732019999999999, 12.0219], [51.111199999999997, 12.02464], [51.133870000000002, 11.748150000000001], [51.041530000000002, 11.166510000000001], [51.045310000000001, 10.6409], [50.834180000000003, 10.279719999999999], [50.552390000000003, 9.1987400000000008], [50.070920000000001, 8.0817300000000003], [49.4527, 6.8046600000000002], [48.594549999999998, 5.3391099999999998], [47.740789999999997, 4.2194000000000003], [46.56476, 2.8552900000000001], [45.563989999999997, 2.04576], [44.068150000000003, 1.0528299999999999], [43.13597, 0.29220000000000002], [42.04157, -0.91915999999999998], [41.810949999999998, -1.4464699999999999], [41.585129999999999, -1.6832499999999999], [40.993000000000002, -0.85829], [40.981050000000003, 2.7845200000000001], [41.855083, 3.9189120000000002], [42.128610000000002, 4.2341300000000004], [42.769669999999998, 4.2525899999999996], [43.660870000000003, 4.9575500000000003], [44.9636, 5.00162], [47.78942, 8.0030000000000001], [48.486736000000001, 8.8376260000000002], [48.938130000000001, 9.4517489999999995], [48.938232999999997, 9.9734999999999996], [48.938490999999999, 10.982327], [48.942005000000002, 11.394266], [48.948205000000002, 11.410617], [49.267760000000003, 11.43033], [49.728619999999999, 11.578900000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043c\u0430\u043b\u0438", "fr": "Somalie", "en": "Somalia", "nl": "Somali\u00eb", "pt": "Som\u00e1lia", "no": "Somalia", "de": "Somalia", "it": "Somalia", "sv": "Somalia", "pl": "Somalia", "fi": "Somalia", "zh": "\u7d22\u9a6c\u91cc", "ja": "\u30bd\u30de\u30ea\u30a2", "es": "Somalia"}, "label_fr": "Somalie", "name": "Somalia", "dbpedia_uri": "http://dbpedia.org/resource/Somalia"}, "id": "SOM"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.874313000000001, 45.416375000000002], [21.483526000000001, 45.181170000000002], [21.562023, 44.768946999999997], [22.145088000000001, 44.478422000000002], [22.459022000000001, 44.702517], [22.705725999999999, 44.578003000000002], [22.474008000000001, 44.409227999999999], [22.657150000000001, 44.234923000000002], [22.410446, 44.008063], [22.500157000000002, 43.642814000000001], [22.986018999999999, 43.211160999999997], [22.604800999999998, 42.898519], [22.436595000000001, 42.580320999999998], [22.545012, 42.461362000000001], [22.380526, 42.320259999999998], [21.917079999999999, 42.303640000000001], [21.576636000000001, 42.245224], [21.543320000000001, 42.320250000000001], [21.66292, 42.439219999999999], [21.77505, 42.682699999999997], [21.633019999999998, 42.677169999999997], [21.438659999999999, 42.862549999999999], [21.27421, 42.909590000000001], [21.143395000000002, 43.068685000000002], [20.956510000000002, 43.130940000000002], [20.81448, 43.27205], [20.635079999999999, 43.216709999999999], [20.496790000000001, 42.884689999999999], [20.257580000000001, 42.812750000000001], [20.3398, 42.898519999999998], [19.958570000000002, 43.10604], [19.629999999999999, 43.21378], [19.483889999999999, 43.352290000000004], [19.218520000000002, 43.52384], [19.454000000000001, 43.568100000000001], [19.59976, 44.038469999999997], [19.117609999999999, 44.423070000000003], [19.368030000000001, 44.863], [19.005479999999999, 44.860230000000001], [19.390476, 45.236516000000002], [19.072769000000001, 45.521510999999997], [18.829820000000002, 45.908880000000003], [19.596045, 46.171729999999997], [20.220192000000001, 46.127468999999998], [20.762174999999999, 45.734572999999997], [20.874313000000001, 45.416375000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0435\u0440\u0431\u0438\u044f", "fr": "Serbie", "en": "Serbia", "nl": "Servi\u00eb", "pt": "S\u00e9rvia", "no": "Serbia", "de": "Serbien", "it": "Serbia", "sv": "Serbien", "pl": "Serbia", "fi": "Serbia", "zh": "\u585e\u5c14\u7ef4\u4e9a", "ja": "\u30bb\u30eb\u30d3\u30a2", "es": "Serbia"}, "label_fr": "Serbie", "name": "Republic of Serbia", "dbpedia_uri": "http://dbpedia.org/resource/Serbia"}, "id": "SRB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.147435999999999, 5.9731500000000004], [-55.949317999999998, 5.7728780000000004], [-55.84178, 5.953125], [-55.033250000000002, 6.0252910000000002], [-53.958044999999998, 5.7565480000000004], [-54.478633000000002, 4.8967559999999999], [-54.399541999999997, 4.2126109999999999], [-54.006931000000002, 3.6200380000000001], [-54.181725999999998, 3.1897799999999998], [-54.269705000000002, 2.7323919999999999], [-54.524754000000001, 2.311849], [-55.097586999999997, 2.5237479999999999], [-55.569755000000001, 2.4215059999999999], [-55.973322000000003, 2.510364], [-56.073341999999997, 2.2207949999999999], [-55.9056, 2.0219960000000001], [-55.995697999999997, 1.8176669999999999], [-56.539386, 1.8995230000000001], [-57.150098, 2.7689270000000001], [-57.281433, 3.3334920000000001], [-57.601568999999998, 3.3346550000000001], [-58.044694, 4.0608639999999996], [-57.860210000000002, 4.5768009999999997], [-57.914288999999997, 4.8126259999999998], [-57.307245999999999, 5.0735669999999997], [-57.147435999999999, 5.9731500000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0443\u0440\u0438\u043d\u0430\u043c", "fr": "Suriname", "en": "Suriname", "nl": "Suriname", "pt": "Suriname", "no": "Surinam", "de": "Suriname", "it": "Suriname", "sv": "Surinam", "pl": "Surinam", "fi": "Suriname", "zh": "\u8607\u5229\u5357", "ja": "\u30b9\u30ea\u30ca\u30e0", "es": "Surinam"}, "label_fr": "Suriname", "name": "Suriname", "dbpedia_uri": "http://dbpedia.org/resource/Suriname"}, "id": "SUR"}, {"geometry": {"type": "Polygon", "coordinates": [[[18.853144, 49.496229999999997], [18.909575, 49.435845999999998], [19.320713000000001, 49.571573999999998], [19.825023000000002, 49.217125000000003], [20.415838999999998, 49.431452999999998], [20.887955000000002, 49.328772000000001], [21.607807999999999, 49.470106999999999], [22.558138, 49.085737999999999], [22.280842, 48.825392000000001], [22.085608000000001, 48.422263999999998], [21.872236000000001, 48.319971000000002], [20.801293999999999, 48.623854000000001], [20.473562000000001, 48.562849999999997], [20.239053999999999, 48.327567000000002], [19.769470999999999, 48.202691000000002], [19.661363999999999, 48.266615000000002], [19.174365000000002, 48.111378999999999], [18.777024999999998, 48.081767999999997], [18.696512999999999, 47.880954000000003], [17.857133000000001, 47.758429], [17.488472999999999, 47.867466], [16.979666999999999, 48.123497], [16.879982999999999, 48.470013000000002], [16.960287999999998, 48.596981999999997], [17.101984999999999, 48.816969], [17.545006999999998, 48.800018999999999], [17.886485, 48.903475], [17.913512000000001, 48.996493000000001], [18.104973000000001, 49.043982999999997], [18.170497999999998, 49.271515000000001], [18.399994, 49.315001000000002], [18.554970999999998, 49.495015000000002], [18.853144, 49.496229999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043b\u043e\u0432\u0430\u043a\u0438\u044f", "fr": "Slovaquie", "en": "Slovakia", "nl": "Slowakije", "pt": "Eslov\u00e1quia", "no": "Slovakia", "de": "Slowakei", "it": "Slovacchia", "sv": "Slovakien", "pl": "S\u0142owacja", "fi": "Slovakia", "zh": "\u65af\u6d1b\u4f10\u514b", "ja": "\u30b9\u30ed\u30d0\u30ad\u30a2", "es": "Eslovaquia"}, "label_fr": "Slovaquie", "name": "Slovakia", "dbpedia_uri": "http://dbpedia.org/resource/Slovakia"}, "id": "SVK"}, {"geometry": {"type": "Polygon", "coordinates": [[[13.806475000000001, 46.509306000000002], [14.632472, 46.431817000000002], [15.137092000000001, 46.658703000000003], [16.011664, 46.683610999999999], [16.202297999999999, 46.852386000000003], [16.370505000000001, 46.841327], [16.564807999999999, 46.503751000000001], [15.768732999999999, 46.238107999999997], [15.671530000000001, 45.834153999999998], [15.323954000000001, 45.731783], [15.327674999999999, 45.452316000000003], [14.935244000000001, 45.471694999999997], [14.595109000000001, 45.634940999999998], [14.411968, 45.466166000000001], [13.715059999999999, 45.500323999999999], [13.93763, 45.591016000000003], [13.69811, 46.016778000000002], [13.806475000000001, 46.509306000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043b\u043e\u0432\u0435\u043d\u0438\u044f", "fr": "Slov\u00e9nie", "en": "Slovenia", "nl": "Sloveni\u00eb", "pt": "Eslov\u00e9nia", "no": "Slovenia", "de": "Slowenien", "it": "Slovenia", "sv": "Slovenien", "pl": "S\u0142owenia", "fi": "Slovenia", "zh": "\u65af\u6d1b\u6587\u5c3c\u4e9a", "ja": "\u30b9\u30ed\u30d9\u30cb\u30a2", "es": "Eslovenia"}, "label_fr": "Slov\u00e9nie", "name": "Slovenia", "dbpedia_uri": "http://dbpedia.org/resource/Slovenia"}, "id": "SVN"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.183173, 65.723741000000004], [21.213517, 65.026004999999998], [21.369630999999998, 64.413588000000004], [19.778876, 63.609554000000003], [17.847778999999999, 62.749400000000001], [17.119554999999998, 61.341166000000001], [17.831346, 60.636583000000002], [18.787721999999999, 60.081913999999998], [17.869225, 58.953766000000002], [16.829184999999999, 58.719827000000002], [16.447710000000001, 57.041117999999997], [15.879785999999999, 56.104301999999997], [14.666681000000001, 56.200885], [14.100721, 55.407781], [12.942911, 55.361736999999998], [12.625101000000001, 56.307079999999999], [11.787941999999999, 57.441817], [11.027369, 58.856149000000002], [11.468272000000001, 59.432392999999998], [12.300366, 60.117933000000001], [12.631147, 61.293571999999998], [11.992063999999999, 61.800362], [11.930569, 63.128318], [12.579935000000001, 64.066219000000004], [13.571916, 64.049114000000003], [13.919905, 64.445420999999996], [13.55569, 64.787028000000007], [15.108411, 66.193866999999997], [16.108712000000001, 67.302456000000006], [16.768878999999998, 68.013936999999999], [17.729182000000002, 68.010552000000004], [17.993867999999999, 68.567391000000001], [19.87856, 68.407194000000004], [20.025269000000002, 69.065139000000002], [20.645593000000002, 69.106246999999996], [21.978535000000001, 68.616845999999995], [23.539473000000001, 67.936008999999999], [23.56588, 66.396051], [23.903379000000001, 66.006927000000005], [22.183173, 65.723741000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0432\u0435\u0446\u0438\u044f", "fr": "Su\u00e8de", "en": "Sweden", "nl": "Zweden", "pt": "Su\u00e9cia", "no": "Sverige", "de": "Schweden", "it": "Svezia", "sv": "Sverige", "pl": "Szwecja", "fi": "Ruotsi", "zh": "\u745e\u5178", "ja": "\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3", "es": "Suecia"}, "label_fr": "Su\u00e8de", "name": "Sweden", "dbpedia_uri": "http://dbpedia.org/resource/Sweden"}, "id": "SWE"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.071665000000003, -26.733820000000001], [31.86806, -27.177927], [31.282772999999999, -27.285879000000001], [30.685962, -26.743845], [30.676608999999999, -26.398078000000002], [30.949667000000002, -26.022649000000001], [31.044080000000001, -25.731452000000001], [31.333158000000001, -25.660191000000001], [31.837778, -25.843332], [31.985779000000001, -26.291779999999999], [32.071665000000003, -26.733820000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0432\u0430\u0437\u0438\u043b\u0435\u043d\u0434", "fr": "Swaziland", "en": "Swaziland", "nl": "Swaziland", "pt": "Suazil\u00e2ndia", "no": "Swaziland", "de": "Swasiland", "it": "Swaziland", "sv": "Swaziland", "pl": "Suazi", "fi": "Swazimaa", "zh": "\u65af\u5a01\u58eb\u5170", "ja": "\u30b9\u30ef\u30b8\u30e9\u30f3\u30c9", "es": "Suazilandia"}, "label_fr": "Swaziland", "name": "Swaziland", "dbpedia_uri": "http://dbpedia.org/resource/Swaziland"}, "id": "SWZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[38.792341, 33.378686000000002], [36.834062000000003, 32.312938000000003], [35.719918, 32.709192000000002], [35.700797999999999, 32.716014000000001], [35.836396999999998, 32.868122999999997], [35.821100999999999, 33.277425999999998], [36.066459999999999, 33.824911999999998], [36.611750000000001, 34.201788999999998], [36.448194000000001, 34.593935000000002], [35.998403000000003, 34.644914], [35.905023, 35.410009000000002], [36.149763, 35.821534999999997], [36.417549999999999, 36.040616999999997], [36.685389000000001, 36.259698999999998], [36.739494000000001, 36.817520000000002], [37.066761, 36.623035999999999], [38.167726999999999, 36.901209999999999], [38.699891000000001, 36.712927000000001], [39.522579999999998, 36.716054], [40.673259000000002, 37.091276000000001], [41.212088999999999, 37.074351999999998], [42.349590999999997, 37.229872999999998], [41.837063999999998, 36.605854000000001], [41.289707, 36.358815], [41.383965000000003, 35.628317000000003], [41.006158999999997, 34.419372000000003], [38.792341, 33.378686000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0438\u0440\u0438\u044f", "fr": "Syrie", "en": "Syria", "nl": "Syri\u00eb", "pt": "S\u00edria", "no": "Syria", "de": "Syrien", "it": "Siria", "sv": "Syrien", "pl": "Syria", "fi": "Syyria", "zh": "\u53d9\u5229\u4e9a", "ja": "\u30b7\u30ea\u30a2", "es": "Siria"}, "label_fr": "Syrie", "name": "Syria", "dbpedia_uri": "http://dbpedia.org/resource/Syria"}, "id": "SYR"}, {"geometry": {"type": "Polygon", "coordinates": [[[14.495787, 12.859396], [14.595781000000001, 13.330427], [13.954477000000001, 13.353448999999999], [13.956699, 13.996691], [13.540393999999999, 14.367134], [13.97217, 15.684369999999999], [15.247731, 16.627306000000001], [15.300440999999999, 17.927949999999999], [15.685741, 19.957180000000001], [15.903247, 20.387619000000001], [15.487147999999999, 20.730415000000001], [15.47106, 21.048449999999999], [15.096888, 21.308519], [14.8513, 22.862950000000001], [15.860849999999999, 23.40972], [19.849260000000001, 21.495090000000001], [23.83766, 19.580469999999998], [23.886890000000001, 15.61084], [23.02459, 15.680720000000001], [22.56795, 14.944290000000001], [22.303509999999999, 14.32682], [22.51202, 14.09318], [22.18329, 13.786479999999999], [22.296579999999999, 13.37232], [22.037590000000002, 12.95546], [21.936810000000001, 12.588179999999999], [22.28801, 12.646050000000001], [22.497620000000001, 12.26024], [22.508690000000001, 11.679360000000001], [22.87622, 11.38461], [22.864165, 11.142395], [22.231128999999999, 10.971888999999999], [21.723821999999998, 10.567055999999999], [21.000868000000001, 9.4759849999999997], [20.059685000000002, 9.0127059999999997], [19.094007999999999, 9.0748470000000001], [18.812010000000001, 8.9829150000000002], [18.911021999999999, 8.6308950000000006], [18.389555000000001, 8.2813040000000004], [17.964929999999999, 7.8909140000000004], [16.705988000000001, 7.5083279999999997], [16.456185000000001, 7.7347739999999998], [16.290562000000001, 7.7543069999999998], [16.106231999999999, 7.4970879999999998], [15.27946, 7.4219249999999999], [15.436092, 7.692812], [15.120865999999999, 8.3821499999999993], [14.979996, 8.7961039999999997], [14.544466999999999, 8.9658610000000003], [13.954217999999999, 9.5494950000000003], [14.171466000000001, 10.021378], [14.627200999999999, 9.9209189999999996], [14.909354, 9.9921290000000003], [15.467873000000001, 9.9823369999999993], [14.923565, 10.891325], [14.960152000000001, 11.555574], [14.893359999999999, 12.219049999999999], [14.495787, 12.859396]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0430\u0434", "fr": "Tchad", "en": "Chad", "nl": "Tsjaad", "pt": "Chade", "no": "Tsjad", "de": "Tschad", "it": "Ciad", "sv": "Tchad", "pl": "Czad", "fi": "T\u0161ad", "zh": "\u4e4d\u5f97", "ja": "\u30c1\u30e3\u30c9", "es": "Chad"}, "label_fr": "Tchad", "name": "Chad", "dbpedia_uri": "http://dbpedia.org/resource/Chad"}, "id": "TCD"}, {"geometry": {"type": "Polygon", "coordinates": [[[1.8652409999999999, 6.1421580000000002], [1.060122, 5.9288369999999997], [0.83693099999999998, 6.279979], [0.570384, 6.9143590000000001], [0.49095699999999998, 7.4117439999999997], [0.71202900000000002, 8.3124649999999995], [0.46119199999999999, 8.6772229999999997], [0.36590099999999998, 9.4650040000000004], [0.36758000000000002, 10.191212999999999], [-0.049785000000000003, 10.706918], [0.023803000000000001, 11.018682], [0.899563, 10.997339], [0.77233600000000002, 10.470808], [1.0777950000000001, 10.175606999999999], [1.4250609999999999, 9.8253950000000003], [1.4630430000000001, 9.3346239999999998], [1.6644779999999999, 9.1285900000000009], [1.618951, 6.8320379999999998], [1.8652409999999999, 6.1421580000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u043e\u0433\u043e", "fr": "Togo", "en": "Togo", "nl": "Togo", "pt": "Togo", "no": "Togo", "de": "Togo", "it": "Togo", "sv": "Togo", "pl": "Togo", "fi": "Togo", "zh": "\u591a\u54e5", "ja": "\u30c8\u30fc\u30b4", "es": "Togo"}, "label_fr": "Togo", "name": "Togo", "dbpedia_uri": "http://dbpedia.org/resource/Togo"}, "id": "TGO"}, {"geometry": {"type": "Polygon", "coordinates": [[[102.58493199999999, 12.186595000000001], [101.687158, 12.64574], [100.83181, 12.627084999999999], [100.97846699999999, 13.412722], [100.097797, 13.406855999999999], [100.018733, 12.307001], [99.478921, 10.846367000000001], [99.153772000000004, 9.9630609999999997], [99.222398999999996, 9.239255], [99.873831999999993, 9.2078620000000004], [100.279647, 8.2951530000000009], [100.45927399999999, 7.4295730000000004], [101.01732800000001, 6.8568689999999997], [101.623079, 6.7406220000000001], [102.141187, 6.2216360000000002], [101.81428200000001, 5.8108079999999998], [101.154219, 5.6913840000000002], [101.07551599999999, 6.2048670000000001], [100.259596, 6.6428250000000002], [100.085757, 6.4644890000000004], [99.690691000000001, 6.8482130000000003], [99.519642000000005, 7.3434540000000004], [98.988253, 7.9079930000000003], [98.503786000000005, 8.3823050000000006], [98.339662000000004, 7.7945120000000001], [98.150008999999997, 8.3500069999999997], [98.259150000000005, 8.9739229999999992], [98.553550999999999, 9.9329599999999996], [99.038121000000004, 10.960546000000001], [99.587286000000006, 11.892763], [99.196353999999999, 12.804748], [99.212012000000001, 13.269294], [99.097755000000006, 13.827503], [98.430819, 14.622028], [98.192074000000005, 15.123703000000001], [98.537375999999995, 15.308496999999999], [98.903347999999994, 16.177824000000001], [98.493761000000006, 16.837835999999999], [97.859122999999997, 17.567945999999999], [97.375895999999997, 18.445437999999999], [97.797782999999995, 18.627079999999999], [98.253724000000005, 19.708203000000001], [98.959676000000002, 19.752980999999998], [99.543308999999994, 20.186598], [100.115988, 20.417850000000001], [100.54888099999999, 20.109238000000001], [100.60629400000001, 19.508344000000001], [101.282015, 19.462585000000001], [101.03593100000001, 18.408928], [101.05954800000001, 17.512497], [102.113592, 18.109102], [102.413005, 17.932782], [102.998706, 17.961694999999999], [103.200192, 18.309632000000001], [103.95647700000001, 18.240953999999999], [104.716947, 17.428858999999999], [104.779321, 16.441865], [105.589039, 15.570316], [105.544338, 14.723934], [105.218777, 14.273211999999999], [104.281418, 14.416743], [102.988422, 14.225721], [102.348099, 13.394247], [102.58493199999999, 12.186595000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0438\u043b\u0430\u043d\u0434", "fr": "Tha\u00eflande", "en": "Thailand", "nl": "Thailand", "pt": "Tail\u00e2ndia", "no": "Thailand", "de": "Thailand", "it": "Thailandia", "sv": "Thailand", "pl": "Tajlandia", "fi": "Thaimaa", "zh": "\u6cf0\u56fd", "ja": "\u30bf\u30a4\u738b\u56fd", "es": "Tailandia"}, "label_fr": "Tha\u00eflande", "name": "Thailand", "dbpedia_uri": "http://dbpedia.org/resource/Thailand"}, "id": "THA"}, {"geometry": {"type": "Polygon", "coordinates": [[[71.014197999999993, 40.244365999999999], [70.648019000000005, 39.935754000000003], [69.559610000000006, 40.103211000000002], [69.464887000000004, 39.526682999999998], [70.549161999999995, 39.604197999999997], [71.784694000000002, 39.279463], [73.675379000000007, 39.431237000000003], [73.928852000000006, 38.505814999999998], [74.257514, 38.606507000000001], [74.864816000000005, 38.378846000000003], [74.829986000000005, 37.990006999999999], [74.980001999999999, 37.419989999999999], [73.948695999999998, 37.421565999999999], [73.260056000000006, 37.495257000000002], [72.636889999999994, 37.047558000000002], [72.193040999999994, 36.948287999999998], [71.844638000000003, 36.738171000000001], [71.448693000000006, 37.065645000000004], [71.541917999999995, 37.905774000000001], [71.239403999999993, 37.953265000000002], [71.348130999999995, 38.258904999999999], [70.806820999999999, 38.486282000000003], [70.376304000000005, 38.138396], [70.270573999999996, 37.735165000000002], [70.116578000000004, 37.588222999999999], [69.518784999999994, 37.608997000000002], [69.196273000000005, 37.151144000000002], [68.859446000000005, 37.344335999999998], [68.135561999999993, 37.023114999999997], [67.829999999999998, 37.144993999999997], [68.392032999999998, 38.157024999999997], [68.176024999999996, 38.901553], [67.442220000000006, 39.140143999999999], [67.701429000000005, 39.580477999999999], [68.536416000000003, 39.533453000000002], [69.011633000000003, 40.086157999999998], [69.329494999999994, 40.727823999999998], [70.666622000000004, 40.960213000000003], [70.458160000000007, 40.496495000000003], [70.601406999999995, 40.218527000000002], [71.014197999999993, 40.244365999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Tadjikistan", "en": "Tajikistan", "nl": "Tadzjikistan", "pt": "Tadjiquist\u00e3o", "no": "Tadsjikistan", "de": "Tadschikistan", "it": "Tagikistan", "sv": "Tadzjikistan", "pl": "Tad\u017cykistan", "fi": "Tad\u017eikistan", "zh": "\u5854\u5409\u514b\u65af\u5766", "ja": "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3", "es": "Tayikist\u00e1n"}, "label_fr": "Tadjikistan", "name": "Tajikistan", "dbpedia_uri": "http://dbpedia.org/resource/Tajikistan"}, "id": "TJK"}, {"geometry": {"type": "Polygon", "coordinates": [[[61.210816999999999, 35.650072000000002], [61.123071000000003, 36.491596999999999], [60.377637999999997, 36.527383], [59.234762000000003, 37.412987999999999], [58.436154000000002, 37.522309], [57.330433999999997, 38.029229000000001], [56.619365999999999, 38.121394000000002], [56.180374999999998, 37.935127000000001], [55.511578, 37.964117000000002], [54.800303999999997, 37.392420999999999], [53.921598000000003, 37.198917999999999], [53.735511000000002, 37.906135999999996], [53.880929000000002, 38.952092999999998], [53.101027999999999, 39.290573999999999], [53.357807999999999, 39.975285999999997], [52.693973, 40.033628999999998], [52.915250999999998, 40.876522999999999], [53.858139000000001, 40.631034], [54.736845000000002, 40.951014999999998], [54.008310999999999, 41.551211000000002], [53.721713000000001, 42.123190999999998], [52.91675, 41.868116999999998], [52.814689000000001, 41.135370999999999], [52.502459999999999, 41.783315999999999], [52.944293000000002, 42.116033999999999], [54.079417999999997, 42.324109], [54.755344999999998, 42.043970999999999], [55.455250999999997, 41.259858999999999], [55.968190999999997, 41.308641999999999], [57.096390999999997, 41.322310000000002], [56.932214999999999, 41.826025999999999], [57.786529999999999, 42.170552999999998], [58.629010999999998, 42.751550999999999], [59.976421999999999, 42.223081999999998], [60.083340999999997, 41.425145999999998], [60.465952999999999, 41.220326999999997], [61.547179, 41.266370000000002], [61.882714, 41.084857], [62.37426, 40.053885999999999], [63.518014999999998, 39.363256999999997], [64.170222999999993, 38.892406999999999], [65.215998999999996, 38.402695000000001], [66.546149999999997, 37.974685000000001], [66.518607000000003, 37.362783999999998], [66.217384999999993, 37.393790000000003], [65.745631000000003, 37.661163999999999], [65.588948000000002, 37.305216999999999], [64.746105, 37.111818], [64.546479000000005, 36.312072999999998], [63.982895999999997, 36.007956999999998], [63.193537999999997, 35.857165999999999], [62.984662, 35.404040999999999], [62.230651000000002, 35.270663999999996], [61.210816999999999, 35.650072000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u044f", "fr": "Turkm\u00e9nistan", "en": "Turkmenistan", "nl": "Turkmenistan", "pt": "Turquemenist\u00e3o", "no": "Turkmenistan", "de": "Turkmenistan", "it": "Turkmenistan", "sv": "Turkmenistan", "pl": "Turkmenistan", "fi": "Turkmenistan", "zh": "\u571f\u5e93\u66fc\u65af\u5766", "ja": "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3", "es": "Turkmenist\u00e1n"}, "label_fr": "Turkm\u00e9nistan", "name": "Turkmenistan", "dbpedia_uri": "http://dbpedia.org/resource/Turkmenistan"}, "id": "TKM"}, {"geometry": {"type": "Polygon", "coordinates": [[[124.968682, -8.8927899999999998], [125.086246, -8.6568869999999993], [125.94707200000001, -8.4320950000000003], [126.644704, -8.3982469999999996], [126.95724300000001, -8.2733450000000008], [127.335928, -8.3973169999999993], [126.967992, -8.6682559999999995], [125.92588499999999, -9.106007], [125.08852, -9.3931730000000009], [125.07002, -9.0899870000000007], [124.968682, -8.8927899999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0439 \u0422\u0438\u043c\u043e\u0440", "fr": "Timor oriental", "en": "East Timor", "nl": "Oost-Timor", "pt": "Timor-Leste", "no": "\u00d8st-Timor", "de": "Osttimor", "it": "Timor Est", "sv": "\u00d6sttimor", "pl": "Timor Wschodni", "fi": "It\u00e4-Timor", "zh": "\u4e1c\u5e1d\u6c76", "ja": "\u6771\u30c6\u30a3\u30e2\u30fc\u30eb", "es": "Timor Oriental"}, "label_fr": "Timor oriental", "name": "East Timor", "dbpedia_uri": "http://dbpedia.org/resource/East_Timor"}, "id": "TLS"}, {"geometry": {"type": "Polygon", "coordinates": [[[-61.68, 10.76], [-61.104999999999997, 10.890000000000001], [-60.895000000000003, 10.855], [-60.935000000000002, 10.109999999999999], [-61.770000000000003, 10], [-61.950000000000003, 10.09], [-61.659999999999997, 10.365], [-61.68, 10.76]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0434 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e", "fr": "Trinit\u00e9-et-Tobago", "en": "Trinidad and Tobago", "nl": "Trinidad en Tobago", "pt": "Trinidad e Tobago", "no": "Trinidad og Tobago", "de": "Trinidad und Tobago", "it": "Trinidad e Tobago", "sv": "Trinidad och Tobago", "pl": "Trynidad i Tobago", "fi": "Trinidad ja Tobago", "zh": "\u5343\u91cc\u9054\u53ca\u6258\u5df4\u54e5", "ja": "\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30fb\u30c8\u30d0\u30b4", "es": "Trinidad y Tobago"}, "label_fr": "Trinit\u00e9-et-Tobago", "name": "Trinidad and Tobago", "dbpedia_uri": "http://dbpedia.org/resource/Trinidad_and_Tobago"}, "id": "TTO"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.4821399999999993, 30.307556000000002], [9.0556029999999996, 32.102691999999998], [8.4391029999999994, 32.506284999999998], [8.4304729999999992, 32.748336999999999], [7.6126420000000001, 33.344115000000002], [7.5244819999999999, 34.097375999999997], [8.140981, 34.655146000000002], [8.3763679999999994, 35.479875999999997], [8.2178240000000002, 36.433177000000001], [8.4209639999999997, 36.946427], [9.5099940000000007, 37.349994000000002], [10.210001999999999, 37.230001999999999], [10.18065, 36.724038], [11.028867, 37.092103000000002], [11.100026, 36.899996000000002], [10.600004999999999, 36.409999999999997], [10.593287, 35.947443999999997], [10.939519000000001, 35.698984000000003], [10.807847000000001, 34.833506999999997], [10.149592999999999, 34.330773000000001], [10.339658999999999, 33.785741999999999], [10.856835999999999, 33.768740000000001], [11.108501, 33.293343], [11.488787, 33.136996000000003], [11.432252999999999, 32.368903000000003], [10.944789999999999, 32.081814999999999], [10.636901, 31.761420999999999], [9.9502249999999997, 31.376069999999999], [10.056575, 30.961831], [9.9700170000000004, 30.539325000000002], [9.4821399999999993, 30.307556000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u043d\u0438\u0441", "fr": "Tunisie", "en": "Tunisia", "nl": "Tunesi\u00eb", "pt": "Tun\u00edsia", "no": "Tunisia", "de": "Tunesien", "it": "Tunisia", "sv": "Tunisien", "pl": "Tunezja", "fi": "Tunisia", "zh": "\u7a81\u5c3c\u897f\u4e9e", "ja": "\u30c1\u30e5\u30cb\u30b8\u30a2", "es": "T\u00fanez"}, "label_fr": "Tunisie", "name": "Tunisia", "dbpedia_uri": "http://dbpedia.org/resource/Tunisia"}, "id": "TUN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[36.913127000000003, 41.335357999999999], [38.347664999999999, 40.948585999999999], [39.512607000000003, 41.102763000000003], [40.373432999999999, 41.013672999999997], [41.554084000000003, 41.535656000000003], [42.619548999999999, 41.583173000000002], [43.582746, 41.092143], [43.752657999999997, 40.740200999999999], [43.656435999999999, 40.253563999999997], [44.400008999999997, 40.005000000000003], [44.793990000000001, 39.713003], [44.109225000000002, 39.428136000000002], [44.421402999999998, 38.281281], [44.225755999999997, 37.971584], [44.772699000000003, 37.170445000000001], [44.293452000000002, 37.001514], [43.942259, 37.256228], [42.779125999999998, 37.385263999999999], [42.349590999999997, 37.229872999999998], [41.212088999999999, 37.074351999999998], [40.673259000000002, 37.091276000000001], [39.522579999999998, 36.716054], [38.699891000000001, 36.712927000000001], [38.167726999999999, 36.901209999999999], [37.066761, 36.623035999999999], [36.739494000000001, 36.817520000000002], [36.685389000000001, 36.259698999999998], [36.417549999999999, 36.040616999999997], [36.149763, 35.821534999999997], [35.782085000000002, 36.274994999999997], [36.160822000000003, 36.650606000000003], [35.550936, 36.565443000000002], [34.714553000000002, 36.795532000000001], [34.026895000000003, 36.21996], [32.509157999999999, 36.107564000000004], [31.699594999999999, 36.644275], [30.621625000000002, 36.677864999999997], [30.391096000000001, 36.262981000000003], [29.699975999999999, 36.144356999999999], [28.732903, 36.676831], [27.641186999999999, 36.658822000000001], [27.048767999999999, 37.653360999999997], [26.318218000000002, 38.208132999999997], [26.8047, 38.985759999999999], [26.170784999999999, 39.463611999999998], [27.28002, 40.420014000000002], [28.819977999999999, 40.460011000000002], [29.240003999999999, 41.219991], [31.145934, 41.087622000000003], [32.347979000000002, 41.736263999999998], [33.513283000000001, 42.01896], [35.167704000000001, 42.040225], [36.913127000000003, 41.335357999999999]]], [[[27.192377, 40.690565999999997], [26.358008999999999, 40.151994000000002], [26.043351000000001, 40.617753999999998], [26.056941999999999, 40.824123], [26.294602000000001, 40.936261000000002], [26.604196000000002, 41.562114999999999], [26.117042000000001, 41.826904999999996], [27.135739000000001, 42.141485000000003], [27.99672, 42.007359000000001], [28.115525000000002, 41.622886000000001], [28.988443, 41.299934], [28.806438, 41.054962000000003], [27.619016999999999, 40.999822999999999], [27.192377, 40.690565999999997]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u0446\u0438\u044f", "fr": "Turquie", "en": "Turkey", "nl": "Turkije", "pt": "Turquia", "no": "Tyrkia", "de": "T\u00fcrkei", "it": "Turchia", "sv": "Turkiet", "pl": "Turcja", "fi": "Turkki", "zh": "\u571f\u8033\u5176", "ja": "\u30c8\u30eb\u30b3", "es": "Turqu\u00eda"}, "label_fr": "Turquie", "name": "Turkey", "dbpedia_uri": "http://dbpedia.org/resource/Turkey"}, "id": "TUR"}, {"geometry": {"type": "Polygon", "coordinates": [[[121.777818, 24.394273999999999], [121.17563199999999, 22.790856999999999], [120.74708, 21.970571], [120.220083, 22.814861000000001], [120.106189, 23.556263000000001], [120.69468000000001, 24.538450999999998], [121.49504399999999, 25.295459000000001], [121.951244, 24.997596000000001], [121.777818, 24.394273999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0439\u0432\u0430\u043d\u044c", "fr": "Ta\u00efwan", "en": "Taiwan", "nl": "Taiwan", "pt": "Ilha Formosa", "no": "Taiwan", "de": "Taiwan", "it": "Isola di Taiwan", "sv": "Taiwan (\u00f6)", "pl": "Tajwan (wyspa)", "fi": "Taiwan", "zh": "\u53f0\u7063", "ja": "\u53f0\u6e7e", "es": "Isla de Taiw\u00e1n"}, "label_fr": "Ta\u00efwan", "name": "Taiwan", "dbpedia_uri": "http://dbpedia.org/resource/Taiwan"}, "id": "TWN"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.903711000000001, -0.94999999999999996], [34.072620000000001, -1.05982], [37.698689999999999, -3.0969899999999999], [37.7669, -3.6771199999999999], [39.202219999999997, -4.6767700000000003], [38.740540000000003, -5.9089499999999999], [38.799770000000002, -6.4756600000000004], [39.439999999999998, -6.8399999999999999], [39.469999999999999, -7.0999999999999996], [39.194690000000001, -7.7039], [39.252029999999998, -8.0078099999999992], [39.186520000000002, -8.4855099999999997], [39.535739999999997, -9.1123700000000003], [39.949599999999997, -10.0984], [40.316589999999998, -10.3171], [39.521000000000001, -10.896879999999999], [38.427557, -11.285202], [37.827640000000002, -11.268789999999999], [37.471290000000003, -11.568759999999999], [36.775151000000001, -11.594537000000001], [36.514082000000002, -11.720938], [35.312398000000002, -11.439145999999999], [34.559989000000002, -11.520020000000001], [34.280000000000001, -10.16], [33.940837999999999, -9.6936739999999997], [33.739719999999998, -9.4171499999999995], [32.759374999999999, -9.2305989999999998], [32.191865, -8.9303589999999993], [31.556348, -8.7620489999999993], [31.157751000000001, -8.5945789999999995], [30.739999999999998, -8.3399999999999999], [30.199999999999999, -7.0800000000000001], [29.620000000000001, -6.5199999999999996], [29.419993000000002, -5.9399990000000003], [29.519987, -5.4199789999999997], [29.339998000000001, -4.4999830000000003], [29.753512000000001, -4.4523890000000002], [30.116320000000002, -4.0901199999999998], [30.50554, -3.5685799999999999], [30.75224, -3.3593099999999998], [30.743010000000002, -3.0343100000000001], [30.527660000000001, -2.80762], [30.469670000000001, -2.4138299999999999], [30.758309000000001, -2.2872499999999998], [30.816134999999999, -1.698914], [30.419104999999998, -1.1346590000000001], [30.769860000000001, -1.0145500000000001], [31.86617, -1.0273600000000001], [33.903711000000001, -0.94999999999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f", "fr": "Tanzanie", "en": "Tanzania", "nl": "Tanzania", "pt": "Tanz\u00e2nia", "no": "Tanzania", "de": "Tansania", "it": "Tanzania", "sv": "Tanzania", "pl": "Tanzania", "fi": "Tansania", "zh": "\u5766\u6851\u5c3c\u4e9a", "ja": "\u30bf\u30f3\u30b6\u30cb\u30a2", "es": "Tanzania"}, "label_fr": "Tanzanie", "name": "United Republic of Tanzania", "dbpedia_uri": "http://dbpedia.org/resource/Tanzania"}, "id": "TZA"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.86617, -1.0273600000000001], [30.769860000000001, -1.0145500000000001], [30.419104999999998, -1.1346590000000001], [29.821518999999999, -1.443322], [29.579466, -1.341313], [29.587838000000001, -0.58740599999999998], [29.819500000000001, -0.20530000000000001], [29.875779000000001, 0.59738000000000002], [30.086154000000001, 1.0623130000000001], [30.468508, 1.5838049999999999], [30.85267, 1.849396], [31.174149, 2.2044649999999999], [30.773319999999998, 2.33989], [30.833850000000002, 3.5091700000000001], [31.245560000000001, 3.7818999999999998], [31.881450000000001, 3.5582699999999998], [32.686419999999998, 3.7923200000000001], [33.390000000000001, 3.79], [34.005000000000003, 4.2498849999999999], [34.479129999999998, 3.5556000000000001], [34.596069999999997, 3.0537399999999999], [35.035989999999998, 1.90584], [34.6721, 1.1769400000000001], [34.18, 0.51500000000000001], [33.893568999999999, 0.10981399999999999], [33.903711000000001, -0.94999999999999996], [31.86617, -1.0273600000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0433\u0430\u043d\u0434\u0430", "fr": "Ouganda", "en": "Uganda", "nl": "Oeganda", "pt": "Uganda", "no": "Uganda", "de": "Uganda", "it": "Uganda", "sv": "Uganda", "pl": "Uganda", "fi": "Uganda", "zh": "\u4e4c\u5e72\u8fbe", "ja": "\u30a6\u30ac\u30f3\u30c0", "es": "Uganda"}, "label_fr": "Ouganda", "name": "Uganda", "dbpedia_uri": "http://dbpedia.org/resource/Uganda"}, "id": "UGA"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.785997999999999, 52.101678], [32.159412000000003, 52.061267000000001], [32.412058000000002, 52.288694999999997], [32.715761000000001, 52.238464999999998], [33.752699999999997, 52.335075000000003], [34.391731, 51.768881999999998], [34.141978000000002, 51.566412999999997], [34.224815999999997, 51.255992999999997], [35.022182999999998, 51.207571999999999], [35.377924, 50.773955000000001], [35.356116, 50.577196999999998], [36.626168, 50.225591000000001], [37.393459999999997, 50.383952999999998], [38.010630999999997, 49.915661999999998], [38.594988000000001, 49.926462000000001], [40.069057999999998, 49.601055000000002], [40.080789000000003, 49.307429999999997], [39.674664, 48.783817999999997], [39.895631999999999, 48.232405], [39.738278000000001, 47.898936999999997], [38.770584999999997, 47.825608000000003], [38.255111999999997, 47.546399999999998], [38.223537999999998, 47.10219], [37.425136999999999, 47.022221000000002], [36.759855000000002, 46.698700000000002], [35.823684999999998, 46.645963999999999], [34.962342, 46.273197000000003], [35.020788000000003, 45.651218999999998], [35.510008999999997, 45.409993], [36.529997999999999, 45.469990000000003], [36.334713000000001, 45.113216000000001], [35.239998999999997, 44.939996000000001], [33.882511000000001, 44.361479000000003], [33.326421000000003, 44.564877000000003], [33.546923999999997, 45.034770999999999], [32.454174000000002, 45.327466000000001], [32.630803999999998, 45.519185999999998], [33.588161999999997, 45.851568999999998], [33.298566999999998, 46.080598000000002], [31.744140000000002, 46.333348000000001], [31.675307, 46.706245000000003], [30.748749, 46.583100000000002], [30.377609, 46.032409999999999], [29.603289, 45.293308000000003], [29.149725, 45.464925000000001], [28.679779, 45.304031000000002], [28.233554000000002, 45.488283000000003], [28.485268999999999, 45.596907000000002], [28.659987000000001, 45.939987000000002], [28.933717000000001, 46.258830000000003], [28.862971999999999, 46.437888999999998], [29.072106999999999, 46.517677999999997], [29.170653999999999, 46.379261999999997], [29.759972000000001, 46.349988000000003], [30.024659, 46.423937000000002], [29.83821, 46.525326], [29.908852, 46.674360999999998], [29.559674000000001, 46.928583000000003], [29.415134999999999, 47.346645000000002], [29.050868000000001, 47.510227], [29.122698, 47.849094999999998], [28.670891000000001, 48.118149000000003], [28.259547000000001, 48.155562000000003], [27.522537, 48.467118999999997], [26.857824000000001, 48.368211000000002], [26.619337000000002, 48.220725999999999], [26.19745, 48.220880999999999], [25.945941000000001, 47.987149000000002], [25.207743000000001, 47.891055999999999], [24.866316999999999, 47.737526000000003], [24.402056000000002, 47.981878000000002], [23.760957999999999, 47.985598000000003], [23.142236, 48.096341000000002], [22.710531, 47.882193999999998], [22.640820000000001, 48.150239999999997], [22.085608000000001, 48.422263999999998], [22.280842, 48.825392000000001], [22.558138, 49.085737999999999], [22.776419000000001, 49.027394999999999], [22.518450000000001, 49.476773999999999], [23.426507999999998, 50.308506000000001], [23.922757000000001, 50.424880999999999], [24.029986000000001, 50.705407000000001], [23.527070999999999, 51.578454000000001], [24.005078000000001, 51.617443999999999], [24.553106, 51.888461], [25.327788000000002, 51.910656000000003], [26.337959000000001, 51.832289000000003], [27.454066000000001, 51.592303000000001], [28.241614999999999, 51.572226999999998], [28.617612999999999, 51.427714000000002], [28.992834999999999, 51.602043999999999], [29.254937999999999, 51.368234000000001], [30.157364000000001, 51.416137999999997], [30.555116999999999, 51.319502999999997], [30.619454000000001, 51.822806], [30.927548999999999, 52.042352999999999], [31.785997999999999, 52.101678]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u043a\u0440\u0430\u0438\u043d\u0430", "fr": "Ukraine", "en": "Ukraine", "nl": "Oekra\u00efne", "pt": "Ucr\u00e2nia", "no": "Ukraina", "de": "Ukraine", "it": "Ucraina", "sv": "Ukraina", "pl": "Ukraina", "fi": "Ukraina", "zh": "\u4e4c\u514b\u5170", "ja": "\u30a6\u30af\u30e9\u30a4\u30ca", "es": "Ucrania"}, "label_fr": "Ukraine", "name": "Ukraine", "dbpedia_uri": "http://dbpedia.org/resource/Ukraine"}, "id": "UKR"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.625132999999998, -30.216294999999999], [-56.976025999999997, -30.109686], [-55.973244999999999, -30.883075999999999], [-55.601509999999998, -30.853878999999999], [-54.572451999999998, -31.494510999999999], [-53.787951999999997, -32.047243000000002], [-53.209589000000001, -32.727665999999999], [-53.650543999999996, -33.202004000000002], [-53.373662000000003, -33.768377999999998], [-53.806426000000002, -34.396814999999997], [-54.935865999999997, -34.952646999999999], [-55.67409, -34.752659000000001], [-56.215297, -34.859836000000001], [-57.139685, -34.430456], [-57.817861000000001, -34.462547000000001], [-58.427073999999998, -33.909453999999997], [-58.349611000000003, -33.263188999999997], [-58.132648000000003, -33.040567000000003], [-58.142440000000001, -32.044504000000003], [-57.874937000000003, -31.016556000000001], [-57.625132999999998, -30.216294999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0440\u0443\u0433\u0432\u0430\u0439", "fr": "Uruguay", "en": "Uruguay", "nl": "Uruguay", "pt": "Uruguai", "no": "Uruguay", "de": "Uruguay", "it": "Uruguay", "sv": "Uruguay", "pl": "Urugwaj", "fi": "Uruguay", "zh": "\u4e4c\u62c9\u572d", "ja": "\u30a6\u30eb\u30b0\u30a2\u30a4", "es": "Uruguay"}, "label_fr": "Uruguay", "name": "Uruguay", "dbpedia_uri": "http://dbpedia.org/resource/Uruguay"}, "id": "URY"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-155.54211000000001, 19.083480000000002], [-155.68817000000001, 18.91619], [-155.93664999999999, 19.05939], [-155.90806000000001, 19.33888], [-156.07346999999999, 19.702940000000002], [-156.02368000000001, 19.814219999999999], [-155.85007999999999, 19.97729], [-155.91907, 20.173950000000001], [-155.86107999999999, 20.267209999999999], [-155.78505000000001, 20.248699999999999], [-155.40214, 20.079750000000001], [-155.22452000000001, 19.993020000000001], [-155.06226000000001, 19.859100000000002], [-154.80741, 19.508710000000001], [-154.83147, 19.453279999999999], [-155.22217000000001, 19.239719999999998], [-155.54211000000001, 19.083480000000002]]], [[[-156.07926, 20.643969999999999], [-156.41444999999999, 20.572410000000001], [-156.58672999999999, 20.783000000000001], [-156.70167000000001, 20.8643], [-156.71055000000001, 20.926760000000002], [-156.61258000000001, 21.01249], [-156.25711000000001, 20.917449999999999], [-155.99565999999999, 20.764040000000001], [-156.07926, 20.643969999999999]]], [[[-156.75824, 21.176839999999999], [-156.78933000000001, 21.068729999999999], [-157.32521, 21.097770000000001], [-157.25027, 21.219580000000001], [-156.75824, 21.176839999999999]]], [[[-157.65282999999999, 21.32217], [-157.70703, 21.264420000000001], [-157.77860000000001, 21.277290000000001], [-158.12666999999999, 21.312439999999999], [-158.25380000000001, 21.539190000000001], [-158.29265000000001, 21.57912], [-158.02520000000001, 21.71696], [-157.94161, 21.652719999999999], [-157.65282999999999, 21.32217]]], [[[-159.34512000000001, 21.981999999999999], [-159.46372, 21.882989999999999], [-159.80051, 22.065329999999999], [-159.74877000000001, 22.138200000000001], [-159.59620000000001, 22.236180000000001], [-159.36569, 22.214939999999999], [-159.34512000000001, 21.981999999999999]]], [[[-94.817580000000007, 49.389049999999997], [-94.640000000000001, 48.840000000000003], [-94.329139999999995, 48.670740000000002], [-93.630870000000002, 48.609259999999999], [-92.609999999999999, 48.450000000000003], [-91.640000000000001, 48.140000000000001], [-90.829999999999998, 48.270000000000003], [-89.599999999999994, 48.009999999999998], [-89.272917000000007, 48.019807999999998], [-88.378113999999997, 48.302917999999998], [-87.439792999999995, 47.939999999999998], [-86.461990999999998, 47.553337999999997], [-85.652362999999994, 47.220219], [-84.876080000000002, 46.900083000000002], [-84.779238000000007, 46.637101999999999], [-84.543749000000005, 46.538684000000003], [-84.604900000000001, 46.439599999999999], [-84.336699999999993, 46.408769999999997], [-84.142120000000006, 46.512225999999998], [-84.091851000000005, 46.275418999999999], [-83.890765000000002, 46.116926999999997], [-83.616130999999996, 46.116926999999997], [-83.469550999999996, 45.994686000000002], [-83.592850999999996, 45.816893999999998], [-82.550925000000007, 45.347517000000003], [-82.337762999999995, 44.439999999999998], [-82.137642, 43.571088000000003], [-82.430000000000007, 42.979999999999997], [-82.900000000000006, 42.43], [-83.120000000000005, 42.079999999999998], [-83.141999999999996, 41.975681000000002], [-83.029809999999998, 41.832796000000002], [-82.690089, 41.675105000000002], [-82.439278000000002, 41.675105000000002], [-81.277747000000005, 42.209026000000001], [-80.247448000000006, 42.366199999999999], [-78.939362000000003, 42.863610999999999], [-78.920000000000002, 42.965000000000003], [-79.010000000000005, 43.270000000000003], [-79.171673999999996, 43.466338999999998], [-78.720280000000002, 43.625089000000003], [-77.737885000000006, 43.629055999999999], [-76.820034000000007, 43.628784000000003], [-76.5, 44.018459], [-76.375, 44.096310000000003], [-75.318209999999993, 44.816450000000003], [-74.867000000000004, 45.000480000000003], [-73.347830000000002, 45.007379999999998], [-71.50506, 45.008200000000002], [-71.405000000000001, 45.255000000000003], [-71.084819999999993, 45.305239999999998], [-70.659999999999997, 45.460000000000001], [-70.305000000000007, 45.914999999999999], [-69.999970000000005, 46.693069999999999], [-69.237216000000004, 47.447780999999999], [-68.905000000000001, 47.185000000000002], [-68.234440000000006, 47.354860000000002], [-67.790459999999996, 47.066360000000003], [-67.791340000000005, 45.702809999999999], [-67.137410000000003, 45.137529999999998], [-66.964659999999995, 44.809699999999999], [-68.032520000000005, 44.325200000000002], [-69.060000000000002, 43.979999999999997], [-70.116169999999997, 43.684049999999999], [-70.645476000000002, 43.090237999999999], [-70.814890000000005, 42.865299999999998], [-70.825000000000003, 42.335000000000001], [-70.495000000000005, 41.805], [-70.079999999999998, 41.780000000000001], [-70.185000000000002, 42.145000000000003], [-69.884969999999996, 41.922829999999998], [-69.965029999999999, 41.637169999999998], [-70.640000000000001, 41.475000000000001], [-71.12039, 41.494450000000001], [-71.859999999999999, 41.32], [-72.295000000000002, 41.270000000000003], [-72.876429999999999, 41.220649999999999], [-73.709999999999994, 40.931102000000003], [-72.241259999999997, 41.119480000000003], [-71.944999999999993, 40.93], [-73.344999999999999, 40.630000000000003], [-73.981999999999999, 40.628], [-73.952325000000002, 40.750749999999996], [-74.256709999999998, 40.473509999999997], [-73.962440000000001, 40.427630000000001], [-74.178380000000004, 39.70926], [-74.906040000000004, 38.939540000000001], [-74.980410000000006, 39.196399999999997], [-75.200019999999995, 39.248449999999998], [-75.528049999999993, 39.4985], [-75.319999999999993, 38.960000000000001], [-75.071834999999993, 38.782032000000001], [-75.056730000000002, 38.404119999999999], [-75.377470000000002, 38.015509999999999], [-75.94023, 37.216889999999999], [-76.031270000000006, 37.256599999999999], [-75.722049999999996, 37.937049999999999], [-76.232870000000005, 38.319215], [-76.349999999999994, 39.149999999999999], [-76.542725000000004, 38.717615000000002], [-76.329329999999999, 38.083260000000003], [-76.989998, 38.239992000000001], [-76.30162, 37.917945000000003], [-76.258740000000003, 36.9664], [-75.971800000000002, 36.897260000000003], [-75.868039999999993, 36.551250000000003], [-75.727490000000003, 35.550739999999998], [-76.36318, 34.808540000000001], [-77.397634999999994, 34.512009999999997], [-78.054959999999994, 33.925469999999997], [-78.554349999999999, 33.861330000000002], [-79.060670000000002, 33.493949999999998], [-79.203569999999999, 33.158389999999997], [-80.301325000000006, 32.509354999999999], [-80.864980000000003, 32.033299999999997], [-81.336290000000005, 31.44049], [-81.49042, 30.729990000000001], [-81.31371, 30.035520000000002], [-80.980000000000004, 29.18], [-80.535584999999998, 28.47213], [-80.530000000000001, 28.039999999999999], [-80.056539000000001, 26.879999999999999], [-80.088014999999999, 26.205765], [-80.131559999999993, 25.816775], [-80.381029999999996, 25.206160000000001], [-80.680000000000007, 25.079999999999998], [-81.172129999999996, 25.201260000000001], [-81.329999999999998, 25.640000000000001], [-81.709999999999994, 25.870000000000001], [-82.239999999999995, 26.73], [-82.705150000000003, 27.495039999999999], [-82.855260000000001, 27.886240000000001], [-82.650000000000006, 28.550000000000001], [-82.930000000000007, 29.100000000000001], [-83.709590000000006, 29.93656], [-84.099999999999994, 30.09], [-85.108819999999994, 29.636150000000001], [-85.287840000000003, 29.686119999999999], [-85.773099999999999, 30.152609999999999], [-86.400000000000006, 30.399999999999999], [-87.530360000000002, 30.274329999999999], [-88.417820000000006, 30.384899999999998], [-89.180490000000006, 30.31598], [-89.593830999999994, 30.159994000000001], [-89.413735000000003, 29.894189999999998], [-89.430000000000007, 29.48864], [-89.217669999999998, 29.291080000000001], [-89.408230000000003, 29.159610000000001], [-89.77928, 29.30714], [-90.154629999999997, 29.117429999999999], [-90.880224999999996, 29.148534999999999], [-91.626784999999998, 29.677], [-92.49906, 29.552299999999999], [-93.226370000000003, 29.783750000000001], [-93.848420000000004, 29.713629999999998], [-94.689999999999998, 29.48], [-95.600260000000006, 28.738630000000001], [-96.594040000000007, 28.307480000000002], [-97.140000000000001, 27.829999999999998], [-97.370000000000005, 27.379999999999999], [-97.379999999999995, 26.690000000000001], [-97.329999999999998, 26.210000000000001], [-97.140000000000001, 25.870000000000001], [-97.530000000000001, 25.84], [-98.239999999999995, 26.059999999999999], [-99.019999999999996, 26.370000000000001], [-99.299999999999997, 26.84], [-99.519999999999996, 27.539999999999999], [-100.11, 28.109999999999999], [-100.45583999999999, 28.696120000000001], [-100.9576, 29.380710000000001], [-101.66240000000001, 29.779299999999999], [-102.48, 29.760000000000002], [-103.11, 28.969999999999999], [-103.94, 29.27], [-104.45697, 29.571960000000001], [-104.70574999999999, 30.121729999999999], [-105.03737, 30.644020000000001], [-105.63159, 31.083829999999999], [-106.1429, 31.39995], [-106.50758999999999, 31.754519999999999], [-108.23999999999999, 31.754854000000002], [-108.24194, 31.342220000000001], [-109.035, 31.341940000000001], [-111.02361000000001, 31.334720000000001], [-113.30498, 32.039140000000003], [-114.815, 32.525280000000002], [-114.72139, 32.720829999999999], [-115.99135, 32.612389999999998], [-117.12775999999999, 32.535339999999998], [-117.29593800000001, 33.046225], [-117.944, 33.621236000000003], [-118.410602, 33.740909000000002], [-118.51989500000001, 34.027782000000002], [-119.081, 34.078000000000003], [-119.438841, 34.348477000000003], [-120.36778, 34.447110000000002], [-120.62286, 34.608550000000001], [-120.74433000000001, 35.156860000000002], [-121.71456999999999, 36.161529999999999], [-122.54747, 37.551760000000002], [-122.51201, 37.783389999999997], [-122.95319000000001, 38.113709999999998], [-123.7272, 38.951659999999997], [-123.86517000000001, 39.76699], [-124.39807, 40.313200000000002], [-124.17886, 41.142020000000002], [-124.2137, 41.999639999999999], [-124.53283999999999, 42.765990000000002], [-124.14214, 43.708379999999998], [-124.020535, 44.615895000000002], [-123.89892999999999, 45.523409999999998], [-124.079635, 46.864750000000001], [-124.39567, 47.720170000000003], [-124.68720999999999, 48.184432999999999], [-124.566101, 48.379714999999997], [-123.12, 48.039999999999999], [-122.58736, 47.095999999999997], [-122.34, 47.359999999999999], [-122.5, 48.18], [-122.84, 49], [-120, 49], [-117.03121, 49], [-116.04818, 49], [-113, 49], [-110.05, 49], [-107.05, 49], [-104.04826, 48.999859999999998], [-100.65000000000001, 49], [-97.228719999999996, 49.000700000000002], [-95.15907, 49], [-95.156090000000006, 49.384250000000002], [-94.817580000000007, 49.389049999999997]]], [[[-153.006314, 57.115842000000001], [-154.00509, 56.734676999999998], [-154.516403, 56.992749000000003], [-154.67099300000001, 57.461196000000001], [-153.76277999999999, 57.816575], [-153.22872899999999, 57.968967999999997], [-152.56479100000001, 57.901426999999998], [-152.14114699999999, 57.591059000000001], [-153.006314, 57.115842000000001]]], [[[-165.57916399999999, 59.909987000000001], [-166.19277, 59.754441], [-166.84833699999999, 59.941406000000001], [-167.455277, 60.213068999999997], [-166.467792, 60.384169999999997], [-165.67443, 60.293607000000002], [-165.57916399999999, 59.909987000000001]]], [[[-171.73165700000001, 63.782514999999997], [-171.11443399999999, 63.592191], [-170.49111199999999, 63.694974999999999], [-169.68250499999999, 63.431116000000003], [-168.68943899999999, 63.297505999999998], [-168.771941, 63.188597999999999], [-169.52943999999999, 62.976931], [-170.29055600000001, 63.194437999999998], [-170.67138600000001, 63.375821999999999], [-171.55306300000001, 63.317788999999998], [-171.791111, 63.405845999999997], [-171.73165700000001, 63.782514999999997]]], [[[-155.06779, 71.147775999999993], [-154.344165, 70.696409000000003], [-153.90000599999999, 70.889989], [-152.21000599999999, 70.829992000000004], [-152.27000200000001, 70.600005999999993], [-150.739992, 70.430017000000007], [-149.72000299999999, 70.530010000000004], [-147.613362, 70.214034999999996], [-145.68998999999999, 70.120009999999994], [-144.92001099999999, 69.989992000000001], [-143.58944600000001, 70.152513999999996], [-142.07250999999999, 69.851938000000004], [-140.98598799999999, 69.711997999999994], [-140.98598799999999, 69.711997999999994], [-140.99249900000001, 66.000028999999998], [-140.99777, 60.306396999999997], [-140.01299800000001, 60.276837999999998], [-139.03899999999999, 60.000006999999997], [-138.34089, 59.562109999999997], [-137.45249999999999, 58.905000000000001], [-136.47971999999999, 59.463889999999999], [-135.47583, 59.787779999999998], [-134.94499999999999, 59.270560000000003], [-134.27110999999999, 58.861109999999996], [-133.355549, 58.410285000000002], [-132.73042000000001, 57.692889999999998], [-131.70780999999999, 56.552120000000002], [-130.00778, 55.91583], [-129.979994, 55.284998000000002], [-130.53611000000001, 54.802753000000003], [-131.08581799999999, 55.178905999999998], [-131.96721099999999, 55.497776000000002], [-132.250011, 56.369996], [-133.53918100000001, 57.178887000000003], [-134.07806299999999, 58.123068000000004], [-135.03821099999999, 58.187714999999997], [-136.628062, 58.212209000000001], [-137.800006, 58.499994999999998], [-139.86778699999999, 59.537762000000001], [-140.82527400000001, 59.727516999999999], [-142.574444, 60.084446999999997], [-143.95888099999999, 59.999180000000003], [-145.925557, 60.45861], [-147.114374, 60.884656], [-148.22430600000001, 60.672989000000001], [-148.018066, 59.978329000000002], [-148.57082299999999, 59.914172999999998], [-149.727858, 59.705658], [-150.60824299999999, 59.368211000000002], [-151.71639300000001, 59.155821000000003], [-151.859433, 59.744984000000002], [-151.409719, 60.725802999999999], [-150.34694099999999, 61.033588000000002], [-150.62111100000001, 61.284424999999999], [-151.895839, 60.727198000000001], [-152.57832999999999, 60.061656999999997], [-154.019172, 59.350279], [-153.28751099999999, 58.864727999999999], [-154.23249200000001, 58.146374000000002], [-155.307491, 57.727795], [-156.308335, 57.422773999999997], [-156.55609699999999, 56.979984999999999], [-158.11721700000001, 56.463608000000001], [-158.43332100000001, 55.994154000000002], [-159.60332700000001, 55.566685999999997], [-160.28971999999999, 55.643580999999998], [-161.22304800000001, 55.364735000000003], [-162.23776599999999, 55.024186999999998], [-163.069447, 54.689737000000001], [-164.78556900000001, 54.404173], [-164.94222600000001, 54.572225000000003], [-163.84834000000001, 55.039431], [-162.870001, 55.348042999999997], [-161.80417499999999, 55.894986000000003], [-160.563605, 56.008054999999999], [-160.07056, 56.418055000000003], [-158.68444299999999, 57.016674999999999], [-158.461097, 57.216920999999999], [-157.72277, 57.570000999999998], [-157.550274, 58.328325999999997], [-157.041675, 58.918885000000003], [-158.19473099999999, 58.615802000000002], [-158.51721800000001, 58.787781000000003], [-159.058606, 58.424185999999999], [-159.71166700000001, 58.93139], [-159.981289, 58.572549000000002], [-160.35527099999999, 59.071123], [-161.35500300000001, 58.670838000000003], [-161.96889400000001, 58.671664999999997], [-162.05498700000001, 59.266925000000001], [-161.87417099999999, 59.633620999999998], [-162.51805899999999, 59.989724000000002], [-163.818341, 59.798056000000003], [-164.662218, 60.267484000000003], [-165.34638799999999, 60.507496000000003], [-165.350832, 61.073895], [-166.12137899999999, 61.500019000000002], [-165.734452, 62.074997000000003], [-164.91917900000001, 62.633076000000003], [-164.56250800000001, 63.146377999999999], [-163.753332, 63.219448999999997], [-163.06722400000001, 63.059458999999997], [-162.26055500000001, 63.541936], [-161.53444999999999, 63.455817000000003], [-160.77250699999999, 63.766108000000003], [-160.95833500000001, 64.222798999999995], [-161.518068, 64.402788000000001], [-160.77777800000001, 64.788604000000007], [-161.39192600000001, 64.777235000000005], [-162.45304999999999, 64.559444999999997], [-162.75778600000001, 64.338605000000001], [-163.54639399999999, 64.559160000000006], [-164.96082999999999, 64.446944999999999], [-166.42528799999999, 64.686672000000002], [-166.84500399999999, 65.088896000000005], [-168.11055999999999, 65.669996999999995], [-166.70527100000001, 66.088318000000001], [-164.47470999999999, 66.576660000000004], [-163.652512, 66.576660000000004], [-163.788602, 66.077207000000001], [-161.677774, 66.116119999999995], [-162.48971499999999, 66.735564999999994], [-163.719717, 67.116394999999997], [-164.43099100000001, 67.616337999999999], [-165.390287, 68.042771999999999], [-166.76444100000001, 68.358877000000007], [-166.20470700000001, 68.883031000000003], [-164.43081100000001, 68.915535000000006], [-163.16861399999999, 69.371115000000003], [-162.930566, 69.858062000000004], [-161.908897, 70.333330000000004], [-160.934797, 70.447689999999994], [-159.039176, 70.891642000000004], [-158.11972299999999, 70.824720999999997], [-156.580825, 71.357764000000003], [-155.06779, 71.147775999999993]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0428\u0442\u0430\u0442\u044b \u0410\u043c\u0435\u0440\u0438\u043a\u0438", "fr": "\u00c9tats-Unis", "en": "United States", "nl": "Verenigde Staten", "pt": "Estados Unidos", "no": "USA", "de": "Vereinigte Staaten", "it": "Stati Uniti d'America", "sv": "USA", "pl": "Stany Zjednoczone", "fi": "Yhdysvallat", "zh": "\u7f8e\u570b", "ja": "\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd", "es": "Estados Unidos"}, "label_fr": "\u00c9tats-Unis", "name": "United States of America", "dbpedia_uri": "http://dbpedia.org/resource/United_States"}, "id": "USA"}, {"geometry": {"type": "Polygon", "coordinates": [[[66.518607000000003, 37.362783999999998], [66.546149999999997, 37.974685000000001], [65.215998999999996, 38.402695000000001], [64.170222999999993, 38.892406999999999], [63.518014999999998, 39.363256999999997], [62.37426, 40.053885999999999], [61.882714, 41.084857], [61.547179, 41.266370000000002], [60.465952999999999, 41.220326999999997], [60.083340999999997, 41.425145999999998], [59.976421999999999, 42.223081999999998], [58.629010999999998, 42.751550999999999], [57.786529999999999, 42.170552999999998], [56.932214999999999, 41.826025999999999], [57.096390999999997, 41.322310000000002], [55.968190999999997, 41.308641999999999], [55.928916999999998, 44.995857999999998], [58.503126999999999, 45.586804000000001], [58.689988999999997, 45.500014], [60.239972000000002, 44.784036999999998], [61.058320000000002, 44.405816999999999], [62.013300000000001, 43.504477000000001], [63.185786999999998, 43.650075000000001], [64.900824, 43.728081000000003], [66.098011999999997, 42.997660000000003], [66.023392000000001, 41.994646000000003], [66.510649000000001, 41.987644000000003], [66.714046999999994, 41.168444000000001], [67.985855999999998, 41.135990999999997], [68.259895999999998, 40.662325000000003], [68.632482999999993, 40.668680999999999], [69.070026999999996, 41.384244000000002], [70.388964999999999, 42.081308], [70.962315000000004, 42.266154], [71.259247999999999, 42.167710999999997], [70.420022000000003, 41.519998000000001], [71.157859000000002, 41.143586999999997], [71.870114999999998, 41.392899999999997], [73.055417000000006, 40.866033000000002], [71.774874999999994, 40.145843999999997], [71.014197999999993, 40.244365999999999], [70.601406999999995, 40.218527000000002], [70.458160000000007, 40.496495000000003], [70.666622000000004, 40.960213000000003], [69.329494999999994, 40.727823999999998], [69.011633000000003, 40.086157999999998], [68.536416000000003, 39.533453000000002], [67.701429000000005, 39.580477999999999], [67.442220000000006, 39.140143999999999], [68.176024999999996, 38.901553], [68.392032999999998, 38.157024999999997], [67.829999999999998, 37.144993999999997], [67.075782000000004, 37.356144], [66.518607000000003, 37.362783999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Ouzb\u00e9kistan", "en": "Uzbekistan", "nl": "Oezbekistan", "pt": "Uzbequist\u00e3o", "no": "Usbekistan", "de": "Usbekistan", "it": "Uzbekistan", "sv": "Uzbekistan", "pl": "Uzbekistan", "fi": "Uzbekistan", "zh": "\u4e4c\u5179\u522b\u514b\u65af\u5766", "ja": "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3", "es": "Uzbekist\u00e1n"}, "label_fr": "Ouzb\u00e9kistan", "name": "Uzbekistan", "dbpedia_uri": "http://dbpedia.org/resource/Uzbekistan"}, "id": "UZB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-71.331584000000007, 11.776284], [-71.360005999999998, 11.539994], [-71.947050000000004, 11.423282], [-71.620868000000002, 10.96946], [-71.633064000000005, 10.446494], [-72.074173999999999, 9.8656509999999997], [-71.695644000000001, 9.0722629999999995], [-71.264559000000006, 9.1371950000000002], [-71.039998999999995, 9.8599929999999993], [-71.350083999999995, 10.211935], [-71.400622999999996, 10.968969], [-70.155298999999999, 11.375482], [-70.293842999999995, 11.846822], [-69.943245000000005, 12.162307], [-69.584299999999999, 11.459611000000001], [-68.882998999999998, 11.443384999999999], [-68.233271000000002, 10.885744000000001], [-68.194126999999995, 10.554653], [-67.296249000000003, 10.545868], [-66.227863999999997, 10.648626999999999], [-65.655237999999997, 10.200799], [-64.890451999999996, 10.077215000000001], [-64.329479000000006, 10.389599], [-64.318006999999994, 10.641418], [-63.079321999999998, 10.701724], [-61.880946000000002, 10.715624999999999], [-62.730119000000002, 10.420268999999999], [-62.388511999999999, 9.9482040000000005], [-61.588766999999997, 9.8730670000000007], [-60.830596999999997, 9.3813399999999998], [-60.671252000000003, 8.5801739999999995], [-60.150095999999998, 8.6027570000000004], [-59.758285000000001, 8.3670349999999996], [-60.550587999999998, 7.7796029999999998], [-60.637973000000002, 7.415], [-60.295667999999999, 7.0439109999999996], [-60.543998999999999, 6.8565839999999998], [-61.159336000000003, 6.6960769999999998], [-61.139415, 6.2342969999999998], [-61.410302999999999, 5.9590680000000003], [-60.733573999999997, 5.2002769999999998], [-60.601179000000002, 4.9180979999999996], [-60.966892999999999, 4.5364680000000002], [-62.085430000000002, 4.1621240000000004], [-62.804532999999999, 4.0069650000000001], [-63.093198000000001, 3.7705709999999999], [-63.888342999999999, 4.0205299999999999], [-64.628658999999999, 4.1484810000000003], [-64.816063999999997, 4.0564450000000001], [-64.368493999999998, 3.7972100000000002], [-64.408828, 3.1267860000000001], [-64.269998999999999, 2.4970059999999998], [-63.422866999999997, 2.4110680000000002], [-63.368788000000002, 2.2008999999999999], [-64.083084999999997, 1.916369], [-64.199306000000007, 1.492855], [-64.611012000000002, 1.3287310000000001], [-65.354713000000004, 1.0952820000000001], [-65.548266999999996, 0.78925400000000001], [-66.325765000000004, 0.72445199999999998], [-66.876326000000006, 1.2533609999999999], [-67.181293999999994, 2.2506379999999999], [-67.447091999999998, 2.6002809999999998], [-67.809938000000002, 2.8206549999999999], [-67.303173000000001, 3.318454], [-67.337564, 3.5423420000000001], [-67.621836000000002, 3.8394819999999998], [-67.823012000000006, 4.5039369999999996], [-67.744697000000002, 5.2211290000000004], [-67.521531999999993, 5.55687], [-67.341440000000006, 6.0954680000000003], [-67.695087000000001, 6.2673180000000004], [-68.265051999999997, 6.1532679999999997], [-68.985319000000004, 6.2068050000000001], [-69.389480000000006, 6.0998609999999998], [-70.093312999999995, 6.9603760000000001], [-70.674233999999998, 7.0877850000000002], [-71.960176000000004, 6.9916150000000004], [-72.198352, 7.3404309999999997], [-72.444486999999995, 7.4237849999999996], [-72.479679000000004, 7.6325060000000002], [-72.360900999999998, 8.0026379999999993], [-72.439862000000005, 8.4052749999999996], [-72.660494999999997, 8.6252879999999994], [-72.788730000000001, 9.0850270000000002], [-73.304952, 9.1519999999999992], [-73.027603999999997, 9.7367699999999999], [-72.905286000000004, 10.450343999999999], [-72.614658000000006, 10.821975], [-72.227575000000002, 11.108701999999999], [-71.973922000000002, 11.608672], [-71.331584000000007, 11.776284]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043d\u0435\u0441\u0443\u044d\u043b\u0430", "fr": "Venezuela", "en": "Venezuela", "nl": "Venezuela", "pt": "Venezuela", "no": "Venezuela", "de": "Venezuela", "it": "Venezuela", "sv": "Venezuela", "pl": "Wenezuela", "fi": "Venezuela", "zh": "\u59d4\u5167\u745e\u62c9", "ja": "\u30d9\u30cd\u30ba\u30a8\u30e9", "es": "Venezuela"}, "label_fr": "Venezuela", "name": "Venezuela", "dbpedia_uri": "http://dbpedia.org/resource/Venezuela"}, "id": "VEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[108.05018, 21.552379999999999], [106.715068, 20.696850999999999], [105.881682, 19.752050000000001], [105.66200600000001, 19.058164999999999], [106.426817, 18.004121000000001], [107.361954, 16.697457], [108.26949500000001, 16.079742], [108.877107, 15.276691], [109.33526999999999, 13.426028000000001], [109.200136, 11.666859000000001], [108.36613, 11.008321], [107.220929, 10.364483999999999], [106.405113, 9.5308399999999995], [105.158264, 8.5997599999999998], [104.795185, 9.2410379999999996], [105.07620199999999, 9.9184909999999995], [104.334335, 10.486544], [105.199915, 10.88931], [106.24966999999999, 10.961812], [105.810524, 11.567615], [107.49140300000001, 12.337206], [107.614548, 13.535531000000001], [107.382727, 14.202441], [107.564525, 15.202173], [107.31270600000001, 15.908538], [106.55600800000001, 16.604284], [105.92576200000001, 17.485315], [105.094598, 18.666975000000001], [103.89653199999999, 19.265180999999998], [104.18338799999999, 19.624668], [104.822574, 19.886641999999998], [104.435, 20.758732999999999], [103.203861, 20.766562], [102.754896, 21.675136999999999], [102.170436, 22.464753000000002], [102.706992, 22.708794999999999], [103.504515, 22.703757], [104.47685799999999, 22.81915], [105.32920900000001, 23.352063000000001], [105.81124699999999, 22.976891999999999], [106.725403, 22.794267999999999], [106.567273, 22.218205000000001], [107.04342, 21.811899], [108.05018, 21.552379999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u044c\u0435\u0442\u043d\u0430\u043c", "fr": "Vi\u00eat Nam", "en": "Vietnam", "nl": "Vietnam", "pt": "Vietname", "no": "Vietnam", "de": "Vietnam", "it": "Vietnam", "sv": "Vietnam", "pl": "Wietnam", "fi": "Vietnam", "zh": "\u8d8a\u5357", "ja": "\u30d9\u30c8\u30ca\u30e0", "es": "Vietnam"}, "label_fr": "Vi\u00eat Nam", "name": "Vietnam", "dbpedia_uri": "http://dbpedia.org/resource/Vietnam"}, "id": "VNM"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[167.844877, -16.466332999999999], [167.51518100000001, -16.597850000000001], [167.18000799999999, -16.159994999999999], [167.216801, -15.891845999999999], [167.844877, -16.466332999999999]]], [[[167.10771199999999, -14.933920000000001], [167.270028, -15.740021], [167.00120699999999, -15.614602], [166.79315800000001, -15.668811], [166.64985899999999, -15.392704], [166.62913699999999, -14.626497000000001], [167.10771199999999, -14.933920000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0430\u043d\u0443\u0430\u0442\u0443", "fr": "Vanuatu", "en": "Vanuatu", "nl": "Vanuatu", "pt": "Vanuatu", "no": "Vanuatu", "de": "Vanuatu", "it": "Vanuatu", "sv": "Vanuatu", "pl": "Vanuatu", "fi": "Vanuatu", "zh": "\u74e6\u52aa\u963f\u56fe", "ja": "\u30d0\u30cc\u30a2\u30c4", "es": "Vanuatu"}, "label_fr": "Vanuatu", "name": "Vanuatu", "dbpedia_uri": "http://dbpedia.org/resource/Vanuatu"}, "id": "VUT"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.545665, 32.393991999999997], [35.545251999999998, 31.782505], [35.397561000000003, 31.489086], [34.927408, 31.353435000000001], [34.970506999999998, 31.616778], [35.225892000000002, 31.754341], [34.974640999999998, 31.866582000000001], [35.183929999999997, 32.532511], [35.545665, 32.393991999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043f\u0430\u0434\u043d\u044b\u0439 \u0431\u0435\u0440\u0435\u0433 \u0440\u0435\u043a\u0438 \u0418\u043e\u0440\u0434\u0430\u043d", "fr": "Cisjordanie", "en": "West Bank", "nl": "Westelijke Jordaanoever", "pt": "Cisjord\u00e2nia", "no": "Vestbredden", "de": "Westjordanland", "it": "Cisgiordania", "sv": "V\u00e4stbanken", "pl": "Zachodni Brzeg", "fi": "L\u00e4nsiranta", "zh": "\u7d04\u65e6\u6cb3\u897f\u5cb8\u5730\u5340", "ja": "\u30e8\u30eb\u30c0\u30f3\u5ddd\u897f\u5cb8\u5730\u533a", "es": "Cisjordania"}, "label_fr": "Cisjordanie", "name": "West Bank", "dbpedia_uri": "http://dbpedia.org/resource/West_Bank"}, "id": "PSE"}, {"geometry": {"type": "Polygon", "coordinates": [[[53.108573, 16.651050999999999], [52.385205999999997, 16.382411000000001], [52.191729000000002, 15.938433], [52.168165000000002, 15.59742], [51.172514999999997, 15.17525], [49.574576, 14.708767], [48.679231000000001, 14.003202], [48.238947000000003, 13.948090000000001], [47.938913999999997, 14.007232999999999], [47.354453999999997, 13.592219999999999], [46.717075999999999, 13.399699], [45.877592999999997, 13.347764], [45.625050000000002, 13.290946], [45.406458999999998, 13.026904999999999], [45.144356000000002, 12.953938000000001], [44.989533000000002, 12.699586999999999], [44.494576000000002, 12.721653], [44.175113000000003, 12.58595], [43.482959000000001, 12.636799999999999], [43.222870999999998, 13.22095], [43.251448000000003, 13.767583999999999], [43.087944, 14.06263], [42.892245000000003, 14.802249], [42.604872999999998, 15.213335000000001], [42.805014999999997, 15.261963], [42.702438000000001, 15.718885999999999], [42.823670999999997, 15.911742], [42.779331999999997, 16.347891000000001], [43.218375000000002, 16.666889999999999], [43.115797999999998, 17.088439999999999], [43.380794000000002, 17.579986999999999], [43.791519000000001, 17.319977000000002], [44.062612999999999, 17.410359], [45.216650999999999, 17.433329000000001], [45.399999000000001, 17.333335000000002], [46.366658999999999, 17.233315000000001], [46.749994000000001, 17.283338000000001], [47.000005000000002, 16.949998999999998], [47.466695000000001, 17.116682000000001], [48.183343999999998, 18.166668999999999], [49.116672000000001, 18.616668000000001], [52.000010000000003, 19.000003], [52.782184000000001, 17.349741999999999], [53.108573, 16.651050999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0419\u0435\u043c\u0435\u043d", "fr": "Y\u00e9men", "en": "Yemen", "nl": "Jemen", "pt": "I\u00e9men", "no": "Jemen", "de": "Jemen", "it": "Yemen", "sv": "Jemen", "pl": "Jemen", "fi": "Jemen", "zh": "\u4e5f\u95e8", "ja": "\u30a4\u30a8\u30e1\u30f3", "es": "Yemen"}, "label_fr": "Y\u00e9men", "name": "Yemen", "dbpedia_uri": "http://dbpedia.org/resource/Yemen"}, "id": "YEM"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.521000999999998, -29.257387000000001], [31.325561, -29.401978], [30.901762999999999, -29.909956999999999], [30.622813000000001, -30.423776], [30.055716, -31.140269], [28.925553000000001, -32.172041], [28.219756, -32.771953000000003], [27.464607999999998, -33.226964000000002], [26.419452, -33.61495], [25.909663999999999, -33.66704], [25.780628, -33.944645999999999], [25.172861999999999, -33.796850999999997], [24.677852999999999, -33.987175999999998], [23.594042999999999, -33.794474000000001], [22.988188999999998, -33.916431000000003], [22.574157, -33.864083000000001], [21.542798999999999, -34.258839000000002], [20.689053000000001, -34.417175], [20.071261, -34.795136999999997], [19.616405, -34.819166000000003], [19.193277999999999, -34.462598999999997], [18.855315000000001, -34.444305999999997], [18.424643, -33.997872999999998], [18.377410999999999, -34.136521000000002], [18.244499000000001, -33.867752000000003], [18.250080000000001, -33.281430999999998], [17.925190000000001, -32.611291000000001], [18.247910000000001, -32.429130999999998], [18.221761999999998, -31.661632999999998], [17.566918000000001, -30.725721], [17.064416000000001, -29.878640999999998], [17.062918, -29.875954], [16.344977, -28.576705], [16.824017000000001, -28.082162], [17.218928999999999, -28.355943], [17.387497, -28.783514], [17.836151999999998, -28.856377999999999], [18.464898999999999, -29.045462000000001], [19.002127000000002, -28.972442999999998], [19.894734, -28.461105], [19.895768, -24.767790000000002], [20.165725999999999, -24.917961999999999], [20.758609, -25.868136], [20.66647, -26.477453000000001], [20.889609, -26.828543], [21.605896000000001, -26.726534000000001], [22.105969000000002, -26.280256000000001], [22.579532, -25.979448000000001], [22.824271, -25.500458999999999], [23.312097000000001, -25.268689999999999], [23.73357, -25.390129000000002], [24.211266999999999, -25.670216], [25.025171, -25.719670000000001], [25.664666, -25.486816000000001], [25.765848999999999, -25.174845000000001], [25.941652000000001, -24.696373000000001], [26.485752999999999, -24.616326999999998], [26.786407000000001, -24.240691000000002], [27.119409999999998, -23.574323], [28.017236, -22.827753999999999], [29.432188, -22.091313], [29.839037000000001, -22.102215999999999], [30.322883000000001, -22.271612000000001], [30.659865, -22.151567], [31.191409, -22.25151], [31.670397999999999, -23.658968999999999], [31.930589000000001, -24.369416999999999], [31.752407999999999, -25.484283999999999], [31.837778, -25.843332], [31.333158000000001, -25.660191000000001], [31.044080000000001, -25.731452000000001], [30.949667000000002, -26.022649000000001], [30.676608999999999, -26.398078000000002], [30.685962, -26.743845], [31.282772999999999, -27.285879000000001], [31.86806, -27.177927], [32.071665000000003, -26.733820000000001], [32.830120000000001, -26.742191999999999], [32.580264999999997, -27.470158000000001], [32.462133000000001, -28.301010999999999], [32.203389000000001, -28.752405], [31.521000999999998, -29.257387000000001]], [[28.978262999999998, -28.955597000000001], [28.541699999999999, -28.647501999999999], [28.074338000000001, -28.851469000000002], [27.532511, -29.242711], [26.999262000000002, -29.875954], [27.749396999999998, -30.645105999999998], [28.107205, -30.545732000000001], [28.291069, -30.226216999999998], [28.848400000000002, -30.070050999999999], [29.018415000000001, -29.743766000000001], [29.325165999999999, -29.257387000000001], [28.978262999999998, -28.955597000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042e\u0436\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "Afrique du Sud", "en": "South Africa", "nl": "Zuid-Afrika", "pt": "\u00c1frica do Sul", "no": "S\u00f8r-Afrika", "de": "S\u00fcdafrika", "it": "Sudafrica", "sv": "Sydafrika", "pl": "Republika Po\u0142udniowej Afryki", "fi": "Etel\u00e4-Afrikka", "zh": "\u5357\u975e", "ja": "\u5357\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "es": "Sud\u00e1frica"}, "label_fr": "Afrique du Sud", "name": "South Africa", "dbpedia_uri": "http://dbpedia.org/resource/South_Africa"}, "id": "ZAF"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.759374999999999, -9.2305989999999998], [33.231388000000003, -9.6767219999999998], [33.485688000000003, -10.525558999999999], [33.315309999999997, -10.79655], [33.114288999999999, -11.607198], [33.306421999999998, -12.435778000000001], [32.991764000000003, -12.783871], [32.688164999999998, -13.712858000000001], [33.214024999999999, -13.97186], [30.179480999999999, -14.796099], [30.274256000000001, -15.507787], [29.516833999999999, -15.644678000000001], [28.947462999999999, -16.043050999999998], [28.825869000000001, -16.389748999999998], [28.467905999999999, -16.468399999999999], [27.598243, -17.290831000000001], [27.044426999999999, -17.938026000000001], [26.706772999999998, -17.961228999999999], [26.381934999999999, -17.846042000000001], [25.264226000000001, -17.736540000000002], [25.084443, -17.661816000000002], [25.07695, -17.578823], [24.682348999999999, -17.353411000000001], [24.033861999999999, -17.295843000000001], [23.215047999999999, -17.523116000000002], [22.562477999999999, -16.898451000000001], [21.887843, -16.080310000000001], [21.933886000000001, -12.898436999999999], [24.016137000000001, -12.911046000000001], [23.930921999999999, -12.565848000000001], [24.079905, -12.191297], [23.904153999999998, -11.722282], [24.017893999999998, -11.237297999999999], [23.912215, -10.926826], [24.257155000000001, -10.951993], [24.314516000000001, -11.262826], [24.783169999999998, -11.238694000000001], [25.418118, -11.330935999999999], [25.752310000000001, -11.784965], [26.553087999999999, -11.924440000000001], [27.16442, -11.608748], [27.388798999999999, -12.132747], [28.155108999999999, -12.272481000000001], [28.523561999999998, -12.698604], [28.934286, -13.248958], [29.699614, -13.257227], [29.616001000000001, -12.178895000000001], [29.341548, -12.360744], [28.642416999999998, -11.971569000000001], [28.372253000000001, -11.793647], [28.49607, -10.789884000000001], [28.673681999999999, -9.6059249999999992], [28.449871000000002, -9.1649180000000001], [28.734867000000001, -8.5265590000000007], [29.002911999999998, -8.4070319999999992], [30.346086, -8.2382570000000008], [30.740015, -8.3400069999999999], [31.157751000000001, -8.5945789999999995], [31.556348, -8.7620489999999993], [32.191865, -8.9303589999999993], [32.759374999999999, -9.2305989999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043c\u0431\u0438\u044f", "fr": "Zambie", "en": "Zambia", "nl": "Zambia", "pt": "Z\u00e2mbia", "no": "Zambia", "de": "Sambia", "it": "Zambia", "sv": "Zambia", "pl": "Zambia", "fi": "Sambia", "zh": "\u8d5e\u6bd4\u4e9a", "ja": "\u30b6\u30f3\u30d3\u30a2", "es": "Zambia"}, "label_fr": "Zambie", "name": "Zambia", "dbpedia_uri": "http://dbpedia.org/resource/Zambia"}, "id": "ZMB"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.191409, -22.25151], [30.659865, -22.151567], [30.322883000000001, -22.271612000000001], [29.839037000000001, -22.102215999999999], [29.432188, -22.091313], [28.794656, -21.639454000000001], [28.021370000000001, -21.485975], [27.727228, -20.851801999999999], [27.724747000000001, -20.499058999999999], [27.296505, -20.39152], [26.164791000000001, -19.293085999999999], [25.850390999999998, -18.714413], [25.649163000000001, -18.536026], [25.264226000000001, -17.736540000000002], [26.381934999999999, -17.846042000000001], [26.706772999999998, -17.961228999999999], [27.044426999999999, -17.938026000000001], [27.598243, -17.290831000000001], [28.467905999999999, -16.468399999999999], [28.825869000000001, -16.389748999999998], [28.947462999999999, -16.043050999999998], [29.516833999999999, -15.644678000000001], [30.274256000000001, -15.507787], [30.338954999999999, -15.880839], [31.173064, -15.860944], [31.636498, -16.07199], [31.852041, -16.319417000000001], [32.328239000000004, -16.392074000000001], [32.847639000000001, -16.713398000000002], [32.849860999999997, -17.979057000000001], [32.654885999999998, -18.672090000000001], [32.611994000000003, -19.419383], [32.772708000000002, -19.715592000000001], [32.659742999999999, -20.304290000000002], [32.508693000000001, -20.395292000000001], [32.244987999999999, -21.116489000000001], [31.191409, -22.25151]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0435", "fr": "Zimbabwe", "en": "Zimbabwe", "nl": "Zimbabwe", "pt": "Zimbabwe", "no": "Zimbabwe", "de": "Simbabwe", "it": "Zimbabwe", "sv": "Zimbabwe", "pl": "Zimbabwe", "fi": "Zimbabwe", "zh": "\u8f9b\u5df4\u5a01", "ja": "\u30b8\u30f3\u30d0\u30d6\u30a8", "es": "Zimbabue"}, "label_fr": "Zimbabwe", "name": "Zimbabwe", "dbpedia_uri": "http://dbpedia.org/resource/Zimbabwe"}, "id": "ZWE"}]}
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/jquery-1.7.1.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/jquery-ui-1.8.16.custom.min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,356 +0,0 @@
-/*!
- * jQuery UI 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
-this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
-"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
-"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
-outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
-"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
-a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
-c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
-function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
-d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
-b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
-"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
-c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- * jquery.ui.widget.js
- */
-(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
-this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
-!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
-false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;
-this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
-this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
-_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
-false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
-10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||
-!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&
-a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
-this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
-10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
-10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
-(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!=
-"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),
-10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+
-this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&
-!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;
-if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
-b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
-526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
-c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
-h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
-false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
-this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
-c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
-this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=
-a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
-"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<
-c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
-width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&
-o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=
-p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&
-(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
-10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.mouse.js
- * jquery.ui.draggable.js
- */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.16"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parents(":not(body,html)").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);
-if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parents(":not(body,html)").unbind("scroll.droppable");
-a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
-var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
-false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
-this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
-{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
-if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},
-_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,
-{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight:
-Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=
-b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&&
-a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=
-null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||
-0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
-a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
-c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
-b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
-10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
-e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
-e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,
-step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
-e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;
-var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:
-a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-
-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,
-f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
-display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=
-e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
-d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
-"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
-!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
-return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
-b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
-a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
-e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
-c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
-this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
-toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
-var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
-_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
-if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
-this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
-this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
-this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
-this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
-d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
-0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
-a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
-this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
-""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
-this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
-{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
-document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
-10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
-this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
-var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
-this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
-f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
-this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
-a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.position.js
- */
-(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g=
-false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
-a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
-this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
-a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
-d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
-b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
-this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
-b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
-d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
-"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
-(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
-this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
-this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
-g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length?
-(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i-
-m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
-return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false;
-this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
-this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
-this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
-c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
-a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
-this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):
-this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
-return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
-this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e-
-g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"},
-b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery);
-;
\ No newline at end of file
Binary file web/hdalab/static/hdalab/lib/leaflet/images/layers.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/marker-shadow.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/marker.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/popup-close.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/zoom-in.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/zoom-out.png has changed
--- a/web/hdalab/static/hdalab/lib/leaflet/leaflet-src.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5637 +0,0 @@
-/*
- Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
- Leaflet is a modern open-source JavaScript library for interactive maps.
- http://leaflet.cloudmade.com
-*/
-
-(function (root) {
- root.L = {
- VERSION: '0.3',
-
- ROOT_URL: root.L_ROOT_URL || (function () {
- var scripts = document.getElementsByTagName('script'),
- leafletRe = /\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;
-
- var i, len, src, matches;
-
- for (i = 0, len = scripts.length; i < len; i++) {
- src = scripts[i].src;
- matches = src.match(leafletRe);
-
- if (matches) {
- if (matches[1] === 'include') {
- return '../../dist/';
- }
- return src.replace(leafletRe, '') + '/';
- }
- }
- return '';
- }()),
-
- noConflict: function () {
- root.L = this._originalL;
- return this;
- },
-
- _originalL: root.L
- };
-}(this));
-
-
-/*
- * L.Util is a namespace for various utility functions.
- */
-
-L.Util = {
- extend: function (/*Object*/ dest) /*-> Object*/ { // merge src properties into dest
- var sources = Array.prototype.slice.call(arguments, 1);
- for (var j = 0, len = sources.length, src; j < len; j++) {
- src = sources[j] || {};
- for (var i in src) {
- if (src.hasOwnProperty(i)) {
- dest[i] = src[i];
- }
- }
- }
- return dest;
- },
-
- bind: function (/*Function*/ fn, /*Object*/ obj) /*-> Object*/ {
- return function () {
- return fn.apply(obj, arguments);
- };
- },
-
- stamp: (function () {
- var lastId = 0, key = '_leaflet_id';
- return function (/*Object*/ obj) {
- obj[key] = obj[key] || ++lastId;
- return obj[key];
- };
- }()),
-
- requestAnimFrame: (function () {
- function timeoutDefer(callback) {
- window.setTimeout(callback, 1000 / 60);
- }
-
- var requestFn = window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- window.msRequestAnimationFrame ||
- timeoutDefer;
-
- return function (callback, context, immediate, contextEl) {
- callback = context ? L.Util.bind(callback, context) : callback;
- if (immediate && requestFn === timeoutDefer) {
- callback();
- } else {
- requestFn(callback, contextEl);
- }
- };
- }()),
-
- limitExecByInterval: function (fn, time, context) {
- var lock, execOnUnlock, args;
- function exec() {
- lock = false;
- if (execOnUnlock) {
- args.callee.apply(context, args);
- execOnUnlock = false;
- }
- }
- return function () {
- args = arguments;
- if (!lock) {
- lock = true;
- setTimeout(exec, time);
- fn.apply(context, args);
- } else {
- execOnUnlock = true;
- }
- };
- },
-
- falseFn: function () {
- return false;
- },
-
- formatNum: function (num, digits) {
- var pow = Math.pow(10, digits || 5);
- return Math.round(num * pow) / pow;
- },
-
- setOptions: function (obj, options) {
- obj.options = L.Util.extend({}, obj.options, options);
- },
-
- getParamString: function (obj) {
- var params = [];
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- params.push(i + '=' + obj[i]);
- }
- }
- return '?' + params.join('&');
- },
-
- template: function (str, data) {
- return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
- var value = data[key];
- if (!data.hasOwnProperty(key)) {
- throw new Error('No value provided for variable ' + str);
- }
- return value;
- });
- }
-};
-
-
-/*
- * Class powers the OOP facilities of the library. Thanks to John Resig and Dean Edwards for inspiration!
- */
-
-L.Class = function () {};
-
-L.Class.extend = function (/*Object*/ props) /*-> Class*/ {
-
- // extended class with the new prototype
- var NewClass = function () {
- if (this.initialize) {
- this.initialize.apply(this, arguments);
- }
- };
-
- // instantiate class without calling constructor
- var F = function () {};
- F.prototype = this.prototype;
- var proto = new F();
-
- proto.constructor = NewClass;
- NewClass.prototype = proto;
-
- // add superclass access
- NewClass.superclass = this.prototype;
-
- // add class name
- //proto.className = props;
-
- //inherit parent's statics
- for (var i in this) {
- if (this.hasOwnProperty(i) && i !== 'prototype' && i !== 'superclass') {
- NewClass[i] = this[i];
- }
- }
-
- // mix static properties into the class
- if (props.statics) {
- L.Util.extend(NewClass, props.statics);
- delete props.statics;
- }
-
- // mix includes into the prototype
- if (props.includes) {
- L.Util.extend.apply(null, [proto].concat(props.includes));
- delete props.includes;
- }
-
- // merge options
- if (props.options && proto.options) {
- props.options = L.Util.extend({}, proto.options, props.options);
- }
-
- // mix given properties into the prototype
- L.Util.extend(proto, props);
-
- // allow inheriting further
- NewClass.extend = L.Class.extend;
-
- // method for adding properties to prototype
- NewClass.include = function (props) {
- L.Util.extend(this.prototype, props);
- };
-
- return NewClass;
-};
-
-
-/*
- * L.Mixin.Events adds custom events functionality to Leaflet classes
- */
-
-L.Mixin = {};
-
-L.Mixin.Events = {
- addEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
- var events = this._leaflet_events = this._leaflet_events || {};
- events[type] = events[type] || [];
- events[type].push({
- action: fn,
- context: context || this
- });
- return this;
- },
-
- hasEventListeners: function (/*String*/ type) /*-> Boolean*/ {
- var k = '_leaflet_events';
- return (k in this) && (type in this[k]) && (this[k][type].length > 0);
- },
-
- removeEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
- if (!this.hasEventListeners(type)) {
- return this;
- }
-
- for (var i = 0, events = this._leaflet_events, len = events[type].length; i < len; i++) {
- if (
- (events[type][i].action === fn) &&
- (!context || (events[type][i].context === context))
- ) {
- events[type].splice(i, 1);
- return this;
- }
- }
- return this;
- },
-
- fireEvent: function (/*String*/ type, /*(optional) Object*/ data) {
- if (!this.hasEventListeners(type)) {
- return this;
- }
-
- var event = L.Util.extend({
- type: type,
- target: this
- }, data);
-
- var listeners = this._leaflet_events[type].slice();
-
- for (var i = 0, len = listeners.length; i < len; i++) {
- listeners[i].action.call(listeners[i].context || this, event);
- }
-
- return this;
- }
-};
-
-L.Mixin.Events.on = L.Mixin.Events.addEventListener;
-L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
-L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
-
-
-(function () {
- var ua = navigator.userAgent.toLowerCase(),
- ie = !!window.ActiveXObject,
- webkit = ua.indexOf("webkit") !== -1,
- mobile = typeof orientation !== 'undefined' ? true : false,
- android = ua.indexOf("android") !== -1,
- opera = window.opera;
-
- L.Browser = {
- ie: ie,
- ie6: ie && !window.XMLHttpRequest,
-
- webkit: webkit,
- webkit3d: webkit && ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()),
-
- gecko: ua.indexOf("gecko") !== -1,
-
- opera: opera,
-
- android: android,
- mobileWebkit: mobile && webkit,
- mobileOpera: mobile && opera,
-
- mobile: mobile,
- touch: (function () {
- var touchSupported = false,
- startName = 'ontouchstart';
-
- // WebKit, etc
- if (startName in document.documentElement) {
- return true;
- }
-
- // Firefox/Gecko
- var e = document.createElement('div');
-
- // If no support for basic event stuff, unlikely to have touch support
- if (!e.setAttribute || !e.removeAttribute) {
- return false;
- }
-
- e.setAttribute(startName, 'return;');
- if (typeof e[startName] === 'function') {
- touchSupported = true;
- }
-
- e.removeAttribute(startName);
- e = null;
-
- return touchSupported;
- }())
- };
-}());
-
-
-/*
- * L.Point represents a point with x and y coordinates.
- */
-
-L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
- this.x = (round ? Math.round(x) : x);
- this.y = (round ? Math.round(y) : y);
-};
-
-L.Point.prototype = {
- add: function (point) {
- return this.clone()._add(point);
- },
-
- _add: function (point) {
- this.x += point.x;
- this.y += point.y;
- return this;
- },
-
- subtract: function (point) {
- return this.clone()._subtract(point);
- },
-
- // destructive subtract (faster)
- _subtract: function (point) {
- this.x -= point.x;
- this.y -= point.y;
- return this;
- },
-
- divideBy: function (num, round) {
- return new L.Point(this.x / num, this.y / num, round);
- },
-
- multiplyBy: function (num) {
- return new L.Point(this.x * num, this.y * num);
- },
-
- distanceTo: function (point) {
- var x = point.x - this.x,
- y = point.y - this.y;
- return Math.sqrt(x * x + y * y);
- },
-
- round: function () {
- return this.clone()._round();
- },
-
- // destructive round
- _round: function () {
- this.x = Math.round(this.x);
- this.y = Math.round(this.y);
- return this;
- },
-
- clone: function () {
- return new L.Point(this.x, this.y);
- },
-
- toString: function () {
- return 'Point(' +
- L.Util.formatNum(this.x) + ', ' +
- L.Util.formatNum(this.y) + ')';
- }
-};
-
-
-/*
- * L.Bounds represents a rectangular area on the screen in pixel coordinates.
- */
-
-L.Bounds = L.Class.extend({
- initialize: function (min, max) { //(Point, Point) or Point[]
- if (!min) {
- return;
- }
- var points = (min instanceof Array ? min : [min, max]);
- for (var i = 0, len = points.length; i < len; i++) {
- this.extend(points[i]);
- }
- },
-
- // extend the bounds to contain the given point
- extend: function (/*Point*/ point) {
- if (!this.min && !this.max) {
- this.min = new L.Point(point.x, point.y);
- this.max = new L.Point(point.x, point.y);
- } else {
- this.min.x = Math.min(point.x, this.min.x);
- this.max.x = Math.max(point.x, this.max.x);
- this.min.y = Math.min(point.y, this.min.y);
- this.max.y = Math.max(point.y, this.max.y);
- }
- },
-
- getCenter: function (round)/*->Point*/ {
- return new L.Point(
- (this.min.x + this.max.x) / 2,
- (this.min.y + this.max.y) / 2, round);
- },
-
- contains: function (/*Bounds or Point*/ obj)/*->Boolean*/ {
- var min, max;
-
- if (obj instanceof L.Bounds) {
- min = obj.min;
- max = obj.max;
- } else {
- min = max = obj;
- }
-
- return (min.x >= this.min.x) &&
- (max.x <= this.max.x) &&
- (min.y >= this.min.y) &&
- (max.y <= this.max.y);
- },
-
- intersects: function (/*Bounds*/ bounds) {
- var min = this.min,
- max = this.max,
- min2 = bounds.min,
- max2 = bounds.max;
-
- var xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
- yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
-
- return xIntersects && yIntersects;
- }
-
-});
-
-
-/*
- * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
- */
-
-L.Transformation = L.Class.extend({
- initialize: function (/*Number*/ a, /*Number*/ b, /*Number*/ c, /*Number*/ d) {
- this._a = a;
- this._b = b;
- this._c = c;
- this._d = d;
- },
-
- transform: function (point, scale) {
- return this._transform(point.clone(), scale);
- },
-
- // destructive transform (faster)
- _transform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
- scale = scale || 1;
- point.x = scale * (this._a * point.x + this._b);
- point.y = scale * (this._c * point.y + this._d);
- return point;
- },
-
- untransform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
- scale = scale || 1;
- return new L.Point(
- (point.x / scale - this._b) / this._a,
- (point.y / scale - this._d) / this._c);
- }
-});
-
-
-/*
- * L.DomUtil contains various utility functions for working with DOM
- */
-
-L.DomUtil = {
- get: function (id) {
- return (typeof id === 'string' ? document.getElementById(id) : id);
- },
-
- getStyle: function (el, style) {
- var value = el.style[style];
- if (!value && el.currentStyle) {
- value = el.currentStyle[style];
- }
- if (!value || value === 'auto') {
- var css = document.defaultView.getComputedStyle(el, null);
- value = css ? css[style] : null;
- }
- return (value === 'auto' ? null : value);
- },
-
- getViewportOffset: function (element) {
- var top = 0,
- left = 0,
- el = element,
- docBody = document.body;
-
- do {
- top += el.offsetTop || 0;
- left += el.offsetLeft || 0;
-
- if (el.offsetParent === docBody &&
- L.DomUtil.getStyle(el, 'position') === 'absolute') {
- break;
- }
- el = el.offsetParent;
- } while (el);
-
- el = element;
-
- do {
- if (el === docBody) {
- break;
- }
-
- top -= el.scrollTop || 0;
- left -= el.scrollLeft || 0;
-
- el = el.parentNode;
- } while (el);
-
- return new L.Point(left, top);
- },
-
- create: function (tagName, className, container) {
- var el = document.createElement(tagName);
- el.className = className;
- if (container) {
- container.appendChild(el);
- }
- return el;
- },
-
- disableTextSelection: function () {
- if (document.selection && document.selection.empty) {
- document.selection.empty();
- }
- if (!this._onselectstart) {
- this._onselectstart = document.onselectstart;
- document.onselectstart = L.Util.falseFn;
- }
- },
-
- enableTextSelection: function () {
- document.onselectstart = this._onselectstart;
- this._onselectstart = null;
- },
-
- hasClass: function (el, name) {
- return (el.className.length > 0) &&
- new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
- },
-
- addClass: function (el, name) {
- if (!L.DomUtil.hasClass(el, name)) {
- el.className += (el.className ? ' ' : '') + name;
- }
- },
-
- removeClass: function (el, name) {
- el.className = el.className.replace(/(\S+)\s*/g, function (w, match) {
- if (match === name) {
- return '';
- }
- return w;
- }).replace(/^\s+/, '');
- },
-
- setOpacity: function (el, value) {
- if (L.Browser.ie) {
- el.style.filter = 'alpha(opacity=' + Math.round(value * 100) + ')';
- } else {
- el.style.opacity = value;
- }
- },
-
- //TODO refactor away this ugly translate/position mess
-
- testProp: function (props) {
- var style = document.documentElement.style;
-
- for (var i = 0; i < props.length; i++) {
- if (props[i] in style) {
- return props[i];
- }
- }
- return false;
- },
-
- getTranslateString: function (point) {
- return L.DomUtil.TRANSLATE_OPEN +
- point.x + 'px,' + point.y + 'px' +
- L.DomUtil.TRANSLATE_CLOSE;
- },
-
- getScaleString: function (scale, origin) {
- var preTranslateStr = L.DomUtil.getTranslateString(origin),
- scaleStr = ' scale(' + scale + ') ',
- postTranslateStr = L.DomUtil.getTranslateString(origin.multiplyBy(-1));
-
- return preTranslateStr + scaleStr + postTranslateStr;
- },
-
- setPosition: function (el, point) {
- el._leaflet_pos = point;
- if (L.Browser.webkit) {
- el.style[L.DomUtil.TRANSFORM] = L.DomUtil.getTranslateString(point);
- } else {
- el.style.left = point.x + 'px';
- el.style.top = point.y + 'px';
- }
- },
-
- getPosition: function (el) {
- return el._leaflet_pos;
- }
-};
-
-L.Util.extend(L.DomUtil, {
- TRANSITION: L.DomUtil.testProp(['transition', 'webkitTransition', 'OTransition', 'MozTransition', 'msTransition']),
- TRANSFORM: L.DomUtil.testProp(['transformProperty', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']),
-
- TRANSLATE_OPEN: 'translate' + (L.Browser.webkit3d ? '3d(' : '('),
- TRANSLATE_CLOSE: L.Browser.webkit3d ? ',0)' : ')'
-});
-
-
-/*
- CM.LatLng represents a geographical point with latitude and longtitude coordinates.
-*/
-
-L.LatLng = function (/*Number*/ rawLat, /*Number*/ rawLng, /*Boolean*/ noWrap) {
- var lat = parseFloat(rawLat),
- lng = parseFloat(rawLng);
-
- if (isNaN(lat) || isNaN(lng)) {
- throw new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');
- }
-
- if (noWrap !== true) {
- lat = Math.max(Math.min(lat, 90), -90); // clamp latitude into -90..90
- lng = (lng + 180) % 360 + ((lng < -180 || lng === 180) ? 180 : -180); // wrap longtitude into -180..180
- }
-
- //TODO change to lat() & lng()
- this.lat = lat;
- this.lng = lng;
-};
-
-L.Util.extend(L.LatLng, {
- DEG_TO_RAD: Math.PI / 180,
- RAD_TO_DEG: 180 / Math.PI,
- MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
-});
-
-L.LatLng.prototype = {
- equals: function (/*LatLng*/ obj) {
- if (!(obj instanceof L.LatLng)) {
- return false;
- }
-
- var margin = Math.max(Math.abs(this.lat - obj.lat), Math.abs(this.lng - obj.lng));
- return margin <= L.LatLng.MAX_MARGIN;
- },
-
- toString: function () {
- return 'LatLng(' +
- L.Util.formatNum(this.lat) + ', ' +
- L.Util.formatNum(this.lng) + ')';
- },
-
- // Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
- distanceTo: function (/*LatLng*/ other)/*->Double*/ {
- var R = 6378137, // earth radius in meters
- d2r = L.LatLng.DEG_TO_RAD,
- dLat = (other.lat - this.lat) * d2r,
- dLon = (other.lng - this.lng) * d2r,
- lat1 = this.lat * d2r,
- lat2 = other.lat * d2r,
- sin1 = Math.sin(dLat / 2),
- sin2 = Math.sin(dLon / 2);
-
- var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
-
- return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
- }
-};
-
-
-/*
- * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
- */
-
-L.LatLngBounds = L.Class.extend({
- initialize: function (southWest, northEast) { // (LatLng, LatLng) or (LatLng[])
- if (!southWest) {
- return;
- }
- var latlngs = (southWest instanceof Array ? southWest : [southWest, northEast]);
- for (var i = 0, len = latlngs.length; i < len; i++) {
- this.extend(latlngs[i]);
- }
- },
-
- // extend the bounds to contain the given point
- extend: function (/*LatLng*/ latlng) {
- if (!this._southWest && !this._northEast) {
- this._southWest = new L.LatLng(latlng.lat, latlng.lng, true);
- this._northEast = new L.LatLng(latlng.lat, latlng.lng, true);
- } else {
- this._southWest.lat = Math.min(latlng.lat, this._southWest.lat);
- this._southWest.lng = Math.min(latlng.lng, this._southWest.lng);
- this._northEast.lat = Math.max(latlng.lat, this._northEast.lat);
- this._northEast.lng = Math.max(latlng.lng, this._northEast.lng);
- }
- },
-
- getCenter: function () /*-> LatLng*/ {
- return new L.LatLng(
- (this._southWest.lat + this._northEast.lat) / 2,
- (this._southWest.lng + this._northEast.lng) / 2);
- },
-
- getSouthWest: function () {
- return this._southWest;
- },
-
- getNorthEast: function () {
- return this._northEast;
- },
-
- getNorthWest: function () {
- return new L.LatLng(this._northEast.lat, this._southWest.lng, true);
- },
-
- getSouthEast: function () {
- return new L.LatLng(this._southWest.lat, this._northEast.lng, true);
- },
-
- contains: function (/*LatLngBounds or LatLng*/ obj) /*-> Boolean*/ {
- var sw = this._southWest,
- ne = this._northEast,
- sw2, ne2;
-
- if (obj instanceof L.LatLngBounds) {
- sw2 = obj.getSouthWest();
- ne2 = obj.getNorthEast();
- } else {
- sw2 = ne2 = obj;
- }
-
- return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
- (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
- },
-
- intersects: function (/*LatLngBounds*/ bounds) {
- var sw = this._southWest,
- ne = this._northEast,
- sw2 = bounds.getSouthWest(),
- ne2 = bounds.getNorthEast();
-
- var latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
- lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
-
- return latIntersects && lngIntersects;
- },
-
- toBBoxString: function () {
- var sw = this._southWest,
- ne = this._northEast;
- return [sw.lng, sw.lat, ne.lng, ne.lat].join(',');
- }
-});
-
-//TODO International date line?
-
-
-/*
- * L.Projection contains various geographical projections used by CRS classes.
- */
-
-L.Projection = {};
-
-
-
-L.Projection.SphericalMercator = {
- MAX_LATITUDE: 85.0511287798,
-
- project: function (/*LatLng*/ latlng) /*-> Point*/ {
- var d = L.LatLng.DEG_TO_RAD,
- max = this.MAX_LATITUDE,
- lat = Math.max(Math.min(max, latlng.lat), -max),
- x = latlng.lng * d,
- y = lat * d;
- y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));
-
- return new L.Point(x, y);
- },
-
- unproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {
- var d = L.LatLng.RAD_TO_DEG,
- lng = point.x * d,
- lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;
-
- return new L.LatLng(lat, lng, unbounded);
- }
-};
-
-
-
-L.Projection.LonLat = {
- project: function (latlng) {
- return new L.Point(latlng.lng, latlng.lat);
- },
-
- unproject: function (point, unbounded) {
- return new L.LatLng(point.y, point.x, unbounded);
- }
-};
-
-
-
-L.CRS = {
- latLngToPoint: function (/*LatLng*/ latlng, /*Number*/ scale)/*-> Point*/ {
- var projectedPoint = this.projection.project(latlng);
- return this.transformation._transform(projectedPoint, scale);
- },
-
- pointToLatLng: function (/*Point*/ point, /*Number*/ scale, /*(optional) Boolean*/ unbounded)/*-> LatLng*/ {
- var untransformedPoint = this.transformation.untransform(point, scale);
- return this.projection.unproject(untransformedPoint, unbounded);
- //TODO get rid of 'unbounded' everywhere
- },
-
- project: function (latlng) {
- return this.projection.project(latlng);
- }
-};
-
-
-
-L.CRS.EPSG3857 = L.Util.extend({}, L.CRS, {
- code: 'EPSG:3857',
-
- projection: L.Projection.SphericalMercator,
- transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
-
- project: function (/*LatLng*/ latlng)/*-> Point*/ {
- var projectedPoint = this.projection.project(latlng),
- earthRadius = 6378137;
- return projectedPoint.multiplyBy(earthRadius);
- }
-});
-
-L.CRS.EPSG900913 = L.Util.extend({}, L.CRS.EPSG3857, {
- code: 'EPSG:900913'
-});
-
-
-
-L.CRS.EPSG4326 = L.Util.extend({}, L.CRS, {
- code: 'EPSG:4326',
-
- projection: L.Projection.LonLat,
- transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
-});
-
-
-/*
- * L.Map is the central class of the API - it is used to create a map.
- */
-
-L.Map = L.Class.extend({
- includes: L.Mixin.Events,
-
- options: {
- // projection
- crs: L.CRS.EPSG3857 || L.CRS.EPSG4326,
- scale: function (zoom) {
- return 256 * Math.pow(2, zoom);
- },
-
- // state
- center: null,
- zoom: null,
- layers: [],
-
- // interaction
- dragging: true,
- touchZoom: L.Browser.touch && !L.Browser.android,
- scrollWheelZoom: !L.Browser.touch,
- doubleClickZoom: true,
- boxZoom: true,
-
- // controls
- zoomControl: true,
- attributionControl: true,
-
- // animation
- fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android,
- zoomAnimation: L.DomUtil.TRANSITION && !L.Browser.android && !L.Browser.mobileOpera,
-
- // misc
- trackResize: true,
- closePopupOnClick: true,
- worldCopyJump: true
- },
-
-
- // constructor
-
- initialize: function (id, options) { // (HTMLElement or String, Object)
- L.Util.setOptions(this, options);
-
- this._container = L.DomUtil.get(id);
-
- if (this._container._leaflet) {
- throw new Error("Map container is already initialized.");
- }
- this._container._leaflet = true;
-
- this._initLayout();
-
- if (L.DomEvent) {
- this._initEvents();
- if (L.Handler) {
- this._initInteraction();
- }
- if (L.Control) {
- this._initControls();
- }
- }
-
- if (this.options.maxBounds) {
- this.setMaxBounds(this.options.maxBounds);
- }
-
- var center = this.options.center,
- zoom = this.options.zoom;
-
- if (center !== null && zoom !== null) {
- this.setView(center, zoom, true);
- }
-
- var layers = this.options.layers;
- layers = (layers instanceof Array ? layers : [layers]);
- this._tileLayersNum = 0;
- this._initLayers(layers);
- },
-
-
- // public methods that modify map state
-
- // replaced by animation-powered implementation in Map.PanAnimation.js
- setView: function (center, zoom) {
- // reset the map view
- this._resetView(center, this._limitZoom(zoom));
- return this;
- },
-
- setZoom: function (zoom) { // (Number)
- return this.setView(this.getCenter(), zoom);
- },
-
- zoomIn: function () {
- return this.setZoom(this._zoom + 1);
- },
-
- zoomOut: function () {
- return this.setZoom(this._zoom - 1);
- },
-
- fitBounds: function (bounds) { // (LatLngBounds)
- var zoom = this.getBoundsZoom(bounds);
- return this.setView(bounds.getCenter(), zoom);
- },
-
- fitWorld: function () {
- var sw = new L.LatLng(-60, -170),
- ne = new L.LatLng(85, 179);
- return this.fitBounds(new L.LatLngBounds(sw, ne));
- },
-
- panTo: function (center) { // (LatLng)
- return this.setView(center, this._zoom);
- },
-
- panBy: function (offset) { // (Point)
- // replaced with animated panBy in Map.Animation.js
- this.fire('movestart');
-
- this._rawPanBy(offset);
-
- this.fire('move');
- this.fire('moveend');
-
- return this;
- },
-
- setMaxBounds: function (bounds) {
- this.options.maxBounds = bounds;
-
- if (!bounds) {
- this._boundsMinZoom = null;
- return this;
- }
-
- var minZoom = this.getBoundsZoom(bounds, true);
-
- this._boundsMinZoom = minZoom;
-
- if (this._loaded) {
- if (this._zoom < minZoom) {
- this.setView(bounds.getCenter(), minZoom);
- } else {
- this.panInsideBounds(bounds);
- }
- }
- return this;
- },
-
- panInsideBounds: function (bounds) {
- var viewBounds = this.getBounds(),
- viewSw = this.project(viewBounds.getSouthWest()),
- viewNe = this.project(viewBounds.getNorthEast()),
- sw = this.project(bounds.getSouthWest()),
- ne = this.project(bounds.getNorthEast()),
- dx = 0,
- dy = 0;
-
- if (viewNe.y < ne.y) { // north
- dy = ne.y - viewNe.y;
- }
- if (viewNe.x > ne.x) { // east
- dx = ne.x - viewNe.x;
- }
- if (viewSw.y > sw.y) { // south
- dy = sw.y - viewSw.y;
- }
- if (viewSw.x < sw.x) { // west
- dx = sw.x - viewSw.x;
- }
-
- return this.panBy(new L.Point(dx, dy, true));
- },
-
- addLayer: function (layer, insertAtTheTop) {
- var id = L.Util.stamp(layer);
-
- if (this._layers[id]) {
- return this;
- }
-
- this._layers[id] = layer;
-
- if (layer.options && !isNaN(layer.options.maxZoom)) {
- this._layersMaxZoom = Math.max(this._layersMaxZoom || 0, layer.options.maxZoom);
- }
- if (layer.options && !isNaN(layer.options.minZoom)) {
- this._layersMinZoom = Math.min(this._layersMinZoom || Infinity, layer.options.minZoom);
- }
- //TODO getMaxZoom, getMinZoom in ILayer (instead of options)
-
- if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
- this._tileLayersNum++;
- layer.on('load', this._onTileLayerLoad, this);
- }
- if (this.attributionControl && layer.getAttribution) {
- this.attributionControl.addAttribution(layer.getAttribution());
- }
-
- var onMapLoad = function () {
- layer.onAdd(this, insertAtTheTop);
- this.fire('layeradd', {layer: layer});
- };
-
- if (this._loaded) {
- onMapLoad.call(this);
- } else {
- this.on('load', onMapLoad, this);
- }
-
- return this;
- },
-
- removeLayer: function (layer) {
- var id = L.Util.stamp(layer);
-
- if (this._layers[id]) {
- layer.onRemove(this);
- delete this._layers[id];
-
- if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
- this._tileLayersNum--;
- layer.off('load', this._onTileLayerLoad, this);
- }
- if (this.attributionControl && layer.getAttribution) {
- this.attributionControl.removeAttribution(layer.getAttribution());
- }
-
- this.fire('layerremove', {layer: layer});
- }
- return this;
- },
-
- hasLayer: function (layer) {
- var id = L.Util.stamp(layer);
- return this._layers.hasOwnProperty(id);
- },
-
- invalidateSize: function () {
- var oldSize = this.getSize();
-
- this._sizeChanged = true;
-
- if (this.options.maxBounds) {
- this.setMaxBounds(this.options.maxBounds);
- }
-
- if (!this._loaded) {
- return this;
- }
-
- this._rawPanBy(oldSize.subtract(this.getSize()).divideBy(2, true));
-
- this.fire('move');
-
- clearTimeout(this._sizeTimer);
- this._sizeTimer = setTimeout(L.Util.bind(function () {
- this.fire('moveend');
- }, this), 200);
-
- return this;
- },
-
-
- // public methods for getting map state
-
- getCenter: function (unbounded) { // (Boolean)
- var viewHalf = this.getSize().divideBy(2),
- centerPoint = this._getTopLeftPoint().add(viewHalf);
- return this.unproject(centerPoint, this._zoom, unbounded);
- },
-
- getZoom: function () {
- return this._zoom;
- },
-
- getBounds: function () {
- var bounds = this.getPixelBounds(),
- sw = this.unproject(new L.Point(bounds.min.x, bounds.max.y), this._zoom, true),
- ne = this.unproject(new L.Point(bounds.max.x, bounds.min.y), this._zoom, true);
- return new L.LatLngBounds(sw, ne);
- },
-
- getMinZoom: function () {
- var z1 = this.options.minZoom || 0,
- z2 = this._layersMinZoom || 0,
- z3 = this._boundsMinZoom || 0;
-
- return Math.max(z1, z2, z3);
- },
-
- getMaxZoom: function () {
- var z1 = isNaN(this.options.maxZoom) ? Infinity : this.options.maxZoom,
- z2 = this._layersMaxZoom || Infinity;
-
- return Math.min(z1, z2);
- },
-
- getBoundsZoom: function (bounds, inside) { // (LatLngBounds)
- var size = this.getSize(),
- zoom = this.options.minZoom || 0,
- maxZoom = this.getMaxZoom(),
- ne = bounds.getNorthEast(),
- sw = bounds.getSouthWest(),
- boundsSize,
- nePoint,
- swPoint,
- zoomNotFound = true;
-
- if (inside) {
- zoom--;
- }
-
- do {
- zoom++;
- nePoint = this.project(ne, zoom);
- swPoint = this.project(sw, zoom);
- boundsSize = new L.Point(nePoint.x - swPoint.x, swPoint.y - nePoint.y);
-
- if (!inside) {
- zoomNotFound = (boundsSize.x <= size.x) && (boundsSize.y <= size.y);
- } else {
- zoomNotFound = (boundsSize.x < size.x) || (boundsSize.y < size.y);
- }
- } while (zoomNotFound && (zoom <= maxZoom));
-
- if (zoomNotFound && inside) {
- return null;
- }
-
- return inside ? zoom : zoom - 1;
- },
-
- getSize: function () {
- if (!this._size || this._sizeChanged) {
- this._size = new L.Point(this._container.clientWidth, this._container.clientHeight);
- this._sizeChanged = false;
- }
- return this._size;
- },
-
- getPixelBounds: function () {
- var topLeftPoint = this._getTopLeftPoint(),
- size = this.getSize();
- return new L.Bounds(topLeftPoint, topLeftPoint.add(size));
- },
-
- getPixelOrigin: function () {
- return this._initialTopLeftPoint;
- },
-
- getPanes: function () {
- return this._panes;
- },
-
-
- // conversion methods
-
- mouseEventToContainerPoint: function (e) { // (MouseEvent)
- return L.DomEvent.getMousePosition(e, this._container);
- },
-
- mouseEventToLayerPoint: function (e) { // (MouseEvent)
- return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
- },
-
- mouseEventToLatLng: function (e) { // (MouseEvent)
- return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
- },
-
- containerPointToLayerPoint: function (point) { // (Point)
- return point.subtract(L.DomUtil.getPosition(this._mapPane));
- },
-
- layerPointToContainerPoint: function (point) { // (Point)
- return point.add(L.DomUtil.getPosition(this._mapPane));
- },
-
- layerPointToLatLng: function (point) { // (Point)
- return this.unproject(point.add(this._initialTopLeftPoint));
- },
-
- latLngToLayerPoint: function (latlng) { // (LatLng)
- return this.project(latlng)._round()._subtract(this._initialTopLeftPoint);
- },
-
- project: function (latlng, zoom) { // (LatLng[, Number]) -> Point
- zoom = (typeof zoom === 'undefined' ? this._zoom : zoom);
- return this.options.crs.latLngToPoint(latlng, this.options.scale(zoom));
- },
-
- unproject: function (point, zoom, unbounded) { // (Point[, Number, Boolean]) -> LatLng
- zoom = (typeof zoom === 'undefined' ? this._zoom : zoom);
- return this.options.crs.pointToLatLng(point, this.options.scale(zoom), unbounded);
- },
-
-
- // private methods that modify map state
-
- _initLayout: function () {
- var container = this._container;
-
- container.innerHTML = '';
-
- container.className += ' leaflet-container';
-
- if (this.options.fadeAnimation) {
- container.className += ' leaflet-fade-anim';
- }
-
- var position = L.DomUtil.getStyle(container, 'position');
- if (position !== 'absolute' && position !== 'relative') {
- container.style.position = 'relative';
- }
-
- this._initPanes();
-
- if (this._initControlPos) {
- this._initControlPos();
- }
- },
-
- _initPanes: function () {
- var panes = this._panes = {};
-
- this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);
-
- this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);
- this._objectsPane = panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);
-
- panes.shadowPane = this._createPane('leaflet-shadow-pane');
- panes.overlayPane = this._createPane('leaflet-overlay-pane');
- panes.markerPane = this._createPane('leaflet-marker-pane');
- panes.popupPane = this._createPane('leaflet-popup-pane');
- },
-
- _createPane: function (className, container) {
- return L.DomUtil.create('div', className, container || this._objectsPane);
- },
-
- _resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {
- var zoomChanged = (this._zoom !== zoom);
-
- if (!afterZoomAnim) {
- this.fire('movestart');
-
- if (zoomChanged) {
- this.fire('zoomstart');
- }
- }
-
- this._zoom = zoom;
-
- this._initialTopLeftPoint = this._getNewTopLeftPoint(center);
-
- if (!preserveMapOffset) {
- L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
- } else {
- var offset = L.DomUtil.getPosition(this._mapPane);
- this._initialTopLeftPoint._add(offset);
- }
-
- this._tileLayersToLoad = this._tileLayersNum;
- this.fire('viewreset', {hard: !preserveMapOffset});
-
- this.fire('move');
- if (zoomChanged || afterZoomAnim) {
- this.fire('zoomend');
- }
- this.fire('moveend');
-
- if (!this._loaded) {
- this._loaded = true;
- this.fire('load');
- }
- },
-
- _initLayers: function (layers) {
- this._layers = {};
-
- var i, len;
-
- for (i = 0, len = layers.length; i < len; i++) {
- this.addLayer(layers[i]);
- }
- },
-
- _initControls: function () {
- if (this.options.zoomControl) {
- this.addControl(new L.Control.Zoom());
- }
- if (this.options.attributionControl) {
- this.attributionControl = new L.Control.Attribution();
- this.addControl(this.attributionControl);
- }
- },
-
- _rawPanBy: function (offset) {
- var mapPaneOffset = L.DomUtil.getPosition(this._mapPane);
- L.DomUtil.setPosition(this._mapPane, mapPaneOffset.subtract(offset));
- },
-
-
- // map events
-
- _initEvents: function () {
- L.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);
-
- var events = ['dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'contextmenu'];
-
- var i, len;
-
- for (i = 0, len = events.length; i < len; i++) {
- L.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);
- }
-
- if (this.options.trackResize) {
- L.DomEvent.addListener(window, 'resize', this._onResize, this);
- }
- },
-
- _onResize: function () {
- L.Util.requestAnimFrame(this.invalidateSize, this, false, this._container);
- },
-
- _onMouseClick: function (e) {
- if (!this._loaded || (this.dragging && this.dragging.moved())) {
- return;
- }
-
- this.fire('pre' + e.type);
- this._fireMouseEvent(e);
- },
-
- _fireMouseEvent: function (e) {
- if (!this._loaded) {
- return;
- }
-
- var type = e.type;
- type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
-
- if (!this.hasEventListeners(type)) {
- return;
- }
-
- if (type === 'contextmenu') {
- L.DomEvent.preventDefault(e);
- }
-
- this.fire(type, {
- latlng: this.mouseEventToLatLng(e),
- layerPoint: this.mouseEventToLayerPoint(e)
- });
- },
-
- _initInteraction: function () {
- var handlers = {
- dragging: L.Map.Drag,
- touchZoom: L.Map.TouchZoom,
- doubleClickZoom: L.Map.DoubleClickZoom,
- scrollWheelZoom: L.Map.ScrollWheelZoom,
- boxZoom: L.Map.BoxZoom
- };
-
- var i;
- for (i in handlers) {
- if (handlers.hasOwnProperty(i) && handlers[i]) {
- this[i] = new handlers[i](this);
- if (this.options[i]) {
- this[i].enable();
- }
- // TODO move enabling to handler contructor
- }
- }
- },
-
- _onTileLayerLoad: function () {
- // clear scaled tiles after all new tiles are loaded (for performance)
- this._tileLayersToLoad--;
- if (this._tileLayersNum && !this._tileLayersToLoad && this._tileBg) {
- clearTimeout(this._clearTileBgTimer);
- this._clearTileBgTimer = setTimeout(L.Util.bind(this._clearTileBg, this), 500);
- }
- },
-
-
- // private methods for getting map state
-
- _getTopLeftPoint: function () {
- if (!this._loaded) {
- throw new Error('Set map center and zoom first.');
- }
-
- var offset = L.DomUtil.getPosition(this._mapPane);
- return this._initialTopLeftPoint.subtract(offset);
- },
-
- _getNewTopLeftPoint: function (center) {
- var viewHalf = this.getSize().divideBy(2);
- return this.project(center).subtract(viewHalf).round();
- },
-
- _limitZoom: function (zoom) {
- var min = this.getMinZoom();
- var max = this.getMaxZoom();
- return Math.max(min, Math.min(max, zoom));
- }
-});
-
-
-
-L.Projection.Mercator = {
- MAX_LATITUDE: 85.0840591556,
-
- R_MINOR: 6356752.3142,
- R_MAJOR: 6378137,
-
- project: function (/*LatLng*/ latlng) /*-> Point*/ {
- var d = L.LatLng.DEG_TO_RAD,
- max = this.MAX_LATITUDE,
- lat = Math.max(Math.min(max, latlng.lat), -max),
- r = this.R_MAJOR,
- r2 = this.R_MINOR,
- x = latlng.lng * d * r,
- y = lat * d,
- tmp = r2 / r,
- eccent = Math.sqrt(1.0 - tmp * tmp),
- con = eccent * Math.sin(y);
-
- con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
-
- var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
- y = -r2 * Math.log(ts);
-
- return new L.Point(x, y);
- },
-
- unproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {
- var d = L.LatLng.RAD_TO_DEG,
- r = this.R_MAJOR,
- r2 = this.R_MINOR,
- lng = point.x * d / r,
- tmp = r2 / r,
- eccent = Math.sqrt(1 - (tmp * tmp)),
- ts = Math.exp(- point.y / r2),
- phi = (Math.PI / 2) - 2 * Math.atan(ts),
- numIter = 15,
- tol = 1e-7,
- i = numIter,
- dphi = 0.1,
- con;
-
- while ((Math.abs(dphi) > tol) && (--i > 0)) {
- con = eccent * Math.sin(phi);
- dphi = (Math.PI / 2) - 2 * Math.atan(ts * Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
- phi += dphi;
- }
-
- return new L.LatLng(phi * d, lng, unbounded);
- }
-};
-
-
-
-L.CRS.EPSG3395 = L.Util.extend({}, L.CRS, {
- code: 'EPSG:3395',
-
- projection: L.Projection.Mercator,
- transformation: (function () {
- var m = L.Projection.Mercator,
- r = m.R_MAJOR,
- r2 = m.R_MINOR;
-
- return new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);
- }())
-});
-
-
-/*
- * L.TileLayer is used for standard xyz-numbered tile layers.
- */
-
-L.TileLayer = L.Class.extend({
- includes: L.Mixin.Events,
-
- options: {
- minZoom: 0,
- maxZoom: 18,
- tileSize: 256,
- subdomains: 'abc',
- errorTileUrl: '',
- attribution: '',
- opacity: 1,
- scheme: 'xyz',
- continuousWorld: false,
- noWrap: false,
- zoomOffset: 0,
- zoomReverse: false,
-
- unloadInvisibleTiles: L.Browser.mobile,
- updateWhenIdle: L.Browser.mobile
- },
-
- initialize: function (url, options, urlParams) {
- L.Util.setOptions(this, options);
-
- this._url = url;
- this._urlParams = urlParams;
-
- if (typeof this.options.subdomains === 'string') {
- this.options.subdomains = this.options.subdomains.split('');
- }
- },
-
- onAdd: function (map, insertAtTheBottom) {
- this._map = map;
- this._insertAtTheBottom = insertAtTheBottom;
-
- // create a container div for tiles
- this._initContainer();
-
- // create an image to clone for tiles
- this._createTileProto();
-
- // set up events
- map.on('viewreset', this._resetCallback, this);
-
- if (this.options.updateWhenIdle) {
- map.on('moveend', this._update, this);
- } else {
- this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
- map.on('move', this._limitedUpdate, this);
- }
-
- this._reset();
- this._update();
- },
-
- onRemove: function (map) {
- this._map.getPanes().tilePane.removeChild(this._container);
- this._container = null;
-
- this._map.off('viewreset', this._resetCallback, this);
-
- if (this.options.updateWhenIdle) {
- this._map.off('moveend', this._update, this);
- } else {
- this._map.off('move', this._limitedUpdate, this);
- }
- },
-
- getAttribution: function () {
- return this.options.attribution;
- },
-
- setOpacity: function (opacity) {
- this.options.opacity = opacity;
-
- this._setOpacity(opacity);
-
- // stupid webkit hack to force redrawing of tiles
- if (L.Browser.webkit) {
- for (var i in this._tiles) {
- if (this._tiles.hasOwnProperty(i)) {
- this._tiles[i].style.webkitTransform += ' translate(0,0)';
- }
- }
- }
- },
-
- _setOpacity: function (opacity) {
- if (opacity < 1) {
- L.DomUtil.setOpacity(this._container, opacity);
- }
- },
-
- _initContainer: function () {
- var tilePane = this._map.getPanes().tilePane,
- first = tilePane.firstChild;
-
- if (!this._container || tilePane.empty) {
- this._container = L.DomUtil.create('div', 'leaflet-layer');
-
- if (this._insertAtTheBottom && first) {
- tilePane.insertBefore(this._container, first);
- } else {
- tilePane.appendChild(this._container);
- }
-
- this._setOpacity(this.options.opacity);
- }
- },
-
- _resetCallback: function (e) {
- this._reset(e.hard);
- },
-
- _reset: function (clearOldContainer) {
- var key;
- for (key in this._tiles) {
- if (this._tiles.hasOwnProperty(key)) {
- this.fire("tileunload", {tile: this._tiles[key]});
- }
- }
- this._tiles = {};
-
- if (this.options.reuseTiles) {
- this._unusedTiles = [];
- }
-
- if (clearOldContainer && this._container) {
- this._container.innerHTML = "";
- }
- this._initContainer();
- },
-
- _update: function () {
- var bounds = this._map.getPixelBounds(),
- tileSize = this.options.tileSize;
-
- var nwTilePoint = new L.Point(
- Math.floor(bounds.min.x / tileSize),
- Math.floor(bounds.min.y / tileSize)),
- seTilePoint = new L.Point(
- Math.floor(bounds.max.x / tileSize),
- Math.floor(bounds.max.y / tileSize)),
- tileBounds = new L.Bounds(nwTilePoint, seTilePoint);
-
- this._addTilesFromCenterOut(tileBounds);
-
- if (this.options.unloadInvisibleTiles ||
- this.options.reuseTiles) {
- this._removeOtherTiles(tileBounds);
- }
- },
-
- _addTilesFromCenterOut: function (bounds) {
- var queue = [],
- center = bounds.getCenter();
-
- for (var j = bounds.min.y; j <= bounds.max.y; j++) {
- for (var i = bounds.min.x; i <= bounds.max.x; i++) {
- if ((i + ':' + j) in this._tiles) {
- continue;
- }
- queue.push(new L.Point(i, j));
- }
- }
-
- // load tiles in order of their distance to center
- queue.sort(function (a, b) {
- return a.distanceTo(center) - b.distanceTo(center);
- });
-
- var fragment = document.createDocumentFragment();
-
- this._tilesToLoad = queue.length;
- for (var k = 0, len = this._tilesToLoad; k < len; k++) {
- this._addTile(queue[k], fragment);
- }
-
- this._container.appendChild(fragment);
- },
-
- _removeOtherTiles: function (bounds) {
- var kArr, x, y, key, tile;
-
- for (key in this._tiles) {
- if (this._tiles.hasOwnProperty(key)) {
- kArr = key.split(':');
- x = parseInt(kArr[0], 10);
- y = parseInt(kArr[1], 10);
-
- // remove tile if it's out of bounds
- if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
-
- tile = this._tiles[key];
- this.fire("tileunload", {tile: tile, url: tile.src});
-
- // evil, don't do this! crashes Android 3, produces load errors, doesn't solve memory leaks
- // this._tiles[key].src = '';
-
- if (tile.parentNode === this._container) {
- this._container.removeChild(tile);
- }
- if (this.options.reuseTiles) {
- this._unusedTiles.push(this._tiles[key]);
- }
- delete this._tiles[key];
- }
- }
- }
- },
-
- _addTile: function (tilePoint, container) {
- var tilePos = this._getTilePos(tilePoint),
- zoom = this._map.getZoom(),
- key = tilePoint.x + ':' + tilePoint.y,
- tileLimit = Math.pow(2, this._getOffsetZoom(zoom));
-
- // wrap tile coordinates
- if (!this.options.continuousWorld) {
- if (!this.options.noWrap) {
- tilePoint.x = ((tilePoint.x % tileLimit) + tileLimit) % tileLimit;
- } else if (tilePoint.x < 0 || tilePoint.x >= tileLimit) {
- this._tilesToLoad--;
- return;
- }
-
- if (tilePoint.y < 0 || tilePoint.y >= tileLimit) {
- this._tilesToLoad--;
- return;
- }
- }
-
- // get unused tile - or create a new tile
- var tile = this._getTile();
- L.DomUtil.setPosition(tile, tilePos);
-
- this._tiles[key] = tile;
-
- if (this.options.scheme === 'tms') {
- tilePoint.y = tileLimit - tilePoint.y - 1;
- }
-
- this._loadTile(tile, tilePoint, zoom);
-
- container.appendChild(tile);
- },
-
- _getOffsetZoom: function (zoom) {
- zoom = this.options.zoomReverse ? this.options.maxZoom - zoom : zoom;
- return zoom + this.options.zoomOffset;
- },
-
- _getTilePos: function (tilePoint) {
- var origin = this._map.getPixelOrigin(),
- tileSize = this.options.tileSize;
-
- return tilePoint.multiplyBy(tileSize).subtract(origin);
- },
-
- // image-specific code (override to implement e.g. Canvas or SVG tile layer)
-
- getTileUrl: function (tilePoint, zoom) {
- var subdomains = this.options.subdomains,
- s = this.options.subdomains[(tilePoint.x + tilePoint.y) % subdomains.length];
-
- return L.Util.template(this._url, L.Util.extend({
- s: s,
- z: this._getOffsetZoom(zoom),
- x: tilePoint.x,
- y: tilePoint.y
- }, this._urlParams));
- },
-
- _createTileProto: function () {
- this._tileImg = L.DomUtil.create('img', 'leaflet-tile');
- this._tileImg.galleryimg = 'no';
-
- var tileSize = this.options.tileSize;
- this._tileImg.style.width = tileSize + 'px';
- this._tileImg.style.height = tileSize + 'px';
- },
-
- _getTile: function () {
- if (this.options.reuseTiles && this._unusedTiles.length > 0) {
- var tile = this._unusedTiles.pop();
- this._resetTile(tile);
- return tile;
- }
- return this._createTile();
- },
-
- _resetTile: function (tile) {
- // Override if data stored on a tile needs to be cleaned up before reuse
- },
-
- _createTile: function () {
- var tile = this._tileImg.cloneNode(false);
- tile.onselectstart = tile.onmousemove = L.Util.falseFn;
- return tile;
- },
-
- _loadTile: function (tile, tilePoint, zoom) {
- tile._layer = this;
- tile.onload = this._tileOnLoad;
- tile.onerror = this._tileOnError;
- tile.src = this.getTileUrl(tilePoint, zoom);
- },
-
- _tileOnLoad: function (e) {
- var layer = this._layer;
-
- this.className += ' leaflet-tile-loaded';
-
- layer.fire('tileload', {tile: this, url: this.src});
-
- layer._tilesToLoad--;
- if (!layer._tilesToLoad) {
- layer.fire('load');
- }
- },
-
- _tileOnError: function (e) {
- var layer = this._layer;
-
- layer.fire('tileerror', {tile: this, url: this.src});
-
- var newUrl = layer.options.errorTileUrl;
- if (newUrl) {
- this.src = newUrl;
- }
- }
-});
-
-
-L.TileLayer.WMS = L.TileLayer.extend({
- defaultWmsParams: {
- service: 'WMS',
- request: 'GetMap',
- version: '1.1.1',
- layers: '',
- styles: '',
- format: 'image/jpeg',
- transparent: false
- },
-
- initialize: function (/*String*/ url, /*Object*/ options) {
- this._url = url;
-
- this.wmsParams = L.Util.extend({}, this.defaultWmsParams);
- this.wmsParams.width = this.wmsParams.height = this.options.tileSize;
-
- for (var i in options) {
- // all keys that are not TileLayer options go to WMS params
- if (!this.options.hasOwnProperty(i)) {
- this.wmsParams[i] = options[i];
- }
- }
-
- L.Util.setOptions(this, options);
- },
-
- onAdd: function (map) {
- var projectionKey = (parseFloat(this.wmsParams.version) >= 1.3 ? 'crs' : 'srs');
- this.wmsParams[projectionKey] = map.options.crs.code;
-
- L.TileLayer.prototype.onAdd.call(this, map);
- },
-
- getTileUrl: function (/*Point*/ tilePoint, /*Number*/ zoom)/*-> String*/ {
- var tileSize = this.options.tileSize,
- nwPoint = tilePoint.multiplyBy(tileSize),
- sePoint = nwPoint.add(new L.Point(tileSize, tileSize)),
- nwMap = this._map.unproject(nwPoint, this._zoom, true),
- seMap = this._map.unproject(sePoint, this._zoom, true),
- nw = this._map.options.crs.project(nwMap),
- se = this._map.options.crs.project(seMap),
- bbox = [nw.x, se.y, se.x, nw.y].join(',');
-
- return this._url + L.Util.getParamString(this.wmsParams) + "&bbox=" + bbox;
- }
-});
-
-
-L.TileLayer.Canvas = L.TileLayer.extend({
- options: {
- async: false
- },
-
- initialize: function (options) {
- L.Util.setOptions(this, options);
- },
-
- redraw: function () {
- for (var i in this._tiles) {
- var tile = this._tiles[i];
- this._redrawTile(tile);
- }
- },
-
- _redrawTile: function (tile) {
- this.drawTile(tile, tile._tilePoint, tile._zoom);
- },
-
- _createTileProto: function () {
- this._canvasProto = L.DomUtil.create('canvas', 'leaflet-tile');
-
- var tileSize = this.options.tileSize;
- this._canvasProto.width = tileSize;
- this._canvasProto.height = tileSize;
- },
-
- _createTile: function () {
- var tile = this._canvasProto.cloneNode(false);
- tile.onselectstart = tile.onmousemove = L.Util.falseFn;
- return tile;
- },
-
- _loadTile: function (tile, tilePoint, zoom) {
- tile._layer = this;
- tile._tilePoint = tilePoint;
- tile._zoom = zoom;
-
- this.drawTile(tile, tilePoint, zoom);
-
- if (!this.options.async) {
- this.tileDrawn(tile);
- }
- },
-
- drawTile: function (tile, tilePoint, zoom) {
- // override with rendering code
- },
-
- tileDrawn: function (tile) {
- this._tileOnLoad.call(tile);
- }
-});
-
-
-L.ImageOverlay = L.Class.extend({
- includes: L.Mixin.Events,
-
- initialize: function (/*String*/ url, /*LatLngBounds*/ bounds) {
- this._url = url;
- this._bounds = bounds;
- },
-
- onAdd: function (map) {
- this._map = map;
-
- if (!this._image) {
- this._initImage();
- }
-
- map.getPanes().overlayPane.appendChild(this._image);
-
- map.on('viewreset', this._reset, this);
- this._reset();
- },
-
- onRemove: function (map) {
- map.getPanes().overlayPane.removeChild(this._image);
- map.off('viewreset', this._reset, this);
- },
-
- _initImage: function () {
- this._image = L.DomUtil.create('img', 'leaflet-image-layer');
-
- this._image.style.visibility = 'hidden';
- //TODO opacity option
-
- //TODO createImage util method to remove duplication
- L.Util.extend(this._image, {
- galleryimg: 'no',
- onselectstart: L.Util.falseFn,
- onmousemove: L.Util.falseFn,
- onload: L.Util.bind(this._onImageLoad, this),
- src: this._url
- });
- },
-
- _reset: function () {
- var topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
- bottomRight = this._map.latLngToLayerPoint(this._bounds.getSouthEast()),
- size = bottomRight.subtract(topLeft);
-
- L.DomUtil.setPosition(this._image, topLeft);
-
- this._image.style.width = size.x + 'px';
- this._image.style.height = size.y + 'px';
- },
-
- _onImageLoad: function () {
- this._image.style.visibility = '';
- this.fire('load');
- }
-});
-
-
-L.Icon = L.Class.extend({
- iconUrl: L.ROOT_URL + 'images/marker.png',
- shadowUrl: L.ROOT_URL + 'images/marker-shadow.png',
-
- iconSize: new L.Point(25, 41),
- shadowSize: new L.Point(41, 41),
-
- iconAnchor: new L.Point(13, 41),
- popupAnchor: new L.Point(0, -33),
-
- initialize: function (iconUrl) {
- if (iconUrl) {
- this.iconUrl = iconUrl;
- }
- },
-
- createIcon: function () {
- return this._createIcon('icon');
- },
-
- createShadow: function () {
- return this._createIcon('shadow');
- },
-
- _createIcon: function (name) {
- var size = this[name + 'Size'],
- src = this[name + 'Url'];
- if (!src && name === 'shadow') {
- return null;
- }
-
- var img;
- if (!src) {
- img = this._createDiv();
- }
- else {
- img = this._createImg(src);
- }
-
- img.className = 'leaflet-marker-' + name;
-
- img.style.marginLeft = (-this.iconAnchor.x) + 'px';
- img.style.marginTop = (-this.iconAnchor.y) + 'px';
-
- if (size) {
- img.style.width = size.x + 'px';
- img.style.height = size.y + 'px';
- }
-
- return img;
- },
-
- _createImg: function (src) {
- var el;
- if (!L.Browser.ie6) {
- el = document.createElement('img');
- el.src = src;
- } else {
- el = document.createElement('div');
- el.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '")';
- }
- return el;
- },
-
- _createDiv: function () {
- return document.createElement('div');
- }
-});
-
-
-/*
- * L.Marker is used to display clickable/draggable icons on the map.
- */
-
-L.Marker = L.Class.extend({
-
- includes: L.Mixin.Events,
-
- options: {
- icon: new L.Icon(),
- title: '',
- clickable: true,
- draggable: false,
- zIndexOffset: 0
- },
-
- initialize: function (latlng, options) {
- L.Util.setOptions(this, options);
- this._latlng = latlng;
- },
-
- onAdd: function (map) {
- this._map = map;
-
- this._initIcon();
-
- map.on('viewreset', this._reset, this);
- this._reset();
- },
-
- onRemove: function (map) {
- this._removeIcon();
-
- // TODO move to Marker.Popup.js
- if (this.closePopup) {
- this.closePopup();
- }
-
- this._map = null;
-
- map.off('viewreset', this._reset, this);
- },
-
- getLatLng: function () {
- return this._latlng;
- },
-
- setLatLng: function (latlng) {
- this._latlng = latlng;
- if (this._icon) {
- this._reset();
-
- if (this._popup) {
- this._popup.setLatLng(this._latlng);
- }
- }
- },
-
- setIcon: function (icon) {
- if (this._map) {
- this._removeIcon();
- }
-
- this.options.icon = icon;
-
- if (this._map) {
- this._initIcon();
- this._reset();
- }
- },
-
- _initIcon: function () {
- if (!this._icon) {
- this._icon = this.options.icon.createIcon();
-
- if (this.options.title) {
- this._icon.title = this.options.title;
- }
-
- this._initInteraction();
- }
- if (!this._shadow) {
- this._shadow = this.options.icon.createShadow();
- }
-
- this._map._panes.markerPane.appendChild(this._icon);
- if (this._shadow) {
- this._map._panes.shadowPane.appendChild(this._shadow);
- }
- },
-
- _removeIcon: function () {
- this._map._panes.markerPane.removeChild(this._icon);
- if (this._shadow) {
- this._map._panes.shadowPane.removeChild(this._shadow);
- }
- this._icon = this._shadow = null;
- },
-
- _reset: function () {
- var pos = this._map.latLngToLayerPoint(this._latlng).round();
-
- L.DomUtil.setPosition(this._icon, pos);
- if (this._shadow) {
- L.DomUtil.setPosition(this._shadow, pos);
- }
-
- this._icon.style.zIndex = pos.y + this.options.zIndexOffset;
- },
-
- _initInteraction: function () {
- if (this.options.clickable) {
- this._icon.className += ' leaflet-clickable';
-
- L.DomEvent.addListener(this._icon, 'click', this._onMouseClick, this);
-
- var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout'];
- for (var i = 0; i < events.length; i++) {
- L.DomEvent.addListener(this._icon, events[i], this._fireMouseEvent, this);
- }
- }
-
- if (L.Handler.MarkerDrag) {
- this.dragging = new L.Handler.MarkerDrag(this);
-
- if (this.options.draggable) {
- this.dragging.enable();
- }
- }
- },
-
- _onMouseClick: function (e) {
- L.DomEvent.stopPropagation(e);
- if (this.dragging && this.dragging.moved()) { return; }
- this.fire(e.type);
- },
-
- _fireMouseEvent: function (e) {
- this.fire(e.type);
- L.DomEvent.stopPropagation(e);
- }
-});
-
-
-
-L.Popup = L.Class.extend({
- includes: L.Mixin.Events,
-
- options: {
- minWidth: 50,
- maxWidth: 300,
- autoPan: true,
- closeButton: true,
- offset: new L.Point(0, 2),
- autoPanPadding: new L.Point(5, 5),
- className: ''
- },
-
- initialize: function (options, source) {
- L.Util.setOptions(this, options);
-
- this._source = source;
- },
-
- onAdd: function (map) {
- this._map = map;
- if (!this._container) {
- this._initLayout();
- }
- this._updateContent();
-
- this._container.style.opacity = '0';
-
- this._map._panes.popupPane.appendChild(this._container);
- this._map.on('viewreset', this._updatePosition, this);
-
- if (this._map.options.closePopupOnClick) {
- this._map.on('preclick', this._close, this);
- }
-
- this._update();
-
- this._container.style.opacity = '1'; //TODO fix ugly opacity hack
-
- this._opened = true;
- },
-
- onRemove: function (map) {
- map._panes.popupPane.removeChild(this._container);
- L.Util.falseFn(this._container.offsetWidth);
-
- map.off('viewreset', this._updatePosition, this);
- map.off('click', this._close, this);
-
- this._container.style.opacity = '0';
-
- this._opened = false;
- },
-
- setLatLng: function (latlng) {
- this._latlng = latlng;
- if (this._opened) {
- this._update();
- }
- return this;
- },
-
- setContent: function (content) {
- this._content = content;
- if (this._opened) {
- this._update();
- }
- return this;
- },
-
- _close: function () {
- if (this._opened) {
- this._map.closePopup();
- }
- },
-
- _initLayout: function () {
- this._container = L.DomUtil.create('div', 'leaflet-popup ' + this.options.className);
-
- if (this.options.closeButton) {
- this._closeButton = L.DomUtil.create('a', 'leaflet-popup-close-button', this._container);
- this._closeButton.href = '#close';
- L.DomEvent.addListener(this._closeButton, 'click', this._onCloseButtonClick, this);
- }
-
- this._wrapper = L.DomUtil.create('div', 'leaflet-popup-content-wrapper', this._container);
- L.DomEvent.disableClickPropagation(this._wrapper);
- this._contentNode = L.DomUtil.create('div', 'leaflet-popup-content', this._wrapper);
-
- this._tipContainer = L.DomUtil.create('div', 'leaflet-popup-tip-container', this._container);
- this._tip = L.DomUtil.create('div', 'leaflet-popup-tip', this._tipContainer);
- },
-
- _update: function () {
- this._container.style.visibility = 'hidden';
-
- this._updateContent();
- this._updateLayout();
- this._updatePosition();
-
- this._container.style.visibility = '';
-
- this._adjustPan();
- },
-
- _updateContent: function () {
- if (!this._content) {
- return;
- }
-
- if (typeof this._content === 'string') {
- this._contentNode.innerHTML = this._content;
- } else {
- this._contentNode.innerHTML = '';
- this._contentNode.appendChild(this._content);
- }
- },
-
- _updateLayout: function () {
- this._container.style.width = '';
- this._container.style.whiteSpace = 'nowrap';
-
- var width = this._container.offsetWidth;
-
- this._container.style.width = (width > this.options.maxWidth ?
- this.options.maxWidth : (width < this.options.minWidth ? this.options.minWidth : width)) + 'px';
- this._container.style.whiteSpace = '';
-
- this._containerWidth = this._container.offsetWidth;
- },
-
- _updatePosition: function () {
- var pos = this._map.latLngToLayerPoint(this._latlng);
-
- this._containerBottom = -pos.y - this.options.offset.y;
- this._containerLeft = pos.x - Math.round(this._containerWidth / 2) + this.options.offset.x;
-
- this._container.style.bottom = this._containerBottom + 'px';
- this._container.style.left = this._containerLeft + 'px';
- },
-
- _adjustPan: function () {
- if (!this.options.autoPan) {
- return;
- }
-
- var containerHeight = this._container.offsetHeight,
- layerPos = new L.Point(
- this._containerLeft,
- -containerHeight - this._containerBottom),
- containerPos = this._map.layerPointToContainerPoint(layerPos),
- adjustOffset = new L.Point(0, 0),
- padding = this.options.autoPanPadding,
- size = this._map.getSize();
-
- if (containerPos.x < 0) {
- adjustOffset.x = containerPos.x - padding.x;
- }
- if (containerPos.x + this._containerWidth > size.x) {
- adjustOffset.x = containerPos.x + this._containerWidth - size.x + padding.x;
- }
- if (containerPos.y < 0) {
- adjustOffset.y = containerPos.y - padding.y;
- }
- if (containerPos.y + containerHeight > size.y) {
- adjustOffset.y = containerPos.y + containerHeight - size.y + padding.y;
- }
-
- if (adjustOffset.x || adjustOffset.y) {
- this._map.panBy(adjustOffset);
- }
- },
-
- _onCloseButtonClick: function (e) {
- this._close();
- L.DomEvent.stop(e);
- }
-});
-
-
-/*
- * Popup extension to L.Marker, adding openPopup & bindPopup methods.
- */
-
-L.Marker.include({
- openPopup: function () {
- this._popup.setLatLng(this._latlng);
- if (this._map) {
- this._map.openPopup(this._popup);
- }
-
- return this;
- },
-
- closePopup: function () {
- if (this._popup) {
- this._popup._close();
- }
- return this;
- },
-
- bindPopup: function (content, options) {
- options = L.Util.extend({offset: this.options.icon.popupAnchor}, options);
-
- if (!this._popup) {
- this.on('click', this.openPopup, this);
- }
-
- this._popup = new L.Popup(options, this);
- this._popup.setContent(content);
-
- return this;
- },
-
- unbindPopup: function () {
- if (this._popup) {
- this._popup = null;
- this.off('click', this.openPopup);
- }
- return this;
- }
-});
-
-
-
-L.Map.include({
- openPopup: function (popup) {
- this.closePopup();
- this._popup = popup;
- this.addLayer(popup);
- this.fire('popupopen', { popup: this._popup });
-
- return this;
- },
-
- closePopup: function () {
- if (this._popup) {
- this.removeLayer(this._popup);
- this.fire('popupclose', { popup: this._popup });
- this._popup = null;
- }
- return this;
- }
-});
-
-
-/*
- * L.LayerGroup is a class to combine several layers so you can manipulate the group (e.g. add/remove it) as one layer.
- */
-
-L.LayerGroup = L.Class.extend({
- initialize: function (layers) {
- this._layers = {};
-
- if (layers) {
- for (var i = 0, len = layers.length; i < len; i++) {
- this.addLayer(layers[i]);
- }
- }
- },
-
- addLayer: function (layer) {
- var id = L.Util.stamp(layer);
- this._layers[id] = layer;
-
- if (this._map) {
- this._map.addLayer(layer);
- }
- return this;
- },
-
- removeLayer: function (layer) {
- var id = L.Util.stamp(layer);
- delete this._layers[id];
-
- if (this._map) {
- this._map.removeLayer(layer);
- }
- return this;
- },
-
- clearLayers: function () {
- this._iterateLayers(this.removeLayer, this);
- return this;
- },
-
- invoke: function (methodName) {
- var args = Array.prototype.slice.call(arguments, 1),
- i, layer;
-
- for (i in this._layers) {
- if (this._layers.hasOwnProperty(i)) {
- layer = this._layers[i];
-
- if (layer[methodName]) {
- layer[methodName].apply(layer, args);
- }
- }
- }
- return this;
- },
-
- onAdd: function (map) {
- this._map = map;
- this._iterateLayers(map.addLayer, map);
- },
-
- onRemove: function (map) {
- this._iterateLayers(map.removeLayer, map);
- delete this._map;
- },
-
- _iterateLayers: function (method, context) {
- for (var i in this._layers) {
- if (this._layers.hasOwnProperty(i)) {
- method.call(context, this._layers[i]);
- }
- }
- }
-});
-
-
-/*
- * L.FeatureGroup extends L.LayerGroup by introducing mouse events and bindPopup method shared between a group of layers.
- */
-
-L.FeatureGroup = L.LayerGroup.extend({
- includes: L.Mixin.Events,
-
- addLayer: function (layer) {
- this._initEvents(layer);
- L.LayerGroup.prototype.addLayer.call(this, layer);
-
- if (this._popupContent && layer.bindPopup) {
- layer.bindPopup(this._popupContent);
- }
- },
-
- bindPopup: function (content) {
- this._popupContent = content;
-
- return this.invoke('bindPopup', content);
- },
-
- setStyle: function (style) {
- return this.invoke('setStyle', style);
- },
-
- _events: ['click', 'dblclick', 'mouseover', 'mouseout'],
-
- _initEvents: function (layer) {
- for (var i = 0, len = this._events.length; i < len; i++) {
- layer.on(this._events[i], this._propagateEvent, this);
- }
- },
-
- _propagateEvent: function (e) {
- e.layer = e.target;
- e.target = this;
- this.fire(e.type, e);
- }
-});
-
-
-/*
- * L.Path is a base class for rendering vector paths on a map. It's inherited by Polyline, Circle, etc.
- */
-
-L.Path = L.Class.extend({
- includes: [L.Mixin.Events],
-
- statics: {
- // how much to extend the clip area around the map view
- // (relative to its size, e.g. 0.5 is half the screen in each direction)
- CLIP_PADDING: 0.5
- },
-
- options: {
- stroke: true,
- color: '#0033ff',
- weight: 5,
- opacity: 0.5,
-
- fill: false,
- fillColor: null, //same as color by default
- fillOpacity: 0.2,
-
- clickable: true,
-
- // TODO remove this, as all paths now update on moveend
- updateOnMoveEnd: true
- },
-
- initialize: function (options) {
- L.Util.setOptions(this, options);
- },
-
- onAdd: function (map) {
- this._map = map;
-
- this._initElements();
- this._initEvents();
- this.projectLatlngs();
- this._updatePath();
-
- map.on('viewreset', this.projectLatlngs, this);
-
- this._updateTrigger = this.options.updateOnMoveEnd ? 'moveend' : 'viewreset';
- map.on(this._updateTrigger, this._updatePath, this);
- },
-
- onRemove: function (map) {
- this._map = null;
-
- map._pathRoot.removeChild(this._container);
-
- map.off('viewreset', this.projectLatlngs, this);
- map.off(this._updateTrigger, this._updatePath, this);
- },
-
- projectLatlngs: function () {
- // do all projection stuff here
- },
-
- setStyle: function (style) {
- L.Util.setOptions(this, style);
- if (this._container) {
- this._updateStyle();
- }
- return this;
- },
-
- _redraw: function () {
- if (this._map) {
- this.projectLatlngs();
- this._updatePath();
- }
- }
-});
-
-L.Map.include({
- _updatePathViewport: function () {
- var p = L.Path.CLIP_PADDING,
- size = this.getSize(),
- //TODO this._map._getMapPanePos()
- panePos = L.DomUtil.getPosition(this._mapPane),
- min = panePos.multiplyBy(-1).subtract(size.multiplyBy(p)),
- max = min.add(size.multiplyBy(1 + p * 2));
-
- this._pathViewport = new L.Bounds(min, max);
- }
-});
-
-
-L.Path.SVG_NS = 'http://www.w3.org/2000/svg';
-
-L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);
-
-L.Path = L.Path.extend({
- statics: {
- SVG: L.Browser.svg,
- _createElement: function (name) {
- return document.createElementNS(L.Path.SVG_NS, name);
- }
- },
-
- getPathString: function () {
- // form path string here
- },
-
- _initElements: function () {
- this._map._initPathRoot();
- this._initPath();
- this._initStyle();
- },
-
- _initPath: function () {
- this._container = L.Path._createElement('g');
-
- this._path = L.Path._createElement('path');
- this._container.appendChild(this._path);
-
- this._map._pathRoot.appendChild(this._container);
- },
-
- _initStyle: function () {
- if (this.options.stroke) {
- this._path.setAttribute('stroke-linejoin', 'round');
- this._path.setAttribute('stroke-linecap', 'round');
- }
- if (this.options.fill) {
- this._path.setAttribute('fill-rule', 'evenodd');
- } else {
- this._path.setAttribute('fill', 'none');
- }
- this._updateStyle();
- },
-
- _updateStyle: function () {
- if (this.options.stroke) {
- this._path.setAttribute('stroke', this.options.color);
- this._path.setAttribute('stroke-opacity', this.options.opacity);
- this._path.setAttribute('stroke-width', this.options.weight);
- }
- if (this.options.fill) {
- this._path.setAttribute('fill', this.options.fillColor || this.options.color);
- this._path.setAttribute('fill-opacity', this.options.fillOpacity);
- }
- },
-
- _updatePath: function () {
- var str = this.getPathString();
- if (!str) {
- // fix webkit empty string parsing bug
- str = 'M0 0';
- }
- this._path.setAttribute('d', str);
- },
-
- // TODO remove duplication with L.Map
- _initEvents: function () {
- if (this.options.clickable) {
- if (!L.Browser.vml) {
- this._path.setAttribute('class', 'leaflet-clickable');
- }
-
- L.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);
-
- var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'mousemove'];
- for (var i = 0; i < events.length; i++) {
- L.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);
- }
- }
- },
-
- _onMouseClick: function (e) {
- if (this._map.dragging && this._map.dragging.moved()) {
- return;
- }
- this._fireMouseEvent(e);
- },
-
- _fireMouseEvent: function (e) {
- if (!this.hasEventListeners(e.type)) {
- return;
- }
- this.fire(e.type, {
- latlng: this._map.mouseEventToLatLng(e),
- layerPoint: this._map.mouseEventToLayerPoint(e)
- });
- L.DomEvent.stopPropagation(e);
- }
-});
-
-L.Map.include({
- _initPathRoot: function () {
- if (!this._pathRoot) {
- this._pathRoot = L.Path._createElement('svg');
- this._panes.overlayPane.appendChild(this._pathRoot);
-
- this.on('moveend', this._updateSvgViewport);
- this._updateSvgViewport();
- }
- },
-
- _updateSvgViewport: function () {
- this._updatePathViewport();
-
- var vp = this._pathViewport,
- min = vp.min,
- max = vp.max,
- width = max.x - min.x,
- height = max.y - min.y,
- root = this._pathRoot,
- pane = this._panes.overlayPane;
-
- // Hack to make flicker on drag end on mobile webkit less irritating
- // Unfortunately I haven't found a good workaround for this yet
- if (L.Browser.webkit) {
- pane.removeChild(root);
- }
-
- L.DomUtil.setPosition(root, min);
- root.setAttribute('width', width);
- root.setAttribute('height', height);
- root.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));
-
- if (L.Browser.webkit) {
- pane.appendChild(root);
- }
- }
-});
-
-
-/*
- * Popup extension to L.Path (polylines, polygons, circles), adding bindPopup method.
- */
-
-L.Path.include({
- bindPopup: function (content, options) {
- if (!this._popup || this._popup.options !== options) {
- this._popup = new L.Popup(options, this);
- }
- this._popup.setContent(content);
-
- if (!this._openPopupAdded) {
- this.on('click', this._openPopup, this);
- this._openPopupAdded = true;
- }
-
- return this;
- },
-
- _openPopup: function (e) {
- this._popup.setLatLng(e.latlng);
- this._map.openPopup(this._popup);
- }
-});
-
-
-/*
- * Vector rendering for IE6-8 through VML.
- * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
- */
-
-L.Browser.vml = (function () {
- var d = document.createElement('div'), s;
- d.innerHTML = '<v:shape adj="1"/>';
- s = d.firstChild;
- s.style.behavior = 'url(#default#VML)';
-
- return (s && (typeof s.adj === 'object'));
-}());
-
-L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
- statics: {
- VML: true,
- CLIP_PADDING: 0.02,
- _createElement: (function () {
- try {
- document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
- return function (name) {
- return document.createElement('<lvml:' + name + ' class="lvml">');
- };
- } catch (e) {
- return function (name) {
- return document.createElement('<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
- };
- }
- }())
- },
-
- _initPath: function () {
- this._container = L.Path._createElement('shape');
- this._container.className += ' leaflet-vml-shape' +
- (this.options.clickable ? ' leaflet-clickable' : '');
- this._container.coordsize = '1 1';
-
- this._path = L.Path._createElement('path');
- this._container.appendChild(this._path);
-
- this._map._pathRoot.appendChild(this._container);
- },
-
- _initStyle: function () {
- if (this.options.stroke) {
- this._stroke = L.Path._createElement('stroke');
- this._stroke.endcap = 'round';
- this._container.appendChild(this._stroke);
- } else {
- this._container.stroked = false;
- }
- if (this.options.fill) {
- this._container.filled = true;
- this._fill = L.Path._createElement('fill');
- this._container.appendChild(this._fill);
- } else {
- this._container.filled = false;
- }
- this._updateStyle();
- },
-
- _updateStyle: function () {
- if (this.options.stroke) {
- this._stroke.weight = this.options.weight + 'px';
- this._stroke.color = this.options.color;
- this._stroke.opacity = this.options.opacity;
- }
- if (this.options.fill) {
- this._fill.color = this.options.fillColor || this.options.color;
- this._fill.opacity = this.options.fillOpacity;
- }
- },
-
- _updatePath: function () {
- this._container.style.display = 'none';
- this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
- this._container.style.display = '';
- }
-});
-
-L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
- _initPathRoot: function () {
- if (!this._pathRoot) {
- this._pathRoot = document.createElement('div');
- this._pathRoot.className = 'leaflet-vml-container';
- this._panes.overlayPane.appendChild(this._pathRoot);
-
- this.on('moveend', this._updatePathViewport);
- this._updatePathViewport();
- }
- }
-});
-
-
-/*
- * L.LineUtil contains different utility functions for line segments
- * and polylines (clipping, simplification, distances, etc.)
- */
-
-L.LineUtil = {
-
- // Simplify polyline with vertex reduction and Douglas-Peucker simplification.
- // Improves rendering performance dramatically by lessening the number of points to draw.
-
- simplify: function (/*Point[]*/ points, /*Number*/ tolerance) {
- if (!tolerance || !points.length) {
- return points.slice();
- }
-
- var sqTolerance = tolerance * tolerance;
-
- // stage 1: vertex reduction
- points = this._reducePoints(points, sqTolerance);
-
- // stage 2: Douglas-Peucker simplification
- points = this._simplifyDP(points, sqTolerance);
-
- return points;
- },
-
- // distance from a point to a segment between two points
- pointToSegmentDistance: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
- return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));
- },
-
- closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
- return this._sqClosestPointOnSegment(p, p1, p2);
- },
-
- // Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
- _simplifyDP: function (points, sqTolerance) {
-
- var len = points.length,
- ArrayConstructor = typeof Uint8Array !== 'undefined' ? Uint8Array : Array,
- markers = new ArrayConstructor(len);
-
- markers[0] = markers[len - 1] = 1;
-
- this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
-
- var i,
- newPoints = [];
-
- for (i = 0; i < len; i++) {
- if (markers[i]) {
- newPoints.push(points[i]);
- }
- }
-
- return newPoints;
- },
-
- _simplifyDPStep: function (points, markers, sqTolerance, first, last) {
-
- var maxSqDist = 0,
- index, i, sqDist;
-
- for (i = first + 1; i <= last - 1; i++) {
- sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);
-
- if (sqDist > maxSqDist) {
- index = i;
- maxSqDist = sqDist;
- }
- }
-
- if (maxSqDist > sqTolerance) {
- markers[index] = 1;
-
- this._simplifyDPStep(points, markers, sqTolerance, first, index);
- this._simplifyDPStep(points, markers, sqTolerance, index, last);
- }
- },
-
- // reduce points that are too close to each other to a single point
- _reducePoints: function (points, sqTolerance) {
- var reducedPoints = [points[0]];
-
- for (var i = 1, prev = 0, len = points.length; i < len; i++) {
- if (this._sqDist(points[i], points[prev]) > sqTolerance) {
- reducedPoints.push(points[i]);
- prev = i;
- }
- }
- if (prev < len - 1) {
- reducedPoints.push(points[len - 1]);
- }
- return reducedPoints;
- },
-
- /*jshint bitwise:false */ // temporarily allow bitwise oprations
-
- // Cohen-Sutherland line clipping algorithm.
- // Used to avoid rendering parts of a polyline that are not currently visible.
-
- clipSegment: function (a, b, bounds, useLastCode) {
- var min = bounds.min,
- max = bounds.max;
-
- var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),
- codeB = this._getBitCode(b, bounds);
-
- // save 2nd code to avoid calculating it on the next segment
- this._lastCode = codeB;
-
- while (true) {
- // if a,b is inside the clip window (trivial accept)
- if (!(codeA | codeB)) {
- return [a, b];
- // if a,b is outside the clip window (trivial reject)
- } else if (codeA & codeB) {
- return false;
- // other cases
- } else {
- var codeOut = codeA || codeB,
- p = this._getEdgeIntersection(a, b, codeOut, bounds),
- newCode = this._getBitCode(p, bounds);
-
- if (codeOut === codeA) {
- a = p;
- codeA = newCode;
- } else {
- b = p;
- codeB = newCode;
- }
- }
- }
- },
-
- _getEdgeIntersection: function (a, b, code, bounds) {
- var dx = b.x - a.x,
- dy = b.y - a.y,
- min = bounds.min,
- max = bounds.max;
-
- if (code & 8) { // top
- return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);
- } else if (code & 4) { // bottom
- return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);
- } else if (code & 2) { // right
- return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);
- } else if (code & 1) { // left
- return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);
- }
- },
-
- _getBitCode: function (/*Point*/ p, bounds) {
- var code = 0;
-
- if (p.x < bounds.min.x) { // left
- code |= 1;
- } else if (p.x > bounds.max.x) { // right
- code |= 2;
- }
- if (p.y < bounds.min.y) { // bottom
- code |= 4;
- } else if (p.y > bounds.max.y) { // top
- code |= 8;
- }
-
- return code;
- },
-
- /*jshint bitwise:true */
-
- // square distance (to avoid unnecessary Math.sqrt calls)
- _sqDist: function (p1, p2) {
- var dx = p2.x - p1.x,
- dy = p2.y - p1.y;
- return dx * dx + dy * dy;
- },
-
- // return closest point on segment or distance to that point
- _sqClosestPointOnSegment: function (p, p1, p2, sqDist) {
- var x = p1.x,
- y = p1.y,
- dx = p2.x - x,
- dy = p2.y - y,
- dot = dx * dx + dy * dy,
- t;
-
- if (dot > 0) {
- t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
-
- if (t > 1) {
- x = p2.x;
- y = p2.y;
- } else if (t > 0) {
- x += dx * t;
- y += dy * t;
- }
- }
-
- dx = p.x - x;
- dy = p.y - y;
-
- return sqDist ? dx * dx + dy * dy : new L.Point(x, y);
- }
-};
-
-
-
-L.Polyline = L.Path.extend({
- initialize: function (latlngs, options) {
- L.Path.prototype.initialize.call(this, options);
- this._latlngs = latlngs;
- },
-
- options: {
- // how much to simplify the polyline on each zoom level
- // more = better performance and smoother look, less = more accurate
- smoothFactor: 1.0,
- noClip: false,
-
- updateOnMoveEnd: true
- },
-
- projectLatlngs: function () {
- this._originalPoints = [];
-
- for (var i = 0, len = this._latlngs.length; i < len; i++) {
- this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
- }
- },
-
- getPathString: function () {
- for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
- str += this._getPathPartStr(this._parts[i]);
- }
- return str;
- },
-
- getLatLngs: function () {
- return this._latlngs;
- },
-
- setLatLngs: function (latlngs) {
- this._latlngs = latlngs;
- this._redraw();
- return this;
- },
-
- addLatLng: function (latlng) {
- this._latlngs.push(latlng);
- this._redraw();
- return this;
- },
-
- spliceLatLngs: function (index, howMany) {
- var removed = [].splice.apply(this._latlngs, arguments);
- this._redraw();
- return removed;
- },
-
- closestLayerPoint: function (p) {
- var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
-
- for (var j = 0, jLen = parts.length; j < jLen; j++) {
- var points = parts[j];
- for (var i = 1, len = points.length; i < len; i++) {
- p1 = points[i - 1];
- p2 = points[i];
- var point = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
- if (point._sqDist < minDistance) {
- minDistance = point._sqDist;
- minPoint = point;
- }
- }
- }
- if (minPoint) {
- minPoint.distance = Math.sqrt(minDistance);
- }
- return minPoint;
- },
-
- getBounds: function () {
- var b = new L.LatLngBounds();
- var latLngs = this.getLatLngs();
- for (var i = 0, len = latLngs.length; i < len; i++) {
- b.extend(latLngs[i]);
- }
- return b;
- },
-
- _getPathPartStr: function (points) {
- var round = L.Path.VML;
-
- for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
- p = points[j];
- if (round) {
- p._round();
- }
- str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
- }
- return str;
- },
-
- _clipPoints: function () {
- var points = this._originalPoints,
- len = points.length,
- i, k, segment;
-
- if (this.options.noClip) {
- this._parts = [points];
- return;
- }
-
- this._parts = [];
-
- var parts = this._parts,
- vp = this._map._pathViewport,
- lu = L.LineUtil;
-
- for (i = 0, k = 0; i < len - 1; i++) {
- segment = lu.clipSegment(points[i], points[i + 1], vp, i);
- if (!segment) {
- continue;
- }
-
- parts[k] = parts[k] || [];
- parts[k].push(segment[0]);
-
- // if segment goes out of screen, or it's the last one, it's the end of the line part
- if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
- parts[k].push(segment[1]);
- k++;
- }
- }
- },
-
- // simplify each clipped part of the polyline
- _simplifyPoints: function () {
- var parts = this._parts,
- lu = L.LineUtil;
-
- for (var i = 0, len = parts.length; i < len; i++) {
- parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
- }
- },
-
- _updatePath: function () {
- this._clipPoints();
- this._simplifyPoints();
-
- L.Path.prototype._updatePath.call(this);
- }
-});
-
-
-/*
- * L.PolyUtil contains utilify functions for polygons (clipping, etc.).
- */
-
-/*jshint bitwise:false */ // allow bitwise oprations here
-
-L.PolyUtil = {};
-
-/*
- * Sutherland-Hodgeman polygon clipping algorithm.
- * Used to avoid rendering parts of a polygon that are not currently visible.
- */
-L.PolyUtil.clipPolygon = function (points, bounds) {
- var min = bounds.min,
- max = bounds.max,
- clippedPoints,
- edges = [1, 4, 2, 8],
- i, j, k,
- a, b,
- len, edge, p,
- lu = L.LineUtil;
-
- for (i = 0, len = points.length; i < len; i++) {
- points[i]._code = lu._getBitCode(points[i], bounds);
- }
-
- // for each edge (left, bottom, right, top)
- for (k = 0; k < 4; k++) {
- edge = edges[k];
- clippedPoints = [];
-
- for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
- a = points[i];
- b = points[j];
-
- // if a is inside the clip window
- if (!(a._code & edge)) {
- // if b is outside the clip window (a->b goes out of screen)
- if (b._code & edge) {
- p = lu._getEdgeIntersection(b, a, edge, bounds);
- p._code = lu._getBitCode(p, bounds);
- clippedPoints.push(p);
- }
- clippedPoints.push(a);
-
- // else if b is inside the clip window (a->b enters the screen)
- } else if (!(b._code & edge)) {
- p = lu._getEdgeIntersection(b, a, edge, bounds);
- p._code = lu._getBitCode(p, bounds);
- clippedPoints.push(p);
- }
- }
- points = clippedPoints;
- }
-
- return points;
-};
-
-/*jshint bitwise:true */
-
-
-/*
- * L.Polygon is used to display polygons on a map.
- */
-
-L.Polygon = L.Polyline.extend({
- options: {
- fill: true
- },
-
- initialize: function (latlngs, options) {
- L.Polyline.prototype.initialize.call(this, latlngs, options);
-
- if (latlngs && (latlngs[0] instanceof Array)) {
- this._latlngs = latlngs[0];
- this._holes = latlngs.slice(1);
- }
- },
-
- projectLatlngs: function () {
- L.Polyline.prototype.projectLatlngs.call(this);
-
- // project polygon holes points
- // TODO move this logic to Polyline to get rid of duplication
- this._holePoints = [];
-
- if (!this._holes) {
- return;
- }
-
- for (var i = 0, len = this._holes.length, hole; i < len; i++) {
- this._holePoints[i] = [];
-
- for (var j = 0, len2 = this._holes[i].length; j < len2; j++) {
- this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
- }
- }
- },
-
- _clipPoints: function () {
- var points = this._originalPoints,
- newParts = [];
-
- this._parts = [points].concat(this._holePoints);
-
- if (this.options.noClip) {
- return;
- }
-
- for (var i = 0, len = this._parts.length; i < len; i++) {
- var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
- if (!clipped.length) {
- continue;
- }
- newParts.push(clipped);
- }
-
- this._parts = newParts;
- },
-
- _getPathPartStr: function (points) {
- var str = L.Polyline.prototype._getPathPartStr.call(this, points);
- return str + (L.Browser.svg ? 'z' : 'x');
- }
-});
-
-
-/*
- * Contains L.MultiPolyline and L.MultiPolygon layers.
- */
-
-(function () {
- function createMulti(Klass) {
- return L.FeatureGroup.extend({
- initialize: function (latlngs, options) {
- this._layers = {};
- this._options = options;
- this.setLatLngs(latlngs);
- },
-
- setLatLngs: function (latlngs) {
- var i = 0, len = latlngs.length;
-
- this._iterateLayers(function (layer) {
- if (i < len) {
- layer.setLatLngs(latlngs[i++]);
- } else {
- this.removeLayer(layer);
- }
- }, this);
-
- while (i < len) {
- this.addLayer(new Klass(latlngs[i++], this._options));
- }
- }
- });
- }
-
- L.MultiPolyline = createMulti(L.Polyline);
- L.MultiPolygon = createMulti(L.Polygon);
-}());
-
-
-/*
- * L.Circle is a circle overlay (with a certain radius in meters).
- */
-
-L.Circle = L.Path.extend({
- initialize: function (latlng, radius, options) {
- L.Path.prototype.initialize.call(this, options);
-
- this._latlng = latlng;
- this._mRadius = radius;
- },
-
- options: {
- fill: true
- },
-
- setLatLng: function (latlng) {
- this._latlng = latlng;
- this._redraw();
- return this;
- },
-
- setRadius: function (radius) {
- this._mRadius = radius;
- this._redraw();
- return this;
- },
-
- projectLatlngs: function () {
- var equatorLength = 40075017,
- hLength = equatorLength * Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
-
- var lngSpan = (this._mRadius / hLength) * 360,
- latlng2 = new L.LatLng(this._latlng.lat, this._latlng.lng - lngSpan, true),
- point2 = this._map.latLngToLayerPoint(latlng2);
-
- this._point = this._map.latLngToLayerPoint(this._latlng);
- this._radius = Math.round(this._point.x - point2.x);
- },
-
- getPathString: function () {
- var p = this._point,
- r = this._radius;
-
- if (this._checkIfEmpty()) {
- return '';
- }
-
- if (L.Browser.svg) {
- return "M" + p.x + "," + (p.y - r) +
- "A" + r + "," + r + ",0,1,1," +
- (p.x - 0.1) + "," + (p.y - r) + " z";
- } else {
- p._round();
- r = Math.round(r);
- return "AL " + p.x + "," + p.y + " " + r + "," + r + " 0," + (65535 * 360);
- }
- },
-
- _checkIfEmpty: function () {
- var vp = this._map._pathViewport,
- r = this._radius,
- p = this._point;
-
- return p.x - r > vp.max.x || p.y - r > vp.max.y ||
- p.x + r < vp.min.x || p.y + r < vp.min.y;
- }
-});
-
-
-/*
- * L.CircleMarker is a circle overlay with a permanent pixel radius.
- */
-
-L.CircleMarker = L.Circle.extend({
- options: {
- radius: 10,
- weight: 2
- },
-
- initialize: function (latlng, options) {
- L.Circle.prototype.initialize.call(this, latlng, null, options);
- this._radius = this.options.radius;
- },
-
- projectLatlngs: function () {
- this._point = this._map.latLngToLayerPoint(this._latlng);
- },
-
- setRadius: function (radius) {
- this._radius = radius;
- this._redraw();
- return this;
- }
-});
-
-
-/*
- * Vector rendering for all browsers that support canvas.
- */
-
-L.Browser.canvas = (function () {
- return !!document.createElement('canvas').getContext;
-}());
-
-L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({
- statics: {
- //CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value
- CANVAS: true,
- SVG: false
- },
-
- options: {
- updateOnMoveEnd: true
- },
-
- _initElements: function () {
- this._map._initPathRoot();
- this._ctx = this._map._canvasCtx;
- },
-
- _updateStyle: function () {
- if (this.options.stroke) {
- this._ctx.lineWidth = this.options.weight;
- this._ctx.strokeStyle = this.options.color;
- }
- if (this.options.fill) {
- this._ctx.fillStyle = this.options.fillColor || this.options.color;
- }
- },
-
- _drawPath: function () {
- var i, j, len, len2, point, drawMethod;
-
- this._ctx.beginPath();
-
- for (i = 0, len = this._parts.length; i < len; i++) {
- for (j = 0, len2 = this._parts[i].length; j < len2; j++) {
- point = this._parts[i][j];
- drawMethod = (j === 0 ? 'move' : 'line') + 'To';
-
- this._ctx[drawMethod](point.x, point.y);
- }
- // TODO refactor ugly hack
- if (this instanceof L.Polygon) {
- this._ctx.closePath();
- }
- }
- },
-
- _checkIfEmpty: function () {
- return !this._parts.length;
- },
-
- _updatePath: function () {
- if (this._checkIfEmpty()) {
- return;
- }
-
- this._drawPath();
-
- this._ctx.save();
-
- this._updateStyle();
-
- var opacity = this.options.opacity,
- fillOpacity = this.options.fillOpacity;
-
- if (this.options.fill) {
- if (fillOpacity < 1) {
- this._ctx.globalAlpha = fillOpacity;
- }
- this._ctx.fill();
- }
-
- if (this.options.stroke) {
- if (opacity < 1) {
- this._ctx.globalAlpha = opacity;
- }
- this._ctx.stroke();
- }
-
- this._ctx.restore();
-
- // TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
- },
-
- _initEvents: function () {
- if (this.options.clickable) {
- // TODO hand cursor
- // TODO mouseover, mouseout, dblclick
- this._map.on('click', this._onClick, this);
- }
- },
-
- _onClick: function (e) {
- if (this._containsPoint(e.layerPoint)) {
- this.fire('click', e);
- }
- },
-
- onRemove: function (map) {
- map.off('viewreset', this._projectLatlngs, this);
- map.off(this._updateTrigger, this._updatePath, this);
- map.fire(this._updateTrigger);
- }
-});
-
-L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {
- _initPathRoot: function () {
- var root = this._pathRoot,
- ctx;
-
- if (!root) {
- root = this._pathRoot = document.createElement("canvas");
- root.style.position = 'absolute';
- ctx = this._canvasCtx = root.getContext('2d');
-
- ctx.lineCap = "round";
- ctx.lineJoin = "round";
-
- this._panes.overlayPane.appendChild(root);
-
- this.on('moveend', this._updateCanvasViewport);
- this._updateCanvasViewport();
- }
- },
-
- _updateCanvasViewport: function () {
- this._updatePathViewport();
-
- var vp = this._pathViewport,
- min = vp.min,
- size = vp.max.subtract(min),
- root = this._pathRoot;
-
- //TODO check if it's works properly on mobile webkit
- L.DomUtil.setPosition(root, min);
- root.width = size.x;
- root.height = size.y;
- root.getContext('2d').translate(-min.x, -min.y);
- }
-});
-
-
-
-L.Polyline.include(!L.Path.CANVAS ? {} : {
- _containsPoint: function (p, closed) {
- var i, j, k, len, len2, dist, part,
- w = this.options.weight / 2;
-
- if (L.Browser.touch) {
- w += 10; // polyline click tolerance on touch devices
- }
-
- for (i = 0, len = this._parts.length; i < len; i++) {
- part = this._parts[i];
- for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
- if (!closed && (j === 0)) {
- continue;
- }
-
- dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);
-
- if (dist <= w) {
- return true;
- }
- }
- }
- return false;
- }
-});
-
-
-
-L.Polygon.include(!L.Path.CANVAS ? {} : {
- _containsPoint: function (p) {
- var inside = false,
- part, p1, p2,
- i, j, k,
- len, len2;
-
- // TODO optimization: check if within bounds first
-
- if (L.Polyline.prototype._containsPoint.call(this, p, true)) {
- // click on polygon border
- return true;
- }
-
- // ray casting algorithm for detecting if point is in polygon
-
- for (i = 0, len = this._parts.length; i < len; i++) {
- part = this._parts[i];
-
- for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
- p1 = part[j];
- p2 = part[k];
-
- if (((p1.y > p.y) !== (p2.y > p.y)) &&
- (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
- inside = !inside;
- }
- }
- }
-
- return inside;
- }
-});
-
-
-/*
- * Circle canvas specific drawing parts.
- */
-
-L.Circle.include(!L.Path.CANVAS ? {} : {
- _drawPath: function () {
- var p = this._point;
- this._ctx.beginPath();
- this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2);
- },
-
- _containsPoint: function (p) {
- var center = this._point,
- w2 = this.options.stroke ? this.options.weight / 2 : 0;
-
- return (p.distanceTo(center) <= this._radius + w2);
- }
-});
-
-
-
-L.GeoJSON = L.FeatureGroup.extend({
- initialize: function (geojson, options) {
- L.Util.setOptions(this, options);
- this._geojson = geojson;
- this._layers = {};
-
- if (geojson) {
- this.addGeoJSON(geojson);
- }
- },
-
- addGeoJSON: function (geojson) {
- if (geojson.features) {
- for (var i = 0, len = geojson.features.length; i < len; i++) {
- this.addGeoJSON(geojson.features[i]);
- }
- return;
- }
-
- var isFeature = (geojson.type === 'Feature'),
- geometry = (isFeature ? geojson.geometry : geojson),
- layer = L.GeoJSON.geometryToLayer(geometry, this.options.pointToLayer);
-
- this.fire('featureparse', {
- layer: layer,
- properties: geojson.properties,
- geometryType: geometry.type,
- bbox: geojson.bbox,
- id: geojson.id
- });
-
- this.addLayer(layer);
- }
-});
-
-L.Util.extend(L.GeoJSON, {
- geometryToLayer: function (geometry, pointToLayer) {
- var coords = geometry.coordinates,
- latlng, latlngs,
- i, len,
- layer,
- layers = [];
-
- switch (geometry.type) {
- case 'Point':
- latlng = this.coordsToLatLng(coords);
- return pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);
-
- case 'MultiPoint':
- for (i = 0, len = coords.length; i < len; i++) {
- latlng = this.coordsToLatLng(coords[i]);
- layer = pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);
- layers.push(layer);
- }
- return new L.FeatureGroup(layers);
-
- case 'LineString':
- latlngs = this.coordsToLatLngs(coords);
- return new L.Polyline(latlngs);
-
- case 'Polygon':
- latlngs = this.coordsToLatLngs(coords, 1);
- return new L.Polygon(latlngs);
-
- case 'MultiLineString':
- latlngs = this.coordsToLatLngs(coords, 1);
- return new L.MultiPolyline(latlngs);
-
- case "MultiPolygon":
- latlngs = this.coordsToLatLngs(coords, 2);
- return new L.MultiPolygon(latlngs);
-
- case "GeometryCollection":
- for (i = 0, len = geometry.geometries.length; i < len; i++) {
- layer = this.geometryToLayer(geometry.geometries[i], pointToLayer);
- layers.push(layer);
- }
- return new L.FeatureGroup(layers);
-
- default:
- throw new Error('Invalid GeoJSON object.');
- }
- },
-
- coordsToLatLng: function (/*Array*/ coords, /*Boolean*/ reverse)/*: LatLng*/ {
- var lat = parseFloat(coords[reverse ? 0 : 1]),
- lng = parseFloat(coords[reverse ? 1 : 0]);
- return new L.LatLng(lat, lng, true);
- },
-
- coordsToLatLngs: function (/*Array*/ coords, /*Number*/ levelsDeep, /*Boolean*/ reverse)/*: Array*/ {
- var latlng, latlngs = [],
- i, len = coords.length;
-
- for (i = 0; i < len; i++) {
- latlng = levelsDeep ?
- this.coordsToLatLngs(coords[i], levelsDeep - 1, reverse) :
- this.coordsToLatLng(coords[i], reverse);
- latlngs.push(latlng);
- }
- return latlngs;
- }
-});
-
-
-/*
- * L.DomEvent contains functions for working with DOM events.
- */
-
-L.DomEvent = {
- /* inpired by John Resig, Dean Edwards and YUI addEvent implementations */
- addListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn, /*Object*/ context) {
- var id = L.Util.stamp(fn),
- key = '_leaflet_' + type + id;
-
- if (obj[key]) {
- return;
- }
-
- var handler = function (e) {
- return fn.call(context || obj, e || L.DomEvent._getEvent());
- };
-
- if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
- this.addDoubleTapListener(obj, handler, id);
- } else if ('addEventListener' in obj) {
- if (type === 'mousewheel') {
- obj.addEventListener('DOMMouseScroll', handler, false);
- obj.addEventListener(type, handler, false);
- } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
- var originalHandler = handler,
- newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
- handler = function (e) {
- if (!L.DomEvent._checkMouse(obj, e)) {
- return;
- }
- return originalHandler(e);
- };
- obj.addEventListener(newType, handler, false);
- } else {
- obj.addEventListener(type, handler, false);
- }
- } else if ('attachEvent' in obj) {
- obj.attachEvent("on" + type, handler);
- }
-
- obj[key] = handler;
- },
-
- removeListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn) {
- var id = L.Util.stamp(fn),
- key = '_leaflet_' + type + id,
- handler = obj[key];
-
- if (!handler) {
- return;
- }
-
- if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
- this.removeDoubleTapListener(obj, id);
- } else if ('removeEventListener' in obj) {
- if (type === 'mousewheel') {
- obj.removeEventListener('DOMMouseScroll', handler, false);
- obj.removeEventListener(type, handler, false);
- } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
- obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
- } else {
- obj.removeEventListener(type, handler, false);
- }
- } else if ('detachEvent' in obj) {
- obj.detachEvent("on" + type, handler);
- }
- obj[key] = null;
- },
-
- _checkMouse: function (el, e) {
- var related = e.relatedTarget;
-
- if (!related) {
- return true;
- }
-
- try {
- while (related && (related !== el)) {
- related = related.parentNode;
- }
- } catch (err) {
- return false;
- }
-
- return (related !== el);
- },
-
- /*jshint noarg:false */ // evil magic for IE
- _getEvent: function () {
- var e = window.event;
- if (!e) {
- var caller = arguments.callee.caller;
- while (caller) {
- e = caller['arguments'][0];
- if (e && window.Event === e.constructor) {
- break;
- }
- caller = caller.caller;
- }
- }
- return e;
- },
- /*jshint noarg:false */
-
- stopPropagation: function (/*Event*/ e) {
- if (e.stopPropagation) {
- e.stopPropagation();
- } else {
- e.cancelBubble = true;
- }
- },
-
- disableClickPropagation: function (/*HTMLElement*/ el) {
- L.DomEvent.addListener(el, L.Draggable.START, L.DomEvent.stopPropagation);
- L.DomEvent.addListener(el, 'click', L.DomEvent.stopPropagation);
- L.DomEvent.addListener(el, 'dblclick', L.DomEvent.stopPropagation);
- },
-
- preventDefault: function (/*Event*/ e) {
- if (e.preventDefault) {
- e.preventDefault();
- } else {
- e.returnValue = false;
- }
- },
-
- stop: function (e) {
- L.DomEvent.preventDefault(e);
- L.DomEvent.stopPropagation(e);
- },
-
- getMousePosition: function (e, container) {
- var x = e.pageX ? e.pageX : e.clientX +
- document.body.scrollLeft + document.documentElement.scrollLeft,
- y = e.pageY ? e.pageY : e.clientY +
- document.body.scrollTop + document.documentElement.scrollTop,
- pos = new L.Point(x, y);
- return (container ?
- pos.subtract(L.DomUtil.getViewportOffset(container)) : pos);
- },
-
- getWheelDelta: function (e) {
- var delta = 0;
- if (e.wheelDelta) {
- delta = e.wheelDelta / 120;
- }
- if (e.detail) {
- delta = -e.detail / 3;
- }
- return delta;
- }
-};
-
-
-
-/*
- * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
- */
-
-L.Draggable = L.Class.extend({
- includes: L.Mixin.Events,
-
- statics: {
- START: L.Browser.touch ? 'touchstart' : 'mousedown',
- END: L.Browser.touch ? 'touchend' : 'mouseup',
- MOVE: L.Browser.touch ? 'touchmove' : 'mousemove',
- TAP_TOLERANCE: 15
- },
-
- initialize: function (element, dragStartTarget) {
- this._element = element;
- this._dragStartTarget = dragStartTarget || element;
- },
-
- enable: function () {
- if (this._enabled) {
- return;
- }
- L.DomEvent.addListener(this._dragStartTarget, L.Draggable.START, this._onDown, this);
- this._enabled = true;
- },
-
- disable: function () {
- if (!this._enabled) {
- return;
- }
- L.DomEvent.removeListener(this._dragStartTarget, L.Draggable.START, this._onDown);
- this._enabled = false;
- },
-
- _onDown: function (e) {
- if ((!L.Browser.touch && e.shiftKey) || ((e.which !== 1) && (e.button !== 1) && !e.touches)) {
- return;
- }
-
- if (e.touches && e.touches.length > 1) {
- return;
- }
-
- var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
- el = first.target;
-
- L.DomEvent.preventDefault(e);
-
- if (L.Browser.touch && el.tagName.toLowerCase() === 'a') {
- el.className += ' leaflet-active';
- }
-
- this._moved = false;
- if (this._moving) {
- return;
- }
-
- if (!L.Browser.touch) {
- L.DomUtil.disableTextSelection();
- this._setMovingCursor();
- }
-
- this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
- this._startPoint = new L.Point(first.clientX, first.clientY);
-
- L.DomEvent.addListener(document, L.Draggable.MOVE, this._onMove, this);
- L.DomEvent.addListener(document, L.Draggable.END, this._onUp, this);
- },
-
- _onMove: function (e) {
- if (e.touches && e.touches.length > 1) {
- return;
- }
-
- L.DomEvent.preventDefault(e);
-
- var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e);
-
- if (!this._moved) {
- this.fire('dragstart');
- this._moved = true;
- }
- this._moving = true;
-
- var newPoint = new L.Point(first.clientX, first.clientY);
- this._newPos = this._startPos.add(newPoint).subtract(this._startPoint);
-
- L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);
- },
-
- _updatePosition: function () {
- this.fire('predrag');
- L.DomUtil.setPosition(this._element, this._newPos);
- this.fire('drag');
- },
-
- _onUp: function (e) {
- if (e.changedTouches) {
- var first = e.changedTouches[0],
- el = first.target,
- dist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;
-
- if (el.tagName.toLowerCase() === 'a') {
- el.className = el.className.replace(' leaflet-active', '');
- }
-
- if (dist < L.Draggable.TAP_TOLERANCE) {
- this._simulateEvent('click', first);
- }
- }
-
- if (!L.Browser.touch) {
- L.DomUtil.enableTextSelection();
- this._restoreCursor();
- }
-
- L.DomEvent.removeListener(document, L.Draggable.MOVE, this._onMove);
- L.DomEvent.removeListener(document, L.Draggable.END, this._onUp);
-
- if (this._moved) {
- this.fire('dragend');
- }
- this._moving = false;
- },
-
- _setMovingCursor: function () {
- this._bodyCursor = document.body.style.cursor;
- document.body.style.cursor = 'move';
- },
-
- _restoreCursor: function () {
- document.body.style.cursor = this._bodyCursor;
- },
-
- _simulateEvent: function (type, e) {
- var simulatedEvent = document.createEvent('MouseEvents');
-
- simulatedEvent.initMouseEvent(
- type, true, true, window, 1,
- e.screenX, e.screenY,
- e.clientX, e.clientY,
- false, false, false, false, 0, null);
-
- e.target.dispatchEvent(simulatedEvent);
- }
-});
-
-
-/*
- * L.Handler classes are used internally to inject interaction features to classes like Map and Marker.
- */
-
-L.Handler = L.Class.extend({
- initialize: function (map) {
- this._map = map;
- },
-
- enable: function () {
- if (this._enabled) {
- return;
- }
- this._enabled = true;
- this.addHooks();
- },
-
- disable: function () {
- if (!this._enabled) {
- return;
- }
- this._enabled = false;
- this.removeHooks();
- },
-
- enabled: function () {
- return !!this._enabled;
- }
-});
-
-
-/*
- * L.Handler.MapDrag is used internally by L.Map to make the map draggable.
- */
-
-L.Map.Drag = L.Handler.extend({
- addHooks: function () {
- if (!this._draggable) {
- this._draggable = new L.Draggable(this._map._mapPane, this._map._container);
-
- this._draggable
- .on('dragstart', this._onDragStart, this)
- .on('drag', this._onDrag, this)
- .on('dragend', this._onDragEnd, this);
-
- var options = this._map.options;
-
- if (options.worldCopyJump && !options.continuousWorld) {
- this._draggable.on('predrag', this._onPreDrag, this);
- this._map.on('viewreset', this._onViewReset, this);
- }
- }
- this._draggable.enable();
- },
-
- removeHooks: function () {
- this._draggable.disable();
- },
-
- moved: function () {
- return this._draggable && this._draggable._moved;
- },
-
- _onDragStart: function () {
- this._map
- .fire('movestart')
- .fire('dragstart');
- },
-
- _onDrag: function () {
- this._map
- .fire('move')
- .fire('drag');
- },
-
- _onViewReset: function () {
- var pxCenter = this._map.getSize().divideBy(2),
- pxWorldCenter = this._map.latLngToLayerPoint(new L.LatLng(0, 0));
-
- this._initialWorldOffset = pxWorldCenter.subtract(pxCenter);
- },
-
- _onPreDrag: function () {
- var map = this._map,
- worldWidth = map.options.scale(map.getZoom()),
- halfWidth = Math.round(worldWidth / 2),
- dx = this._initialWorldOffset.x,
- x = this._draggable._newPos.x,
- newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
- newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
- newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
-
- this._draggable._newPos.x = newX;
- },
-
- _onDragEnd: function () {
- var map = this._map;
-
- map
- .fire('moveend')
- .fire('dragend');
-
- if (map.options.maxBounds) {
- // TODO predrag validation instead of animation
- L.Util.requestAnimFrame(this._panInsideMaxBounds, map, true, map._container);
- }
- },
-
- _panInsideMaxBounds: function () {
- this.panInsideBounds(this.options.maxBounds);
- }
-});
-
-
-/*
- * L.Handler.DoubleClickZoom is used internally by L.Map to add double-click zooming.
- */
-
-L.Map.DoubleClickZoom = L.Handler.extend({
- addHooks: function () {
- this._map.on('dblclick', this._onDoubleClick);
- // TODO remove 3d argument?
- },
-
- removeHooks: function () {
- this._map.off('dblclick', this._onDoubleClick);
- },
-
- _onDoubleClick: function (e) {
- this.setView(e.latlng, this._zoom + 1);
- }
-});
-
-
-/*
- * L.Handler.ScrollWheelZoom is used internally by L.Map to enable mouse scroll wheel zooming on the map.
- */
-
-L.Map.ScrollWheelZoom = L.Handler.extend({
- addHooks: function () {
- L.DomEvent.addListener(this._map._container, 'mousewheel', this._onWheelScroll, this);
- this._delta = 0;
- },
-
- removeHooks: function () {
- L.DomEvent.removeListener(this._map._container, 'mousewheel', this._onWheelScroll);
- },
-
- _onWheelScroll: function (e) {
- var delta = L.DomEvent.getWheelDelta(e);
- this._delta += delta;
- this._lastMousePos = this._map.mouseEventToContainerPoint(e);
-
- clearTimeout(this._timer);
- this._timer = setTimeout(L.Util.bind(this._performZoom, this), 50);
-
- L.DomEvent.preventDefault(e);
- },
-
- _performZoom: function () {
- var map = this._map,
- delta = Math.round(this._delta),
- zoom = map.getZoom();
-
- delta = Math.max(Math.min(delta, 4), -4);
- delta = map._limitZoom(zoom + delta) - zoom;
-
- this._delta = 0;
-
- if (!delta) {
- return;
- }
-
- var newCenter = this._getCenterForScrollWheelZoom(this._lastMousePos, delta),
- newZoom = zoom + delta;
-
- map.setView(newCenter, newZoom);
- },
-
- _getCenterForScrollWheelZoom: function (mousePos, delta) {
- var map = this._map,
- centerPoint = map.getPixelBounds().getCenter(),
- viewHalf = map.getSize().divideBy(2),
- centerOffset = mousePos.subtract(viewHalf).multiplyBy(1 - Math.pow(2, -delta)),
- newCenterPoint = centerPoint.add(centerOffset);
-
- return map.unproject(newCenterPoint, map._zoom, true);
- }
-});
-
-
-L.Util.extend(L.DomEvent, {
- // inspired by Zepto touch code by Thomas Fuchs
- addDoubleTapListener: function (obj, handler, id) {
- var last,
- doubleTap = false,
- delay = 250,
- touch,
- pre = '_leaflet_',
- touchstart = 'touchstart',
- touchend = 'touchend';
-
- function onTouchStart(e) {
- if (e.touches.length !== 1) {
- return;
- }
-
- var now = Date.now(),
- delta = now - (last || now);
-
- touch = e.touches[0];
- doubleTap = (delta > 0 && delta <= delay);
- last = now;
- }
- function onTouchEnd(e) {
- if (doubleTap) {
- touch.type = 'dblclick';
- handler(touch);
- last = null;
- }
- }
- obj[pre + touchstart + id] = onTouchStart;
- obj[pre + touchend + id] = onTouchEnd;
-
- obj.addEventListener(touchstart, onTouchStart, false);
- obj.addEventListener(touchend, onTouchEnd, false);
- },
-
- removeDoubleTapListener: function (obj, id) {
- var pre = '_leaflet_';
- obj.removeEventListener(obj, obj[pre + 'touchstart' + id], false);
- obj.removeEventListener(obj, obj[pre + 'touchend' + id], false);
- }
-});
-
-
-/*
- * L.Handler.TouchZoom is used internally by L.Map to add touch-zooming on Webkit-powered mobile browsers.
- */
-
-L.Map.TouchZoom = L.Handler.extend({
- addHooks: function () {
- L.DomEvent.addListener(this._map._container, 'touchstart', this._onTouchStart, this);
- },
-
- removeHooks: function () {
- L.DomEvent.removeListener(this._map._container, 'touchstart', this._onTouchStart, this);
- },
-
- _onTouchStart: function (e) {
- if (!e.touches || e.touches.length !== 2 || this._map._animatingZoom) {
- return;
- }
-
- var p1 = this._map.mouseEventToLayerPoint(e.touches[0]),
- p2 = this._map.mouseEventToLayerPoint(e.touches[1]),
- viewCenter = this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));
-
- this._startCenter = p1.add(p2).divideBy(2, true);
- this._startDist = p1.distanceTo(p2);
- //this._startTransform = this._map._mapPane.style.webkitTransform;
-
- this._moved = false;
- this._zooming = true;
-
- this._centerOffset = viewCenter.subtract(this._startCenter);
-
- L.DomEvent.addListener(document, 'touchmove', this._onTouchMove, this);
- L.DomEvent.addListener(document, 'touchend', this._onTouchEnd, this);
-
- L.DomEvent.preventDefault(e);
- },
-
- _onTouchMove: function (e) {
- if (!e.touches || e.touches.length !== 2) {
- return;
- }
-
- if (!this._moved) {
- this._map._mapPane.className += ' leaflet-zoom-anim';
-
- this._map
- .fire('zoomstart')
- .fire('movestart')
- ._prepareTileBg();
-
- this._moved = true;
- }
-
- var p1 = this._map.mouseEventToLayerPoint(e.touches[0]),
- p2 = this._map.mouseEventToLayerPoint(e.touches[1]);
-
- this._scale = p1.distanceTo(p2) / this._startDist;
- this._delta = p1.add(p2).divideBy(2, true).subtract(this._startCenter);
-
- // Used 2 translates instead of transform-origin because of a very strange bug -
- // it didn't count the origin on the first touch-zoom but worked correctly afterwards
-
- this._map._tileBg.style.webkitTransform = [
- L.DomUtil.getTranslateString(this._delta),
- L.DomUtil.getScaleString(this._scale, this._startCenter)
- ].join(" ");
-
- L.DomEvent.preventDefault(e);
- },
-
- _onTouchEnd: function (e) {
- if (!this._moved || !this._zooming) {
- return;
- }
- this._zooming = false;
-
- var oldZoom = this._map.getZoom(),
- floatZoomDelta = Math.log(this._scale) / Math.LN2,
- roundZoomDelta = (floatZoomDelta > 0 ? Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)),
- zoom = this._map._limitZoom(oldZoom + roundZoomDelta),
- zoomDelta = zoom - oldZoom,
- centerOffset = this._centerOffset.subtract(this._delta).divideBy(this._scale),
- centerPoint = this._map.getPixelOrigin().add(this._startCenter).add(centerOffset),
- center = this._map.unproject(centerPoint);
-
- L.DomEvent.removeListener(document, 'touchmove', this._onTouchMove);
- L.DomEvent.removeListener(document, 'touchend', this._onTouchEnd);
-
- var finalScale = Math.pow(2, zoomDelta);
-
- this._map._runAnimation(center, zoom, finalScale / this._scale, this._startCenter.add(centerOffset));
- }
-});
-
-
-/*
- * L.Handler.ShiftDragZoom is used internally by L.Map to add shift-drag zoom (zoom to a selected bounding box).
- */
-
-L.Map.BoxZoom = L.Handler.extend({
- initialize: function (map) {
- this._map = map;
- this._container = map._container;
- this._pane = map._panes.overlayPane;
- },
-
- addHooks: function () {
- L.DomEvent.addListener(this._container, 'mousedown', this._onMouseDown, this);
- },
-
- removeHooks: function () {
- L.DomEvent.removeListener(this._container, 'mousedown', this._onMouseDown);
- },
-
- _onMouseDown: function (e) {
- if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) {
- return false;
- }
-
- L.DomUtil.disableTextSelection();
-
- this._startLayerPoint = this._map.mouseEventToLayerPoint(e);
-
- this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._pane);
- L.DomUtil.setPosition(this._box, this._startLayerPoint);
-
- //TODO move cursor to styles
- this._container.style.cursor = 'crosshair';
-
- L.DomEvent.addListener(document, 'mousemove', this._onMouseMove, this);
- L.DomEvent.addListener(document, 'mouseup', this._onMouseUp, this);
-
- L.DomEvent.preventDefault(e);
- },
-
- _onMouseMove: function (e) {
- var layerPoint = this._map.mouseEventToLayerPoint(e),
- dx = layerPoint.x - this._startLayerPoint.x,
- dy = layerPoint.y - this._startLayerPoint.y;
-
- var newX = Math.min(layerPoint.x, this._startLayerPoint.x),
- newY = Math.min(layerPoint.y, this._startLayerPoint.y),
- newPos = new L.Point(newX, newY);
-
- L.DomUtil.setPosition(this._box, newPos);
-
- this._box.style.width = (Math.abs(dx) - 4) + 'px';
- this._box.style.height = (Math.abs(dy) - 4) + 'px';
- },
-
- _onMouseUp: function (e) {
- this._pane.removeChild(this._box);
- this._container.style.cursor = '';
-
- L.DomUtil.enableTextSelection();
-
- L.DomEvent.removeListener(document, 'mousemove', this._onMouseMove);
- L.DomEvent.removeListener(document, 'mouseup', this._onMouseUp);
-
- var layerPoint = this._map.mouseEventToLayerPoint(e);
-
- var bounds = new L.LatLngBounds(
- this._map.layerPointToLatLng(this._startLayerPoint),
- this._map.layerPointToLatLng(layerPoint));
-
- this._map.fitBounds(bounds);
- }
-});
-
-
-/*
- * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
- */
-
-L.Handler.MarkerDrag = L.Handler.extend({
- initialize: function (marker) {
- this._marker = marker;
- },
-
- addHooks: function () {
- var icon = this._marker._icon;
- if (!this._draggable) {
- this._draggable = new L.Draggable(icon, icon);
-
- this._draggable
- .on('dragstart', this._onDragStart, this)
- .on('drag', this._onDrag, this)
- .on('dragend', this._onDragEnd, this);
- }
- this._draggable.enable();
- },
-
- removeHooks: function () {
- this._draggable.disable();
- },
-
- moved: function () {
- return this._draggable && this._draggable._moved;
- },
-
- _onDragStart: function (e) {
- this._marker
- .closePopup()
- .fire('movestart')
- .fire('dragstart');
- },
-
- _onDrag: function (e) {
- // update shadow position
- var iconPos = L.DomUtil.getPosition(this._marker._icon);
- if (this._marker._shadow) {
- L.DomUtil.setPosition(this._marker._shadow, iconPos);
- }
-
- this._marker._latlng = this._marker._map.layerPointToLatLng(iconPos);
-
- this._marker
- .fire('move')
- .fire('drag');
- },
-
- _onDragEnd: function () {
- this._marker
- .fire('moveend')
- .fire('dragend');
- }
-});
-
-
-
-L.Control = {};
-
-L.Control.Position = {
- TOP_LEFT: 'topLeft',
- TOP_RIGHT: 'topRight',
- BOTTOM_LEFT: 'bottomLeft',
- BOTTOM_RIGHT: 'bottomRight'
-};
-
-
-L.Map.include({
- addControl: function (control) {
- control.onAdd(this);
-
- var pos = control.getPosition(),
- corner = this._controlCorners[pos],
- container = control.getContainer();
-
- L.DomUtil.addClass(container, 'leaflet-control');
-
- if (pos.indexOf('bottom') !== -1) {
- corner.insertBefore(container, corner.firstChild);
- } else {
- corner.appendChild(container);
- }
- return this;
- },
-
- removeControl: function (control) {
- var pos = control.getPosition(),
- corner = this._controlCorners[pos],
- container = control.getContainer();
-
- corner.removeChild(container);
-
- if (control.onRemove) {
- control.onRemove(this);
- }
- return this;
- },
-
- _initControlPos: function () {
- var corners = this._controlCorners = {},
- classPart = 'leaflet-',
- top = classPart + 'top',
- bottom = classPart + 'bottom',
- left = classPart + 'left',
- right = classPart + 'right',
- controlContainer = L.DomUtil.create('div', classPart + 'control-container', this._container);
-
- if (L.Browser.touch) {
- controlContainer.className += ' ' + classPart + 'big-buttons';
- }
-
- corners.topLeft = L.DomUtil.create('div', top + ' ' + left, controlContainer);
- corners.topRight = L.DomUtil.create('div', top + ' ' + right, controlContainer);
- corners.bottomLeft = L.DomUtil.create('div', bottom + ' ' + left, controlContainer);
- corners.bottomRight = L.DomUtil.create('div', bottom + ' ' + right, controlContainer);
- }
-});
-
-
-
-L.Control.Zoom = L.Class.extend({
- onAdd: function (map) {
- this._map = map;
- this._container = L.DomUtil.create('div', 'leaflet-control-zoom');
-
- this._zoomInButton = this._createButton(
- 'Zoom in', 'leaflet-control-zoom-in', this._map.zoomIn, this._map);
- this._zoomOutButton = this._createButton(
- 'Zoom out', 'leaflet-control-zoom-out', this._map.zoomOut, this._map);
-
- this._container.appendChild(this._zoomInButton);
- this._container.appendChild(this._zoomOutButton);
- },
-
- getContainer: function () {
- return this._container;
- },
-
- getPosition: function () {
- return L.Control.Position.TOP_LEFT;
- },
-
- _createButton: function (title, className, fn, context) {
- var link = document.createElement('a');
- link.href = '#';
- link.title = title;
- link.className = className;
-
- L.DomEvent.disableClickPropagation(link);
- L.DomEvent.addListener(link, 'click', L.DomEvent.preventDefault);
- L.DomEvent.addListener(link, 'click', fn, context);
-
- return link;
- }
-});
-
-
-L.Control.Attribution = L.Class.extend({
- initialize: function (prefix) {
- this._prefix = prefix || 'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>';
- this._attributions = {};
- },
-
- onAdd: function (map) {
- this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
- L.DomEvent.disableClickPropagation(this._container);
- this._map = map;
- this._update();
- },
-
- getPosition: function () {
- return L.Control.Position.BOTTOM_RIGHT;
- },
-
- getContainer: function () {
- return this._container;
- },
-
- setPrefix: function (prefix) {
- this._prefix = prefix;
- this._update();
- },
-
- addAttribution: function (text) {
- if (!text) {
- return;
- }
- this._attributions[text] = true;
- this._update();
- },
-
- removeAttribution: function (text) {
- if (!text) {
- return;
- }
- delete this._attributions[text];
- this._update();
- },
-
- _update: function () {
- if (!this._map) {
- return;
- }
-
- var attribs = [];
-
- for (var i in this._attributions) {
- if (this._attributions.hasOwnProperty(i)) {
- attribs.push(i);
- }
- }
-
- var prefixAndAttribs = [];
- if (this._prefix) {
- prefixAndAttribs.push(this._prefix);
- }
- if (attribs.length) {
- prefixAndAttribs.push(attribs.join(', '));
- }
-
- this._container.innerHTML = prefixAndAttribs.join(' — ');
- }
-});
-
-
-
-L.Control.Layers = L.Class.extend({
- options: {
- collapsed: !L.Browser.touch
- },
-
- initialize: function (baseLayers, overlays, options) {
- L.Util.setOptions(this, options);
-
- this._layers = {};
-
- for (var i in baseLayers) {
- if (baseLayers.hasOwnProperty(i)) {
- this._addLayer(baseLayers[i], i);
- }
- }
-
- for (i in overlays) {
- if (overlays.hasOwnProperty(i)) {
- this._addLayer(overlays[i], i, true);
- }
- }
- },
-
- onAdd: function (map) {
- this._map = map;
-
- this._initLayout();
- this._update();
- },
-
- getContainer: function () {
- return this._container;
- },
-
- getPosition: function () {
- return L.Control.Position.TOP_RIGHT;
- },
-
- addBaseLayer: function (layer, name) {
- this._addLayer(layer, name);
- this._update();
- return this;
- },
-
- addOverlay: function (layer, name) {
- this._addLayer(layer, name, true);
- this._update();
- return this;
- },
-
- removeLayer: function (layer) {
- var id = L.Util.stamp(layer);
- delete this._layers[id];
- this._update();
- return this;
- },
-
- _initLayout: function () {
- this._container = L.DomUtil.create('div', 'leaflet-control-layers');
- L.DomEvent.disableClickPropagation(this._container);
-
- this._form = L.DomUtil.create('form', 'leaflet-control-layers-list');
-
- if (this.options.collapsed) {
- L.DomEvent.addListener(this._container, 'mouseover', this._expand, this);
- L.DomEvent.addListener(this._container, 'mouseout', this._collapse, this);
-
- var link = this._layersLink = L.DomUtil.create('a', 'leaflet-control-layers-toggle');
- link.href = '#';
- link.title = 'Layers';
-
- L.DomEvent.addListener(link, 'focus', this._expand, this);
- L.DomEvent.addListener(this._map, L.Draggable.START, this._collapse, this);
- // TODO keyboard accessibility
-
- this._container.appendChild(link);
- } else {
- this._expand();
- }
-
- this._baseLayersList = L.DomUtil.create('div', 'leaflet-control-layers-base', this._form);
- this._separator = L.DomUtil.create('div', 'leaflet-control-layers-separator', this._form);
- this._overlaysList = L.DomUtil.create('div', 'leaflet-control-layers-overlays', this._form);
-
- this._container.appendChild(this._form);
- },
-
- _addLayer: function (layer, name, overlay) {
- var id = L.Util.stamp(layer);
- this._layers[id] = {
- layer: layer,
- name: name,
- overlay: overlay
- };
- },
-
- _update: function () {
- if (!this._container) {
- return;
- }
-
- this._baseLayersList.innerHTML = '';
- this._overlaysList.innerHTML = '';
-
- var baseLayersPresent = false,
- overlaysPresent = false;
-
- for (var i in this._layers) {
- if (this._layers.hasOwnProperty(i)) {
- var obj = this._layers[i];
- this._addItem(obj);
- overlaysPresent = overlaysPresent || obj.overlay;
- baseLayersPresent = baseLayersPresent || !obj.overlay;
- }
- }
-
- this._separator.style.display = (overlaysPresent && baseLayersPresent ? '' : 'none');
- },
-
- _addItem: function (obj, onclick) {
- var label = document.createElement('label');
-
- var input = document.createElement('input');
- if (!obj.overlay) {
- input.name = 'leaflet-base-layers';
- }
- input.type = obj.overlay ? 'checkbox' : 'radio';
- input.checked = this._map.hasLayer(obj.layer);
- input.layerId = L.Util.stamp(obj.layer);
-
- L.DomEvent.addListener(input, 'click', this._onInputClick, this);
-
- var name = document.createTextNode(' ' + obj.name);
-
- label.appendChild(input);
- label.appendChild(name);
-
- var container = obj.overlay ? this._overlaysList : this._baseLayersList;
- container.appendChild(label);
- },
-
- _onInputClick: function () {
- var i, input, obj,
- inputs = this._form.getElementsByTagName('input'),
- inputsLen = inputs.length;
-
- for (i = 0; i < inputsLen; i++) {
- input = inputs[i];
- obj = this._layers[input.layerId];
-
- if (input.checked) {
- this._map.addLayer(obj.layer, !obj.overlay);
- } else {
- this._map.removeLayer(obj.layer);
- }
- }
- },
-
- _expand: function () {
- L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
- },
-
- _collapse: function () {
- this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
- }
-});
-
-
-L.Transition = L.Class.extend({
- includes: L.Mixin.Events,
-
- statics: {
- CUSTOM_PROPS_SETTERS: {
- position: L.DomUtil.setPosition
- //TODO transform custom attr
- },
-
- implemented: function () {
- return L.Transition.NATIVE || L.Transition.TIMER;
- }
- },
-
- options: {
- easing: 'ease',
- duration: 0.5
- },
-
- _setProperty: function (prop, value) {
- var setters = L.Transition.CUSTOM_PROPS_SETTERS;
- if (prop in setters) {
- setters[prop](this._el, value);
- } else {
- this._el.style[prop] = value;
- }
- }
-});
-
-
-/*
- * L.Transition native implementation that powers Leaflet animation
- * in browsers that support CSS3 Transitions
- */
-
-L.Transition = L.Transition.extend({
- statics: (function () {
- var transition = L.DomUtil.TRANSITION,
- transitionEnd = (transition === 'webkitTransition' || transition === 'OTransition' ?
- transition + 'End' : 'transitionend');
-
- return {
- NATIVE: !!transition,
-
- TRANSITION: transition,
- PROPERTY: transition + 'Property',
- DURATION: transition + 'Duration',
- EASING: transition + 'TimingFunction',
- END: transitionEnd,
-
- // transition-property value to use with each particular custom property
- CUSTOM_PROPS_PROPERTIES: {
- position: L.Browser.webkit ? L.DomUtil.TRANSFORM : 'top, left'
- }
- };
- }()),
-
- options: {
- fakeStepInterval: 100
- },
-
- initialize: function (/*HTMLElement*/ el, /*Object*/ options) {
- this._el = el;
- L.Util.setOptions(this, options);
-
- L.DomEvent.addListener(el, L.Transition.END, this._onTransitionEnd, this);
- this._onFakeStep = L.Util.bind(this._onFakeStep, this);
- },
-
- run: function (/*Object*/ props) {
- var prop,
- propsList = [],
- customProp = L.Transition.CUSTOM_PROPS_PROPERTIES;
-
- for (prop in props) {
- if (props.hasOwnProperty(prop)) {
- prop = customProp[prop] ? customProp[prop] : prop;
- prop = this._dasherize(prop);
- propsList.push(prop);
- }
- }
-
- this._el.style[L.Transition.DURATION] = this.options.duration + 's';
- this._el.style[L.Transition.EASING] = this.options.easing;
- this._el.style[L.Transition.PROPERTY] = propsList.join(', ');
-
- for (prop in props) {
- if (props.hasOwnProperty(prop)) {
- this._setProperty(prop, props[prop]);
- }
- }
-
- this._inProgress = true;
-
- this.fire('start');
-
- if (L.Transition.NATIVE) {
- clearInterval(this._timer);
- this._timer = setInterval(this._onFakeStep, this.options.fakeStepInterval);
- } else {
- this._onTransitionEnd();
- }
- },
-
- _dasherize: (function () {
- var re = /([A-Z])/g;
-
- function replaceFn(w) {
- return '-' + w.toLowerCase();
- }
-
- return function (str) {
- return str.replace(re, replaceFn);
- };
- }()),
-
- _onFakeStep: function () {
- this.fire('step');
- },
-
- _onTransitionEnd: function () {
- if (this._inProgress) {
- this._inProgress = false;
- clearInterval(this._timer);
-
- this._el.style[L.Transition.PROPERTY] = 'none';
-
- this.fire('step');
- this.fire('end');
- }
- }
-});
-
-
-/*
- * L.Transition fallback implementation that powers Leaflet animation
- * in browsers that don't support CSS3 Transitions
- */
-
-L.Transition = L.Transition.NATIVE ? L.Transition : L.Transition.extend({
- statics: {
- getTime: Date.now || function () {
- return +new Date();
- },
-
- TIMER: true,
-
- EASINGS: {
- 'ease': [0.25, 0.1, 0.25, 1.0],
- 'linear': [0.0, 0.0, 1.0, 1.0],
- 'ease-in': [0.42, 0, 1.0, 1.0],
- 'ease-out': [0, 0, 0.58, 1.0],
- 'ease-in-out': [0.42, 0, 0.58, 1.0]
- },
-
- CUSTOM_PROPS_GETTERS: {
- position: L.DomUtil.getPosition
- },
-
- //used to get units from strings like "10.5px" (->px)
- UNIT_RE: /^[\d\.]+(\D*)$/
- },
-
- options: {
- fps: 50
- },
-
- initialize: function (el, options) {
- this._el = el;
- L.Util.extend(this.options, options);
-
- var easings = L.Transition.EASINGS[this.options.easing] || L.Transition.EASINGS.ease;
-
- this._p1 = new L.Point(0, 0);
- this._p2 = new L.Point(easings[0], easings[1]);
- this._p3 = new L.Point(easings[2], easings[3]);
- this._p4 = new L.Point(1, 1);
-
- this._step = L.Util.bind(this._step, this);
- this._interval = Math.round(1000 / this.options.fps);
- },
-
- run: function (props) {
- this._props = {};
-
- var getters = L.Transition.CUSTOM_PROPS_GETTERS,
- re = L.Transition.UNIT_RE;
-
- this.fire('start');
-
- for (var prop in props) {
- if (props.hasOwnProperty(prop)) {
- var p = {};
- if (prop in getters) {
- p.from = getters[prop](this._el);
- } else {
- var matches = this._el.style[prop].match(re);
- p.from = parseFloat(matches[0]);
- p.unit = matches[1];
- }
- p.to = props[prop];
- this._props[prop] = p;
- }
- }
-
- clearInterval(this._timer);
- this._timer = setInterval(this._step, this._interval);
- this._startTime = L.Transition.getTime();
- },
-
- _step: function () {
- var time = L.Transition.getTime(),
- elapsed = time - this._startTime,
- duration = this.options.duration * 1000;
-
- if (elapsed < duration) {
- this._runFrame(this._cubicBezier(elapsed / duration));
- } else {
- this._runFrame(1);
- this._complete();
- }
- },
-
- _runFrame: function (percentComplete) {
- var setters = L.Transition.CUSTOM_PROPS_SETTERS,
- prop, p, value;
-
- for (prop in this._props) {
- if (this._props.hasOwnProperty(prop)) {
- p = this._props[prop];
- if (prop in setters) {
- value = p.to.subtract(p.from).multiplyBy(percentComplete).add(p.from);
- setters[prop](this._el, value);
- } else {
- this._el.style[prop] =
- ((p.to - p.from) * percentComplete + p.from) + p.unit;
- }
- }
- }
- this.fire('step');
- },
-
- _complete: function () {
- clearInterval(this._timer);
- this.fire('end');
- },
-
- _cubicBezier: function (t) {
- var a = Math.pow(1 - t, 3),
- b = 3 * Math.pow(1 - t, 2) * t,
- c = 3 * (1 - t) * Math.pow(t, 2),
- d = Math.pow(t, 3),
- p1 = this._p1.multiplyBy(a),
- p2 = this._p2.multiplyBy(b),
- p3 = this._p3.multiplyBy(c),
- p4 = this._p4.multiplyBy(d);
-
- return p1.add(p2).add(p3).add(p4).y;
- }
-});
-
-
-L.Map.include(!(L.Transition && L.Transition.implemented()) ? {} : {
- setView: function (center, zoom, forceReset) {
- zoom = this._limitZoom(zoom);
- var zoomChanged = (this._zoom !== zoom);
-
- if (this._loaded && !forceReset && this._layers) {
- // difference between the new and current centers in pixels
- var offset = this._getNewTopLeftPoint(center).subtract(this._getTopLeftPoint());
-
- center = new L.LatLng(center.lat, center.lng);
-
- var done = (zoomChanged ?
- !!this._zoomToIfCenterInView && this._zoomToIfCenterInView(center, zoom, offset) :
- this._panByIfClose(offset));
-
- // exit if animated pan or zoom started
- if (done) {
- return this;
- }
- }
-
- // reset the map view
- this._resetView(center, zoom);
-
- return this;
- },
-
- panBy: function (offset) {
- if (!(offset.x || offset.y)) {
- return this;
- }
-
- if (!this._panTransition) {
- this._panTransition = new L.Transition(this._mapPane, {duration: 0.3});
-
- this._panTransition.on('step', this._onPanTransitionStep, this);
- this._panTransition.on('end', this._onPanTransitionEnd, this);
- }
- this.fire('movestart');
-
- this._panTransition.run({
- position: L.DomUtil.getPosition(this._mapPane).subtract(offset)
- });
-
- return this;
- },
-
- _onPanTransitionStep: function () {
- this.fire('move');
- },
-
- _onPanTransitionEnd: function () {
- this.fire('moveend');
- },
-
- _panByIfClose: function (offset) {
- if (this._offsetIsWithinView(offset)) {
- this.panBy(offset);
- return true;
- }
- return false;
- },
-
- _offsetIsWithinView: function (offset, multiplyFactor) {
- var m = multiplyFactor || 1,
- size = this.getSize();
- return (Math.abs(offset.x) <= size.x * m) &&
- (Math.abs(offset.y) <= size.y * m);
- }
-});
-
-
-L.Map.include(!L.DomUtil.TRANSITION ? {} : {
- _zoomToIfCenterInView: function (center, zoom, centerOffset) {
-
- if (this._animatingZoom) {
- return true;
- }
- if (!this.options.zoomAnimation) {
- return false;
- }
-
- var zoomDelta = zoom - this._zoom,
- scale = Math.pow(2, zoomDelta),
- offset = centerOffset.divideBy(1 - 1 / scale);
-
- //if offset does not exceed half of the view
- if (!this._offsetIsWithinView(offset, 1)) {
- return false;
- }
-
- this._mapPane.className += ' leaflet-zoom-anim';
-
- this
- .fire('movestart')
- .fire('zoomstart');
-
- var centerPoint = this.containerPointToLayerPoint(this.getSize().divideBy(2)),
- origin = centerPoint.add(offset);
-
- this._prepareTileBg();
-
- this._runAnimation(center, zoom, scale, origin);
-
- return true;
- },
-
-
- _runAnimation: function (center, zoom, scale, origin) {
- this._animatingZoom = true;
-
- this._animateToCenter = center;
- this._animateToZoom = zoom;
-
- var transform = L.DomUtil.TRANSFORM;
-
- //dumb FireFox hack, I have no idea why this magic zero translate fixes the scale transition problem
- if (L.Browser.gecko || window.opera) {
- this._tileBg.style[transform] += ' translate(0,0)';
- }
-
- var scaleStr;
-
- // Android doesn't like translate/scale chains, transformOrigin + scale works better but
- // it breaks touch zoom which Anroid doesn't support anyway, so that's a really ugly hack
- // TODO work around this prettier
- if (L.Browser.android) {
- this._tileBg.style[transform + 'Origin'] = origin.x + 'px ' + origin.y + 'px';
- scaleStr = 'scale(' + scale + ')';
- } else {
- scaleStr = L.DomUtil.getScaleString(scale, origin);
- }
-
- L.Util.falseFn(this._tileBg.offsetWidth); //hack to make sure transform is updated before running animation
-
- var options = {};
- options[transform] = this._tileBg.style[transform] + ' ' + scaleStr;
- this._tileBg.transition.run(options);
- },
-
- _prepareTileBg: function () {
- if (!this._tileBg) {
- this._tileBg = this._createPane('leaflet-tile-pane', this._mapPane);
- this._tileBg.style.zIndex = 1;
- }
-
- var tilePane = this._tilePane,
- tileBg = this._tileBg;
-
- // prepare the background pane to become the main tile pane
- //tileBg.innerHTML = '';
- tileBg.style[L.DomUtil.TRANSFORM] = '';
- tileBg.style.visibility = 'hidden';
-
- // tells tile layers to reinitialize their containers
- tileBg.empty = true;
- tilePane.empty = false;
-
- this._tilePane = this._panes.tilePane = tileBg;
- this._tileBg = tilePane;
-
- if (!this._tileBg.transition) {
- this._tileBg.transition = new L.Transition(this._tileBg, {duration: 0.3, easing: 'cubic-bezier(0.25,0.1,0.25,0.75)'});
- this._tileBg.transition.on('end', this._onZoomTransitionEnd, this);
- }
-
- this._stopLoadingBgTiles();
- },
-
- // stops loading all tiles in the background layer
- _stopLoadingBgTiles: function () {
- var tiles = [].slice.call(this._tileBg.getElementsByTagName('img'));
-
- for (var i = 0, len = tiles.length; i < len; i++) {
- if (!tiles[i].complete) {
- // tiles[i].src = '' - evil, doesn't cancel the request!
- tiles[i].parentNode.removeChild(tiles[i]);
- tiles[i] = null;
- }
- }
- },
-
- _onZoomTransitionEnd: function () {
- this._restoreTileFront();
-
- L.Util.falseFn(this._tileBg.offsetWidth);
- this._resetView(this._animateToCenter, this._animateToZoom, true, true);
-
- this._mapPane.className = this._mapPane.className.replace(' leaflet-zoom-anim', ''); //TODO toggleClass util
- this._animatingZoom = false;
- },
-
- _restoreTileFront: function () {
- this._tilePane.innerHTML = '';
- this._tilePane.style.visibility = '';
- this._tilePane.style.zIndex = 2;
- this._tileBg.style.zIndex = 1;
- },
-
- _clearTileBg: function () {
- if (!this._animatingZoom && !this.touchZoom._zooming) {
- this._tileBg.innerHTML = '';
- }
- }
-});
-
-
-/*
- * Provides L.Map with convenient shortcuts for W3C geolocation.
- */
-
-L.Map.include({
- locate: function (/*Object*/ options) {
-
- this._locationOptions = options = L.Util.extend({
- watch: false,
- setView: false,
- maxZoom: Infinity,
- timeout: 10000,
- maximumAge: 0,
- enableHighAccuracy: false
- }, options);
-
- if (!navigator.geolocation) {
- return this.fire('locationerror', {
- code: 0,
- message: "Geolocation not supported."
- });
- }
-
- var onResponse = L.Util.bind(this._handleGeolocationResponse, this),
- onError = L.Util.bind(this._handleGeolocationError, this);
-
- if (options.watch) {
- this._locationWatchId = navigator.geolocation.watchPosition(onResponse, onError, options);
- } else {
- navigator.geolocation.getCurrentPosition(onResponse, onError, options);
- }
- return this;
- },
-
- stopLocate: function () {
- if (navigator.geolocation) {
- navigator.geolocation.clearWatch(this._locationWatchId);
- }
- },
-
- locateAndSetView: function (maxZoom, options) {
- options = L.Util.extend({
- maxZoom: maxZoom || Infinity,
- setView: true
- }, options);
- return this.locate(options);
- },
-
- _handleGeolocationError: function (error) {
- var c = error.code,
- message = (c === 1 ? "permission denied" :
- (c === 2 ? "position unavailable" : "timeout"));
-
- if (this._locationOptions.setView && !this._loaded) {
- this.fitWorld();
- }
-
- this.fire('locationerror', {
- code: c,
- message: "Geolocation error: " + message + "."
- });
- },
-
- _handleGeolocationResponse: function (pos) {
- var latAccuracy = 180 * pos.coords.accuracy / 4e7,
- lngAccuracy = latAccuracy * 2,
- lat = pos.coords.latitude,
- lng = pos.coords.longitude,
- latlng = new L.LatLng(lat, lng);
-
- var sw = new L.LatLng(lat - latAccuracy, lng - lngAccuracy),
- ne = new L.LatLng(lat + latAccuracy, lng + lngAccuracy),
- bounds = new L.LatLngBounds(sw, ne);
-
- if (this._locationOptions.setView) {
- var zoom = Math.min(this.getBoundsZoom(bounds), this._locationOptions.maxZoom);
- this.setView(latlng, zoom);
- }
-
- this.fire('locationfound', {
- latlng: latlng,
- bounds: bounds,
- accuracy: pos.coords.accuracy
- });
- }
-});
-
-
--- a/web/hdalab/static/hdalab/lib/leaflet/leaflet.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,323 +0,0 @@
-/* required styles */
-
-.leaflet-map-pane,
-.leaflet-tile,
-.leaflet-marker-icon,
-.leaflet-marker-shadow,
-.leaflet-tile-pane,
-.leaflet-overlay-pane,
-.leaflet-shadow-pane,
-.leaflet-marker-pane,
-.leaflet-popup-pane,
-.leaflet-overlay-pane svg,
-.leaflet-zoom-box,
-.leaflet-image-layer { /* TODO optimize classes */
- position: absolute;
- }
-.leaflet-container {
- overflow: hidden;
- }
-.leaflet-tile-pane {
- -webkit-transform: translate3d(0,0,0);
- }
-.leaflet-tile,
-.leaflet-marker-icon,
-.leaflet-marker-shadow {
- -moz-user-select: none;
- -webkit-user-select: none;
- user-select: none;
- }
-.leaflet-marker-icon,
-.leaflet-marker-shadow {
- display: block;
- }
-.leaflet-clickable {
- cursor: pointer;
- }
-.leaflet-container img {
- max-width: none !important;
- }
-
-.leaflet-tile-pane { z-index: 2; }
-
-.leaflet-objects-pane { z-index: 3; }
-.leaflet-overlay-pane { z-index: 4; }
-.leaflet-shadow-pane { z-index: 5; }
-.leaflet-marker-pane { z-index: 6; }
-.leaflet-popup-pane { z-index: 7; }
-
-.leaflet-zoom-box {
- width: 0;
- height: 0;
- }
-
-.leaflet-tile {
- visibility: hidden;
- }
-.leaflet-tile-loaded {
- visibility: inherit;
- }
-
-a.leaflet-active {
- outline: 2px solid orange;
- }
-
-
-/* Leaflet controls */
-
-.leaflet-control {
- position: relative;
- z-index: 7;
- }
-.leaflet-top,
-.leaflet-bottom {
- position: absolute;
- }
-.leaflet-top {
- top: 0;
- }
-.leaflet-right {
- right: 0;
- }
-.leaflet-bottom {
- bottom: 0;
- }
-.leaflet-left {
- left: 0;
- }
-.leaflet-control {
- float: left;
- clear: both;
- }
-.leaflet-right .leaflet-control {
- float: right;
- }
-.leaflet-top .leaflet-control {
- margin-top: 10px;
- }
-.leaflet-bottom .leaflet-control {
- margin-bottom: 10px;
- }
-.leaflet-left .leaflet-control {
- margin-left: 10px;
- }
-.leaflet-right .leaflet-control {
- margin-right: 10px;
- }
-
-.leaflet-control-zoom, .leaflet-control-layers {
- -moz-border-radius: 7px;
- -webkit-border-radius: 7px;
- border-radius: 7px;
- }
-.leaflet-control-zoom {
- padding: 5px;
- background: rgba(0, 0, 0, 0.25);
- }
-.leaflet-control-zoom a {
- background-color: rgba(255, 255, 255, 0.75);
- }
-.leaflet-control-zoom a, .leaflet-control-layers a {
- background-position: 50% 50%;
- background-repeat: no-repeat;
- display: block;
- }
-.leaflet-control-zoom a {
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- width: 19px;
- height: 19px;
- }
-.leaflet-control-zoom a:hover {
- background-color: #fff;
- }
-.leaflet-big-buttons .leaflet-control-zoom a {
- width: 27px;
- height: 27px;
- }
-.leaflet-control-zoom-in {
- background-image: url(images/zoom-in.png);
- margin-bottom: 5px;
- }
-.leaflet-control-zoom-out {
- background-image: url(images/zoom-out.png);
- }
-
-.leaflet-control-layers {
- -moz-box-shadow: 0 0 7px #999;
- -webkit-box-shadow: 0 0 7px #999;
- box-shadow: 0 0 7px #999;
-
- background: #f8f8f9;
- }
-.leaflet-control-layers a {
- background-image: url(images/layers.png);
- width: 36px;
- height: 36px;
- }
-.leaflet-big-buttons .leaflet-control-layers a {
- width: 44px;
- height: 44px;
- }
-.leaflet-control-layers .leaflet-control-layers-list,
-.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
- display: none;
- }
-.leaflet-control-layers-expanded .leaflet-control-layers-list {
- display: block;
- position: relative;
- }
-.leaflet-control-layers-expanded {
- padding: 6px 10px 6px 6px;
- font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
- color: #333;
- background: #fff;
- }
-.leaflet-control-layers input {
- margin-top: 2px;
- position: relative;
- top: 1px;
- }
-.leaflet-control-layers label {
- display: block;
- }
-.leaflet-control-layers-separator {
- height: 0;
- border-top: 1px solid #ddd;
- margin: 5px -10px 5px -6px;
- }
-
-.leaflet-container .leaflet-control-attribution {
- margin: 0;
- padding: 0 5px;
-
- font: 11px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
- color: #333;
-
- background-color: rgba(255, 255, 255, 0.7);
-
- -moz-box-shadow: 0 0 7px #ccc;
- -webkit-box-shadow: 0 0 7px #ccc;
- box-shadow: 0 0 7px #ccc;
- }
-
-
-/* Fade animations */
-
-.leaflet-fade-anim .leaflet-tile {
- opacity: 0;
-
- -webkit-transition: opacity 0.2s linear;
- -moz-transition: opacity 0.2s linear;
- -o-transition: opacity 0.2s linear;
- transition: opacity 0.2s linear;
- }
-.leaflet-fade-anim .leaflet-tile-loaded {
- opacity: 1;
- }
-
-.leaflet-fade-anim .leaflet-popup {
- opacity: 0;
-
- -webkit-transition: opacity 0.2s linear;
- -moz-transition: opacity 0.2s linear;
- -o-transition: opacity 0.2s linear;
- transition: opacity 0.2s linear;
- }
-.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
- opacity: 1;
- }
-
-.leaflet-zoom-anim .leaflet-tile {
- -webkit-transition: none;
- -moz-transition: none;
- -o-transition: none;
- transition: none;
- }
-
-.leaflet-zoom-anim .leaflet-objects-pane {
- visibility: hidden;
- }
-
-
-/* Popup layout */
-
-.leaflet-popup {
- position: absolute;
- text-align: center;
- -webkit-transform: translate3d(0,0,0);
- }
-.leaflet-popup-content-wrapper {
- padding: 1px;
- text-align: left;
- }
-.leaflet-popup-content {
- margin: 19px;
- }
-.leaflet-popup-tip-container {
- margin: 0 auto;
- width: 40px;
- height: 16px;
- position: relative;
- overflow: hidden;
- }
-.leaflet-popup-tip {
- width: 15px;
- height: 15px;
- padding: 1px;
-
- margin: -8px auto 0;
-
- -moz-transform: rotate(45deg);
- -webkit-transform: rotate(45deg);
- -ms-transform: rotate(45deg);
- -o-transform: rotate(45deg);
- transform: rotate(45deg);
- }
-.leaflet-popup-close-button {
- position: absolute;
- top: 9px;
- right: 9px;
-
- width: 10px;
- height: 10px;
-
- overflow: hidden;
- }
-.leaflet-popup-content p {
- margin: 18px 0;
- }
-
-
-/* Visual appearance */
-
-.leaflet-container {
- background: #ddd;
- }
-.leaflet-container a {
- color: #0078A8;
- }
-.leaflet-zoom-box {
- border: 2px dotted #05f;
- background: white;
- opacity: 0.5;
- }
-.leaflet-popup-content-wrapper, .leaflet-popup-tip {
- background: white;
-
- box-shadow: 0 1px 10px #888;
- -moz-box-shadow: 0 1px 10px #888;
- -webkit-box-shadow: 0 1px 14px #999;
- }
-.leaflet-popup-content-wrapper {
- -moz-border-radius: 20px;
- -webkit-border-radius: 20px;
- border-radius: 20px;
- }
-.leaflet-popup-content {
- font: 12px/1.4 "Helvetica Neue", Arial, Helvetica, sans-serif;
- }
-.leaflet-popup-close-button {
- background: white url(images/popup-close.png);
- }
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/leaflet/leaflet.ie.css Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-.leaflet-tile {
- filter: inherit;
- }
-
-.leaflet-vml-shape {
- width: 1px;
- height: 1px;
- }
-.lvml {
- behavior: url(#default#VML);
- display: inline-block;
- position: absolute;
- }
-
-.leaflet-control {
- display: inline;
- }
-
-.leaflet-popup-tip {
- width: 21px;
- _width: 27px;
- margin: 0 auto;
- _margin-top: -3px;
-
- filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
- -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
- }
-.leaflet-popup-tip-container {
- margin-top: -1px;
- }
-.leaflet-popup-content-wrapper, .leaflet-popup-tip {
- border: 1px solid #bbb;
- }
-
-.leaflet-control-zoom {
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#3F000000',EndColorStr='#3F000000');
- }
-.leaflet-control-zoom a {
- background-color: #eee;
- }
-.leaflet-control-zoom a:hover {
- background-color: #fff;
- }
-.leaflet-control-layers-toggle {
- }
-.leaflet-control-attribution, .leaflet-control-layers {
- background: white;
- }
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/leaflet/leaflet.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-/*
- Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
- Leaflet is a modern open-source JavaScript library for interactive maps.
- http://leaflet.cloudmade.com
-*/
-(function(a){a.L={VERSION:"0.3",ROOT_URL:a.L_ROOT_URL||function(){var a=document.getElementsByTagName("script"),b=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/,c,d,e,f;for(c=0,d=a.length;c<d;c++){e=a[c].src,f=e.match(b);if(f)return f[1]==="include"?"../../dist/":e.replace(b,"")+"/"}return""}(),noConflict:function(){return a.L=this._originalL,this},_originalL:a.L}})(this),L.Util={extend:function(a){var b=Array.prototype.slice.call(arguments,1);for(var c=0,d=b.length,e;c<d;c++){e=b[c]||{};for(var f in e)e.hasOwnProperty(f)&&(a[f]=e[f])}return a},bind:function(a,b){return function(){return a.apply(b,arguments)}},stamp:function(){var a=0,b="_leaflet_id";return function(c){return c[b]=c[b]||++a,c[b]}}(),requestAnimFrame:function(){function a(a){window.setTimeout(a,1e3/60)}var b=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||a;return function(c,d,e,f){c=d?L.Util.bind(c,d):c,e&&b===a?c():b(c,f)}}(),limitExecByInterval:function(a,b,c){function g(){d=!1,e&&(f.callee.apply(c,f),e=!1)}var d,e,f;return function(){f=arguments,d?e=!0:(d=!0,setTimeout(g,b),a.apply(c,f))}},falseFn:function(){return!1},formatNum:function(a,b){var c=Math.pow(10,b||5);return Math.round(a*c)/c},setOptions:function(a,b){a.options=L.Util.extend({},a.options,b)},getParamString:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+"="+a[c]);return"?"+b.join("&")},template:function(a,b){return a.replace(/\{ *([\w_]+) *\}/g,function(a,c){var d=b[c];if(!b.hasOwnProperty(c))throw Error("No value provided for variable "+a);return d})}},L.Class=function(){},L.Class.extend=function(a){var b=function(){this.initialize&&this.initialize.apply(this,arguments)},c=function(){};c.prototype=this.prototype;var d=new c;d.constructor=b,b.prototype=d,b.superclass=this.prototype;for(var e in this)this.hasOwnProperty(e)&&e!=="prototype"&&e!=="superclass"&&(b[e]=this[e]);return a.statics&&(L.Util.extend(b,a.statics),delete a.statics),a.includes&&(L.Util.extend.apply(null,[d].concat(a.includes)),delete a.includes),a.options&&d.options&&(a.options=L.Util.extend({},d.options,a.options)),L.Util.extend(d,a),b.extend=L.Class.extend,b.include=function(a){L.Util.extend(this.prototype,a)},b},L.Mixin={},L.Mixin.Events={addEventListener:function(a,b,c){var d=this._leaflet_events=this._leaflet_events||{};return d[a]=d[a]||[],d[a].push({action:b,context:c||this}),this},hasEventListeners:function(a){var b="_leaflet_events";return b in this&&a in this[b]&&this[b][a].length>0},removeEventListener:function(a,b,c){if(!this.hasEventListeners(a))return this;for(var d=0,e=this._leaflet_events,f=e[a].length;d<f;d++)if(e[a][d].action===b&&(!c||e[a][d].context===c))return e[a].splice(d,1),this;return this},fireEvent:function(a,b){if(!this.hasEventListeners(a))return this;var c=L.Util.extend({type:a,target:this},b),d=this._leaflet_events[a].slice();for(var e=0,f=d.length;e<f;e++)d[e].action.call(d[e].context||this,c);return this}},L.Mixin.Events.on=L.Mixin.Events.addEventListener,L.Mixin.Events.off=L.Mixin.Events.removeEventListener,L.Mixin.Events.fire=L.Mixin.Events.fireEvent,function(){var a=navigator.userAgent.toLowerCase(),b=!!window.ActiveXObject,c=a.indexOf("webkit")!==-1,d=typeof orientation!="undefined"?!0:!1,e=a.indexOf("android")!==-1,f=window.opera;L.Browser={ie:b,ie6:b&&!window.XMLHttpRequest,webkit:c,webkit3d:c&&"WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix,gecko:a.indexOf("gecko")!==-1,opera:f,android:e,mobileWebkit:d&&c,mobileOpera:d&&f,mobile:d,touch:function(){var a=!1,b="ontouchstart";if(b in document.documentElement)return!0;var c=document.createElement("div");return!c.setAttribute||!c.removeAttribute?!1:(c.setAttribute(b,"return;"),typeof c[b]=="function"&&(a=!0),c.removeAttribute(b),c=null,a)}()}}(),L.Point=function(a,b,c){this.x=c?Math.round(a):a,this.y=c?Math.round(b):b},L.Point.prototype={add:function(a){return this.clone()._add(a)},_add:function(a){return this.x+=a.x,this.y+=a.y,this},subtract:function(a){return this.clone()._subtract(a)},_subtract:function(a){return this.x-=a.x,this.y-=a.y,this},divideBy:function(a,b){return new L.Point(this.x/a,this.y/a,b)},multiplyBy:function(a){return new L.Point(this.x*a,this.y*a)},distanceTo:function(a){var b=a.x-this.x,c=a.y-this.y;return Math.sqrt(b*b+c*c)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},clone:function(){return new L.Point(this.x,this.y)},toString:function(){return"Point("+L.Util.formatNum(this.x)+", "+L.Util.formatNum(this.y)+")"}},L.Bounds=L.Class.extend({initialize:function(a,b){if(!a)return;var c=a instanceof Array?a:[a,b];for(var d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this.min&&!this.max?(this.min=new L.Point(a.x,a.y),this.max=new L.Point(a.x,a.y)):(this.min.x=Math.min(a.x,this.min.x),this.max.x=Math.max(a.x,this.max.x),this.min.y=Math.min(a.y,this.min.y),this.max.y=Math.max(a.y,this.max.y))},getCenter:function(a){return new L.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,a)},contains:function(a){var b,c;return a instanceof L.Bounds?(b=a.min,c=a.max):b=c=a,b.x>=this.min.x&&c.x<=this.max.x&&b.y>=this.min.y&&c.y<=this.max.y},intersects:function(a){var b=this.min,c=this.max,d=a.min,e=a.max,f=e.x>=b.x&&d.x<=c.x,g=e.y>=b.y&&d.y<=c.y;return f&&g}}),L.Transformation=L.Class.extend({initialize:function(a,b,c,d){this._a=a,this._b=b,this._c=c,this._d=d},transform:function(a,b){return this._transform(a.clone(),b)},_transform:function(a,b){return b=b||1,a.x=b*(this._a*a.x+this._b),a.y=b*(this._c*a.y+this._d),a},untransform:function(a,b){return b=b||1,new L.Point((a.x/b-this._b)/this._a,(a.y/b-this._d)/this._c)}}),L.DomUtil={get:function(a){return typeof a=="string"?document.getElementById(a):a},getStyle:function(a,b){var c=a.style[b];!c&&a.currentStyle&&(c=a.currentStyle[b]);if(!c||c==="auto"){var d=document.defaultView.getComputedStyle(a,null);c=d?d[b]:null}return c==="auto"?null:c},getViewportOffset:function(a){var b=0,c=0,d=a,e=document.body;do{b+=d.offsetTop||0,c+=d.offsetLeft||0;if(d.offsetParent===e&&L.DomUtil.getStyle(d,"position")==="absolute")break;d=d.offsetParent}while(d);d=a;do{if(d===e)break;b-=d.scrollTop||0,c-=d.scrollLeft||0,d=d.parentNode}while(d);return new L.Point(c,b)},create:function(a,b,c){var d=document.createElement(a);return d.className=b,c&&c.appendChild(d),d},disableTextSelection:function(){document.selection&&document.selection.empty&&document.selection.empty(),this._onselectstart||(this._onselectstart=document.onselectstart,document.onselectstart=L.Util.falseFn)},enableTextSelection:function(){document.onselectstart=this._onselectstart,this._onselectstart=null},hasClass:function(a,b){return a.className.length>0&&RegExp("(^|\\s)"+b+"(\\s|$)").test(a.className)},addClass:function(a,b){L.DomUtil.hasClass(a,b)||(a.className+=(a.className?" ":"")+b)},removeClass:function(a,b){a.className=a.className.replace(/(\S+)\s*/g,function(a,c){return c===b?"":a}).replace(/^\s+/,"")},setOpacity:function(a,b){L.Browser.ie?a.style.filter="alpha(opacity="+Math.round(b*100)+")":a.style.opacity=b},testProp:function(a){var b=document.documentElement.style;for(var c=0;c<a.length;c++)if(a[c]in b)return a[c];return!1},getTranslateString:function(a){return L.DomUtil.TRANSLATE_OPEN+a.x+"px,"+a.y+"px"+L.DomUtil.TRANSLATE_CLOSE},getScaleString:function(a,b){var c=L.DomUtil.getTranslateString(b),d=" scale("+a+") ",e=L.DomUtil.getTranslateString(b.multiplyBy(-1));return c+d+e},setPosition:function(a,b){a._leaflet_pos=b,L.Browser.webkit?a.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(b):(a.style.left=b.x+"px",a.style.top=b.y+"px")},getPosition:function(a){return a._leaflet_pos}},L.Util.extend(L.DomUtil,{TRANSITION:L.DomUtil.testProp(["transition","webkitTransition","OTransition","MozTransition","msTransition"]),TRANSFORM:L.DomUtil.testProp(["transformProperty","WebkitTransform","OTransform","MozTransform","msTransform"]),TRANSLATE_OPEN:"translate"+(L.Browser.webkit3d?"3d(":"("),TRANSLATE_CLOSE:L.Browser.webkit3d?",0)":")"}),L.LatLng=function(a,b,c){var d=parseFloat(a),e=parseFloat(b);if(isNaN(d)||isNaN(e))throw Error("Invalid LatLng object: ("+a+", "+b+")");c!==!0&&(d=Math.max(Math.min(d,90),-90),e=(e+180)%360+(e<-180||e===180?180:-180)),this.lat=d,this.lng=e},L.Util.extend(L.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),L.LatLng.prototype={equals:function(a){if(a instanceof L.LatLng){var b=Math.max(Math.abs(this.lat-a.lat),Math.abs(this.lng-a.lng));return b<=L.LatLng.MAX_MARGIN}return!1},toString:function(){return"LatLng("+L.Util.formatNum(this.lat)+", "+L.Util.formatNum(this.lng)+")"},distanceTo:function(a){var b=6378137,c=L.LatLng.DEG_TO_RAD,d=(a.lat-this.lat)*c,e=(a.lng-this.lng)*c,f=this.lat*c,g=a.lat*c,h=Math.sin(d/2),i=Math.sin(e/2),j=h*h+i*i*Math.cos(f)*Math.cos(g);return b*2*Math.atan2(Math.sqrt(j),Math.sqrt(1-j))}},L.LatLngBounds=L.Class.extend({initialize:function(a,b){if(!a)return;var c=a instanceof Array?a:[a,b];for(var d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this._southWest&&!this._northEast?(this._southWest=new L.LatLng(a.lat,a.lng,!0),this._northEast=new L.LatLng(a.lat,a.lng,!0)):(this._southWest.lat=Math.min(a.lat,this._southWest.lat),this._southWest.lng=Math.min(a.lng,this._southWest.lng),this._northEast.lat=Math.max(a.lat,this._northEast.lat),this._northEast.lng=Math.max(a.lng,this._northEast.lng))},getCenter:function(){return new L.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new L.LatLng(this._northEast.lat,this._southWest.lng,!0)},getSouthEast:function(){return new L.LatLng(this._southWest.lat,this._northEast.lng,!0)},contains:function(a){var b=this._southWest,c=this._northEast,d,e;return a instanceof L.LatLngBounds?(d=a.getSouthWest(),e=a.getNorthEast()):d=e=a,d.lat>=b.lat&&e.lat<=c.lat&&d.lng>=b.lng&&e.lng<=c.lng},intersects:function(a){var b=this._southWest,c=this._northEast,d=a.getSouthWest(),e=a.getNorthEast(),f=e.lat>=b.lat&&d.lat<=c.lat,g=e.lng>=b.lng&&d.lng<=c.lng;return f&&g},toBBoxString:function(){var a=this._southWest,b=this._northEast;return[a.lng,a.lat,b.lng,b.lat].join(",")}}),L.Projection={},L.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=Math.max(Math.min(c,a.lat),-c),e=a.lng*b,f=d*b;return f=Math.log(Math.tan(Math.PI/4+f/2)),new L.Point(e,f)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG,d=a.x*c,e=(2*Math.atan(Math.exp(a.y))-Math.PI/2)*c;return new L.LatLng(e,d,b)}},L.Projection.LonLat={project:function(a){return new L.Point(a.lng,a.lat)},unproject:function(a,b){return new L.LatLng(a.y,a.x,b)}},L.CRS={latLngToPoint:function(a,b){var c=this.projection.project(a);return this.transformation._transform(c,b)},pointToLatLng:function(a,b,c){var d=this.transformation.untransform(a,b);return this.projection.unproject(d,c)},project:function(a){return this.projection.project(a)}},L.CRS.EPSG3857=L.Util.extend({},L.CRS,{code:"EPSG:3857",projection:L.Projection.SphericalMercator,transformation:new L.Transformation(.5/Math.PI,.5,-0.5/Math.PI,.5),project:function(a){var b=this.projection.project(a),c=6378137;return b.multiplyBy(c)}}),L.CRS.EPSG900913=L.Util.extend({},L.CRS.EPSG3857,{code:"EPSG:900913"}),L.CRS.EPSG4326=L.Util.extend({},L.CRS,{code:"EPSG:4326",projection:L.Projection.LonLat,transformation:new L.Transformation(1/360,.5,-1/360,.5)}),L.Map=L.Class.extend({includes:L.Mixin.Events,options:{crs:L.CRS.EPSG3857||L.CRS.EPSG4326,scale:function(a){return 256*Math.pow(2,a)},center:null,zoom:null,layers:[],dragging:!0,touchZoom:L.Browser.touch&&!L.Browser.android,scrollWheelZoom:!L.Browser.touch,doubleClickZoom:!0,boxZoom:!0,zoomControl:!0,attributionControl:!0,fadeAnimation:L.DomUtil.TRANSITION&&!L.Browser.android,zoomAnimation:L.DomUtil.TRANSITION&&!L.Browser.android&&!L.Browser.mobileOpera,trackResize:!0,closePopupOnClick:!0,worldCopyJump:!0},initialize:function(a,b){L.Util.setOptions(this,b),this._container=L.DomUtil.get(a);if(this._container._leaflet)throw Error("Map container is already initialized.");this._container._leaflet=!0,this._initLayout(),L.DomEvent&&(this._initEvents(),L.Handler&&this._initInteraction(),L.Control&&this._initControls()),this.options.maxBounds&&this.setMaxBounds(this.options.maxBounds);var c=this.options.center,d=this.options.zoom;c!==null&&d!==null&&this.setView(c,d,!0);var e=this.options.layers;e=e instanceof Array?e:[e],this._tileLayersNum=0,this._initLayers(e)},setView:function(a,b){return this._resetView(a,this._limitZoom(b)),this},setZoom:function(a){return this.setView(this.getCenter(),a)},zoomIn:function(){return this.setZoom(this._zoom+1)},zoomOut:function(){return this.setZoom(this._zoom-1)},fitBounds:function(a){var b=this.getBoundsZoom(a);return this.setView(a.getCenter(),b)},fitWorld:function(){var a=new L.LatLng(-60,-170),b=new L.LatLng(85,179);return this.fitBounds(new L.LatLngBounds(a,b))},panTo:function(a){return this.setView(a,this._zoom)},panBy:function(a){return this.fire("movestart"),this._rawPanBy(a),this.fire("move"),this.fire("moveend"),this},setMaxBounds:function(a){this.options.maxBounds=a;if(!a)return this._boundsMinZoom=null,this;var b=this.getBoundsZoom(a,!0);return this._boundsMinZoom=b,this._loaded&&(this._zoom<b?this.setView(a.getCenter(),b):this.panInsideBounds(a)),this},panInsideBounds:function(a){var b=this.getBounds(),c=this.project(b.getSouthWest()),d=this.project(b.getNorthEast()),e=this.project(a.getSouthWest()),f=this.project(a.getNorthEast()),g=0,h=0;return d.y<f.y&&(h=f.y-d.y),d.x>f.x&&(g=f.x-d.x),c.y>e.y&&(h=e.y-c.y),c.x<e.x&&(g=e.x-c.x),this.panBy(new L.Point(g,h,!0))},addLayer:function(a,b){var c=L.Util.stamp(a);if(this._layers[c])return this;this._layers[c]=a,a.options&&!isNaN(a.options.maxZoom)&&(this._layersMaxZoom=Math.max(this._layersMaxZoom||0,a.options.maxZoom)),a.options&&!isNaN(a.options.minZoom)&&(this._layersMinZoom=Math.min(this._layersMinZoom||Infinity,a.options.minZoom)),this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum++,a.on("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.addAttribution(a.getAttribution());var d=function(){a.onAdd(this,b),this.fire("layeradd",{layer:a})};return this._loaded?d.call(this):this.on("load",d,this),this},removeLayer:function(a){var b=L.Util.stamp(a);return this._layers[b]&&(a.onRemove(this),delete this._layers[b],this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum--,a.off("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.removeAttribution(a.getAttribution()),this.fire("layerremove",{layer:a})),this},hasLayer:function(a){var b=L.Util.stamp(a);return this._layers.hasOwnProperty(b)},invalidateSize:function(){var a=this.getSize();return this._sizeChanged=!0,this.options.maxBounds&&this.setMaxBounds(this.options.maxBounds),this._loaded?(this._rawPanBy(a.subtract(this.getSize()).divideBy(2,!0)),this.fire("move"),clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(L.Util.bind(function(){this.fire("moveend")},this),200),this):this},getCenter:function(a){var b=this.getSize().divideBy(2),c=this._getTopLeftPoint().add(b);return this.unproject(c,this._zoom,a)},getZoom:function(){return this._zoom},getBounds:function(){var a=this.getPixelBounds(),b=this.unproject(new L.Point(a.min.x,a.max.y),this._zoom,!0),c=this.unproject(new L.Point(a.max.x,a.min.y),this._zoom,!0);return new L.LatLngBounds(b,c)},getMinZoom:function(){var a=this.options.minZoom||0,b=this._layersMinZoom||0,c=this._boundsMinZoom||0;return Math.max(a,b,c)},getMaxZoom:function(){var a=isNaN(this.options.maxZoom)?Infinity:this.options.maxZoom,b=this._layersMaxZoom||Infinity;return Math.min(a,b)},getBoundsZoom:function(a,b){var c=this.getSize(),d=this.options.minZoom||0,e=this.getMaxZoom(),f=a.getNorthEast(),g=a.getSouthWest(),h,i,j,k=!0;b&&d--;do d++,i=this.project(f,d),j=this.project(g,d),h=new L.Point(i.x-j.x,j.y-i.y),b?k=h.x<c.x||h.y<c.y:k=h.x<=c.x&&h.y<=c.y;while(k&&d<=e);return k&&b?null:b?d:d-1},getSize:function(){if(!this._size||this._sizeChanged)this._size=new L.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1;return this._size},getPixelBounds:function(){var a=this._getTopLeftPoint(),b=this.getSize();return new L.Bounds(a,a.add(b))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},mouseEventToContainerPoint:function(a){return L.DomEvent.getMousePosition(a,this._container)},mouseEventToLayerPoint:function(a){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(a))},mouseEventToLatLng:function(a){return this.layerPointToLatLng(this.mouseEventToLayerPoint(a))},containerPointToLayerPoint:function(a){return a.subtract(L.DomUtil.getPosition(this._mapPane))},layerPointToContainerPoint:function(a){return a.add(L.DomUtil.getPosition(this._mapPane))},layerPointToLatLng:function(a){return this.unproject(a.add(this._initialTopLeftPoint))},latLngToLayerPoint:function(a){return this.project(a)._round()._subtract(this._initialTopLeftPoint)},project:function(a,b){return b=typeof b=="undefined"?this._zoom:b,this.options.crs.latLngToPoint(a,this.options.scale(b))},unproject:function(a,b,c){return b=typeof b=="undefined"?this._zoom:b,this.options.crs.pointToLatLng(a,this.options.scale(b),c)},_initLayout:function(){var a=this._container;a.innerHTML="",a.className+=" leaflet-container",this.options.fadeAnimation&&(a.className+=" leaflet-fade-anim");var b=L.DomUtil.getStyle(a,"position");b!=="absolute"&&b!=="relative"&&(a.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var a=this._panes={};this._mapPane=a.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=a.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),this._objectsPane=a.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),a.shadowPane=this._createPane("leaflet-shadow-pane"),a.overlayPane=this._createPane("leaflet-overlay-pane"),a.markerPane=this._createPane("leaflet-marker-pane"),a.popupPane=this._createPane("leaflet-popup-pane")},_createPane:function(a,b){return L.DomUtil.create("div",a,b||this._objectsPane)},_resetView:function(a,b,c,d){var e=this._zoom!==b;d||(this.fire("movestart"),e&&this.fire("zoomstart")),this._zoom=b,this._initialTopLeftPoint=this._getNewTopLeftPoint(a);if(!c)L.DomUtil.setPosition(this._mapPane,new L.Point(0,0));else{var f=L.DomUtil.getPosition(this._mapPane);this._initialTopLeftPoint._add(f)}this._tileLayersToLoad=this._tileLayersNum,this.fire("viewreset",{hard:!c}),this.fire("move"),(e||d)&&this.fire("zoomend"),this.fire("moveend"),this._loaded||(this._loaded=!0,this.fire("load"))},_initLayers:function(a){this._layers={};var b,c;for(b=0,c=a.length;b<c;b++)this.addLayer(a[b])},_initControls:function(){this.options.zoomControl&&this.addControl(new L.Control.Zoom),this.options.attributionControl&&(this.attributionControl=new L.Control.Attribution,this.addControl(this.attributionControl))},_rawPanBy:function(a){var b=L.DomUtil.getPosition(this._mapPane);L.DomUtil.setPosition(this._mapPane,b.subtract(a))},_initEvents:function(){L.DomEvent.addListener(this._container,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseenter","mouseleave","mousemove","contextmenu"],b,c;for(b=0,c=a.length;b<c;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this);this.options.trackResize&&L.DomEvent.addListener(window,"resize",this._onResize,this)},_onResize:function(){L.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(a){if(!this._loaded||this.dragging&&this.dragging.moved())return;this.fire("pre"+a.type),this._fireMouseEvent(a)},_fireMouseEvent:function(a){if(!this._loaded)return;var b=a.type;b=b==="mouseenter"?"mouseover":b==="mouseleave"?"mouseout":b;if(!this.hasEventListeners(b))return;b==="contextmenu"&&L.DomEvent.preventDefault(a),this.fire(b,{latlng:this.mouseEventToLatLng(a),layerPoint:this.mouseEventToLayerPoint(a)})},_initInteraction:function(){var a={dragging:L.Map.Drag,touchZoom:L.Map.TouchZoom,doubleClickZoom:L.Map.DoubleClickZoom,scrollWheelZoom:L.Map.ScrollWheelZoom,boxZoom:L.Map.BoxZoom},b;for(b in a)a.hasOwnProperty(b)&&a[b]&&(this[b]=new a[b](this),this.options[b]&&this[b].enable())},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(L.Util.bind(this._clearTileBg,this),500))},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");var a=L.DomUtil.getPosition(this._mapPane);return this._initialTopLeftPoint.subtract(a)},_getNewTopLeftPoint:function(a){var b=this.getSize().divideBy(2);return this.project(a).subtract(b).round()},_limitZoom:function(a){var b=this.getMinZoom(),c=this.getMaxZoom();return Math.max(b,Math.min(c,a))}}),L.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=Math.max(Math.min(c,a.lat),-c),e=this.R_MAJOR,f=this.R_MINOR,g=a.lng*b*e,h=d*b,i=f/e,j=Math.sqrt(1-i*i),k=j*Math.sin(h);k=Math.pow((1-k)/(1+k),j*.5);var l=Math.tan(.5*(Math.PI*.5-h))/k;return h=-f*Math.log(l),new L.Point(g,h)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG,d=this.R_MAJOR,e=this.R_MINOR,f=a.x*c/d,g=e/d,h=Math.sqrt(1-g*g),i=Math.exp(-a.y/e),j=Math.PI/2-2*Math.atan(i),k=15,l=1e-7,m=k,n=.1,o;while(Math.abs(n)>l&&--m>0)o=h*Math.sin(j),n=Math.PI/2-2*Math.atan(i*Math.pow((1-o)/(1+o),.5*h))-j,j+=n;return new L.LatLng(j*c,f,b)}},L.CRS.EPSG3395=L.Util.extend({},L.CRS,{code:"EPSG:3395",projection:L.Projection.Mercator,transformation:function(){var a=L.Projection.Mercator,b=a.R_MAJOR,c=a.R_MINOR;return new L.Transformation(.5/(Math.PI*b),.5,-0.5/(Math.PI*c),.5)}()}),L.TileLayer=L.Class.extend({includes:L.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",opacity:1,scheme:"xyz",continuousWorld:!1,noWrap:!1,zoomOffset:0,zoomReverse:!1,unloadInvisibleTiles:L.Browser.mobile,updateWhenIdle:L.Browser.mobile},initialize:function(a,b,c){L.Util.setOptions(this,b),this._url=a,this._urlParams=c,typeof this.options.subdomains=="string"&&(this.options.subdomains=this.options.subdomains.split(""))},onAdd:function(a,b){this._map=a,this._insertAtTheBottom=b,this._initContainer(),this._createTileProto(),a.on("viewreset",this._resetCallback,this),this.options.updateWhenIdle?a.on("moveend",this._update,this):(this._limitedUpdate=L.Util.limitExecByInterval(this._update,150,this),a.on("move",this._limitedUpdate,this)),this._reset(),this._update()},onRemove:function(a){this._map.getPanes().tilePane.removeChild(this._container),this._container=null,this._map.off("viewreset",this._resetCallback,this),this.options.updateWhenIdle?this._map.off("moveend",this._update,this):this._map.off("move",this._limitedUpdate,this)},getAttribution:function(){return this.options.attribution},setOpacity:function(a){this.options.opacity=a,this._setOpacity(a);if(L.Browser.webkit)for(var b in this._tiles)this._tiles.hasOwnProperty(b)&&(this._tiles[b].style.webkitTransform+=" translate(0,0)")},_setOpacity:function(a){a<1&&L.DomUtil.setOpacity(this._container,a)},_initContainer:function(){var a=this._map.getPanes().tilePane,b=a.firstChild;if(!this._container||a.empty)this._container=L.DomUtil.create("div","leaflet-layer"),this._insertAtTheBottom&&b?a.insertBefore(this._container,b):a.appendChild(this._container),this._setOpacity(this.options.opacity)},_resetCallback:function(a){this._reset(a.hard)},_reset:function(a){var b;for(b in this._tiles)this._tiles.hasOwnProperty(b)&&this.fire("tileunload",{tile:this._tiles[b]});this._tiles={},this.options.reuseTiles&&(this._unusedTiles=[]),a&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){var a=this._map.getPixelBounds(),b=this.options.tileSize,c=new L.Point(Math.floor(a.min.x/b),Math.floor(a.min.y/b)),d=new L.Point(Math.floor(a.max.x/b),Math.floor(a.max.y/b)),e=new L.Bounds(c,d);this._addTilesFromCenterOut(e),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(e)},_addTilesFromCenterOut:function(a){var b=[],c=a.getCenter();for(var d=a.min.y;d<=a.max.y;d++)for(var e=a.min.x;e<=a.max.x;e++){if(e+":"+d in this._tiles)continue;b.push(new L.Point(e,d))}b.sort(function(a,b){return a.distanceTo(c)-b.distanceTo(c)});var f=document.createDocumentFragment();this._tilesToLoad=b.length;for(var g=0,h=this._tilesToLoad;g<h;g++)this._addTile(b[g],f);this._container.appendChild(f)},_removeOtherTiles:function(a){var b,c,d,e,f;for(e in this._tiles)if(this._tiles.hasOwnProperty(e)){b=e.split(":"),c=parseInt(b[0],10),d=parseInt(b[1],10);if(c<a.min.x||c>a.max.x||d<a.min.y||d>a.max.y)f=this._tiles[e],this.fire("tileunload",{tile:f,url:f.src}),f.parentNode===this._container&&this._container.removeChild(f),this.options.reuseTiles&&this._unusedTiles.push(this._tiles[e]),delete this._tiles[e]}},_addTile:function(a,b){var c=this._getTilePos(a),d=this._map.getZoom(),e=a.x+":"+a.y,f=Math.pow(2,this._getOffsetZoom(d));if(!this.options.continuousWorld){if(!this.options.noWrap)a.x=(a.x%f+f)%f;else if(a.x<0||a.x>=f){this._tilesToLoad--;return}if(a.y<0||a.y>=f){this._tilesToLoad--;return}}var g=this._getTile();L.DomUtil.setPosition(g,c),this._tiles[e]=g,this.options.scheme==="tms"&&(a.y=f-a.y-1),this._loadTile(g,a,d),b.appendChild(g)},_getOffsetZoom:function(a){return a=this.options.zoomReverse?this.options.maxZoom-a:a,a+this.options.zoomOffset},_getTilePos:function(a){var b=this._map.getPixelOrigin(),c=this.options.tileSize;return a.multiplyBy(c).subtract(b)},getTileUrl:function(a,b){var c=this.options.subdomains,d=this.options.subdomains[(a.x+a.y)%c.length];return L.Util.template(this._url,L.Util.extend({s:d,z:this._getOffsetZoom(b),x:a.x,y:a.y},this._urlParams))},_createTileProto:function(){this._tileImg=L.DomUtil.create("img","leaflet-tile"),this._tileImg.galleryimg="no";var a=this.options.tileSize;this._tileImg.style.width=a+"px",this._tileImg.style.height=a+"px"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var a=this._unusedTiles.pop();return this._resetTile(a),a}return this._createTile()},_resetTile:function(a){},_createTile:function(){var a=this._tileImg.cloneNode(!1);return a.onselectstart=a.onmousemove=L.Util.falseFn,a},_loadTile:function(a,b,c){a._layer=this,a.onload=this._tileOnLoad,a.onerror=this._tileOnError,a.src=this.getTileUrl(b,c)},_tileOnLoad:function(a){var b=this._layer;this.className+=" leaflet-tile-loaded",b.fire("tileload",{tile:this,url:this.src}),b._tilesToLoad--,b._tilesToLoad||b.fire("load")},_tileOnError:function(a){var b=this._layer;b.fire("tileerror",{tile:this,url:this.src});var c=b.options.errorTileUrl;c&&(this.src=c)}}),L.TileLayer.WMS=L.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(a,b){this._url=a,this.wmsParams=L.Util.extend({},this.defaultWmsParams),this.wmsParams.width=this.wmsParams.height=this.options.tileSize;for(var c in b)this.options.hasOwnProperty(c)||(this.wmsParams[c]=b[c]);L.Util.setOptions(this,b)},onAdd:function(a){var b=parseFloat(this.wmsParams.version)<1.3?"srs":"crs";this.wmsParams[b]=a.options.crs.code,L.TileLayer.prototype.onAdd.call(this,a)},getTileUrl:function(a,b){var c=this.options.tileSize,d=a.multiplyBy(c),e=d.add(new L.Point(c,c)),f=this._map.unproject(d,this._zoom,!0),g=this._map.unproject(e,this._zoom,!0),h=this._map.options.crs.project(f),i=this._map.options.crs.project(g),j=[h.x,i.y,i.x,h.y].join(",");return this._url+L.Util.getParamString(this.wmsParams)+"&bbox="+j}}),L.TileLayer.Canvas=L.TileLayer.extend({options:{async:!1},initialize:function(a){L.Util.setOptions(this,a)},redraw:function(){for(var a in this._tiles){var b=this._tiles[a];this._redrawTile(b)}},_redrawTile:function(a){this.drawTile(a,a._tilePoint,a._zoom)},_createTileProto:function(){this._canvasProto=L.DomUtil.create("canvas","leaflet-tile");var a=this.options.tileSize;this._canvasProto.width=a,this._canvasProto.height=a},_createTile:function(){var a=this._canvasProto.cloneNode(!1);return a.onselectstart=a.onmousemove=L.Util.falseFn,a},_loadTile:function(a,b,c){a._layer=this,a._tilePoint=b,a._zoom=c,this.drawTile(a,b,c),this.options.async||this.tileDrawn(a)},drawTile:function(a,b,c){},tileDrawn:function(a){this._tileOnLoad.call(a)}}),L.ImageOverlay=L.Class.extend({includes:L.Mixin.Events,initialize:function(a,b){this._url=a,this._bounds=b},onAdd:function(a){this._map=a,this._image||this._initImage(),a.getPanes().overlayPane.appendChild(this._image),a.on("viewreset",this._reset,this),this._reset()},onRemove:function(a){a.getPanes().overlayPane.removeChild(this._image),a.off("viewreset",this._reset,this)},_initImage:function(){this._image=L.DomUtil.create("img","leaflet-image-layer"),this._image.style.visibility="hidden",L.Util.extend(this._image,{galleryimg:"no",onselectstart:L.Util.falseFn,onmousemove:L.Util.falseFn,onload:L.Util.bind(this._onImageLoad,this),src:this._url})},_reset:function(){var a=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),b=this._map.latLngToLayerPoint(this._bounds.getSouthEast()),c=b.subtract(a);L.DomUtil.setPosition(this._image,a),this._image.style.width=c.x+"px",this._image.style.height=c.y+"px"},_onImageLoad:function(){this._image.style.visibility="",this.fire("load")}}),L.Icon=L.Class.extend({iconUrl:L.ROOT_URL+"images/marker.png",shadowUrl:L.ROOT_URL+"images/marker-shadow.png",iconSize:new L.Point(25,41),shadowSize:new L.Point(41,41),iconAnchor:new L.Point(13,41),popupAnchor:new L.Point(0,-33),initialize:function(a){a&&(this.iconUrl=a)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(a){var b=this[a+"Size"],c=this[a+"Url"];if(!c&&a==="shadow")return null;var d;return c?d=this._createImg(c):d=this._createDiv(),d.className="leaflet-marker-"+a,d.style.marginLeft=-this.iconAnchor.x+"px",d.style.marginTop=-this.iconAnchor.y+"px",b&&(d.style.width=b.x+"px",d.style.height=b.y+"px"),d},_createImg:function(a){var b;return L.Browser.ie6?(b=document.createElement("div"),b.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+a+'")'):(b=document.createElement("img"),b.src=a),b},_createDiv:function(){return document.createElement("div")}}),L.Marker=L.Class.extend({includes:L.Mixin.Events,options:{icon:new L.Icon,title:"",clickable:!0,draggable:!1,zIndexOffset:0},initialize:function(a,b){L.Util.setOptions(this,b),this._latlng=a},onAdd:function(a){this._map=a,this._initIcon(),a.on("viewreset",this._reset,this),this._reset()},onRemove:function(a){this._removeIcon(),this.closePopup&&this.closePopup(),this._map=null,a.off("viewreset",this._reset,this)},getLatLng:function(){return this._latlng},setLatLng:function(a){this._latlng=a,this._icon&&(this._reset(),this._popup&&this._popup.setLatLng(this._latlng))},setIcon:function(a){this._map&&this._removeIcon(),this.options.icon=a,this._map&&(this._initIcon(),this._reset())},_initIcon:function(){this._icon||(this._icon=this.options.icon.createIcon(),this.options.title&&(this._icon.title=this.options.title),this._initInteraction()),this._shadow||(this._shadow=this.options.icon.createShadow()),this._map._panes.markerPane.appendChild(this._icon),this._shadow&&this._map._panes.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this._map._panes.markerPane.removeChild(this._icon),this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_reset:function(){var a=this._map.latLngToLayerPoint(this._latlng).round();L.DomUtil.setPosition(this._icon,a),this._shadow&&L.DomUtil.setPosition(this._shadow,a),this._icon.style.zIndex=a.y+this.options.zIndexOffset},_initInteraction:function(){if(this.options.clickable){this._icon.className+=" leaflet-clickable",L.DomEvent.addListener(this._icon,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseover","mouseout"];for(var b=0;b<a.length;b++)L.DomEvent.addListener(this._icon,a[b],this._fireMouseEvent,this)}L.Handler.MarkerDrag&&(this.dragging=new L.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())},_onMouseClick:function(a){L.DomEvent.stopPropagation(a);if(this.dragging&&this.dragging.moved())return;this.fire(a.type)},_fireMouseEvent:function(a){this.fire(a.type),L.DomEvent.stopPropagation(a)}}),L.Popup=L.Class.extend({includes:L.Mixin.Events,options:{minWidth:50,maxWidth:300,autoPan:!0,closeButton:!0,offset:new L.Point(0,2),autoPanPadding:new L.Point(5,5),className:""},initialize:function(a,b){L.Util.setOptions(this,a),this._source=b},onAdd:function(a){this._map=a,this._container||this._initLayout(),this._updateContent(),this._container.style.opacity="0",this._map._panes.popupPane.appendChild(this._container),this._map.on("viewreset",this._updatePosition,this),this._map.options.closePopupOnClick&&this._map.on("preclick",this._close,this),this._update(),this._container.style.opacity="1",this._opened=!0},onRemove:function(a){a._panes.popupPane.removeChild(this._container),L.Util.falseFn(this._container.offsetWidth),a.off("viewreset",this._updatePosition,this),a.off("click",this._close,this),this._container.style.opacity="0",this._opened=!1},setLatLng:function(a){return this._latlng=a,this._opened&&this._update(),this},setContent:function(a){return this._content=a,this._opened&&this._update(),this},_close:function(){this._opened&&this._map.closePopup()},_initLayout:function(){this._container=L.DomUtil.create("div","leaflet-popup "+this.options.className),this.options.closeButton&&(this._closeButton=L.DomUtil.create("a","leaflet-popup-close-button",this._container),this._closeButton.href="#close",L.DomEvent.addListener(this._closeButton,"click",this._onCloseButtonClick,this)),this._wrapper=L.DomUtil.create("div","leaflet-popup-content-wrapper",this._container),L.DomEvent.disableClickPropagation(this._wrapper),this._contentNode=L.DomUtil.create("div","leaflet-popup-content",this._wrapper),this._tipContainer=L.DomUtil.create("div","leaflet-popup-tip-container",this._container),this._tip=L.DomUtil.create("div","leaflet-popup-tip",this._tipContainer)},_update:function(){this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan()},_updateContent:function(){if(!this._content)return;typeof this._content=="string"?this._contentNode.innerHTML=this._content:(this._contentNode.innerHTML="",this._contentNode.appendChild(this._content))},_updateLayout:function(){this._container.style.width="",this._container.style.whiteSpace="nowrap";var a=this._container.offsetWidth;this._container.style.width=(a>this.options.maxWidth?this.options.maxWidth:a<this.options.minWidth?this.options.minWidth:a)+"px",this._container.style.whiteSpace="",this._containerWidth=this._container.offsetWidth},_updatePosition:function(){var a=this._map.latLngToLayerPoint(this._latlng);this._containerBottom=-a.y-this.options.offset.y,this._containerLeft=a.x-Math.round(this._containerWidth/2)+this.options.offset.x,this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"},_adjustPan:function(){if(!this.options.autoPan)return;var a=this._container.offsetHeight,b=new L.Point(this._containerLeft,-a-this._containerBottom),c=this._map.layerPointToContainerPoint(b),d=new L.Point(0,0),e=this.options.autoPanPadding,f=this._map.getSize();c.x<0&&(d.x=c.x-e.x),c.x+this._containerWidth>f.x&&(d.x=c.x+this._containerWidth-f.x+e.x),c.y<0&&(d.y=c.y-e.y),c.y+a>f.y&&(d.y=c.y+a-f.y+e.y),(d.x||d.y)&&this._map.panBy(d)},_onCloseButtonClick:function(a){this._close(),L.DomEvent.stop(a)}}),L.Marker.include({openPopup:function(){return this._popup.setLatLng(this._latlng),this._map&&this._map.openPopup(this._popup),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(a,b){return b=L.Util.extend({offset:this.options.icon.popupAnchor},b),this._popup||this.on("click",this.openPopup,this),this._popup=new L.Popup(b,this),this._popup.setContent(a),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup)),this}}),L.Map.include({openPopup:function(a){return this.closePopup(),this._popup=a,this.addLayer(a),this.fire("popupopen",{popup:this._popup}),this},closePopup:function(){return this._popup&&(this.removeLayer(this._popup),this.fire("popupclose",{popup:this._popup}),this._popup=null),this}}),L.LayerGroup=L.Class.extend({initialize:function(a){this._layers={};if(a)for(var b=0,c=a.length;b<c;b++)this.addLayer(a[b])},addLayer:function(a){var b=L.Util.stamp(a);return this._layers[b]=a,this._map&&this._map.addLayer(a),this},removeLayer:function(a){var b=L.Util.stamp(a);return delete this._layers[b],this._map&&this._map.removeLayer(a),this},clearLayers:function(){return this._iterateLayers(this.removeLayer,this),this},invoke:function(a){var b=Array.prototype.slice.call(arguments,1),c,d;for(c in this._layers)this._layers.hasOwnProperty(c)&&(d=this._layers[c],d[a]&&d[a].apply(d,b));return this},onAdd:function(a){this._map=a,this._iterateLayers(a.addLayer,a)},onRemove:function(a){this._iterateLayers(a.removeLayer,a),delete this._map},_iterateLayers:function(a,b){for(var c in this._layers)this._layers.hasOwnProperty(c)&&a.call(b,this._layers[c])}}),L.FeatureGroup=L.LayerGroup.extend({includes:L.Mixin.Events,addLayer:function(a){this._initEvents(a),L.LayerGroup.prototype.addLayer.call(this,a),this._popupContent&&a.bindPopup&&a.bindPopup(this._popupContent)},bindPopup:function(a){return this._popupContent=a,this.invoke("bindPopup",a)},setStyle:function(a){return this.invoke("setStyle",a)},_events:["click","dblclick","mouseover","mouseout"],_initEvents:function(a){for(var b=0,c=this._events.length;b<c;b++)a.on(this._events[b],this._propagateEvent,this)},_propagateEvent:function(a){a.layer=a.target,a.target=this,this.fire(a.type,a)}}),L.Path=L.Class.extend({includes:[L.Mixin.Events],statics:{CLIP_PADDING:.5},options:{stroke:!0,color:"#0033ff",weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0,updateOnMoveEnd:!0},initialize:function(a){L.Util.setOptions(this,a)},onAdd:function(a){this._map=a,this._initElements(),this._initEvents(),this.projectLatlngs(),this._updatePath(),a.on("viewreset",this.projectLatlngs,this),this._updateTrigger=this.options.updateOnMoveEnd?"moveend":"viewreset",a.on(this._updateTrigger,this._updatePath,this)},onRemove:function(a){this._map=null,a._pathRoot.removeChild(this._container),a.off("viewreset",this.projectLatlngs,this),a.off(this._updateTrigger,this._updatePath,this)},projectLatlngs:function(){},setStyle:function(a){return L.Util.setOptions(this,a),this._container&&this._updateStyle(),this},_redraw:function(){this._map&&(this.projectLatlngs(),this._updatePath())}}),L.Map.include({_updatePathViewport:function(){var a=L.Path.CLIP_PADDING,b=this.getSize(),c=L.DomUtil.getPosition(this._mapPane),d=c.multiplyBy(-1).subtract(b.multiplyBy(a)),e=d.add(b.multiplyBy(1+a*2));this._pathViewport=new L.Bounds(d,e)}}),L.Path.SVG_NS="http://www.w3.org/2000/svg",L.Browser.svg=!!document.createElementNS&&!!document.createElementNS(L.Path.SVG_NS,"svg").createSVGRect,L.Path=L.Path.extend({statics:{SVG:L.Browser.svg,_createElement:function(a){return document.createElementNS(L.Path.SVG_NS,a)}},getPathString:function(){},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=L.Path._createElement("g"),this._path=L.Path._createElement("path"),this._container.appendChild(this._path),this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill?this._path.setAttribute("fill-rule","evenodd"):this._path.setAttribute("fill","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight)),this.options.fill&&(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity))},_updatePath:function(){var a=this.getPathString();a||(a="M0 0"),this._path.setAttribute("d",a)},_initEvents:function(){if(this.options.clickable){L.Browser.vml||this._path.setAttribute("class","leaflet-clickable"),L.DomEvent.addListener(this._container,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseover","mouseout","mousemove"];for(var b=0;b<a.length;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this)}},_onMouseClick:function(a){if(this._map.dragging&&this._map.dragging.moved())return;this._fireMouseEvent(a)},_fireMouseEvent:function(a){if(!this.hasEventListeners(a.type))return;this.fire(a.type,{latlng:this._map.mouseEventToLatLng(a),layerPoint:this._map.mouseEventToLayerPoint(a)}),L.DomEvent.stopPropagation(a)}}),L.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=L.Path._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_updateSvgViewport:function(){this._updatePathViewport();var a=this._pathViewport,b=a.min,c=a.max,d=c.x-b.x,e=c.y-b.y,f=this._pathRoot,g=this._panes.overlayPane;L.Browser.webkit&&g.removeChild(f),L.DomUtil.setPosition(f,b),f.setAttribute("width",d),f.setAttribute("height",e),f.setAttribute("viewBox",[b.x,b.y,d,e].join(" ")),L.Browser.webkit&&g.appendChild(f)}}),L.Path.include({bindPopup:function(a,b){if(!this._popup||this._popup.options!==b)this._popup=new L.Popup(b,this);return this._popup.setContent(a),this._openPopupAdded||(this.on("click",this._openPopup,this),this._openPopupAdded=!0),this},_openPopup:function(a){this._popup.setLatLng(a.latlng),this._map.openPopup(this._popup)}}),L.Browser.vml=function(){var a=document.createElement("div"),b;return a.innerHTML='<v:shape adj="1"/>',b=a.firstChild,b.style.behavior="url(#default#VML)",b&&typeof b.adj=="object"}(),L.Path=L.Browser.svg||!L.Browser.vml?L.Path:L.Path.extend({statics:{VML:!0,CLIP_PADDING:.02,_createElement:function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(a){return document.createElement("<lvml:"+a+' class="lvml">')}}catch(a){return function(a){return document.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}()},_initPath:function(){this._container=L.Path._createElement("shape"),this._container.className+=" leaflet-vml-shape"+(this.options.clickable?" leaflet-clickable":""),this._container.coordsize="1 1",this._path=L.Path._createElement("path"),this._container.appendChild(this._path),this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke?(this._stroke=L.Path._createElement("stroke"),this._stroke.endcap="round",this._container.appendChild(this._stroke)):this._container.stroked=!1,this.options.fill?(this._container.filled=!0,this._fill=L.Path._createElement("fill"),this._container.appendChild(this._fill)):this._container.filled=!1,this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._stroke.weight=this.options.weight+"px",this._stroke.color=this.options.color,this._stroke.opacity=this.options.opacity),this.options.fill&&(this._fill.color=this.options.fillColor||this.options.color,this._fill.opacity=this.options.fillOpacity)},_updatePath:function(){this._container.style.display="none",this._path.v=this.getPathString()+" ",this._container.style.display=""}}),L.Map.include(L.Browser.svg||!L.Browser.vml?{}:{_initPathRoot:function(){this._pathRoot||(this._pathRoot=document.createElement("div"),this._pathRoot.className="leaflet-vml-container",this._panes.overlayPane.appendChild(this._pathRoot),this.on("moveend",this._updatePathViewport),this._updatePathViewport())}}),L.LineUtil={simplify:function(a,b){if(!b||!a.length)return a.slice();var c=b*b;return a=this._reducePoints(a,c),a=this._simplifyDP(a,c),a},pointToSegmentDistance:function(a,b,c){return Math.sqrt(this._sqClosestPointOnSegment(a,b,c,!0))},closestPointOnSegment:function(a,b,c){return this._sqClosestPointOnSegment(a,b,c)},_simplifyDP:function(a,b){var c=a.length,d=typeof Uint8Array!="undefined"?Uint8Array:Array,e=new d(c);e[0]=e[c-1]=1,this._simplifyDPStep(a,e,b,0,c-1);var f,g=[];for(f=0;f<c;f++)e[f]&&g.push(a[f]);return g},_simplifyDPStep:function(a,b,c,d,e){var f=0,g,h,i;for(h=d+1;h<=e-1;h++)i=this._sqClosestPointOnSegment(a[h],a[d],a[e],!0),i>f&&(g=h,f=i);f>c&&(b[g]=1,this._simplifyDPStep(a,b,c,d,g),this._simplifyDPStep(a,b,c,g,e))},_reducePoints:function(a,b){var c=[a[0]];for(var d=1,e=0,f=a.length;d<f;d++)this._sqDist(a[d],a[e])>b&&(c.push(a[d]),e=d);return e<f-1&&c.push(a[f-1]),c},clipSegment:function(a,b,c,d){var e=c.min,f=c.max,g=d?this._lastCode:this._getBitCode(a,c),h=this._getBitCode(b,c);this._lastCode=h;for(;;){if(!(g|h))return[a,b];if(g&h)return!1;var i=g||h,j=this._getEdgeIntersection(a,b,i,c),k=this._getBitCode(j,c);i===g?(a=j,g=k):(b=j,h=k)}},_getEdgeIntersection:function(a,b,c,d){var e=b.x-a.x,f=b.y-a.y,g=d.min,h=d.max;if(c&8)return new L.Point(a.x+e*(h.y-a.y)/f,h.y);if(c&4)return new L.Point(a.x+e*(g.y-a.y)/f,g.y);if(c&2)return new L.Point(h.x,a.y+f*(h.x-a.x)/e);if(c&1)return new L.Point(g.x,a.y+f*(g.x-a.x)/e)},_getBitCode:function(a,b){var c=0;return a.x<b.min.x?c|=1:a.x>b.max.x&&(c|=2),a.y<b.min.y?c|=4:a.y>b.max.y&&(c|=8),c},_sqDist:function(a,b){var c=b.x-a.x,d=b.y-a.y;return c*c+d*d},_sqClosestPointOnSegment:function(a,b,c,d){var e=b.x,f=b.y,g=c.x-e,h=c.y-f,i=g*g+h*h,j;return i>0&&(j=((a.x-e)*g+(a.y-f)*h)/i,j>1?(e=c.x,f=c.y):j>0&&(e+=g*j,f+=h*j)),g=a.x-e,h=a.y-f,d?g*g+h*h:new L.Point(e,f)}},L.Polyline=L.Path.extend({initialize:function(a,b){L.Path.prototype.initialize.call(this,b),this._latlngs=a},options:{smoothFactor:1,noClip:!1,updateOnMoveEnd:!0},projectLatlngs:function(){this._originalPoints=[];for(var a=0,b=this._latlngs.length;a<b;a++)this._originalPoints[a]=this._map.latLngToLayerPoint(this._latlngs[a])},getPathString:function(){for(var a=0,b=this._parts.length,c="";a<b;a++)c+=this._getPathPartStr(this._parts[a]);return c},getLatLngs:function(){return this._latlngs},setLatLngs:function(a){return this._latlngs=a,this._redraw(),this},addLatLng:function(a){return this._latlngs.push(a),this._redraw(),this},spliceLatLngs:function(a,b){var c=[].splice.apply(this._latlngs,arguments);return this._redraw(),c},closestLayerPoint:function(a){var b=Infinity,c=this._parts,d,e,f=null;for(var g=0,h=c.length;g<h;g++){var i=c[g];for(var j=1,k=i.length;j<k;j++){d=i[j-1],e=i[j];var l=L.LineUtil._sqClosestPointOnSegment(a,d,e);l._sqDist<b&&(b=l._sqDist,f=l)}}return f&&(f.distance=Math.sqrt(b)),f},getBounds:function(){var a=new L.LatLngBounds,b=this.getLatLngs();for(var c=0,d=b.length;c<d;c++)a.extend(b[c]);return a},_getPathPartStr:function(a){var b=L.Path.VML;for(var c=0,d=a.length,e="",f;c<d;c++)f=a[c],b&&f._round(),e+=(c?"L":"M")+f.x+" "+f.y;return e},_clipPoints:function(){var a=this._originalPoints,b=a.length,c,d,e;if(this.options.noClip){this._parts=[a];return}this._parts=[];var f=this._parts,g=this._map._pathViewport,h=L.LineUtil;for(c=0,d=0;c<b-1;c++){e=h.clipSegment(a[c],a[c+1],g,c);if(!e)continue;f[d]=f[d]||[],f[d].push(e[0]);if(e[1]!==a[c+1]||c===b-2)f[d].push(e[1]),d++}},_simplifyPoints:function(){var a=this._parts,b=L.LineUtil;for(var c=0,d=a.length;c<d;c++)a[c]=b.simplify(a[c],this.options.smoothFactor)},_updatePath:function(){this._clipPoints(),this._simplifyPoints(),L.Path.prototype._updatePath.call(this)}}),L.PolyUtil={},L.PolyUtil.clipPolygon=function(a,b){var c=b.min,d=b.max,e,f=[1,4,2,8],g,h,i,j,k,l,m,n,o=L.LineUtil;for(g=0,l=a.length;g<l;g++)a[g]._code=o._getBitCode(a[g],b);for(i=0;i<4;i++){m=f[i],e=[];for(g=0,l=a.length,h=l-1;g<l;h=g++)j=a[g],k=a[h],j._code&m?k._code&m||(n=o._getEdgeIntersection(k,j,m,b),n._code=o._getBitCode(n,b),e.push(n)):(k._code&m&&(n=o._getEdgeIntersection(k,j,m,b),n._code=o._getBitCode(n,b),e.push(n)),e.push(j));a=e}return a},L.Polygon=L.Polyline.extend({options:{fill:!0},initialize:function(a,b){L.Polyline.prototype.initialize.call(this,a,b),a&&a[0]instanceof Array&&(this._latlngs=a[0],this._holes=a.slice(1))},projectLatlngs:function(){L.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[];if(!this._holes)return;for(var a=0,b=this._holes.length,c;a<b;a++){this._holePoints[a]=[];for(var d=0,e=this._holes[a].length;d<e;d++)this._holePoints[a][d]=this._map.latLngToLayerPoint(this._holes[a][d])}},_clipPoints:function(){var a=this._originalPoints,b=[];this._parts=[a].concat(this._holePoints);if(this.options.noClip)return;for(var c=0,d=this._parts.length;c<d;c++){var e=L.PolyUtil.clipPolygon(this._parts[c],this._map._pathViewport);if(!e.length)continue;b.push(e)}this._parts=b},_getPathPartStr:function(a){var b=L.Polyline.prototype._getPathPartStr.call(this,a);return b+(L.Browser.svg?"z":"x")}}),function(){function a(a){return L.FeatureGroup.extend({initialize:function(a,b){this._layers={},this._options=b,this.setLatLngs(a)},setLatLngs:function(b){var c=0,d=b.length;this._iterateLayers(function(a){c<d?a.setLatLngs(b[c++]):this.removeLayer(a)},this);while(c<d)this.addLayer(new a(b[c++],this._options))}})}L.MultiPolyline=a(L.Polyline),L.MultiPolygon=a(L.Polygon)}(),L.Circle=L.Path.extend({initialize:function(a,b,c){L.Path.prototype.initialize.call(this,c),this._latlng=a,this._mRadius=b},options:{fill:!0},setLatLng:function(a){return this._latlng=a,this._redraw(),this},setRadius:function(a){return this._mRadius=a,this._redraw(),this},projectLatlngs:function(){var a=40075017,b=a*Math.cos(L.LatLng.DEG_TO_RAD*this._latlng.lat),c=this._mRadius/b*360,d=new L.LatLng(this._latlng.lat,this._latlng.lng-c,!0),e=this._map.latLngToLayerPoint(d);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.round(this._point.x-e.x)},getPathString:function(){var a=this._point,b=this._radius;return this._checkIfEmpty()?"":L.Browser.svg?"M"+a.x+","+(a.y-b)+"A"+b+","+b+",0,1,1,"+(a.x-.1)+","+(a.y-b)+" z":(a._round(),b=Math.round(b),"AL "+a.x+","+a.y+" "+b+","+b+" 0,"+23592600)},_checkIfEmpty:function(){var a=this._map._pathViewport,b=this._radius,c=this._point;return c.x-b>a.max.x||c.y-b>a.max.y||c.x+b<a.min.x||c.y+b<a.min.y}}),L.CircleMarker=L.Circle.extend({options:{radius:10,weight:2},initialize:function(a,b){L.Circle.prototype.initialize.call(this,a,null,b),this._radius=this.options.radius},projectLatlngs:function(){this._point=this._map.latLngToLayerPoint(this._latlng)},setRadius:function(a){return this._radius=a,this._redraw(),this}}),L.Browser.canvas=function(){return!!document.createElement("canvas").getContext}(),L.Path=L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?L.Path:L.Path.extend({statics:{CANVAS:!0,SVG:!1},options:{updateOnMoveEnd:!0},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){this.options.stroke&&(this._ctx.lineWidth=this.options.weight,this._ctx.strokeStyle=this.options.color),this.options.fill&&(this._ctx.fillStyle=this.options.fillColor||this.options.color)},_drawPath:function(){var a,b,c,d,e,f;this._ctx.beginPath();for(a=0,c=this._parts.length;a<c;a++){for(b=0,d=this._parts[a].length;b<d;b++)e=this._parts[a][b],f=(b===0?"move":"line")+"To",this._ctx[f](e.x,e.y);this instanceof L.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(this._checkIfEmpty())return;this._drawPath(),this._ctx.save(),this._updateStyle();var a=this.options.opacity,b=this.options.fillOpacity;this.options.fill&&(b<1&&(this._ctx.globalAlpha=b),this._ctx.fill()),this.options.stroke&&(a<1&&(this._ctx.globalAlpha=a),this._ctx.stroke()),this._ctx.restore()},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(a){this._containsPoint(a.layerPoint)&&this.fire("click",a)},onRemove:function(a){a.off("viewreset",this._projectLatlngs,this),a.off(this._updateTrigger,this._updatePath,this),a.fire(this._updateTrigger)}}),L.Map.include(L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?{}:{_initPathRoot:function(){var a=this._pathRoot,b;a||(a=this._pathRoot=document.createElement("canvas"),a.style.position="absolute",b=this._canvasCtx=a.getContext("2d"),b.lineCap="round",b.lineJoin="round",this._panes.overlayPane.appendChild(a),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){this._updatePathViewport();var a=this._pathViewport,b=a.min,c=a.max.subtract(b),d=this._pathRoot;L.DomUtil.setPosition(d,b),d.width=c.x,d.height=c.y,d.getContext("2d").translate(-b.x,-b.y)}}),L.Polyline.include(L.Path.CANVAS?{_containsPoint:function(a,b){var c,d,e,f,g,h,i,j=this.options.weight/2;L.Browser.touch&&(j+=10);for(c=0,f=this._parts.length;c<f;c++){i=this._parts[c];for(d=0,g=i.length,e=g-1;d<g;e=d++){if(!b&&d===0)continue;h=L.LineUtil.pointToSegmentDistance(a,i[e],i[d]);if(h<=j)return!0}}return!1}}:{}),L.Polygon.include(L.Path.CANVAS?{_containsPoint:function(a){var b=!1,c,d,e,f,g,h,i,j;if(L.Polyline.prototype._containsPoint.call(this,a,!0))return!0;for(f=0,i=this._parts.length;f<i;f++){c=this._parts[f];for(g=0,j=c.length,h=j-1;g<j;h=g++)d=c[g],e=c[h],d.y>a.y!=e.y>a.y&&a.x<(e.x-d.x)*(a.y-d.y)/(e.y-d.y)+d.x&&(b=!b)}return b}}:{}),L.Circle.include(L.Path.CANVAS?{_drawPath:function(){var a=this._point;this._ctx.beginPath(),this._ctx.arc(a.x,a.y,this._radius,0,Math.PI*2)},_containsPoint:function(a){var b=this._point,c=this.options.stroke?this.options.weight/2:0;return a.distanceTo(b)<=this._radius+c}}:{}),L.GeoJSON=L.FeatureGroup.extend({initialize:function(a,b){L.Util.setOptions(this,b),this._geojson=a,this._layers={},a&&this.addGeoJSON(a)},addGeoJSON:function(a){if(a.features){for(var b=0,c=a.features.length;b<c;b++)this.addGeoJSON(a.features[b]);return}var d=a.type==="Feature",e=d?a.geometry:a,f=L.GeoJSON.geometryToLayer(e,this.options.pointToLayer);this.fire("featureparse",{layer:f,properties:a.properties,geometryType:e.type,bbox:a.bbox,id:a.id}),this.addLayer(f)}}),L.Util.extend(L.GeoJSON,{geometryToLayer:function(a,b){var c=a.coordinates,d,e,f,g,h,i=[];switch(a.type){case"Point":return d=this.coordsToLatLng(c),b?b(d):new L.Marker(d);case"MultiPoint":for(f=0,g=c.length;f<g;f++)d=this.coordsToLatLng(c[f]),h=b?b(d):new L.Marker(d),i.push(h);return new L.FeatureGroup(i);case"LineString":return e=this.coordsToLatLngs(c),new L.Polyline(e);case"Polygon":return e=this.coordsToLatLngs(c,1),new L.Polygon(e);case"MultiLineString":return e=this.coordsToLatLngs(c,1),new L.MultiPolyline(e);case"MultiPolygon":return e=this.coordsToLatLngs(c,2),new L.MultiPolygon(e);case"GeometryCollection":for(f=0,g=a.geometries.length;f<g;f++)h=this.geometryToLayer(a.geometries[f],b),i.push(h);return new L.FeatureGroup(i);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(a,b){var c=parseFloat(a[b?0:1]),d=parseFloat(a[b?1:0]);return new L.LatLng(c,d,!0)},coordsToLatLngs:function(a,b,c){var d,e=[],f,g=a.length;for(f=0;f<g;f++)d=b?this.coordsToLatLngs(a[f],b-1,c):this.coordsToLatLng(a[f],c),e.push(d);return e}}),L.DomEvent={addListener:function(a,b,c,d){var e=L.Util.stamp(c),f="_leaflet_"+b+e;if(a[f])return;var g=function(b){return c.call(d||a,b||L.DomEvent._getEvent())};if(L.Browser.touch&&b==="dblclick"&&this.addDoubleTapListener)this.addDoubleTapListener(a,g,e);else if("addEventListener"in a)if(b==="mousewheel")a.addEventListener("DOMMouseScroll",g,!1),a.addEventListener(b,g,!1);else if(b==="mouseenter"||b==="mouseleave"){var h=g,i=b==="mouseenter"?"mouseover":"mouseout";g=function(b){if(!L.DomEvent._checkMouse(a,b))return;return h(b)},a.addEventListener(i,g,!1)}else a.addEventListener(b,g,!1);else"attachEvent"in a&&a.attachEvent("on"+b,g);a[f]=g},removeListener:function(a,b,c){var d=L.Util.stamp(c),e="_leaflet_"+b+d,f=a[e];if(!f)return;L.Browser.touch&&b==="dblclick"&&this.removeDoubleTapListener?this.removeDoubleTapListener(a,d):"removeEventListener"in a?b==="mousewheel"?(a.removeEventListener("DOMMouseScroll",f,!1),a.removeEventListener(b,f,!1)):b==="mouseenter"||b==="mouseleave"?a.removeEventListener(b==="mouseenter"?"mouseover":"mouseout",f,!1):a.removeEventListener(b,f,!1):"detachEvent"in a&&a.detachEvent("on"+b,f),a[e]=null},_checkMouse:function(a,b){var c=b.relatedTarget;if(!c)return!0;try{while(c&&c!==a)c=c.parentNode}catch(d){return!1}return c!==a},_getEvent:function(){var a=window.event;if(!a){var b=arguments.callee.caller;while(b){a=b.arguments[0];if(a&&window.Event===a.constructor)break;b=b.caller}}return a},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},disableClickPropagation:function(a){L.DomEvent.addListener(a,L.Draggable.START,L.DomEvent.stopPropagation),L.DomEvent.addListener(a,"click",L.DomEvent.stopPropagation),L.DomEvent.addListener(a,"dblclick",L.DomEvent.stopPropagation)},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},stop:function(a){L.DomEvent.preventDefault(a),L.DomEvent.stopPropagation(a)},getMousePosition:function(a,b){var c=a.pageX?a.pageX:a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,d=a.pageY?a.pageY:a.clientY+document.body.scrollTop+document.documentElement.scrollTop,e=new L.Point(c,d);return b?e.subtract(L.DomUtil.getViewportOffset(b)):e},getWheelDelta:function(a){var b=0;return a.wheelDelta&&(b=a.wheelDelta/120),a.detail&&(b=-a.detail/3),b}},L.Draggable=L.Class.extend({includes:L.Mixin.Events,statics:{START:L.Browser.touch?"touchstart":"mousedown",END:L.Browser.touch?"touchend":"mouseup",MOVE:L.Browser.touch?"touchmove":"mousemove",TAP_TOLERANCE:15},initialize:function(a,b){this._element=a,this._dragStartTarget=b||a},enable:function(){if(this._enabled)return;L.DomEvent.addListener(this._dragStartTarget,L.Draggable.START,this._onDown,this),this._enabled=!0},disable:function(){if(!this._enabled)return;L.DomEvent.removeListener(this._dragStartTarget,L.Draggable.START,this._onDown),this._enabled=!1},_onDown:function(a){if(!L.Browser.touch&&a.shiftKey||a.which!==1&&a.button!==1&&!a.touches)return;if(a.touches&&a.touches.length>1)return;var b=a.touches&&a.touches.length===1?a.touches[0]:a,c=b.target;L.DomEvent.preventDefault(a),L.Browser.touch&&c.tagName.toLowerCase()==="a"&&(c.className+=" leaflet-active"),this._moved=!1;if(this._moving)return;L.Browser.touch||(L.DomUtil.disableTextSelection(),this._setMovingCursor()),this._startPos=this._newPos=L.DomUtil.getPosition(this._element),this._startPoint=new L.Point(b.clientX,b.clientY),L.DomEvent.addListener(document,L.Draggable.MOVE,this._onMove,this),L.DomEvent.addListener(document,L.Draggable.END,this._onUp,this)},_onMove:function(a){if(a.touches&&a.touches.length>1)return;L.DomEvent.preventDefault(a);var b=a.touches&&a.touches.length===1?a.touches[0]:a;this._moved||(this.fire("dragstart"),this._moved=!0),this._moving=!0;var c=new L.Point(b.clientX,b.clientY);this._newPos=this._startPos.add(c).subtract(this._startPoint),L.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)},_updatePosition:function(){this.fire("predrag"),L.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(a){if(a.changedTouches){var b=a.changedTouches[0],c=b.target,d=this._newPos&&this._newPos.distanceTo(this._startPos)||0;c.tagName.toLowerCase()==="a"&&(c.className=c.className.replace(" leaflet-active","")),d<L.Draggable.TAP_TOLERANCE&&this._simulateEvent("click",b)}L.Browser.touch||(L.DomUtil.enableTextSelection(),this._restoreCursor()),L.DomEvent.removeListener(document,L.Draggable.MOVE,this._onMove),L.DomEvent.removeListener(document,L.Draggable.END,this._onUp),this._moved&&this.fire("dragend"),this._moving=!1},_setMovingCursor:function(){this._bodyCursor=document.body.style.cursor,document.body.style.cursor="move"},_restoreCursor:function(){document.body.style.cursor=this._bodyCursor},_simulateEvent:function(a,b){var c=document.createEvent("MouseEvents");c.initMouseEvent(a,!0,!0,window,1,b.screenX,b.screenY,b.clientX,b.clientY,!1,!1,!1,!1,0,null),b.target.dispatchEvent(c)}}),L.Handler=L.Class.extend({initialize:function(a){this._map=a},enable:function(){if(this._enabled)return;this._enabled=!0,this.addHooks()},disable:function(){if(!this._enabled)return;this._enabled=!1,this.removeHooks()},enabled:function(){return!!this._enabled}}),L.Map.Drag=L.Handler.extend({addHooks:function(){if(!this._draggable){this._draggable=new L.Draggable(this._map._mapPane,this._map._container),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this);var a=this._map.options;a.worldCopyJump&&!a.continuousWorld&&(this._draggable.on("predrag",this._onPreDrag,this),this._map.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._map.fire("movestart").fire("dragstart")},_onDrag:function(){this._map.fire("move").fire("drag")},_onViewReset:function(){var a=this._map.getSize().divideBy(2),b=this._map.latLngToLayerPoint(new L.LatLng(0,0));this._initialWorldOffset=b.subtract(a)},_onPreDrag:function(){var a=this._map,b=a.options.scale(a.getZoom()),c=Math.round(b/2),d=this._initialWorldOffset.x,e=this._draggable._newPos.x,f=(e-c+d)%b+c-d,g=(e+c+d)%b-c-d,h=Math.abs(f+d)<Math.abs(g+d)?f:g;this._draggable._newPos.x=h},_onDragEnd:function(){var a=this._map;a.fire("moveend").fire("dragend"),a.options.maxBounds&&L.Util.requestAnimFrame(this._panInsideMaxBounds,a,!0,a._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),L.Map.DoubleClickZoom=L.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(a){this.setView(a.latlng,this._zoom+1)}}),L.Map.ScrollWheelZoom=L.Handler.extend({addHooks:function(){L.DomEvent.addListener(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){L.DomEvent.removeListener(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(a){var b=L.DomEvent.getWheelDelta(a);this._delta+=b,this._lastMousePos=this._map.mouseEventToContainerPoint(a),clearTimeout(this._timer),this._timer=setTimeout(L.Util.bind(this._performZoom,this),50),L.DomEvent.preventDefault(a)},_performZoom:function(){var a=this._map,b=Math.round(this._delta),c=a.getZoom();b=Math.max(Math.min(b,4),-4),b=a._limitZoom(c+b)-c,this._delta=0;if(!b)return;var d=this._getCenterForScrollWheelZoom(this._lastMousePos,b),e=c+b;a.setView(d,e)},_getCenterForScrollWheelZoom:function(a,b){var c=this._map,d=c.getPixelBounds().getCenter(),e=c.getSize().divideBy(2),f=a.subtract(e).multiplyBy(1-Math.pow(2,-b)),g=d.add(f);return c.unproject(g,c._zoom,!0)}}),L.Util.extend(L.DomEvent,{addDoubleTapListener:function(a,b,c){function k(a){if(a.touches.length!==1)return;var b=Date.now(),c=b-(d||b);g=a.touches[0],e=c>0&&c<=f,d=b}function l(a){e&&(g.type="dblclick",b(g),d=null)}var d,e=!1,f=250,g,h="_leaflet_",i="touchstart",j="touchend";a[h+i+c]=k,a[h+j+c]=l,a.addEventListener(i,k,!1),a.addEventListener(j,l,!1)},removeDoubleTapListener:function(a,b){var c="_leaflet_";a.removeEventListener(a,a[c+"touchstart"+b],!1),a.removeEventListener(a,a[c+"touchend"+b],!1)}}),L.Map.TouchZoom=L.Handler.extend({addHooks:function(){L.DomEvent.addListener(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){L.DomEvent.removeListener(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(a){if(!a.touches||a.touches.length!==2||this._map._animatingZoom)return;var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]),d=this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));this._startCenter=b.add(c).divideBy(2,!0),this._startDist=b.distanceTo(c),this._moved=!1,this._zooming=!0,this._centerOffset=d.subtract(this._startCenter),L.DomEvent.addListener(document,"touchmove",this._onTouchMove,this),L.DomEvent.addListener(document,"touchend",this._onTouchEnd,this),L.DomEvent.preventDefault(a)},_onTouchMove:function(a){if(!a.touches||a.touches.length!==2)return;this._moved||(this._map._mapPane.className+=" leaflet-zoom-anim",this._map.fire("zoomstart").fire("movestart")._prepareTileBg(),this._moved=!0);var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]);this._scale=b.distanceTo(c)/this._startDist,this._delta=b.add(c).divideBy(2,!0).subtract(this._startCenter),this._map._tileBg.style.webkitTransform=[L.DomUtil.getTranslateString(this._delta),L.DomUtil.getScaleString(this._scale,this._startCenter)].join(" "),L.DomEvent.preventDefault(a)},_onTouchEnd:function(a){if(!this._moved||!this._zooming)return;this._zooming=!1;var b=this._map.getZoom(),c=Math.log(this._scale)/Math.LN2,d=c>0?Math.ceil(c):Math.floor(c),e=this._map._limitZoom(b+d),f=e-b,g=this._centerOffset.subtract(this._delta).divideBy(this._scale),h=this._map.getPixelOrigin().add(this._startCenter).add(g),i=this._map.unproject(h);L.DomEvent.removeListener(document,"touchmove",this._onTouchMove),L.DomEvent.removeListener(document,"touchend",this._onTouchEnd);var j=Math.pow(2,f);this._map._runAnimation(i,e,j/this._scale,this._startCenter.add(g))}}),L.Map.BoxZoom=L.Handler.extend({initialize:function(a){this._map=a,this._container=a._container,this._pane=a._panes.overlayPane},addHooks:function(){L.DomEvent.addListener(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.removeListener(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(a){if(!a.shiftKey||a.which!==1&&a.button!==1)return!1;L.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(a),this._box=L.DomUtil.create("div","leaflet-zoom-box",this._pane),L.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",L.DomEvent.addListener(document,"mousemove",this._onMouseMove,this),L.DomEvent.addListener(document,"mouseup",this._onMouseUp,this),L.DomEvent.preventDefault(a)},_onMouseMove:function(a){var b=this._map.mouseEventToLayerPoint(a),c=b.x-this._startLayerPoint.x,d=b.y-this._startLayerPoint.y,e=Math.min(b.x,this._startLayerPoint.x),f=Math.min(b.y,this._startLayerPoint.y),g=new L.Point(e,f);L.DomUtil.setPosition(this._box,g),this._box.style.width=Math.abs(c)-4+"px",this._box.style.height=Math.abs(d)-4+"px"},_onMouseUp:function(a){this._pane.removeChild(this._box),this._container.style.cursor="",L.DomUtil.enableTextSelection(),L.DomEvent.removeListener(document,"mousemove",this._onMouseMove),L.DomEvent.removeListener(document,"mouseup",this._onMouseUp);var b=this._map.mouseEventToLayerPoint(a),c=new L.LatLngBounds(this._map.layerPointToLatLng(this._startLayerPoint),this._map.layerPointToLatLng(b));this._map.fitBounds(c)}}),L.Handler.MarkerDrag=L.Handler.extend({initialize:function(a){this._marker=a},addHooks:function(){var a=this._marker._icon;this._draggable||(this._draggable=new L.Draggable(a,a),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(a){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(a){var b=L.DomUtil.getPosition(this._marker._icon);this._marker._shadow&&L.DomUtil.setPosition(this._marker._shadow,b),this._marker._latlng=this._marker._map.layerPointToLatLng(b),this._marker.fire("move").fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),L.Control={},L.Control.Position={TOP_LEFT:"topLeft",TOP_RIGHT:"topRight",BOTTOM_LEFT:"bottomLeft",BOTTOM_RIGHT:"bottomRight"},L.Map.include({addControl:function(a){a.onAdd(this);var b=a.getPosition(),c=this._controlCorners[b],d=a.getContainer();return L.DomUtil.addClass(d,"leaflet-control"),b.indexOf("bottom")!==-1?c.insertBefore(d,c.firstChild):c.appendChild(d),this},removeControl:function(a){var b=a.getPosition(),c=this._controlCorners[b],d=a.getContainer();return c.removeChild(d),a.onRemove&&a.onRemove(this),this},_initControlPos:function(){var a=this._controlCorners={},b="leaflet-",c=b+"top",d=b+"bottom",e=b+"left",f=b+"right",g=L.DomUtil.create("div",b+"control-container",this._container);L.Browser.touch&&(g.className+=" "+b+"big-buttons"),a.topLeft=L.DomUtil.create("div",c+" "+e,g),a.topRight=L.DomUtil.create("div",c+" "+f,g),a.bottomLeft=L.DomUtil.create("div",d+" "+e,g),a.bottomRight=L.DomUtil.create("div",d+" "+f,g)}}),L.Control.Zoom=L.Class.extend({onAdd:function(a){this._map=a,this._container=L.DomUtil.create("div","leaflet-control-zoom"),this._zoomInButton=this._createButton("Zoom in","leaflet-control-zoom-in",this._map.zoomIn,this._map),this._zoomOutButton=this._createButton("Zoom out","leaflet-control-zoom-out",this._map.zoomOut,this._map),this._container.appendChild(this._zoomInButton),this._container.appendChild(this._zoomOutButton)},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_LEFT},_createButton:function(a,b,c,d){var e=document.createElement("a");return e.href="#",e.title=a,e.className=b,L.DomEvent.disableClickPropagation(e),L.DomEvent.addListener(e,"click",L.DomEvent.preventDefault),L.DomEvent.addListener(e,"click",c,d),e}}),L.Control.Attribution=L.Class.extend({initialize:function(a){this._prefix=a||'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>',this._attributions={}},onAdd:function(a){this._container=L.DomUtil.create("div","leaflet-control-attribution"),L.DomEvent.disableClickPropagation(this._container),this._map=a,this._update()},getPosition:function(){return L.Control.Position.BOTTOM_RIGHT},getContainer:function(){return this._container},setPrefix:function(a){this._prefix=a,this._update()},addAttribution:function(a){if(!a)return;this._attributions[a]=!0,this._update()},removeAttribution:function(a){if(!a)return;delete this._attributions[a],this._update()},_update:function(){if(!this._map)return;var a=[];for(var b in this._attributions)this._attributions.hasOwnProperty(b)&&a.push(b);var c=[];this._prefix&&c.push(this._prefix),a.length&&c.push(a.join(", ")),this._container.innerHTML=c.join(" — ")}}),L.Control.Layers=L.Class.extend({options:{collapsed:!L.Browser.touch},initialize:function(a,b,c){L.Util.setOptions(this,c),this._layers={};for(var d in a)a.hasOwnProperty(d)&&this._addLayer(a[d],d);for(d in b)b.hasOwnProperty(d)&&this._addLayer(b[d],d,!0)},onAdd:function(a){this._map=a,this._initLayout(),this._update()},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_RIGHT},addBaseLayer:function(a,b){return this._addLayer(a,b),this._update(),this},addOverlay:function(a,b){return this._addLayer(a,b,!0),this._update(),this},removeLayer:function(a){var b=L.Util.stamp(a);return delete this._layers[b],this._update(),this},_initLayout:function(){this._container=L.DomUtil.create("div","leaflet-control-layers"),L.DomEvent.disableClickPropagation(this._container),this._form=L.DomUtil.create("form","leaflet-control-layers-list");if(this.options.collapsed){L.DomEvent.addListener(this._container,"mouseover",this._expand,this),L.DomEvent.addListener(this._container,"mouseout",this._collapse,this);var a=this._layersLink=L.DomUtil.create("a","leaflet-control-layers-toggle");a.href="#",a.title="Layers",L.DomEvent.addListener(a,"focus",this._expand,this),L.DomEvent.addListener(this._map,L.Draggable.START,this._collapse,this),this._container.appendChild(a)}else this._expand();this._baseLayersList=L.DomUtil.create("div","leaflet-control-layers-base",this._form),this._separator=L.DomUtil.create("div","leaflet-control-layers-separator",this._form),this._overlaysList=L.DomUtil.create("div","leaflet-control-layers-overlays",this._form),this._container.appendChild(this._form)},_addLayer:function(a,b,c){var d=L.Util.stamp(a);this._layers[d]={layer:a,name:b,overlay:c}},_update:function(){if(!this._container)return;this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var a=!1,b=!1;for(var c in this._layers)if(this._layers.hasOwnProperty(c)){var d=this._layers[c];this._addItem(d),b=b||d.overlay,a=a||!d.overlay}this._separator.style.display=b&&a?"":"none"},_addItem:function(a,b){var c=document.createElement("label"),d=document.createElement("input");a.overlay||(d.name="leaflet-base-layers"),d.type=a.overlay?"checkbox":"radio",d.checked=this._map.hasLayer(a.layer),d.layerId=L.Util.stamp(a.layer),L.DomEvent.addListener(d,"click",this._onInputClick,this);var e=document.createTextNode(" "+a.name);c.appendChild(d),c.appendChild(e);var f=a.overlay?this._overlaysList:this._baseLayersList;f.appendChild(c)},_onInputClick:function(){var a,b,c,d=this._form.getElementsByTagName("input"),e=d.length;for(a=0;a<e;a++)b=d[a],c=this._layers[b.layerId],b.checked?this._map.addLayer(c.layer,!c.overlay):this._map.removeLayer(c.layer)},_expand:function(){L.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),L.Transition=L.Class.extend({includes:L.Mixin.Events,statics:{CUSTOM_PROPS_SETTERS:{position:L.DomUtil.setPosition},implemented:function(){return L.Transition.NATIVE||L.Transition.TIMER}},options:{easing:"ease",duration:.5},_setProperty:function(a,b){var c=L.Transition.CUSTOM_PROPS_SETTERS;a in c?c[a](this._el,b):this._el.style[a]=b}}),L.Transition=L.Transition.extend({statics:function(){var a=L.DomUtil.TRANSITION,b=a==="webkitTransition"||a==="OTransition"?a+"End":"transitionend";return{NATIVE:!!a,TRANSITION:a,PROPERTY:a+"Property",DURATION:a+"Duration",EASING:a+"TimingFunction",END:b,CUSTOM_PROPS_PROPERTIES:{position:L.Browser.webkit?L.DomUtil.TRANSFORM:"top, left"}}}(),options:{fakeStepInterval:100},initialize:function(a,b){this._el=a,L.Util.setOptions(this,b),L.DomEvent.addListener(a,L.Transition.END,this._onTransitionEnd,this),this._onFakeStep=L.Util.bind(this._onFakeStep,this)},run:function(a){var b,c=[],d=L.Transition.CUSTOM_PROPS_PROPERTIES;for(b in a)a.hasOwnProperty(b)&&(b=d[b]?d[b]:b,b=this._dasherize(b),c.push(b));this._el.style[L.Transition.DURATION]=this.options.duration+"s",this._el.style[L.Transition.EASING]=this.options.easing,this._el.style[L.Transition.PROPERTY]=c.join(", ");for(b in a)a.hasOwnProperty(b)&&this._setProperty(b,a[b]);this._inProgress=!0,this.fire("start"),L.Transition.NATIVE?(clearInterval(this._timer),this._timer=setInterval(this._onFakeStep,this.options.fakeStepInterval)):this._onTransitionEnd()},_dasherize:function(){function b(a){return"-"+a.toLowerCase()}var a=/([A-Z])/g;return function(c){return c.replace(a,b)}}(),_onFakeStep:function(){this.fire("step")},_onTransitionEnd:function(){this._inProgress&&(this._inProgress=!1,clearInterval(this._timer),this._el.style[L.Transition.PROPERTY]="none",this.fire("step"),this.fire("end"))}}),L.Transition=L.Transition.NATIVE?L.Transition:L.Transition.extend({statics:{getTime:Date.now||function(){return+(new Date)},TIMER:!0,EASINGS:{ease:[.25,.1,.25,1],linear:[0,0,1,1],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]},CUSTOM_PROPS_GETTERS:{position:L.DomUtil.getPosition},UNIT_RE:/^[\d\.]+(\D*)$/},options:{fps:50},initialize:function(a,b){this._el=a,L.Util.extend(this.options,b);var c=L.Transition.EASINGS[this.options.easing]||L.Transition.EASINGS.ease;this._p1=new L.Point(0,0),this._p2=new L.Point(c[0],c[1]),this._p3=new L.Point(c[2],c[3]),this._p4=new L.Point(1,1),this._step=L.Util.bind(this._step,this),this._interval=Math.round(1e3/this.options.fps)},run:function(a){this._props={};var b=L.Transition.CUSTOM_PROPS_GETTERS,c=L.Transition.UNIT_RE;this.fire("start");for(var d in a)if(a.hasOwnProperty(d)){var e={};if(d in b)e.from=b[d](this._el);else{var f=this._el.style[d].match(c);e.from=parseFloat(f[0]),e.unit=f[1]}e.to=a[d],this._props[d]=e}clearInterval(this._timer),this._timer=setInterval(this._step,this._interval),this._startTime=L.Transition.getTime()},_step:function(){var a=L.Transition.getTime(),b=a-this._startTime,c=this.options.duration*1e3;b<c?this._runFrame(this._cubicBezier(b/c)):(this._runFrame(1),this._complete())},_runFrame:function(a){var b=L.Transition.CUSTOM_PROPS_SETTERS,c,d,e;for(c in this._props)this._props.hasOwnProperty(c)&&(d=this._props[c],c in b?(e=d.to.subtract(d.from).multiplyBy(a).add(d.from),b[c](this._el,e)):this._el.style[c]=(d.to-d.from)*a+d.from+d.unit);this.fire("step")},_complete:function(){clearInterval(this._timer),this.fire("end")},_cubicBezier:function(a){var b=Math.pow(1-a,3),c=3*Math.pow(1-a,2)*a,d=3*(1-a)*Math.pow(a,2),e=Math.pow(a,3),f=this._p1.multiplyBy(b),g=this._p2.multiplyBy(c),h=this._p3.multiplyBy(d),i=this._p4.multiplyBy(e);return f.add(g).add(h).add(i).y}}),L.Map.include(!L.Transition||!L.Transition.implemented()?{}:{setView:function(a,b,c){b=this._limitZoom(b);var d=this._zoom!==b;if(this._loaded&&!c&&this._layers){var e=this._getNewTopLeftPoint(a).subtract(this._getTopLeftPoint());a=new L.LatLng(a.lat,a.lng);var f=d?!!this._zoomToIfCenterInView&&this._zoomToIfCenterInView(a,b,e):this._panByIfClose(e);if(f)return this}return this._resetView(a,b),this},panBy:function(a){return!a.x&&!a.y?this:(this._panTransition||(this._panTransition=new L.Transition(this._mapPane,{duration:.3}),this._panTransition.on("step",this._onPanTransitionStep,this),this._panTransition.on("end",this._onPanTransitionEnd,this)),this.fire("movestart"),this._panTransition.run({position:L.DomUtil.getPosition(this._mapPane).subtract(a)}),this)},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){this.fire("moveend")},_panByIfClose:function(a){return this._offsetIsWithinView(a)?(this.panBy(a),!0):!1},_offsetIsWithinView:function(a,b){var c=b||1,d=this.getSize();return Math.abs(a.x)<=d.x*c&&Math.abs(a.y)<=d.y*c}}),L.Map.include(L.DomUtil.TRANSITION?{_zoomToIfCenterInView:function(a,b,c){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var d=b-this._zoom,e=Math.pow(2,d),f=c.divideBy(1-1/e);if(!this._offsetIsWithinView(f,1))return!1;this._mapPane.className+=" leaflet-zoom-anim",this.fire("movestart").fire("zoomstart");var g=this.containerPointToLayerPoint(this.getSize().divideBy(2)),h=g.add(f);return this._prepareTileBg(),this._runAnimation(a,b,e,h),!0},_runAnimation:function(a,b,c,d){this._animatingZoom=!0,this._animateToCenter=a,this._animateToZoom=b;var e=L.DomUtil.TRANSFORM;if(L.Browser.gecko||window.opera)this._tileBg.style[e]+=" translate(0,0)";var f;L.Browser.android?(this._tileBg.style[e+"Origin"]=d.x+"px "+d.y+"px",f="scale("+c+")"):f=L.DomUtil.getScaleString(c,d),L.Util.falseFn(this._tileBg.offsetWidth);var g={};g[e]=this._tileBg.style[e]+" "+f,this._tileBg.transition.run(g)},_prepareTileBg:function(){this._tileBg||(this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),this._tileBg.style.zIndex=1);var a=this._tilePane,b=this._tileBg;b.style[L.DomUtil.TRANSFORM]="",b.style.visibility="hidden",b.empty=!0,a.empty=!1,this._tilePane=this._panes.tilePane=b,this._tileBg=a,this._tileBg.transition||(this._tileBg.transition=new L.Transition(this._tileBg,{duration:.3,easing:"cubic-bezier(0.25,0.1,0.25,0.75)"}),this._tileBg.transition.on("end",this._onZoomTransitionEnd,this)),this._stopLoadingBgTiles()},_stopLoadingBgTiles:function(){var a=[].slice.call(this._tileBg.getElementsByTagName("img"));for(var b=0,c=a.length;b<c;b++)a[b].complete||(a[b].parentNode.removeChild(a[b]),a[b]=null)},_onZoomTransitionEnd:function(){this._restoreTileFront(),L.Util.falseFn(this._tileBg.offsetWidth),this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),this._mapPane.className=this._mapPane.className.replace(" leaflet-zoom-anim",""),this._animatingZoom=!1},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){!this._animatingZoom&&!this.touchZoom._zooming&&(this._tileBg.innerHTML="")}}:{}),L.Map.include({locate:function(a){this._locationOptions=a=L.Util.extend({watch:!1,setView:!1,maxZoom:Infinity,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},a);if(!navigator.geolocation)return this.fire("locationerror",{code:0,message:"Geolocation not supported."});var b=L.Util.bind(this._handleGeolocationResponse,this),c=L.Util.bind(this._handleGeolocationError,this);return a.watch?this._locationWatchId=navigator.geolocation.watchPosition(b,c,a):navigator.geolocation.getCurrentPosition(b,c,a),this},stopLocate:function(){navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId)},locateAndSetView:function(a,b){return b=L.Util.extend({maxZoom:a||Infinity,setView:!0},b),this.locate(b)},_handleGeolocationError:function(a){var b=a.code,c=b===1?"permission denied":b===2?"position unavailable":"timeout";this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:b,message:"Geolocation error: "+c+"."})},_handleGeolocationResponse:function(a){var b=180*a.coords.accuracy/4e7,c=b*2,d=a.coords.latitude,e=a.coords.longitude,f=new L.LatLng(d,e),g=new L.LatLng(d-b,e-c),h=new L.LatLng(d+b,e+c),i=new L.LatLngBounds(g,h);if(this._locationOptions.setView){var j=Math.min(this.getBoundsZoom(i),this._locationOptions.maxZoom);this.setView(f,j)}this.fire("locationfound",{latlng:f,bounds:i,accuracy:a.coords.accuracy})}});
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/mustache.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-/*
- mustache.js — Logic-less templates in JavaScript
-
- See http://mustache.github.com/ for more info.
-*/
-
-var Mustache = function () {
- var _toString = Object.prototype.toString;
-
- Array.isArray = Array.isArray || function (obj) {
- return _toString.call(obj) == "[object Array]";
- }
-
- var _trim = String.prototype.trim, trim;
-
- if (_trim) {
- trim = function (text) {
- return text == null ? "" : _trim.call(text);
- }
- } else {
- var trimLeft, trimRight;
-
- // IE doesn't match non-breaking spaces with \s.
- if ((/\S/).test("\xA0")) {
- trimLeft = /^[\s\xA0]+/;
- trimRight = /[\s\xA0]+$/;
- } else {
- trimLeft = /^\s+/;
- trimRight = /\s+$/;
- }
-
- trim = function (text) {
- return text == null ? "" :
- text.toString().replace(trimLeft, "").replace(trimRight, "");
- }
- }
-
- var escapeMap = {
- "&": "&",
- "<": "<",
- ">": ">",
- '"': '"',
- "'": '''
- };
-
- function escapeHTML(string) {
- return String(string).replace(/&(?!\w+;)|[<>"']/g, function (s) {
- return escapeMap[s] || s;
- });
- }
-
- var regexCache = {};
- var Renderer = function () {};
-
- Renderer.prototype = {
- otag: "{{",
- ctag: "}}",
- pragmas: {},
- buffer: [],
- pragmas_implemented: {
- "IMPLICIT-ITERATOR": true
- },
- context: {},
-
- render: function (template, context, partials, in_recursion) {
- // reset buffer & set context
- if (!in_recursion) {
- this.context = context;
- this.buffer = []; // TODO: make this non-lazy
- }
-
- // fail fast
- if (!this.includes("", template)) {
- if (in_recursion) {
- return template;
- } else {
- this.send(template);
- return;
- }
- }
-
- // get the pragmas together
- template = this.render_pragmas(template);
-
- // render the template
- var html = this.render_section(template, context, partials);
-
- // render_section did not find any sections, we still need to render the tags
- if (html === false) {
- html = this.render_tags(template, context, partials, in_recursion);
- }
-
- if (in_recursion) {
- return html;
- } else {
- this.sendLines(html);
- }
- },
-
- /*
- Sends parsed lines
- */
- send: function (line) {
- if (line !== "") {
- this.buffer.push(line);
- }
- },
-
- sendLines: function (text) {
- if (text) {
- var lines = text.split("\n");
- for (var i = 0; i < lines.length; i++) {
- this.send(lines[i]);
- }
- }
- },
-
- /*
- Looks for %PRAGMAS
- */
- render_pragmas: function (template) {
- // no pragmas
- if (!this.includes("%", template)) {
- return template;
- }
-
- var that = this;
- var regex = this.getCachedRegex("render_pragmas", function (otag, ctag) {
- return new RegExp(otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + ctag, "g");
- });
-
- return template.replace(regex, function (match, pragma, options) {
- if (!that.pragmas_implemented[pragma]) {
- throw({message:
- "This implementation of mustache doesn't understand the '" +
- pragma + "' pragma"});
- }
- that.pragmas[pragma] = {};
- if (options) {
- var opts = options.split("=");
- that.pragmas[pragma][opts[0]] = opts[1];
- }
- return "";
- // ignore unknown pragmas silently
- });
- },
-
- /*
- Tries to find a partial in the curent scope and render it
- */
- render_partial: function (name, context, partials) {
- name = trim(name);
- if (!partials || partials[name] === undefined) {
- throw({message: "unknown_partial '" + name + "'"});
- }
- if (!context || typeof context[name] != "object") {
- return this.render(partials[name], context, partials, true);
- }
- return this.render(partials[name], context[name], partials, true);
- },
-
- /*
- Renders inverted (^) and normal (#) sections
- */
- render_section: function (template, context, partials) {
- if (!this.includes("#", template) && !this.includes("^", template)) {
- // did not render anything, there were no sections
- return false;
- }
-
- var that = this;
-
- var regex = this.getCachedRegex("render_section", function (otag, ctag) {
- // This regex matches _the first_ section ({{#foo}}{{/foo}}), and captures the remainder
- return new RegExp(
- "^([\\s\\S]*?)" + // all the crap at the beginning that is not {{*}} ($1)
-
- otag + // {{
- "(\\^|\\#)\\s*(.+)\\s*" + // #foo (# == $2, foo == $3)
- ctag + // }}
-
- "\n*([\\s\\S]*?)" + // between the tag ($2). leading newlines are dropped
-
- otag + // {{
- "\\/\\s*\\3\\s*" + // /foo (backreference to the opening tag).
- ctag + // }}
-
- "\\s*([\\s\\S]*)$", // everything else in the string ($4). leading whitespace is dropped.
-
- "g");
- });
-
-
- // for each {{#foo}}{{/foo}} section do...
- return template.replace(regex, function (match, before, type, name, content, after) {
- // before contains only tags, no sections
- var renderedBefore = before ? that.render_tags(before, context, partials, true) : "",
-
- // after may contain both sections and tags, so use full rendering function
- renderedAfter = after ? that.render(after, context, partials, true) : "",
-
- // will be computed below
- renderedContent,
-
- value = that.find(name, context);
-
- if (type === "^") { // inverted section
- if (!value || Array.isArray(value) && value.length === 0) {
- // false or empty list, render it
- renderedContent = that.render(content, context, partials, true);
- } else {
- renderedContent = "";
- }
- } else if (type === "#") { // normal section
- if (Array.isArray(value)) { // Enumerable, Let's loop!
- renderedContent = that.map(value, function (row) {
- return that.render(content, that.create_context(row), partials, true);
- }).join("");
- } else if (that.is_object(value)) { // Object, Use it as subcontext!
- renderedContent = that.render(content, that.create_context(value),
- partials, true);
- } else if (typeof value == "function") {
- // higher order section
- renderedContent = value.call(context, content, function (text) {
- return that.render(text, context, partials, true);
- });
- } else if (value) { // boolean section
- renderedContent = that.render(content, context, partials, true);
- } else {
- renderedContent = "";
- }
- }
-
- return renderedBefore + renderedContent + renderedAfter;
- });
- },
-
- /*
- Replace {{foo}} and friends with values from our view
- */
- render_tags: function (template, context, partials, in_recursion) {
- // tit for tat
- var that = this;
-
- var new_regex = function () {
- return that.getCachedRegex("render_tags", function (otag, ctag) {
- return new RegExp(otag + "(=|!|>|&|\\{|%)?([^#\\^]+?)\\1?" + ctag + "+", "g");
- });
- };
-
- var regex = new_regex();
- var tag_replace_callback = function (match, operator, name) {
- switch(operator) {
- case "!": // ignore comments
- return "";
- case "=": // set new delimiters, rebuild the replace regexp
- that.set_delimiters(name);
- regex = new_regex();
- return "";
- case ">": // render partial
- return that.render_partial(name, context, partials);
- case "{": // the triple mustache is unescaped
- case "&": // & operator is an alternative unescape method
- return that.find(name, context);
- default: // escape the value
- return escapeHTML(that.find(name, context));
- }
- };
- var lines = template.split("\n");
- for(var i = 0; i < lines.length; i++) {
- lines[i] = lines[i].replace(regex, tag_replace_callback, this);
- if (!in_recursion) {
- this.send(lines[i]);
- }
- }
-
- if (in_recursion) {
- return lines.join("\n");
- }
- },
-
- set_delimiters: function (delimiters) {
- var dels = delimiters.split(" ");
- this.otag = this.escape_regex(dels[0]);
- this.ctag = this.escape_regex(dels[1]);
- },
-
- escape_regex: function (text) {
- // thank you Simon Willison
- if (!arguments.callee.sRE) {
- var specials = [
- '/', '.', '*', '+', '?', '|',
- '(', ')', '[', ']', '{', '}', '\\'
- ];
- arguments.callee.sRE = new RegExp(
- '(\\' + specials.join('|\\') + ')', 'g'
- );
- }
- return text.replace(arguments.callee.sRE, '\\$1');
- },
-
- /*
- find `name` in current `context`. That is find me a value
- from the view object
- */
- find: function (name, context) {
- name = trim(name);
-
- // Checks whether a value is thruthy or false or 0
- function is_kinda_truthy(bool) {
- return bool === false || bool === 0 || bool;
- }
-
- var value;
-
- // check for dot notation eg. foo.bar
- if (name.match(/([a-z_]+)\./ig)) {
- var childValue = this.walk_context(name, context);
- if (is_kinda_truthy(childValue)) {
- value = childValue;
- }
- } else {
- if (is_kinda_truthy(context[name])) {
- value = context[name];
- } else if (is_kinda_truthy(this.context[name])) {
- value = this.context[name];
- }
- }
-
- if (typeof value == "function") {
- return value.apply(context);
- }
- if (value !== undefined) {
- return value;
- }
- // silently ignore unkown variables
- return "";
- },
-
- walk_context: function (name, context) {
- var path = name.split('.');
- // if the var doesn't exist in current context, check the top level context
- var value_context = (context[path[0]] != undefined) ? context : this.context;
- var value = value_context[path.shift()];
- while (value != undefined && path.length > 0) {
- value_context = value;
- value = value[path.shift()];
- }
- // if the value is a function, call it, binding the correct context
- if (typeof value == "function") {
- return value.apply(value_context);
- }
- return value;
- },
-
- // Utility methods
-
- /* includes tag */
- includes: function (needle, haystack) {
- return haystack.indexOf(this.otag + needle) != -1;
- },
-
- // by @langalex, support for arrays of strings
- create_context: function (_context) {
- if (this.is_object(_context)) {
- return _context;
- } else {
- var iterator = ".";
- if (this.pragmas["IMPLICIT-ITERATOR"]) {
- iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
- }
- var ctx = {};
- ctx[iterator] = _context;
- return ctx;
- }
- },
-
- is_object: function (a) {
- return a && typeof a == "object";
- },
-
- /*
- Why, why, why? Because IE. Cry, cry cry.
- */
- map: function (array, fn) {
- if (typeof array.map == "function") {
- return array.map(fn);
- } else {
- var r = [];
- var l = array.length;
- for(var i = 0; i < l; i++) {
- r.push(fn(array[i]));
- }
- return r;
- }
- },
-
- getCachedRegex: function (name, generator) {
- var byOtag = regexCache[this.otag];
- if (!byOtag) {
- byOtag = regexCache[this.otag] = {};
- }
-
- var byCtag = byOtag[this.ctag];
- if (!byCtag) {
- byCtag = byOtag[this.ctag] = {};
- }
-
- var regex = byCtag[name];
- if (!regex) {
- regex = byCtag[name] = generator(this.otag, this.ctag);
- }
-
- return regex;
- }
- };
-
- return({
- name: "mustache.js",
- version: "0.5.0-dev",
-
- /*
- Turns a template and view into HTML
- */
- to_html: function (template, view, partials, send_fun) {
- var renderer = new Renderer();
- if (send_fun) {
- renderer.send = send_fun;
- }
- renderer.render(template, view || {}, partials);
- if (!send_fun) {
- return renderer.buffer.join("\n");
- }
- }
- });
-}();
--- a/web/hdalab/static/hdalab/lib/raphael-min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-/*
- * Raphael 1.4.7 - JavaScript Vector Library
- *
- * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael=function(){function l(){if(l.is(arguments[0],U)){for(var a=arguments[0],b=Ca[K](l,a.splice(0,3+l.is(a[0],P))),c=b.set(),d=0,f=a[o];d<f;d++){var e=a[d]||{};sb.test(e.type)&&c[F](b[e.type]().attr(e))}return c}return Ca[K](l,arguments)}l.version="1.4.7";var V=/[, ]+/,sb=/^(circle|rect|path|ellipse|text|image)$/,p="prototype",z="hasOwnProperty",C=document,aa=window,Qa={was:Object[p][z].call(aa,"Raphael"),is:aa.Raphael};function H(){}var x="appendChild",K="apply",M="concat",Da="createTouch"in C,
-A="",N=" ",D=String,G="split",Ra="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[G](N),Ea={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},R="join",o="length",fa=String[p].toLowerCase,v=Math,Y=v.max,ba=v.min,P="number",ga="string",U="array",O="toString",ca="fill",tb=Object[p][O],E=v.pow,F="push",ja=/^(?=[\da-f]$)/,Sa=/^url\(['"]?([^\)]+?)['"]?\)$/i,ub=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+(?:\s*,\s*[\d\.]+)?)\s*\)|rgba?\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%(?:\s*,\s*[\d\.]+%)?)\s*\)|hsb\(\s*([\d\.]+(?:deg|\xb0)?\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hsb\(\s*([\d\.]+(?:deg|\xb0|%)\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hsl\(\s*([\d\.]+(?:deg|\xb0)?\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hsl\(\s*([\d\.]+(?:deg|\xb0|%)\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i,
-Q=v.round,W="setAttribute",y=parseFloat,ha=parseInt,Fa=" progid:DXImageTransform.Microsoft",sa=String[p].toUpperCase,ta={blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt",
-"stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",translation:"0 0",width:0,x:0,y:0},Ga={along:"along",blur:P,"clip-rect":"csv",cx:P,cy:P,fill:"colour","fill-opacity":P,"font-size":P,height:P,opacity:P,path:"path",r:P,rotation:"csv",rx:P,ry:P,scale:"csv",stroke:"colour","stroke-opacity":P,"stroke-width":P,translation:"csv",width:P,x:P,y:P},I="replace";l.type=aa.SVGAngle||C.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure",
-"1.1")?"SVG":"VML";if(l.type=="VML"){var da=C.createElement("div");da.innerHTML='<v:shape adj="1"/>';da=da.firstChild;da.style.behavior="url(#default#VML)";if(!(da&&typeof da.adj=="object"))return l.type=null;da=null}l.svg=!(l.vml=l.type=="VML");H[p]=l[p];l._id=0;l._oid=0;l.fn={};l.is=function(a,b){b=fa.call(b);return b=="object"&&a===Object(a)||b=="undefined"&&typeof a==b||b=="null"&&a==null||b=="array"&&Array.isArray&&Array.isArray(a)||fa.call(tb.call(a).slice(8,-1))==b};l.setWindow=function(a){aa=
-a;C=aa.document};function ua(a){if(l.vml){var b=/^\s+|\s+$/g;ua=Z(function(d){var f;d=D(d)[I](b,A);try{var e=new aa.ActiveXObject("htmlfile");e.write("<body>");e.close();f=e.body}catch(g){f=aa.createPopup().document.body}e=f.createTextRange();try{f.style.color=d;var h=e.queryCommandValue("ForeColor");h=(h&255)<<16|h&65280|(h&16711680)>>>16;return"#"+("000000"+h[O](16)).slice(-6)}catch(i){return"none"}})}else{var c=C.createElement("i");c.title="Rapha\u00ebl Colour Picker";c.style.display="none";C.body[x](c);
-ua=Z(function(d){c.style.color=d;return C.defaultView.getComputedStyle(c,A).getPropertyValue("color")})}return ua(a)}function Ta(){return"hsb("+[this.h,this.s,this.b]+")"}function vb(){return"hsl("+[this.h,this.s,this.l]+")"}function wb(){return this.hex}l.hsb2rgb=function(a,b,c){if(l.is(a,"object")&&"h"in a&&"s"in a&&"b"in a){c=a.b;b=a.s;a=a.h}return l.hsl2rgb(a,b,c/2)};l.hsl2rgb=function(a,b,c){if(l.is(a,"object")&&"h"in a&&"s"in a&&"l"in a){c=a.l;b=a.s;a=a.h}var d={},f=["r","g","b"],e;if(b){b=
-c<0.5?c*(1+b):c+b-c*b;c=2*c-b;for(var g=0,h=f.length;g<h;g++){e=a+1/3*-(g-1);e<0&&e++;e>1&&e--;d[f[g]]=e*6<1?c+(b-c)*6*e:e*2<1?b:e*3<2?c+(b-c)*(2/3-e)*6:c}}else d={r:c,g:c,b:c};d.r*=255;d.g*=255;d.b*=255;a=(~~d.r)[O](16);f=(~~d.g)[O](16);b=(~~d.b)[O](16);a=a[I](ja,"0");f=f[I](ja,"0");b=b[I](ja,"0");d.hex="#"+a+f+b;d.toString=wb;return d};l.rgb2hsb=function(a,b,c){if(b==null&&l.is(a,"object")&&"r"in a&&"g"in a&&"b"in a){c=a.b;b=a.g;a=a.r}if(b==null&&l.is(a,ga)){var d=l.getRGB(a);a=d.r;b=d.g;c=d.b}if(a>
-1||b>1||c>1){a/=255;b/=255;c/=255}var f=Y(a,b,c),e=ba(a,b,c);d=f;if(e==f)return{h:0,s:0,b:f,toString:Ta};else{var g=f-e;e=g/f;a=a==f?(b-c)/g:b==f?2+(c-a)/g:4+(a-b)/g;a/=6;a<0&&a++;a>1&&a--}return{h:a,s:e,b:d,toString:Ta}};l.rgb2hsl=function(a,b,c){if(b==null&&l.is(a,"object")&&"r"in a&&"g"in a&&"b"in a){c=a.b;b=a.g;a=a.r}if(b==null&&l.is(a,ga)){var d=l.getRGB(a);a=d.r;b=d.g;c=d.b}if(a>1||b>1||c>1){a/=255;b/=255;c/=255}var f=Y(a,b,c),e=ba(a,b,c);d=(f+e)/2;if(e==f)a={h:0,s:0,l:d};else{var g=f-e;e=d<
-0.5?g/(f+e):g/(2-f-e);a=a==f?(b-c)/g:b==f?2+(c-a)/g:4+(a-b)/g;a/=6;a<0&&a++;a>1&&a--;a={h:a,s:e,l:d}}a.toString=vb;return a};var xb=/,?([achlmqrstvxz]),?/gi,ka=/\s*,\s*/,yb={hs:1,rg:1};l._path2string=function(){return this.join(",")[I](xb,"$1")};function Z(a,b,c){function d(){var f=Array[p].slice.call(arguments,0),e=f[R]("\u25ba"),g=d.cache=d.cache||{},h=d.count=d.count||[];if(g[z](e))return c?c(g[e]):g[e];h[o]>=1000&&delete g[h.shift()];h[F](e);g[e]=a[K](b,f);return c?c(g[e]):g[e]}return d}l.getRGB=
-Z(function(a){if(!a||(a=D(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1};if(a=="none")return{r:-1,g:-1,b:-1,hex:"none"};!(yb[z](a.substring(0,2))||a.charAt()=="#")&&(a=ua(a));var b,c,d,f,e;if(a=a.match(ub)){if(a[2]){d=ha(a[2].substring(5),16);c=ha(a[2].substring(3,5),16);b=ha(a[2].substring(1,3),16)}if(a[3]){d=ha((e=a[3].charAt(3))+e,16);c=ha((e=a[3].charAt(2))+e,16);b=ha((e=a[3].charAt(1))+e,16)}if(a[4]){a=a[4][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);f=y(a[3])}if(a[5]){a=a[5][G](ka);b=
-y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;f=y(a[3])}if(a[6]){a=a[6][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360);return l.hsb2rgb(b,c,d)}if(a[7]){a=a[7][G](ka);b=y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360*2.55);return l.hsb2rgb(b,c,d)}if(a[8]){a=a[8][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360);return l.hsl2rgb(b,c,d)}if(a[9]){a=a[9][G](ka);
-b=y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360*2.55);return l.hsl2rgb(b,c,d)}a={r:b,g:c,b:d};b=(~~b)[O](16);c=(~~c)[O](16);d=(~~d)[O](16);b=b[I](ja,"0");c=c[I](ja,"0");d=d[I](ja,"0");a.hex="#"+b+c+d;isFinite(y(f))&&(a.o=f);return a}return{r:-1,g:-1,b:-1,hex:"none",error:1}},l);l.getColor=function(a){a=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||0.75};var b=this.hsb2rgb(a.h,a.s,a.b);a.h+=0.075;if(a.h>1){a.h=0;a.s-=0.2;a.s<=0&&(this.getColor.start=
-{h:0,s:1,b:a.b})}return b.hex};l.getColor.reset=function(){delete this.start};var zb=/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,Ab=/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig;l.parsePathString=Z(function(a){if(!a)return null;var b={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},c=[];if(l.is(a,U)&&l.is(a[0],U))c=va(a);c[o]||D(a)[I](zb,function(d,f,e){var g=[];d=fa.call(f);e[I](Ab,function(h,i){i&&g[F](+i)});if(d=="m"&&g[o]>2){c[F]([f][M](g.splice(0,2)));d="l";f=f=="m"?"l":"L"}for(;g[o]>=
-b[d];){c[F]([f][M](g.splice(0,b[d])));if(!b[d])break}});c[O]=l._path2string;return c});l.findDotsAtSegment=function(a,b,c,d,f,e,g,h,i){var j=1-i,m=E(j,3)*a+E(j,2)*3*i*c+j*3*i*i*f+E(i,3)*g;j=E(j,3)*b+E(j,2)*3*i*d+j*3*i*i*e+E(i,3)*h;var n=a+2*i*(c-a)+i*i*(f-2*c+a),r=b+2*i*(d-b)+i*i*(e-2*d+b),q=c+2*i*(f-c)+i*i*(g-2*f+c),k=d+2*i*(e-d)+i*i*(h-2*e+d);a=(1-i)*a+i*c;b=(1-i)*b+i*d;f=(1-i)*f+i*g;e=(1-i)*e+i*h;h=90-v.atan((n-q)/(r-k))*180/v.PI;(n>q||r<k)&&(h+=180);return{x:m,y:j,m:{x:n,y:r},n:{x:q,y:k},start:{x:a,
-y:b},end:{x:f,y:e},alpha:h}};var xa=Z(function(a){if(!a)return{x:0,y:0,width:0,height:0};a=wa(a);for(var b=0,c=0,d=[],f=[],e,g=0,h=a[o];g<h;g++){e=a[g];if(e[0]=="M"){b=e[1];c=e[2];d[F](b);f[F](c)}else{b=Bb(b,c,e[1],e[2],e[3],e[4],e[5],e[6]);d=d[M](b.min.x,b.max.x);f=f[M](b.min.y,b.max.y);b=e[5];c=e[6]}}a=ba[K](0,d);e=ba[K](0,f);return{x:a,y:e,width:Y[K](0,d)-a,height:Y[K](0,f)-e}});function va(a){var b=[];if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);for(var c=0,d=a[o];c<d;c++){b[c]=[];for(var f=
-0,e=a[c][o];f<e;f++)b[c][f]=a[c][f]}b[O]=l._path2string;return b}var Ha=Z(function(a){if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);var b=[],c=0,d=0,f=0,e=0,g=0;if(a[0][0]=="M"){c=a[0][1];d=a[0][2];f=c;e=d;g++;b[F](["M",c,d])}g=g;for(var h=a[o];g<h;g++){var i=b[g]=[],j=a[g];if(j[0]!=fa.call(j[0])){i[0]=fa.call(j[0]);switch(i[0]){case "a":i[1]=j[1];i[2]=j[2];i[3]=j[3];i[4]=j[4];i[5]=j[5];i[6]=+(j[6]-c).toFixed(3);i[7]=+(j[7]-d).toFixed(3);break;case "v":i[1]=+(j[1]-d).toFixed(3);break;case "m":f=
-j[1];e=j[2];default:for(var m=1,n=j[o];m<n;m++)i[m]=+(j[m]-(m%2?c:d)).toFixed(3)}}else{b[g]=[];if(j[0]=="m"){f=j[1]+c;e=j[2]+d}i=0;for(m=j[o];i<m;i++)b[g][i]=j[i]}j=b[g][o];switch(b[g][0]){case "z":c=f;d=e;break;case "h":c+=+b[g][j-1];break;case "v":d+=+b[g][j-1];break;default:c+=+b[g][j-2];d+=+b[g][j-1]}}b[O]=l._path2string;return b},0,va),oa=Z(function(a){if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);var b=[],c=0,d=0,f=0,e=0,g=0;if(a[0][0]=="M"){c=+a[0][1];d=+a[0][2];f=c;e=d;g++;b[0]=["M",
-c,d]}g=g;for(var h=a[o];g<h;g++){var i=b[g]=[],j=a[g];if(j[0]!=sa.call(j[0])){i[0]=sa.call(j[0]);switch(i[0]){case "A":i[1]=j[1];i[2]=j[2];i[3]=j[3];i[4]=j[4];i[5]=j[5];i[6]=+(j[6]+c);i[7]=+(j[7]+d);break;case "V":i[1]=+j[1]+d;break;case "H":i[1]=+j[1]+c;break;case "M":f=+j[1]+c;e=+j[2]+d;default:for(var m=1,n=j[o];m<n;m++)i[m]=+j[m]+(m%2?c:d)}}else{m=0;for(n=j[o];m<n;m++)b[g][m]=j[m]}switch(i[0]){case "Z":c=f;d=e;break;case "H":c=i[1];break;case "V":d=i[1];break;case "M":f=b[g][b[g][o]-2];e=b[g][b[g][o]-
-1];default:c=b[g][b[g][o]-2];d=b[g][b[g][o]-1]}}b[O]=l._path2string;return b},null,va);function ya(a,b,c,d){return[a,b,c,d,c,d]}function Ua(a,b,c,d,f,e){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*f+h*c,g*e+h*d,f,e]}function Va(a,b,c,d,f,e,g,h,i,j){var m=v.PI,n=m*120/180,r=m/180*(+f||0),q=[],k,t=Z(function(J,ia,za){var Cb=J*v.cos(za)-ia*v.sin(za);J=J*v.sin(za)+ia*v.cos(za);return{x:Cb,y:J}});if(j){w=j[0];k=j[1];e=j[2];B=j[3]}else{k=t(a,b,-r);a=k.x;b=k.y;k=t(h,i,-r);h=k.x;i=k.y;v.cos(m/180*f);v.sin(m/
-180*f);k=(a-h)/2;w=(b-i)/2;B=k*k/(c*c)+w*w/(d*d);if(B>1){B=v.sqrt(B);c=B*c;d=B*d}B=c*c;var L=d*d;B=(e==g?-1:1)*v.sqrt(v.abs((B*L-B*w*w-L*k*k)/(B*w*w+L*k*k)));e=B*c*w/d+(a+h)/2;var B=B*-d*k/c+(b+i)/2,w=v.asin(((b-B)/d).toFixed(7));k=v.asin(((i-B)/d).toFixed(7));w=a<e?m-w:w;k=h<e?m-k:k;w<0&&(w=m*2+w);k<0&&(k=m*2+k);if(g&&w>k)w-=m*2;if(!g&&k>w)k-=m*2}m=k-w;if(v.abs(m)>n){q=k;m=h;L=i;k=w+n*(g&&k>w?1:-1);h=e+c*v.cos(k);i=B+d*v.sin(k);q=Va(h,i,c,d,f,0,g,m,L,[k,q,e,B])}m=k-w;f=v.cos(w);e=v.sin(w);g=v.cos(k);
-k=v.sin(k);m=v.tan(m/4);c=4/3*c*m;m=4/3*d*m;d=[a,b];a=[a+c*e,b-m*f];b=[h+c*k,i-m*g];h=[h,i];a[0]=2*d[0]-a[0];a[1]=2*d[1]-a[1];if(j)return[a,b,h][M](q);else{q=[a,b,h][M](q)[R]()[G](",");j=[];h=0;for(i=q[o];h<i;h++)j[h]=h%2?t(q[h-1],q[h],r).y:t(q[h],q[h+1],r).x;return j}}function la(a,b,c,d,f,e,g,h,i){var j=1-i;return{x:E(j,3)*a+E(j,2)*3*i*c+j*3*i*i*f+E(i,3)*g,y:E(j,3)*b+E(j,2)*3*i*d+j*3*i*i*e+E(i,3)*h}}var Bb=Z(function(a,b,c,d,f,e,g,h){var i=f-2*c+a-(g-2*f+c),j=2*(c-a)-2*(f-c),m=a-c,n=(-j+v.sqrt(j*
-j-4*i*m))/2/i;i=(-j-v.sqrt(j*j-4*i*m))/2/i;var r=[b,h],q=[a,g];v.abs(n)>1000000000000&&(n=0.5);v.abs(i)>1000000000000&&(i=0.5);if(n>0&&n<1){n=la(a,b,c,d,f,e,g,h,n);q[F](n.x);r[F](n.y)}if(i>0&&i<1){n=la(a,b,c,d,f,e,g,h,i);q[F](n.x);r[F](n.y)}i=e-2*d+b-(h-2*e+d);j=2*(d-b)-2*(e-d);m=b-d;n=(-j+v.sqrt(j*j-4*i*m))/2/i;i=(-j-v.sqrt(j*j-4*i*m))/2/i;v.abs(n)>1000000000000&&(n=0.5);v.abs(i)>1000000000000&&(i=0.5);if(n>0&&n<1){n=la(a,b,c,d,f,e,g,h,n);q[F](n.x);r[F](n.y)}if(i>0&&i<1){n=la(a,b,c,d,f,e,g,h,i);
-q[F](n.x);r[F](n.y)}return{min:{x:ba[K](0,q),y:ba[K](0,r)},max:{x:Y[K](0,q),y:Y[K](0,r)}}}),wa=Z(function(a,b){var c=oa(a),d=b&&oa(b);a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};b={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};function f(q,k){var t;if(!q)return["C",k.x,k.y,k.x,k.y,k.x,k.y];!(q[0]in{T:1,Q:1})&&(k.qx=k.qy=null);switch(q[0]){case "M":k.X=q[1];k.Y=q[2];break;case "A":q=["C"][M](Va[K](0,[k.x,k.y][M](q.slice(1))));break;case "S":t=k.x+(k.x-(k.bx||k.x));k=k.y+(k.y-(k.by||k.y));q=["C",t,k][M](q.slice(1));
-break;case "T":k.qx=k.x+(k.x-(k.qx||k.x));k.qy=k.y+(k.y-(k.qy||k.y));q=["C"][M](Ua(k.x,k.y,k.qx,k.qy,q[1],q[2]));break;case "Q":k.qx=q[1];k.qy=q[2];q=["C"][M](Ua(k.x,k.y,q[1],q[2],q[3],q[4]));break;case "L":q=["C"][M](ya(k.x,k.y,q[1],q[2]));break;case "H":q=["C"][M](ya(k.x,k.y,q[1],k.y));break;case "V":q=["C"][M](ya(k.x,k.y,k.x,q[1]));break;case "Z":q=["C"][M](ya(k.x,k.y,k.X,k.Y));break}return q}function e(q,k){if(q[k][o]>7){q[k].shift();for(var t=q[k];t[o];)q.splice(k++,0,["C"][M](t.splice(0,6)));
-q.splice(k,1);i=Y(c[o],d&&d[o]||0)}}function g(q,k,t,L,B){if(q&&k&&q[B][0]=="M"&&k[B][0]!="M"){k.splice(B,0,["M",L.x,L.y]);t.bx=0;t.by=0;t.x=q[B][1];t.y=q[B][2];i=Y(c[o],d&&d[o]||0)}}for(var h=0,i=Y(c[o],d&&d[o]||0);h<i;h++){c[h]=f(c[h],a);e(c,h);d&&(d[h]=f(d[h],b));d&&e(d,h);g(c,d,a,b,h);g(d,c,b,a,h);var j=c[h],m=d&&d[h],n=j[o],r=d&&m[o];a.x=j[n-2];a.y=j[n-1];a.bx=y(j[n-4])||a.x;a.by=y(j[n-3])||a.y;b.bx=d&&(y(m[r-4])||b.x);b.by=d&&(y(m[r-3])||b.y);b.x=d&&m[r-2];b.y=d&&m[r-1]}return d?[c,d]:c},null,
-va),Wa=Z(function(a){for(var b=[],c=0,d=a[o];c<d;c++){var f={},e=a[c].match(/^([^:]*):?([\d\.]*)/);f.color=l.getRGB(e[1]);if(f.color.error)return null;f.color=f.color.hex;e[2]&&(f.offset=e[2]+"%");b[F](f)}c=1;for(d=b[o]-1;c<d;c++)if(!b[c].offset){a=y(b[c-1].offset||0);e=0;for(f=c+1;f<d;f++)if(b[f].offset){e=b[f].offset;break}if(!e){e=100;f=d}e=y(e);for(e=(e-a)/(f-c+1);c<f;c++){a+=e;b[c].offset=a+"%"}}return b});function Xa(a,b,c,d){if(l.is(a,ga)||l.is(a,"object")){a=l.is(a,ga)?C.getElementById(a):
-a;if(a.tagName)return b==null?{container:a,width:a.style.pixelWidth||a.offsetWidth,height:a.style.pixelHeight||a.offsetHeight}:{container:a,width:b,height:c}}else return{container:1,x:a,y:b,width:c,height:d}}function Ia(a,b){var c=this;for(var d in b)if(b[z](d)&&!(d in a))switch(typeof b[d]){case "function":(function(f){a[d]=a===c?f:function(){return f[K](c,arguments)}})(b[d]);break;case "object":a[d]=a[d]||{};Ia.call(this,a[d],b[d]);break;default:a[d]=b[d];break}}function ma(a,b){a==b.top&&(b.top=
-a.prev);a==b.bottom&&(b.bottom=a.next);a.next&&(a.next.prev=a.prev);a.prev&&(a.prev.next=a.next)}function Ya(a,b){if(b.top!==a){ma(a,b);a.next=null;a.prev=b.top;b.top.next=a;b.top=a}}function Za(a,b){if(b.bottom!==a){ma(a,b);a.next=b.bottom;a.prev=null;b.bottom.prev=a;b.bottom=a}}function $a(a,b,c){ma(a,c);b==c.top&&(c.top=a);b.next&&(b.next.prev=a);a.next=b.next;a.prev=b;b.next=a}function ab(a,b,c){ma(a,c);b==c.bottom&&(c.bottom=a);b.prev&&(b.prev.next=a);a.prev=b.prev;b.prev=a;a.next=b}function bb(a){return function(){throw new Error("Rapha\u00ebl: you are calling to method \u201c"+
-a+"\u201d of removed object");}}var cb=/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/;l.pathToRelative=Ha;if(l.svg){H[p].svgns="http://www.w3.org/2000/svg";H[p].xlink="http://www.w3.org/1999/xlink";Q=function(a){return+a+(~~a===a)*0.5};var u=function(a,b){if(b)for(var c in b)b[z](c)&&a[W](c,D(b[c]));else{a=C.createElementNS(H[p].svgns,a);a.style.webkitTapHighlightColor="rgba(0,0,0,0)";return a}};l[O]=function(){return"Your browser supports SVG.\nYou are running Rapha\u00ebl "+this.version};var db=function(a,
-b){var c=u("path");b.canvas&&b.canvas[x](c);b=new s(c,b);b.type="path";ea(b,{fill:"none",stroke:"#000",path:a});return b},pa=function(a,b,c){var d="linear",f=0.5,e=0.5,g=a.style;b=D(b)[I](cb,function(m,n,r){d="radial";if(n&&r){f=y(n);e=y(r);m=(e>0.5)*2-1;E(f-0.5,2)+E(e-0.5,2)>0.25&&(e=v.sqrt(0.25-E(f-0.5,2))*m+0.5)&&e!=0.5&&(e=e.toFixed(5)-1.0E-5*m)}return A});b=b[G](/\s*\-\s*/);if(d=="linear"){var h=b.shift();h=-y(h);if(isNaN(h))return null;h=[0,0,v.cos(h*v.PI/180),v.sin(h*v.PI/180)];var i=1/(Y(v.abs(h[2]),
-v.abs(h[3]))||1);h[2]*=i;h[3]*=i;if(h[2]<0){h[0]=-h[2];h[2]=0}if(h[3]<0){h[1]=-h[3];h[3]=0}}b=Wa(b);if(!b)return null;i=a.getAttribute(ca);(i=i.match(/^url\(#(.*)\)$/))&&c.defs.removeChild(C.getElementById(i[1]));i=u(d+"Gradient");i.id="r"+(l._id++)[O](36);u(i,d=="radial"?{fx:f,fy:e}:{x1:h[0],y1:h[1],x2:h[2],y2:h[3]});c.defs[x](i);c=0;for(h=b[o];c<h;c++){var j=u("stop");u(j,{offset:b[c].offset?b[c].offset:!c?"0%":"100%","stop-color":b[c].color||"#fff"});i[x](j)}u(a,{fill:"url(#"+i.id+")",opacity:1,
-"fill-opacity":1});g.fill=A;g.opacity=1;return g.fillOpacity=1},Ja=function(a){var b=a.getBBox();u(a.pattern,{patternTransform:l.format("translate({0},{1})",b.x,b.y)})},ea=function(a,b){var c={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},d=a.node,f=a.attrs,e=a.rotate();function g(k,t){if(t=c[fa.call(t)]){var L=k.attrs["stroke-width"]||"1";k={round:L,square:L,butt:0}[k.attrs["stroke-linecap"]||
-b["stroke-linecap"]]||0;for(var B=[],w=t[o];w--;)B[w]=t[w]*L+(w%2?1:-1)*k;u(d,{"stroke-dasharray":B[R](",")})}}b[z]("rotation")&&(e=b.rotation);var h=D(e)[G](V);if(h.length-1){h[1]=+h[1];h[2]=+h[2]}else h=null;y(e)&&a.rotate(0,true);for(var i in b)if(b[z](i))if(ta[z](i)){var j=b[i];f[i]=j;switch(i){case "blur":a.blur(j);break;case "rotation":a.rotate(j,true);break;case "href":case "title":case "target":var m=d.parentNode;if(fa.call(m.tagName)!="a"){var n=u("a");m.insertBefore(n,d);n[x](d);m=n}m.setAttributeNS(a.paper.xlink,
-i,j);break;case "cursor":d.style.cursor=j;break;case "clip-rect":m=D(j)[G](V);if(m[o]==4){a.clip&&a.clip.parentNode.parentNode.removeChild(a.clip.parentNode);var r=u("clipPath");n=u("rect");r.id="r"+(l._id++)[O](36);u(n,{x:m[0],y:m[1],width:m[2],height:m[3]});r[x](n);a.paper.defs[x](r);u(d,{"clip-path":"url(#"+r.id+")"});a.clip=n}if(!j){(j=C.getElementById(d.getAttribute("clip-path")[I](/(^url\(#|\)$)/g,A)))&&j.parentNode.removeChild(j);u(d,{"clip-path":A});delete a.clip}break;case "path":if(a.type==
-"path")u(d,{d:j?(f.path=oa(j)):"M0,0"});break;case "width":d[W](i,j);if(f.fx){i="x";j=f.x}else break;case "x":if(f.fx)j=-f.x-(f.width||0);case "rx":if(i=="rx"&&a.type=="rect")break;case "cx":h&&(i=="x"||i=="cx")&&(h[1]+=j-f[i]);d[W](i,j);a.pattern&&Ja(a);break;case "height":d[W](i,j);if(f.fy){i="y";j=f.y}else break;case "y":if(f.fy)j=-f.y-(f.height||0);case "ry":if(i=="ry"&&a.type=="rect")break;case "cy":h&&(i=="y"||i=="cy")&&(h[2]+=j-f[i]);d[W](i,j);a.pattern&&Ja(a);break;case "r":a.type=="rect"?
-u(d,{rx:j,ry:j}):d[W](i,j);break;case "src":a.type=="image"&&d.setAttributeNS(a.paper.xlink,"href",j);break;case "stroke-width":d.style.strokeWidth=j;d[W](i,j);f["stroke-dasharray"]&&g(a,f["stroke-dasharray"]);break;case "stroke-dasharray":g(a,j);break;case "translation":j=D(j)[G](V);j[0]=+j[0]||0;j[1]=+j[1]||0;if(h){h[1]+=j[0];h[2]+=j[1]}Aa.call(a,j[0],j[1]);break;case "scale":j=D(j)[G](V);a.scale(+j[0]||1,+j[1]||+j[0]||1,isNaN(y(j[2]))?null:+j[2],isNaN(y(j[3]))?null:+j[3]);break;case ca:if(m=D(j).match(Sa)){r=
-u("pattern");var q=u("image");r.id="r"+(l._id++)[O](36);u(r,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1});u(q,{x:0,y:0});q.setAttributeNS(a.paper.xlink,"href",m[1]);r[x](q);j=C.createElement("img");j.style.cssText="position:absolute;left:-9999em;top-9999em";j.onload=function(){u(r,{width:this.offsetWidth,height:this.offsetHeight});u(q,{width:this.offsetWidth,height:this.offsetHeight});C.body.removeChild(this);a.paper.safari()};C.body[x](j);j.src=m[1];a.paper.defs[x](r);d.style.fill="url(#"+
-r.id+")";u(d,{fill:"url(#"+r.id+")"});a.pattern=r;a.pattern&&Ja(a);break}m=l.getRGB(j);if(m.error){if(({circle:1,ellipse:1}[z](a.type)||D(j).charAt()!="r")&&pa(d,j,a.paper)){f.gradient=j;f.fill="none";break}}else{delete b.gradient;delete f.gradient;!l.is(f.opacity,"undefined")&&l.is(b.opacity,"undefined")&&u(d,{opacity:f.opacity});!l.is(f["fill-opacity"],"undefined")&&l.is(b["fill-opacity"],"undefined")&&u(d,{"fill-opacity":f["fill-opacity"]})}m[z]("o")&&u(d,{"fill-opacity":m.o/100});case "stroke":m=
-l.getRGB(j);d[W](i,m.hex);i=="stroke"&&m[z]("o")&&u(d,{"stroke-opacity":m.o/100});break;case "gradient":(({circle:1,ellipse:1})[z](a.type)||D(j).charAt()!="r")&&pa(d,j,a.paper);break;case "opacity":case "fill-opacity":if(f.gradient){if(m=C.getElementById(d.getAttribute(ca)[I](/^url\(#|\)$/g,A))){m=m.getElementsByTagName("stop");m[m[o]-1][W]("stop-opacity",j)}break}default:i=="font-size"&&(j=ha(j,10)+"px");m=i[I](/(\-.)/g,function(k){return sa.call(k.substring(1))});d.style[m]=j;d[W](i,j);break}}Db(a,
-b);if(h)a.rotate(h.join(N));else y(e)&&a.rotate(e,true)},eb=1.2,Db=function(a,b){if(!(a.type!="text"||!(b[z]("text")||b[z]("font")||b[z]("font-size")||b[z]("x")||b[z]("y")))){var c=a.attrs,d=a.node,f=d.firstChild?ha(C.defaultView.getComputedStyle(d.firstChild,A).getPropertyValue("font-size"),10):10;if(b[z]("text")){for(c.text=b.text;d.firstChild;)d.removeChild(d.firstChild);b=D(b.text)[G]("\n");for(var e=0,g=b[o];e<g;e++)if(b[e]){var h=u("tspan");e&&u(h,{dy:f*eb,x:c.x});h[x](C.createTextNode(b[e]));
-d[x](h)}}else{b=d.getElementsByTagName("tspan");e=0;for(g=b[o];e<g;e++)e&&u(b[e],{dy:f*eb,x:c.x})}u(d,{y:c.y});a=a.getBBox();(a=c.y-(a.y+a.height/2))&&isFinite(a)&&u(d,{y:c.y+a})}},s=function(a,b){this[0]=a;this.id=l._oid++;this.node=a;a.raphael=this;this.paper=b;this.attrs=this.attrs||{};this.transformations=[];this._={tx:0,ty:0,rt:{deg:0,cx:0,cy:0},sx:1,sy:1};!b.bottom&&(b.bottom=this);(this.prev=b.top)&&(b.top.next=this);b.top=this;this.next=null};s[p].rotate=function(a,b,c){if(this.removed)return this;
-if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][R](N);return this._.rt.deg}var d=this.getBBox();a=D(a)[G](V);if(a[o]-1){b=y(a[1]);c=y(a[2])}a=y(a[0]);if(b!=null)this._.rt.deg=a;else this._.rt.deg+=a;c==null&&(b=null);this._.rt.cx=b;this._.rt.cy=c;b=b==null?d.x+d.width/2:b;c=c==null?d.y+d.height/2:c;if(this._.rt.deg){this.transformations[0]=l.format("rotate({0} {1} {2})",this._.rt.deg,b,c);this.clip&&u(this.clip,{transform:l.format("rotate({0} {1} {2})",-this._.rt.deg,b,
-c)})}else{this.transformations[0]=A;this.clip&&u(this.clip,{transform:A})}u(this.node,{transform:this.transformations[R](N)});return this};s[p].hide=function(){!this.removed&&(this.node.style.display="none");return this};s[p].show=function(){!this.removed&&(this.node.style.display="");return this};s[p].remove=function(){if(!this.removed){ma(this,this.paper);this.node.parentNode.removeChild(this.node);for(var a in this)delete this[a];this.removed=true}};s[p].getBBox=function(){if(this.removed)return this;
-if(this.type=="path")return xa(this.attrs.path);if(this.node.style.display=="none"){this.show();var a=true}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}if(this.type=="text"){b={x:b.x,y:Infinity,width:0,height:0};for(var d=0,f=this.node.getNumberOfChars();d<f;d++){var e=this.node.getExtentOfChar(d);e.y<b.y&&(b.y=e.y);e.y+e.height-b.y>b.height&&(b.height=e.y+e.height-b.y);e.x+e.width-b.x>b.width&&(b.width=e.x+e.width-b.x)}}a&&this.hide();return b};s[p].attr=function(a,b){if(this.removed)return this;
-if(a==null){a={};for(var c in this.attrs)if(this.attrs[z](c))a[c]=this.attrs[c];this._.rt.deg&&(a.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(a.scale=this.scale());a.gradient&&a.fill=="none"&&(a.fill=a.gradient)&&delete a.gradient;return a}if(b==null&&l.is(a,ga)){if(a=="translation")return Aa.call(this);if(a=="rotation")return this.rotate();if(a=="scale")return this.scale();if(a==ca&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[a]}if(b==null&&
-l.is(a,U)){b={};c=0;for(var d=a.length;c<d;c++)b[a[c]]=this.attr(a[c]);return b}if(b!=null){c={};c[a]=b;ea(this,c)}else a!=null&&l.is(a,"object")&&ea(this,a);return this};s[p].toFront=function(){if(this.removed)return this;this.node.parentNode[x](this.node);var a=this.paper;a.top!=this&&Ya(this,a);return this};s[p].toBack=function(){if(this.removed)return this;if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);Za(this,this.paper)}return this};
-s[p].insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length].node;b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode[x](this.node);$a(this,a,this.paper);return this};s[p].insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;b.parentNode.insertBefore(this.node,b);ab(this,a,this.paper);return this};s[p].blur=function(a){var b=this;if(+a!==0){var c=u("filter"),d=u("feGaussianBlur");b.attrs.blur=a;c.id="r"+(l._id++)[O](36);u(d,{stdDeviation:+a||
-1.5});c.appendChild(d);b.paper.defs.appendChild(c);b._blur=c;u(b.node,{filter:"url(#"+c.id+")"})}else{if(b._blur){b._blur.parentNode.removeChild(b._blur);delete b._blur;delete b.attrs.blur}b.node.removeAttribute("filter")}};var fb=function(a,b,c,d){var f=u("circle");a.canvas&&a.canvas[x](f);a=new s(f,a);a.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"};a.type="circle";u(f,a.attrs);return a},gb=function(a,b,c,d,f,e){var g=u("rect");a.canvas&&a.canvas[x](g);a=new s(g,a);a.attrs={x:b,y:c,width:d,height:f,
-r:e||0,rx:e||0,ry:e||0,fill:"none",stroke:"#000"};a.type="rect";u(g,a.attrs);return a},hb=function(a,b,c,d,f){var e=u("ellipse");a.canvas&&a.canvas[x](e);a=new s(e,a);a.attrs={cx:b,cy:c,rx:d,ry:f,fill:"none",stroke:"#000"};a.type="ellipse";u(e,a.attrs);return a},ib=function(a,b,c,d,f,e){var g=u("image");u(g,{x:c,y:d,width:f,height:e,preserveAspectRatio:"none"});g.setAttributeNS(a.xlink,"href",b);a.canvas&&a.canvas[x](g);a=new s(g,a);a.attrs={x:c,y:d,width:f,height:e,src:b};a.type="image";return a},
-jb=function(a,b,c,d){var f=u("text");u(f,{x:b,y:c,"text-anchor":"middle"});a.canvas&&a.canvas[x](f);a=new s(f,a);a.attrs={x:b,y:c,"text-anchor":"middle",text:d,font:ta.font,stroke:"none",fill:"#000"};a.type="text";ea(a,a.attrs);return a},kb=function(a,b){this.width=a||this.width;this.height=b||this.height;this.canvas[W]("width",this.width);this.canvas[W]("height",this.height);return this},Ca=function(){var a=Xa[K](0,arguments),b=a&&a.container,c=a.x,d=a.y,f=a.width;a=a.height;if(!b)throw new Error("SVG container not found.");
-var e=u("svg");c=c||0;d=d||0;f=f||512;a=a||342;u(e,{xmlns:"http://www.w3.org/2000/svg",version:1.1,width:f,height:a});if(b==1){e.style.cssText="position:absolute;left:"+c+"px;top:"+d+"px";C.body[x](e)}else b.firstChild?b.insertBefore(e,b.firstChild):b[x](e);b=new H;b.width=f;b.height=a;b.canvas=e;Ia.call(b,b,l.fn);b.clear();return b};H[p].clear=function(){for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null;(this.desc=u("desc"))[x](C.createTextNode("Created with Rapha\u00ebl"));
-a[x](this.desc);a[x](this.defs=u("defs"))};H[p].remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=bb(a)}}if(l.vml){var lb={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},Eb=/([clmz]),?([^clmz]*)/gi,Fb=/-?[^,\s-]+/g,qa=1000+N+1000,na=10,ra={path:1,rect:1},Gb=function(a){var b=/[ahqstv]/ig,c=oa;D(a).match(b)&&(c=wa);b=/[clmz]/g;if(c==oa&&!D(a).match(b))return a=D(a)[I](Eb,function(i,j,m){var n=[],r=fa.call(j)=="m",q=lb[j];m[I](Fb,function(k){if(r&&
-n[o]==2){q+=n+lb[j=="m"?"l":"L"];n=[]}n[F](Q(k*na))});return q+n});b=c(a);var d;a=[];for(var f=0,e=b[o];f<e;f++){c=b[f];d=fa.call(b[f][0]);d=="z"&&(d="x");for(var g=1,h=c[o];g<h;g++)d+=Q(c[g]*na)+(g!=h-1?",":A);a[F](d)}return a[R](N)};l[O]=function(){return"Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\u00ebl "+this.version};db=function(a,b){var c=S("group");c.style.cssText="position:absolute;left:0;top:0;width:"+b.width+"px;height:"+b.height+"px";c.coordsize=
-b.coordsize;c.coordorigin=b.coordorigin;var d=S("shape"),f=d.style;f.width=b.width+"px";f.height=b.height+"px";d.coordsize=qa;d.coordorigin=b.coordorigin;c[x](d);d=new s(d,c,b);f={fill:"none",stroke:"#000"};a&&(f.path=a);d.isAbsolute=true;d.type="path";d.path=[];d.Path=A;ea(d,f);b.canvas[x](c);return d};ea=function(a,b){a.attrs=a.attrs||{};var c=a.node,d=a.attrs,f=c.style,e;e=(b.x!=d.x||b.y!=d.y||b.width!=d.width||b.height!=d.height||b.r!=d.r)&&a.type=="rect";var g=a;for(var h in b)if(b[z](h))d[h]=
-b[h];if(e){d.path=mb(d.x,d.y,d.width,d.height,d.r);a.X=d.x;a.Y=d.y;a.W=d.width;a.H=d.height}b.href&&(c.href=b.href);b.title&&(c.title=b.title);b.target&&(c.target=b.target);b.cursor&&(f.cursor=b.cursor);"blur"in b&&a.blur(b.blur);if(b.path&&a.type=="path"||e)c.path=Gb(d.path);b.rotation!=null&&a.rotate(b.rotation,true);if(b.translation){e=D(b.translation)[G](V);Aa.call(a,e[0],e[1]);if(a._.rt.cx!=null){a._.rt.cx+=+e[0];a._.rt.cy+=+e[1];a.setBox(a.attrs,e[0],e[1])}}if(b.scale){e=D(b.scale)[G](V);a.scale(+e[0]||
-1,+e[1]||+e[0]||1,+e[2]||null,+e[3]||null)}if("clip-rect"in b){e=D(b["clip-rect"])[G](V);if(e[o]==4){e[2]=+e[2]+ +e[0];e[3]=+e[3]+ +e[1];h=c.clipRect||C.createElement("div");var i=h.style,j=c.parentNode;i.clip=l.format("rect({1}px {2}px {3}px {0}px)",e);if(!c.clipRect){i.position="absolute";i.top=0;i.left=0;i.width=a.paper.width+"px";i.height=a.paper.height+"px";j.parentNode.insertBefore(h,j);h[x](j);c.clipRect=h}}if(!b["clip-rect"])c.clipRect&&(c.clipRect.style.clip=A)}if(a.type=="image"&&b.src)c.src=
-b.src;if(a.type=="image"&&b.opacity){c.filterOpacity=Fa+".Alpha(opacity="+b.opacity*100+")";f.filter=(c.filterMatrix||A)+(c.filterOpacity||A)}b.font&&(f.font=b.font);b["font-family"]&&(f.fontFamily='"'+b["font-family"][G](",")[0][I](/^['"]+|['"]+$/g,A)+'"');b["font-size"]&&(f.fontSize=b["font-size"]);b["font-weight"]&&(f.fontWeight=b["font-weight"]);b["font-style"]&&(f.fontStyle=b["font-style"]);if(b.opacity!=null||b["stroke-width"]!=null||b.fill!=null||b.stroke!=null||b["stroke-width"]!=null||b["stroke-opacity"]!=
-null||b["fill-opacity"]!=null||b["stroke-dasharray"]!=null||b["stroke-miterlimit"]!=null||b["stroke-linejoin"]!=null||b["stroke-linecap"]!=null){c=a.shape||c;f=c.getElementsByTagName(ca)&&c.getElementsByTagName(ca)[0];e=false;!f&&(e=f=S(ca));if("fill-opacity"in b||"opacity"in b){a=((+d["fill-opacity"]+1||2)-1)*((+d.opacity+1||2)-1)*((+l.getRGB(b.fill).o+1||2)-1);a<0&&(a=0);a>1&&(a=1);f.opacity=a}b.fill&&(f.on=true);if(f.on==null||b.fill=="none")f.on=false;if(f.on&&b.fill)if(a=b.fill.match(Sa)){f.src=
-a[1];f.type="tile"}else{f.color=l.getRGB(b.fill).hex;f.src=A;f.type="solid";if(l.getRGB(b.fill).error&&(g.type in{circle:1,ellipse:1}||D(b.fill).charAt()!="r")&&pa(g,b.fill)){d.fill="none";d.gradient=b.fill}}e&&c[x](f);f=c.getElementsByTagName("stroke")&&c.getElementsByTagName("stroke")[0];e=false;!f&&(e=f=S("stroke"));if(b.stroke&&b.stroke!="none"||b["stroke-width"]||b["stroke-opacity"]!=null||b["stroke-dasharray"]||b["stroke-miterlimit"]||b["stroke-linejoin"]||b["stroke-linecap"])f.on=true;(b.stroke==
-"none"||f.on==null||b.stroke==0||b["stroke-width"]==0)&&(f.on=false);a=l.getRGB(b.stroke);f.on&&b.stroke&&(f.color=a.hex);a=((+d["stroke-opacity"]+1||2)-1)*((+d.opacity+1||2)-1)*((+a.o+1||2)-1);h=(y(b["stroke-width"])||1)*0.75;a<0&&(a=0);a>1&&(a=1);b["stroke-width"]==null&&(h=d["stroke-width"]);b["stroke-width"]&&(f.weight=h);h&&h<1&&(a*=h)&&(f.weight=1);f.opacity=a;b["stroke-linejoin"]&&(f.joinstyle=b["stroke-linejoin"]||"miter");f.miterlimit=b["stroke-miterlimit"]||8;b["stroke-linecap"]&&(f.endcap=
-b["stroke-linecap"]=="butt"?"flat":b["stroke-linecap"]=="square"?"square":"round");if(b["stroke-dasharray"]){a={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};f.dashstyle=a[z](b["stroke-dasharray"])?a[b["stroke-dasharray"]]:A}e&&c[x](f)}if(g.type=="text"){f=g.paper.span.style;d.font&&(f.font=d.font);d["font-family"]&&(f.fontFamily=d["font-family"]);d["font-size"]&&(f.fontSize=
-d["font-size"]);d["font-weight"]&&(f.fontWeight=d["font-weight"]);d["font-style"]&&(f.fontStyle=d["font-style"]);g.node.string&&(g.paper.span.innerHTML=D(g.node.string)[I](/</g,"<")[I](/&/g,"&")[I](/\n/g,"<br>"));g.W=d.w=g.paper.span.offsetWidth;g.H=d.h=g.paper.span.offsetHeight;g.X=d.x;g.Y=d.y+Q(g.H/2);switch(d["text-anchor"]){case "start":g.node.style["v-text-align"]="left";g.bbx=Q(g.W/2);break;case "end":g.node.style["v-text-align"]="right";g.bbx=-Q(g.W/2);break;default:g.node.style["v-text-align"]=
-"center";break}}};pa=function(a,b){a.attrs=a.attrs||{};var c="linear",d=".5 .5";a.attrs.gradient=b;b=D(b)[I](cb,function(i,j,m){c="radial";if(j&&m){j=y(j);m=y(m);E(j-0.5,2)+E(m-0.5,2)>0.25&&(m=v.sqrt(0.25-E(j-0.5,2))*((m>0.5)*2-1)+0.5);d=j+N+m}return A});b=b[G](/\s*\-\s*/);if(c=="linear"){var f=b.shift();f=-y(f);if(isNaN(f))return null}var e=Wa(b);if(!e)return null;a=a.shape||a.node;b=a.getElementsByTagName(ca)[0]||S(ca);!b.parentNode&&a.appendChild(b);if(e[o]){b.on=true;b.method="none";b.color=e[0].color;
-b.color2=e[e[o]-1].color;a=[];for(var g=0,h=e[o];g<h;g++)e[g].offset&&a[F](e[g].offset+N+e[g].color);b.colors&&(b.colors.value=a[o]?a[R]():"0% "+b.color);if(c=="radial"){b.type="gradientradial";b.focus="100%";b.focussize=d;b.focusposition=d}else{b.type="gradient";b.angle=(270-f)%360}}return 1};s=function(a,b,c){this[0]=a;this.id=l._oid++;this.node=a;a.raphael=this;this.Y=this.X=0;this.attrs={};this.Group=b;this.paper=c;this._={tx:0,ty:0,rt:{deg:0},sx:1,sy:1};!c.bottom&&(c.bottom=this);(this.prev=
-c.top)&&(c.top.next=this);c.top=this;this.next=null};s[p].rotate=function(a,b,c){if(this.removed)return this;if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][R](N);return this._.rt.deg}a=D(a)[G](V);if(a[o]-1){b=y(a[1]);c=y(a[2])}a=y(a[0]);if(b!=null)this._.rt.deg=a;else this._.rt.deg+=a;c==null&&(b=null);this._.rt.cx=b;this._.rt.cy=c;this.setBox(this.attrs,b,c);this.Group.style.rotation=this._.rt.deg;return this};s[p].setBox=function(a,b,c){if(this.removed)return this;var d=
-this.Group.style,f=this.shape&&this.shape.style||this.node.style;a=a||{};for(var e in a)if(a[z](e))this.attrs[e]=a[e];b=b||this._.rt.cx;c=c||this._.rt.cy;var g=this.attrs,h;switch(this.type){case "circle":a=g.cx-g.r;e=g.cy-g.r;h=g=g.r*2;break;case "ellipse":a=g.cx-g.rx;e=g.cy-g.ry;h=g.rx*2;g=g.ry*2;break;case "image":a=+g.x;e=+g.y;h=g.width||0;g=g.height||0;break;case "text":this.textpath.v=["m",Q(g.x),", ",Q(g.y-2),"l",Q(g.x)+1,", ",Q(g.y-2)][R](A);a=g.x-Q(this.W/2);e=g.y-this.H/2;h=this.W;g=this.H;
-break;case "rect":case "path":if(this.attrs.path){g=xa(this.attrs.path);a=g.x;e=g.y;h=g.width;g=g.height}else{e=a=0;h=this.paper.width;g=this.paper.height}break;default:e=a=0;h=this.paper.width;g=this.paper.height;break}b=b==null?a+h/2:b;c=c==null?e+g/2:c;b=b-this.paper.width/2;c=c-this.paper.height/2;var i;d.left!=(i=b+"px")&&(d.left=i);d.top!=(i=c+"px")&&(d.top=i);this.X=ra[z](this.type)?-b:a;this.Y=ra[z](this.type)?-c:e;this.W=h;this.H=g;if(ra[z](this.type)){f.left!=(i=-b*na+"px")&&(f.left=i);
-f.top!=(i=-c*na+"px")&&(f.top=i)}else if(this.type=="text"){f.left!=(i=-b+"px")&&(f.left=i);f.top!=(i=-c+"px")&&(f.top=i)}else{d.width!=(i=this.paper.width+"px")&&(d.width=i);d.height!=(i=this.paper.height+"px")&&(d.height=i);f.left!=(i=a-b+"px")&&(f.left=i);f.top!=(i=e-c+"px")&&(f.top=i);f.width!=(i=h+"px")&&(f.width=i);f.height!=(i=g+"px")&&(f.height=i)}};s[p].hide=function(){!this.removed&&(this.Group.style.display="none");return this};s[p].show=function(){!this.removed&&(this.Group.style.display=
-"block");return this};s[p].getBBox=function(){if(this.removed)return this;if(ra[z](this.type))return xa(this.attrs.path);return{x:this.X+(this.bbx||0),y:this.Y,width:this.W,height:this.H}};s[p].remove=function(){if(!this.removed){ma(this,this.paper);this.node.parentNode.removeChild(this.node);this.Group.parentNode.removeChild(this.Group);this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)delete this[a];this.removed=true}};s[p].attr=function(a,b){if(this.removed)return this;
-if(a==null){a={};for(var c in this.attrs)if(this.attrs[z](c))a[c]=this.attrs[c];this._.rt.deg&&(a.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(a.scale=this.scale());a.gradient&&a.fill=="none"&&(a.fill=a.gradient)&&delete a.gradient;return a}if(b==null&&l.is(a,ga)){if(a=="translation")return Aa.call(this);if(a=="rotation")return this.rotate();if(a=="scale")return this.scale();if(a==ca&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[a]}if(this.attrs&&
-b==null&&l.is(a,U)){var d={};c=0;for(b=a[o];c<b;c++)d[a[c]]=this.attr(a[c]);return d}if(b!=null){d={};d[a]=b}b==null&&l.is(a,"object")&&(d=a);if(d){if(d.text&&this.type=="text")this.node.string=d.text;ea(this,d);if(d.gradient&&({circle:1,ellipse:1}[z](this.type)||D(d.gradient).charAt()!="r"))pa(this,d.gradient);(!ra[z](this.type)||this._.rt.deg)&&this.setBox(this.attrs)}return this};s[p].toFront=function(){!this.removed&&this.Group.parentNode[x](this.Group);this.paper.top!=this&&Ya(this,this.paper);
-return this};s[p].toBack=function(){if(this.removed)return this;if(this.Group.parentNode.firstChild!=this.Group){this.Group.parentNode.insertBefore(this.Group,this.Group.parentNode.firstChild);Za(this,this.paper)}return this};s[p].insertAfter=function(a){if(this.removed)return this;if(a.constructor==X)a=a[a.length];a.Group.nextSibling?a.Group.parentNode.insertBefore(this.Group,a.Group.nextSibling):a.Group.parentNode[x](this.Group);$a(this,a,this.paper);return this};s[p].insertBefore=function(a){if(this.removed)return this;
-if(a.constructor==X)a=a[0];a.Group.parentNode.insertBefore(this.Group,a.Group);ab(this,a,this.paper);return this};var Hb=/ progid:\S+Blur\([^\)]+\)/g;s[p].blur=function(a){var b=this.node.runtimeStyle,c=b.filter;c=c.replace(Hb,A);if(+a!==0){this.attrs.blur=a;b.filter=c+N+Fa+".Blur(pixelradius="+(+a||1.5)+")";b.margin=l.format("-{0}px 0 0 -{0}px",Q(+a||1.5))}else{b.filter=c;b.margin=0;delete this.attrs.blur}};fb=function(a,b,c,d){var f=S("group"),e=S("oval");f.style.cssText="position:absolute;left:0;top:0;width:"+
-a.width+"px;height:"+a.height+"px";f.coordsize=qa;f.coordorigin=a.coordorigin;f[x](e);e=new s(e,f,a);e.type="circle";ea(e,{stroke:"#000",fill:"none"});e.attrs.cx=b;e.attrs.cy=c;e.attrs.r=d;e.setBox({x:b-d,y:c-d,width:d*2,height:d*2});a.canvas[x](f);return e};function mb(a,b,c,d,f){return f?l.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z",a+f,b,c-f*2,f,-f,d-f*2,f*2-c,f*2-d):l.format("M{0},{1}l{2},0,0,{3},{4},0z",a,
-b,c,d,-c)}gb=function(a,b,c,d,f,e){var g=mb(b,c,d,f,e);a=a.path(g);var h=a.attrs;a.X=h.x=b;a.Y=h.y=c;a.W=h.width=d;a.H=h.height=f;h.r=e;h.path=g;a.type="rect";return a};hb=function(a,b,c,d,f){var e=S("group"),g=S("oval");e.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";e.coordsize=qa;e.coordorigin=a.coordorigin;e[x](g);g=new s(g,e,a);g.type="ellipse";ea(g,{stroke:"#000"});g.attrs.cx=b;g.attrs.cy=c;g.attrs.rx=d;g.attrs.ry=f;g.setBox({x:b-d,y:c-f,width:d*2,
-height:f*2});a.canvas[x](e);return g};ib=function(a,b,c,d,f,e){var g=S("group"),h=S("image");g.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";g.coordsize=qa;g.coordorigin=a.coordorigin;h.src=b;g[x](h);h=new s(h,g,a);h.type="image";h.attrs.src=b;h.attrs.x=c;h.attrs.y=d;h.attrs.w=f;h.attrs.h=e;h.setBox({x:c,y:d,width:f,height:e});a.canvas[x](g);return h};jb=function(a,b,c,d){var f=S("group"),e=S("shape"),g=e.style,h=S("path"),i=S("textpath");f.style.cssText=
-"position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";f.coordsize=qa;f.coordorigin=a.coordorigin;h.v=l.format("m{0},{1}l{2},{1}",Q(b*10),Q(c*10),Q(b*10)+1);h.textpathok=true;g.width=a.width;g.height=a.height;i.string=D(d);i.on=true;e[x](i);e[x](h);f[x](e);g=new s(i,f,a);g.shape=e;g.textpath=h;g.type="text";g.attrs.text=d;g.attrs.x=b;g.attrs.y=c;g.attrs.w=1;g.attrs.h=1;ea(g,{font:ta.font,stroke:"none",fill:"#000"});g.setBox();a.canvas[x](f);return g};kb=function(a,b){var c=this.canvas.style;
-a==+a&&(a+="px");b==+b&&(b+="px");c.width=a;c.height=b;c.clip="rect(0 "+a+" "+b+" 0)";return this};var S;C.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!C.namespaces.rvml&&C.namespaces.add("rvml","urn:schemas-microsoft-com:vml");S=function(a){return C.createElement("<rvml:"+a+' class="rvml">')}}catch(Pb){S=function(a){return C.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}Ca=function(){var a=Xa[K](0,arguments),b=a.container,c=a.height,d=a.width,
-f=a.x;a=a.y;if(!b)throw new Error("VML container not found.");var e=new H,g=e.canvas=C.createElement("div"),h=g.style;f=f||0;a=a||0;d=d||512;c=c||342;d==+d&&(d+="px");c==+c&&(c+="px");e.width=1000;e.height=1000;e.coordsize=na*1000+N+na*1000;e.coordorigin="0 0";e.span=C.createElement("span");e.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";g[x](e.span);h.cssText=l.format("width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",
-d,c);if(b==1){C.body[x](g);h.left=f+"px";h.top=a+"px";h.position="absolute"}else b.firstChild?b.insertBefore(g,b.firstChild):b[x](g);Ia.call(e,e,l.fn);return e};H[p].clear=function(){this.canvas.innerHTML=A;this.span=C.createElement("span");this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";this.canvas[x](this.span);this.bottom=this.top=null};H[p].remove=function(){this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=
-bb(a);return true}}H[p].safari=navigator.vendor=="Apple Computer, Inc."&&(navigator.userAgent.match(/Version\/(.*?)\s/)[1]<4||aa.navigator.platform.slice(0,2)=="iP")?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});aa.setTimeout(function(){a.remove()})}:function(){};function Ib(){this.returnValue=false}function Jb(){return this.originalEvent.preventDefault()}function Kb(){this.cancelBubble=true}function Lb(){return this.originalEvent.stopPropagation()}var Mb=
-function(){if(C.addEventListener)return function(a,b,c,d){var f=Da&&Ea[b]?Ea[b]:b;function e(g){if(Da&&Ea[z](b))for(var h=0,i=g.targetTouches&&g.targetTouches.length;h<i;h++)if(g.targetTouches[h].target==a){i=g;g=g.targetTouches[h];g.originalEvent=i;g.preventDefault=Jb;g.stopPropagation=Lb;break}return c.call(d,g)}a.addEventListener(f,e,false);return function(){a.removeEventListener(f,e,false);return true}};else if(C.attachEvent)return function(a,b,c,d){function f(g){g=g||aa.event;g.preventDefault=
-g.preventDefault||Ib;g.stopPropagation=g.stopPropagation||Kb;return c.call(d,g)}a.attachEvent("on"+b,f);function e(){a.detachEvent("on"+b,f);return true}return e}}(),$=[];function Ka(a){for(var b=a.clientX,c=a.clientY,d,f=$.length;f--;){d=$[f];if(Da)for(var e=a.touches.length,g;e--;){g=a.touches[e];if(g.identifier==d.el._drag.id){b=g.clientX;c=g.clientY;(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();d.move&&d.move.call(d.el,b-d.el._drag.x,c-d.el._drag.y,b,c)}}
-function La(){l.unmousemove(Ka).unmouseup(La);for(var a=$.length,b;a--;){b=$[a];b.el._drag={};b.end&&b.end.call(b.el)}$=[]}for(da=Ra[o];da--;)(function(a){l[a]=s[p][a]=function(b){if(l.is(b,"function")){this.events=this.events||[];this.events.push({name:a,f:b,unbind:Mb(this.shape||this.node||C,a,b,this)})}return this};l["un"+a]=s[p]["un"+a]=function(b){for(var c=this.events,d=c[o];d--;)if(c[d].name==a&&c[d].f==b){c[d].unbind();c.splice(d,1);!c.length&&delete this.events;return this}return this}})(Ra[da]);
-s[p].hover=function(a,b){return this.mouseover(a).mouseout(b)};s[p].unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};s[p].drag=function(a,b,c){this._drag={};this.mousedown(function(d){(d.originalEvent||d).preventDefault();this._drag.x=d.clientX;this._drag.y=d.clientY;this._drag.id=d.identifier;b&&b.call(this,d.clientX,d.clientY);!$.length&&l.mousemove(Ka).mouseup(La);$.push({el:this,move:a,end:c})});return this};s[p].undrag=function(a,b,c){for(b=$.length;b--;){$[b].el==this&&$[b].move==
-a&&$[b].end==c&&$.splice(b,1);!$.length&&l.unmousemove(Ka).unmouseup(La)}};H[p].circle=function(a,b,c){return fb(this,a||0,b||0,c||0)};H[p].rect=function(a,b,c,d,f){return gb(this,a||0,b||0,c||0,d||0,f||0)};H[p].ellipse=function(a,b,c,d){return hb(this,a||0,b||0,c||0,d||0)};H[p].path=function(a){a&&!l.is(a,ga)&&!l.is(a[0],U)&&(a+=A);return db(l.format[K](l,arguments),this)};H[p].image=function(a,b,c,d,f){return ib(this,a||"about:blank",b||0,c||0,d||0,f||0)};H[p].text=function(a,b,c){return jb(this,
-a||0,b||0,c||A)};H[p].set=function(a){arguments[o]>1&&(a=Array[p].splice.call(arguments,0,arguments[o]));return new X(a)};H[p].setSize=kb;H[p].top=H[p].bottom=null;H[p].raphael=l;function nb(){return this.x+N+this.y}s[p].resetScale=function(){if(this.removed)return this;this._.sx=1;this._.sy=1;this.attrs.scale="1 1"};s[p].scale=function(a,b,c,d){if(this.removed)return this;if(a==null&&b==null)return{x:this._.sx,y:this._.sy,toString:nb};b=b||a;!+b&&(b=a);var f,e,g=this.attrs;if(a!=0){var h=this.getBBox(),
-i=h.x+h.width/2,j=h.y+h.height/2;f=a/this._.sx;e=b/this._.sy;c=+c||c==0?c:i;d=+d||d==0?d:j;h=~~(a/v.abs(a));var m=~~(b/v.abs(b)),n=this.node.style,r=c+(i-c)*f;j=d+(j-d)*e;switch(this.type){case "rect":case "image":var q=g.width*h*f,k=g.height*m*e;this.attr({height:k,r:g.r*ba(h*f,m*e),width:q,x:r-q/2,y:j-k/2});break;case "circle":case "ellipse":this.attr({rx:g.rx*h*f,ry:g.ry*m*e,r:g.r*ba(h*f,m*e),cx:r,cy:j});break;case "text":this.attr({x:r,y:j});break;case "path":i=Ha(g.path);for(var t=true,L=0,B=
-i[o];L<B;L++){var w=i[L],J=sa.call(w[0]);if(!(J=="M"&&t)){t=false;if(J=="A"){w[i[L][o]-2]*=f;w[i[L][o]-1]*=e;w[1]*=h*f;w[2]*=m*e;w[5]=+!(h+m?!+w[5]:+w[5])}else if(J=="H"){J=1;for(var ia=w[o];J<ia;J++)w[J]*=f}else if(J=="V"){J=1;for(ia=w[o];J<ia;J++)w[J]*=e}else{J=1;for(ia=w[o];J<ia;J++)w[J]*=J%2?f:e}}}e=xa(i);f=r-e.x-e.width/2;e=j-e.y-e.height/2;i[0][1]+=f;i[0][2]+=e;this.attr({path:i});break}if(this.type in{text:1,image:1}&&(h!=1||m!=1))if(this.transformations){this.transformations[2]="scale("[M](h,
-",",m,")");this.node[W]("transform",this.transformations[R](N));f=h==-1?-g.x-(q||0):g.x;e=m==-1?-g.y-(k||0):g.y;this.attr({x:f,y:e});g.fx=h-1;g.fy=m-1}else{this.node.filterMatrix=Fa+".Matrix(M11="[M](h,", M12=0, M21=0, M22=",m,", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");n.filter=(this.node.filterMatrix||A)+(this.node.filterOpacity||A)}else if(this.transformations){this.transformations[2]=A;this.node[W]("transform",this.transformations[R](N));g.fx=0;g.fy=0}else{this.node.filterMatrix=
-A;n.filter=(this.node.filterMatrix||A)+(this.node.filterOpacity||A)}g.scale=[a,b,c,d][R](N);this._.sx=a;this._.sy=b}return this};s[p].clone=function(){if(this.removed)return null;var a=this.attr();delete a.scale;delete a.translation;return this.paper[this.type]().attr(a)};var ob=Z(function(a,b,c,d,f,e,g,h,i){for(var j=0,m,n=0;n<1.01;n+=0.01){var r=la(a,b,c,d,f,e,g,h,n);n&&(j+=E(E(m.x-r.x,2)+E(m.y-r.y,2),0.5));if(j>=i)return r;m=r}});function Ma(a,b){return function(c,d,f){c=wa(c);for(var e,g,h,i,
-j="",m={},n=0,r=0,q=c.length;r<q;r++){h=c[r];if(h[0]=="M"){e=+h[1];g=+h[2]}else{i=Nb(e,g,h[1],h[2],h[3],h[4],h[5],h[6]);if(n+i>d){if(b&&!m.start){e=ob(e,g,h[1],h[2],h[3],h[4],h[5],h[6],d-n);j+=["C",e.start.x,e.start.y,e.m.x,e.m.y,e.x,e.y];if(f)return j;m.start=j;j=["M",e.x,e.y+"C",e.n.x,e.n.y,e.end.x,e.end.y,h[5],h[6]][R]();n+=i;e=+h[5];g=+h[6];continue}if(!a&&!b){e=ob(e,g,h[1],h[2],h[3],h[4],h[5],h[6],d-n);return{x:e.x,y:e.y,alpha:e.alpha}}}n+=i;e=+h[5];g=+h[6]}j+=h}m.end=j;e=a?n:b?m:l.findDotsAtSegment(e,
-g,h[1],h[2],h[3],h[4],h[5],h[6],1);e.alpha&&(e={x:e.x,y:e.y,alpha:e.alpha});return e}}var Nb=Z(function(a,b,c,d,f,e,g,h){for(var i={x:0,y:0},j=0,m=0;m<1.01;m+=0.01){var n=la(a,b,c,d,f,e,g,h,m);m&&(j+=E(E(i.x-n.x,2)+E(i.y-n.y,2),0.5));i=n}return j}),pb=Ma(1),Ba=Ma(),Na=Ma(0,1);s[p].getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return pb(this.attrs.path)}};s[p].getPointAtLength=function(a){if(this.type=="path"){if(this.node.getPointAtLength)return this.node.getPointAtLength(a);
-return Ba(this.attrs.path,a)}};s[p].getSubpath=function(a,b){if(this.type=="path"){if(v.abs(this.getTotalLength()-b)<1.0E-6)return Na(this.attrs.path,a).end;b=Na(this.attrs.path,b,1);return a?Na(b,a).end:b}};l.easing_formulas={linear:function(a){return a},"<":function(a){return E(a,3)},">":function(a){return E(a-1,3)+1},"<>":function(a){a*=2;if(a<1)return E(a,3)/2;a-=2;return(E(a,3)+2)/2},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+
-1)*a+b)+1},elastic:function(a){if(a==0||a==1)return a;var b=0.3,c=b/4;return E(2,-10*a)*v.sin((a-c)*2*v.PI/b)+1},bounce:function(a){var b=7.5625,c=2.75;if(a<1/c)a=b*a*a;else if(a<2/c){a-=1.5/c;a=b*a*a+0.75}else if(a<2.5/c){a-=2.25/c;a=b*a*a+0.9375}else{a-=2.625/c;a=b*a*a+0.984375}return a}};var T={length:0};function qb(){var a=+new Date;for(var b in T)if(b!="length"&&T[z](b)){var c=T[b];if(c.stop||c.el.removed){delete T[b];T[o]--}else{var d=a-c.start,f=c.ms,e=c.easing,g=c.from,h=c.diff,i=c.to,j=c.t,
-m=c.prev||0,n=c.el,r=c.callback,q={},k;if(d<f){r=l.easing_formulas[e]?l.easing_formulas[e](d/f):d/f;for(var t in g)if(g[z](t)){switch(Ga[t]){case "along":k=r*f*h[t];i.back&&(k=i.len-k);e=Ba(i[t],k);n.translate(h.sx-h.x||0,h.sy-h.y||0);h.x=e.x;h.y=e.y;n.translate(e.x-h.sx,e.y-h.sy);i.rot&&n.rotate(h.r+e.alpha,e.x,e.y);break;case P:k=+g[t]+r*f*h[t];break;case "colour":k="rgb("+[Oa(Q(g[t].r+r*f*h[t].r)),Oa(Q(g[t].g+r*f*h[t].g)),Oa(Q(g[t].b+r*f*h[t].b))][R](",")+")";break;case "path":k=[];e=0;for(var L=
-g[t][o];e<L;e++){k[e]=[g[t][e][0]];for(var B=1,w=g[t][e][o];B<w;B++)k[e][B]=+g[t][e][B]+r*f*h[t][e][B];k[e]=k[e][R](N)}k=k[R](N);break;case "csv":switch(t){case "translation":k=h[t][0]*(d-m);e=h[t][1]*(d-m);j.x+=k;j.y+=e;k=k+N+e;break;case "rotation":k=+g[t][0]+r*f*h[t][0];g[t][1]&&(k+=","+g[t][1]+","+g[t][2]);break;case "scale":k=[+g[t][0]+r*f*h[t][0],+g[t][1]+r*f*h[t][1],2 in i[t]?i[t][2]:A,3 in i[t]?i[t][3]:A][R](N);break;case "clip-rect":k=[];for(e=4;e--;)k[e]=+g[t][e]+r*f*h[t][e];break}break}q[t]=
-k}n.attr(q);n._run&&n._run.call(n)}else{if(i.along){e=Ba(i.along,i.len*!i.back);n.translate(h.sx-(h.x||0)+e.x-h.sx,h.sy-(h.y||0)+e.y-h.sy);i.rot&&n.rotate(h.r+e.alpha,e.x,e.y)}(j.x||j.y)&&n.translate(-j.x,-j.y);i.scale&&(i.scale+=A);n.attr(i);delete T[b];T[o]--;n.in_animation=null;l.is(r,"function")&&r.call(n)}c.prev=d}}l.svg&&n&&n.paper&&n.paper.safari();T[o]&&aa.setTimeout(qb)}function Oa(a){return Y(ba(a,255),0)}function Aa(a,b){if(a==null)return{x:this._.tx,y:this._.ty,toString:nb};this._.tx+=
-+a;this._.ty+=+b;switch(this.type){case "circle":case "ellipse":this.attr({cx:+a+this.attrs.cx,cy:+b+this.attrs.cy});break;case "rect":case "image":case "text":this.attr({x:+a+this.attrs.x,y:+b+this.attrs.y});break;case "path":var c=Ha(this.attrs.path);c[0][1]+=+a;c[0][2]+=+b;this.attr({path:c});break}return this}s[p].animateWith=function(a,b,c,d,f){T[a.id]&&(b.start=T[a.id].start);return this.animate(b,c,d,f)};s[p].animateAlong=rb();s[p].animateAlongBack=rb(1);function rb(a){return function(b,c,
-d,f){var e={back:a};l.is(d,"function")?(f=d):(e.rot=d);b&&b.constructor==s&&(b=b.attrs.path);b&&(e.along=b);return this.animate(e,c,f)}}s[p].onAnimation=function(a){this._run=a||0;return this};s[p].animate=function(a,b,c,d){if(l.is(c,"function")||!c)d=c||null;var f={},e={},g={};for(var h in a)if(a[z](h))if(Ga[z](h)){f[h]=this.attr(h);f[h]==null&&(f[h]=ta[h]);e[h]=a[h];switch(Ga[h]){case "along":var i=pb(a[h]),j=Ba(a[h],i*!!a.back),m=this.getBBox();g[h]=i/b;g.tx=m.x;g.ty=m.y;g.sx=j.x;g.sy=j.y;e.rot=
-a.rot;e.back=a.back;e.len=i;a.rot&&(g.r=y(this.rotate())||0);break;case P:g[h]=(e[h]-f[h])/b;break;case "colour":f[h]=l.getRGB(f[h]);i=l.getRGB(e[h]);g[h]={r:(i.r-f[h].r)/b,g:(i.g-f[h].g)/b,b:(i.b-f[h].b)/b};break;case "path":i=wa(f[h],e[h]);f[h]=i[0];j=i[1];g[h]=[];i=0;for(m=f[h][o];i<m;i++){g[h][i]=[0];for(var n=1,r=f[h][i][o];n<r;n++)g[h][i][n]=(j[i][n]-f[h][i][n])/b}break;case "csv":j=D(a[h])[G](V);i=D(f[h])[G](V);switch(h){case "translation":f[h]=[0,0];g[h]=[j[0]/b,j[1]/b];break;case "rotation":f[h]=
-i[1]==j[1]&&i[2]==j[2]?i:[0,j[1],j[2]];g[h]=[(j[0]-f[h][0])/b,0,0];break;case "scale":a[h]=j;f[h]=D(f[h])[G](V);g[h]=[(j[0]-f[h][0])/b,(j[1]-f[h][1])/b,0,0];break;case "clip-rect":f[h]=D(f[h])[G](V);g[h]=[];for(i=4;i--;)g[h][i]=(j[i]-f[h][i])/b;break}e[h]=j}}this.stop();this.in_animation=1;T[this.id]={start:a.start||+new Date,ms:b,easing:c,from:f,diff:g,to:e,el:this,callback:d,t:{x:0,y:0}};++T[o]==1&&qb();return this};s[p].stop=function(){T[this.id]&&T[o]--;delete T[this.id];return this};s[p].translate=
-function(a,b){return this.attr({translation:a+" "+b})};s[p][O]=function(){return"Rapha\u00ebl\u2019s object"};l.ae=T;function X(a){this.items=[];this[o]=0;this.type="set";if(a)for(var b=0,c=a[o];b<c;b++)if(a[b]&&(a[b].constructor==s||a[b].constructor==X)){this[this.items[o]]=this.items[this.items[o]]=a[b];this[o]++}}X[p][F]=function(){for(var a,b,c=0,d=arguments[o];c<d;c++)if((a=arguments[c])&&(a.constructor==s||a.constructor==X)){b=this.items[o];this[b]=this.items[b]=a;this[o]++}return this};X[p].pop=
-function(){delete this[this[o]--];return this.items.pop()};for(var Pa in s[p])if(s[p][z](Pa))X[p][Pa]=function(a){return function(){for(var b=0,c=this.items[o];b<c;b++)this.items[b][a][K](this.items[b],arguments);return this}}(Pa);X[p].attr=function(a,b){if(a&&l.is(a,U)&&l.is(a[0],"object")){b=0;for(var c=a[o];b<c;b++)this.items[b].attr(a[b])}else{c=0;for(var d=this.items[o];c<d;c++)this.items[c].attr(a,b)}return this};X[p].animate=function(a,b,c,d){(l.is(c,"function")||!c)&&(d=c||null);var f=this.items[o],
-e=f,g,h=this,i;d&&(i=function(){!--f&&d.call(h)});c=l.is(c,ga)?c:i;for(g=this.items[--e].animate(a,b,c,i);e--;)this.items[e].animateWith(g,a,b,c,i);return this};X[p].insertAfter=function(a){for(var b=this.items[o];b--;)this.items[b].insertAfter(a);return this};X[p].getBBox=function(){for(var a=[],b=[],c=[],d=[],f=this.items[o];f--;){var e=this.items[f].getBBox();a[F](e.x);b[F](e.y);c[F](e.x+e.width);d[F](e.y+e.height)}a=ba[K](0,a);b=ba[K](0,b);return{x:a,y:b,width:Y[K](0,c)-a,height:Y[K](0,d)-b}};
-X[p].clone=function(a){a=new X;for(var b=0,c=this.items[o];b<c;b++)a[F](this.items[b].clone());return a};l.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)if(a.face[z](d))b.face[d]=a.face[d];if(this.fonts[c])this.fonts[c][F](b);else this.fonts[c]=[b];if(!a.svg){b.face["units-per-em"]=ha(a.face["units-per-em"],10);for(var f in a.glyphs)if(a.glyphs[z](f)){c=a.glyphs[f];b.glyphs[f]={w:c.w,k:{},d:c.d&&"M"+
-c.d[I](/[mlcxtrv]/g,function(g){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[g]||"M"})+"z"};if(c.k)for(var e in c.k)if(c[z](e))b.glyphs[f].k[e]=c.k[e]}}return a};H[p].getFont=function(a,b,c,d){d=d||"normal";c=c||"normal";b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400;if(l.fonts){var f=l.fonts[a];if(!f){a=new RegExp("(^|\\s)"+a[I](/[^\w\d\s+!~.:_-]/g,A)+"(\\s|$)","i");for(var e in l.fonts)if(l.fonts[z](e))if(a.test(e)){f=l.fonts[e];break}}var g;if(f){e=0;for(a=f[o];e<a;e++){g=f[e];if(g.face["font-weight"]==
-b&&(g.face["font-style"]==c||!g.face["font-style"])&&g.face["font-stretch"]==d)break}}return g}};H[p].print=function(a,b,c,d,f,e){e=e||"middle";var g=this.set(),h=D(c)[G](A),i=0;l.is(d,c)&&(d=this.getFont(d));if(d){c=(f||16)/d.face["units-per-em"];var j=d.face.bbox.split(V);f=+j[0];e=+j[1]+(e=="baseline"?j[3]-j[1]+ +d.face.descent:(j[3]-j[1])/2);j=0;for(var m=h[o];j<m;j++){var n=j&&d.glyphs[h[j-1]]||{},r=d.glyphs[h[j]];i+=j?(n.w||d.w)+(n.k&&n.k[h[j]]||0):0;r&&r.d&&g[F](this.path(r.d).attr({fill:"#000",
-stroke:"none",translation:[i,0]}))}g.scale(c,c,f,e).translate(a-f,b-e)}return g};var Ob=/\{(\d+)\}/g;l.format=function(a,b){var c=l.is(b,U)?[0][M](b):arguments;a&&l.is(a,ga)&&c[o]-1&&(a=a[I](Ob,function(d,f){return c[++f]==null?A:c[f]}));return a||A};l.ninja=function(){Qa.was?(Raphael=Qa.is):delete Raphael;return l};l.el=s[p];return l}();
--- a/web/hdalab/static/hdalab/lib/underscore-min.js Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-// Underscore.js 1.2.3
-// (c) 2009-2011 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-(function(){function r(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&r(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(m.call(a,h)&&(f++,!(g=m.call(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var s=this,F=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.concat,H=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,I=Object.keys,t=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&
-define.amd?define("underscore",function(){return b}):s._=b;b.VERSION="1.2.3";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,
-c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,
-c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,c,b){var e;D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,
-b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return o});return e};var D=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,
-d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,
-computed:b})});return e.value};b.shuffle=function(a){var c=[],b;j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,c){var b=a.criteria,d=c.criteria;return b<d?-1:b>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=
-function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-
-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},
-[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,
-c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
-var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
-c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
-a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=G.apply([a],arguments);return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=
-function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=I||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,
-1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===
-Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)==
-"[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){s._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a),function(c){J(c,
-b[c]=a[c])})};var K=0;b.uniqueId=function(a){var b=K++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,
-"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var u=function(a,c){return c?b(a).chain():a},J=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);H.call(a,this._wrapped);return u(c.apply(b,
-a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped,arguments);return u(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return u(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}}).call(this);
--- a/web/hdalab/templates/base.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-{% load analytics %}
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
- <head>
- <meta charset="utf-8" />
- <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
- <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
- <link rel="SHORTCUT ICON" href="{{STATIC_URL}}hdalab/img/favicon.ico" />
- <title>{% block title %}HdA Lab{% endblock %}</title>
-
-{% block css_import %}
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/common.css" />
-{% endblock %}
-
-{% block js_import %}
- <script src="{{STATIC_URL}}hdalab/lib/jquery-1.7.1.min.js"></script>
-{% endblock %}
-
- </head>
- <body>
-
-{% block header %}
- <div id="header">
- <ul id="nav">
- <li><a class="{% block home_actif %}{% endblock %}" href="{% url home %}">Accueil</a></li>
- <li>—</li>
- <li>Navigation par :</li>
- <li><a class="{% block facettes_actif %}{% endblock %}" href="{% url facettes %}">Facettes</a></li>
- <li><a class="{% block categories_actif %}{% endblock %}" href="{% url categories %}">Catégories de Wikipedia</a></li>
- <li><a class="{% block thesaurus_actif %}{% endblock %}" href="{% url thesaurus %}">Thésaurus</a></li>
- </ul>
- <h1>
- <a href="{% url home %}">HdA Lab</a>
- </h1>
- </div>
- <div id="container">
-{% endblock %}
-
-{% block main_content %}
-
-{% endblock %}
-
-{% block footer %}
- </div>
- <div id="footer">
- <ul id="footer-contents">
- <li>
- <p>Une expérimentation de l'Institut de Recherche et d'Innovation et du Ministère de la Culture et de la Communication</p>
- </li>
- <li>
- <a href="http://culture.gouv.fr/" target="_blank">
- <img src="{{STATIC_URL}}hdalab/img/logo_mcc_blanc.png" />
- </a>
- </li>
- <li>
- <a href="http://www.iri-research.org/" target="_blank">
- <img src="{{STATIC_URL}}hdalab/img/logo_iri_blanc.png" />
- </a>
- </li>
- </ul>
- </div>
-{% endblock %}
- {% analytics %}
- </body>
-</html>
--- a/web/hdalab/templates/categories.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{block.super}} > Recherche par arbre{% endblock %}
-
-{% block css_import %}
-{{block.super}}
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/trees.css?refresh" />
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/cattree.css?refresh" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
- <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
- <script src="{{STATIC_URL}}hdalab/lib/mustache.js"></script>
- <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
- <script type="text/javascript">
- endpoints = {
- cat_search: "{% url cat_search %}",
- cat_tree: "{% url cat_tree %}",
- fill_tree: "{% url fill_tree %}",
- datasheet: "{% url notice 'ID' %}"
- };
- </script>
- <script src="{{STATIC_URL}}hdalab/js/trees.js?refresh"></script>
- <script src="{{STATIC_URL}}hdalab/js/cattree.js?refresh"></script>
-{% endblock %}
-
-{% block categories_actif %}actif{% endblock %}
-
-{% block main_content %}
- <div class="leftzone">
- <h2>Explorer les domaines artistiques</h2>
- <p>
- Cette interface expérimentale présente les ressources d'<a href="http://histoiredesarts.culture.fr/" target="_blank">Histoire des Arts</a>,
- ordonnées selon l'arborescence des <a href="http://fr.wikipedia.org/wiki/Sp%C3%A9cial:ArbreCat%C3%A9gorie/Espace_Cat%C3%A9gorie" target="_blank">catégories de Wikipédia</a>.
- Seules les ressources les plus pertinentes sont affichées.
- </p>
- <ul class="disciplist">
- <li><a href="#">Architecture</a></li>
- <li><a href="#">Cinéma</a></li>
- <li><a href="#">Littérature</a></li>
- <li><a href="#">Musique</a></li>
- <li><a href="#">Peinture</a></li>
- <li><a href="#">Photographie</a></li>
- <li><a href="#">Poésie</a></li>
- <li><a href="#">Sculpture</a></li>
- <li><a href="#">Théâtre</a></li>
- </ul>
- <h3>Recherche de catégories de Wikipédia : </h3>
- <p>
- <form id="catform"><input id="catsearch" /></form>
- </p>
- <div class="results hidden">
- <h2>Résultats pour « <span class="label-name"></span> » :</h2>
- <p class="category-results"><span class="category-count"></span> sous-catégorie(s)</p>
- <p class="tag-results"><span class="tag-count"></span> tag(s)</p>
- <p class="content-results"><span class="content-count"></span> contenu(s)</p>
- </div>
- </div>
- <div id="tree" class="cattree"></div>
-{% endblock %}
\ No newline at end of file
--- a/web/hdalab/templates/facettes.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,165 +0,0 @@
-{% extends "base.html" %}
-
-{% load i18n %}
-
-{% block title %}{{block.super}} > {% trans "Recherche par facettes" %}{% endblock %}
-
-{% block css_import %}
-{{block.super}}
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/lib/leaflet/leaflet.css" />
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/facettes.css?refresh" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
- <script src="{{STATIC_URL}}hdalab/lib/raphael-min.js"></script>
- <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
- <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
- <script src="{{STATIC_URL}}hdalab/lib/leaflet/leaflet.js"></script>
- <script src="{{STATIC_URL}}hdalab/lib/ZeroClipboard.js"></script>
-
- <script src="{% url jsi18n 'hdalab' %}"></script>
- <script src="{{STATIC_URL}}hdalab/js/gomina.js?refresh"></script>
-
- <script type="text/javascript">
- gomNs.languageCode = '{{LANGUAGE_CODE}}';
- gomNs.urls = {
- 'filter': "{% url filter %}",
- 'session_info': "{% url session_info %}",
- 'countries': "{{STATIC_URL}}hdalab/lib/countries.geo.json",
- 'tag_search': "{% url tag_search %}",
- 'datasheet': "{% url notice 'ID' %}"
- };
- ZeroClipboard.setMoviePath('{{STATIC_URL}}hdalab/lib/ZeroClipboard.swf');
- </script>
-{% endblock %}
-
-{% block facettes_actif %}actif{% endblock %}
-
-{% block main_content %}
- <div id="titleleft">
- <h2 id="hdatitle">{% trans "Recherche par facettes" %} : <span id="sessionname"></span></h2>
- </div>
- <div id="titleright">
- <div id='langselect'>
- <form action="{% url django.views.i18n.set_language %}" method="post" id="lang_form">
- {% csrf_token %}
- <!--input name="next" type="hidden" value="" /-->
- {% get_language_info_list for LANGUAGES as languages %}
- {% for language in languages %}
- <input type="submit" name="language" class="langbutton{% if language.code == LANGUAGE_CODE %} selected{% endif %}" style="background-image: url({{STATIC_URL}}hdalab/img/flag_{{ language.code }}.png)" value="{{ language.code }}" title="{{ language.name_local }}" />
- {% endfor %}
- </form>
- </div>
- <div id="apartager"><a href="#">{% trans "Partager la session" %}</a></div>
- <div id="partageurls">
- <ul>
- <li class="actif" id="partagero"><a href="#">{% trans "En lecture seule" %}</a></li>
- <li id="partagerw"><a href="#">{% trans "En lecture-ecriture" %}</a></li>
- </ul>
- <div id="zc-partageligne">
- <label id="zc-partagelabel">{% trans "Copier le lien" %} : </label>
- <input id="zc-partageinput" onfocus="select();" />
- </div>
- </div>
- <div id="vues">
- <h4 id="vuestitre">{% trans "Mes vues :"%}</h4>
- <ul id="ongletsvues">
- </ul>
- <span id="nouvellevue"><a href="#">+</a></span>
- </div>
- <ul id="plusdevues">
- <li id="nouv_resrech"><a href="#">{% trans "Creer une vue sur des resultats de recherche" %}</a></li>
- <li id="nouv_liste"><a href="#">{% trans "Creer une liste de notices" %}</a></li>
- </ul>
- </div>
- <div id="waitcontainer">
- <div id="waiting"></div>
- </div>
- <div id="bandefiltre">
- <h4 id="filtertitle">
- {% trans "Filtres :" %}
- </h4>
- <ul id="filters">
- </ul>
- </div>
- <div id="timeline">
- <ul id="dates"></ul>
- <div id="dateheat"></div>
- <div id="handle_0" class="handle">
- <div class="handleinner"></div>
- </div>
- <div id="handle_1" class="handle">
- <div class="handleinner"></div>
- </div>
- </div>
- <div id="leftcol">
- <div id="bloc_gestvue">
- <div class="barrebloc">
- <h2>{% trans "Gerer la vue" %}</h2>
- </div>
- <div class="corpsbloc" id="gestvue">
- <div id="div_titrevue">
- <label>{% trans "Nom :" %}</label>
- <input id="titrevue" />
- </div>
- <h4>{% trans "Blocs visibles :" %}</h4>
- </div>
- </div>
- <div class="bloc" id="bloc_map">
- <div class="barrebloc">
- <h2>{% trans "Pays" %}</h2>
- </div>
- <div class="corpsbloc" id="map"></div>
- </div>
- <div class="bloc" id="bloc_tagcloud">
- <div class="barrebloc">
- <h2>{% trans "Nuage de mots-cles" %}</h2>
- </div>
- <div class="corpsbloc" id="tagcloud">
- </div>
- </div>
- <div class="bloc" id="bloc_taginfo">
- <div class="barrebloc">
- <h2>{% trans "Rechercher un tag" %}</h2>
- </div>
- <div class="corpsbloc" id="taginfo">
- <form id="tagform">
- <input id="tagsearch" placeholder="{% trans "Rechercher un tag" %}" />
- </form>
- <div class="wpinfo">
-
- </div>
- </div>
- </div>
- <div class="bloc" id="bloc_translationinfo">
- {% trans "translation_info" %}
- </div>
- </div>
- <div id="rightcol">
- <div class="bloc" id="bloc_notes">
- <div class="barrebloc">
- <h2>{% trans "Notes" %}</h2>
- </div>
- <div id="notes" class="corpsbloc"></div>
- </div>
- <div class="bloc" id="bloc_disciplines">
- <div class="barrebloc">
- <h2>{% trans "Disciplines artistiques" %}</h2>
- </div>
- <div id="disciplines" class="corpsbloc"></div>
- </div>
- <div class="bloc" id="bloc_notices">
- <div class="barrebloc">
- <h2>{% trans "Resultats de recherche" %}</h2>
- </div>
- <div class="corpsbloc">
- <div id="contentcount"></div>
- <div id="contents"></div>
- </div>
- </div>
- </div>
- </div>
-
-{% endblock %}
--- a/web/hdalab/templates/google_analytics/analytics_template.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-<script type="text/javascript">
-var _gaq = _gaq || [];
-_gaq.push(['_setAccount', '{{ analytics_code }}']);
-_gaq.push(['_trackPageview']);
-(function() {
-var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-})();
-</script>
\ No newline at end of file
--- a/web/hdalab/templates/google_analytics/async_analytics_template.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<script>
-var _gaq=[['_setAccount','{{ analytics_code }}'],['_trackPageview']];
-(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
-g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
-s.parentNode.insertBefore(g,s)}(document,'script'));
-</script>
\ No newline at end of file
--- a/web/hdalab/templates/index.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{block.super}} > Accueil{% endblock %}
-
-{% block css_import %}
-{{block.super}}
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/index.css" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
- <script type="text/javascript">
- $(function() {
- $(".fond-bloc").mouseover(function() {
- var _this = this;
- $(".overlay-bloc").each(function() {
- if (this.parentNode == _this) {
- $(this).slideDown();
- } else {
- $(this).slideUp();
- }
- });
- }).click(function() {
- document.location.href = $(this).find("a").attr("href");
- return false;
- });
- });
- </script>
-{% endblock %}
-
-{% block home_actif %}actif{% endblock %}
-
-{% block main_content %}
- <h2>Explorez autrement le portail Histoire des Arts</h2>
- <div class="liste-applis">
- <div class="bloc-appli">
- <h3>Recherche par facettes</h3>
- <div class="fond-bloc" id="bloc-facettes">
- <div class="overlay-bloc">
- <p>Recherchez les contenus d'Histoire des Arts par plusieurs points d'entrée : pays, périodes historiques, disciplines artistiques et mots-clés liés aux œvres.</p>
- <p>Les éléments de l'interface sont à la fois des critères de recherche et des mode de visualisation des résultats : Au fur et à mesure de vos recherches, ils se mettent à jour pour refléter le nombre de contenus correspondant.</p>
- <p class="goto"><a href="{% url facettes %}">»</a></p>
- </div>
- </div>
- </div>
-
- <div class="separateur-applis"></div>
- <div class="bloc-appli">
- <h3>Catégories de Wikipedia</h3>
- <div class="fond-bloc" id="bloc-categories">
- <div class="overlay-bloc">
- <p>Naviguez dans l'arbre des catégories de Wikipedia pour atteindre les contenus du portail Histoire des Arts.</p>
- <p>Recherchez une catégorie par son titre, puis explorez les sous-catégories et les tags qui y sont rattachés.</p>
- <p class="goto"><a href="{% url categories %}">»</a></p>
- </div>
- </div>
- </div>
-
- <div class="separateur-applis"></div>
- <div class="bloc-appli">
- <h3>Navigation par thésaurus</h3>
- <div class="fond-bloc" id="bloc-thesaurus">
- <div class="overlay-bloc">
- <p>Cette interface présente deux extraits de thésaurus utilisés par le ministère de la Culture et de la Communication :</p>
- <ul>
- <li>La branche « Secteur urbain » du Thésaurus de l’architecture et de l’urbanisme (état 2010)</li>
- <li>La branche « Architecture d’habitation » du Thésaurus iconographique Garnier (état 2012)</li>
- </ul>
- <p class="goto"><a href="{% url thesaurus %}">»</a></p>
- </div>
- </div>
- </div>
-
- <div style="clear: both;"> </div>
- </div>
- <h3>À propos de HdA Lab</h3>
- <p>Le portail Histoire des arts a pour vocation de mettre à la disposition de publics prescripteurs — via un site Internet — une sélection de ressources culturelles et éducatives riches en lien avec le programme officiel de l’enseignement de l’Histoire des arts. Le volet HDA-Lab de ce projet s’inscrit dans le cadre d’une collaboration entre l’Institut de Recherche et d'Innovation (IRI) et le Ministère de la Culture et de la Communication. Ce projet de recherche et développement prévoit la réalisation d’une preuve de concept destinée à montrer le potentiel heuristique du tagging sémantique.</p>
- <p>Le corpus utilisé pour les besoins de ce projet est extrait du site Histoire des arts, proposant un accès à près de 5 000 ressources qualifiées, accessible à l’adresse <a href="http://www.histoiredesarts.culture.fr" target="_blank">http://histoiredesarts.culture.fr</a>. Ce portail est alimenté par un réseau dynamique de 350 institutions culturelles, sur l’ensemble du territoire. Cet annuaire a pour vocation d’aider la communauté éducative (enseignants, médiateurs culturels…) à trouver des documents fiables dans le domaine de l’histoire des arts. Les notices descriptives de chaque ressource renvoient, par des liens profonds, vers autant de ressources en ligne, chaque notice contenant des mots-clés, initialement produits comme de simples tags.</p>
- <p>Le programme de Recherche et Développement impliquant l’IRI et le Ministère de la Culture et de la Communication — via son Département des Programmes Numériques (DPN) — a permis la réalisation de deux outils :</p>
- <ul>
- <li>Un module de tagging sémantique du corpus « Histoire des Arts » destiné à l’indexation des ressources, via le back-office du site (module « HDA-BO »)</li>
- <li>Une interface de recherche et de navigation de la version sémantisée du corpus (projet « HDA-Lab »)</li>
- </ul>
- <p>Les tags sémantiques sont constitués des entrées de Wikipédia et dotés de métadonnées, dont les URIs de DBpedia.org correspondant à ces entrées. Les données-clés extraites des articles de Wikipedia sont les infobox et les catégories. Les fonctionnalités de recherche et de navigation dans le corpus s’appuient sur le graphe de DBpedia. L’interface propose des fonctionnalités telles qu’une recherche par facettes, une carte heuristique, etc. ainsi qu’un enrichissement des résultats de recherche à l’aide d’extraits de Wikipedia (photos, définitions…).</p>
- <p>La preuve de concept est résolument orientée utilisateur final, répondant à une approche de recherche appliquée. Les internautes pourront comparer en direct les fonctionnalités classiques de l’interface d’origine avec les fonctionnalités enrichies de la preuve de concept. L’objectif est de démontrer l’intérêt du tagging sémantique et de sensibiliser l’utilisateur final aux enjeux du Web de données. À terme, cette phase expérimentale a vocation à enrichir les fonctionnalités du portail Histoire des arts.</p>
- <p> </p>
- <p>NB : La première version de HDA-Lab disponible en mars 2012 s’appuie sur une sémantisation (production des tags sémantiques) très partielle du corpus « Histoire des Arts ». De même les fonctionnalités ne sont pas définitives. L’ensemble du projet — sémantisation et fonctionnalités — sera mis en œuvre progressivement d'ici juin 2012.</p>
- <div class="mini-table">
- <div class="half-bloc">
- <p>
- <a href="http://culture.gouv.fr/" target="_blank" title="Ministère de la Culture et de la Communication">
- <img src="{{STATIC_URL}}hdalab/img/logo_mcc.png" alt="Ministère de la Culture et de la Communication" />
- </a>
- </p>
- </div>
- <div class="half-bloc">
- <p>
- <a href="http://www.iri-research.org/" target="_blank">
- <img src="{{STATIC_URL}}hdalab/img/logo_iri.png" alt="Institut de Recherche et d'Innovation" />
- </a>
- </p>
- </div>
- </div>
- <div class="mini-table">
- <div class="half-bloc">
- <p>Département des Programmes Numériques</p>
- </div>
- <div class="half-bloc">
- <p>Directeur : <strong>Bernard Stiegler</strong></p>
- <p>Directeur exécutif : <strong>Vincent Puig</strong></p>
- </div>
- </div>
- <h4>Équipes projet</h4>
- <div class="mini-table">
- <div class="half-bloc">
- <p>Pour le DPN :</p>
- <ul>
- <li>Chef de projet utilisateur : <strong>Bertrand Sajus</strong></li>
- <li>Responsables éditoriales : <strong>Marion Martin Laprade</strong> et <strong>Cécile Riottot</strong></li>
- </ul>
- </div>
- <div class="half-bloc">
- <p>Pour l'IRI :</p>
- <ul>
- <li>Architecture back-office et coordination technique : <strong>Yves-Marie Haussonne</strong></li>
- <li>Coordination scientifique : <strong>Alexandre Monnin</strong></li>
- <li>Outils de sémantisation : <strong>Thibaut Cavalié</strong></li>
- <li>Interfaces de visualisation et d'annotation : <strong>Raphaël Velt</strong></li>
- </ul>
- </div>
- </div>
-{% endblock %}
\ No newline at end of file
--- a/web/hdalab/templates/notice.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{block.super}} > {{datasheet.title}}{% endblock %}
-
-{% block css_import %}
-{{block.super}}
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/notice.css?refresh" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
- <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
- <script src="{{STATIC_URL}}hdalab/js/notice.js?refresh"></script>
-{% endblock %}
-
-{% block main_content %}
-<div class="main-datasheet">
- <h2><a href="{{datasheet.url}}" target="_blank">{{datasheet.title}}</a></h2>
- <h3><a href="{{datasheet.organisation.website}}" target="_blank">{{datasheet.organisation.name}}</a></h3>
- <img src="http://histoiredesarts.culture.fr/images/cached/images/{{datasheet.hda_id}}.jpg" />
- <p>{{datasheet.description}}</p>
- <ul>
- <li>Accéder à cette ressource sur <a href="{{datasheet.url}}" target="_blank">{{domain}}</a></li>
- <li>Plus d'informations sur <a href="http://histoiredesarts.culture.fr/notices/{{datasheet.hda_id}}/" target="_blank">histoiredesarts.culture.fr</a></li>
- </ul>
-</div>
-
-<div class="tag-container">
- <canvas class="tag-canvas"></canvas>
- <div class="tags-main">
- <h2>Mots-clés</h2>
- <ul class="tags">
- {% for t in ordered_tags %}
- <li><span class="main-datasheet-tag" data-tag-id="{{t.tag.id}}">{{t.tag.label}}</span></li>
- {% endfor %}
- </ul>
- </div>
-</div>
-
-<div class="related-datasheets">
- <h2>Notices liées :</h2>
- <ul class="datasheets">
- {% for ds in related %}
- <li class="datasheet">
- <img src="http://histoiredesarts.culture.fr/images/cached/images/{{ds.hda_id}}.jpg" />
- <h3><a href="{% url notice ds.hda_id %}">{{ds.title}}</a></h3>
- <h4>{{ds.organisation_name}}</h4>
- <ul class="datasheet-tags">{% for t in ds.ordered_tags %}<li data-tag-id="{{t.id}}" class="related-datasheet-tag {% if t.common %} common-tag{% endif %}">{{t.label}}</li>{% endfor %}</ul>
- </li>
- {% endfor %}
- </ul>
-</div>
-
-{% endblock %}
\ No newline at end of file
--- a/web/hdalab/templates/thesaurus.html Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{block.super}} > Recherche par arbre{% endblock %}
-
-{% block css_import %}
-{{block.super}}
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/trees.css?refresh" />
- <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/thesaurus.css?refresh" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
- <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
- <script src="{{STATIC_URL}}hdalab/lib/mustache.js"></script>
- <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
- <script type="text/javascript">
- endpoints = {
- fill_tree: "{% url fill_tree %}",
- datasheet: "{% url notice 'ID' %}"
- };
- </script>
- <script src="{{STATIC_URL}}hdalab/js/trees.js?refresh"></script>
- <script src="{{STATIC_URL}}hdalab/js/thesaurus.js?refresh"></script>
-{% endblock %}
-
-{% block thesaurus_actif %}actif{% endblock %}
-
-{% block main_content %}
- <div class="explain">
- <p>Cette interface présente deux extraits de thésaurus utilisés par le ministère de la Culture et de la Communication :</p>
- <ul>
- <li>La branche « Secteur urbain » du Thésaurus de l’architecture et de l’urbanisme (état 2010)</li>
- <li>La branche « Architecture d’habitation » du Thésaurus iconographique Garnier (état 2012)</li>
- </ul>
- <p>Les mots-clés de ces branches ont été liés avec Wikipédia. Ils deviennent ainsi sémantiquement interopérables avec les tags d’HDA-Lab. Comme le montre l’interface, ce procédé permet d’organiser et de visualiser les tags et les ressources d'HDA-Lab en utilisant des thésaurus « métiers » externes. Dans cet extrait, le mot-clé « Cité jardin » est présenté, en vis-à-vis, dans deux univers sémantiques différents</p>
- </div>
-
- <div class="column leftcol">
- <h3>Arborescence 1</h3>
- <div class="cattree">
-
- </div>
- </div>
- <div class="separator"></div>
- <div class="column rightcol">
- <h3>Arborescence 2</h3>
- <div class="cattree">
-
- </div>
- </div>
-{% endblock %}
\ No newline at end of file
--- a/web/hdalab/templatetags/analytics.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-###
-# Taken and adapted form django-google-analytics : http://
-#
-#
-##
-from django import template
-
-from django.template import Context, loader
-from django.conf import settings
-
-
-register = template.Library()
-
-def __clean_token(str, tag_name):
- if not (str[0] == str[-1] and str[0] in ('"', "'")):
- raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
- return str[1:-1]
-
-def do_get_analytics(parser, token):
- code = None
- style = None
- tag_name = None
- try:
- # split_contents() knows not to split quoted strings.
- tokens = token.split_contents()
- if len(tokens) > 0 :
- tag_name = tokens[0]
- if len(tokens) > 1 :
- style = tokens[1]
- if len(tokens) > 2 :
- code = tokens[2]
- except ValueError:
- code = None
-
- if not code:
- code = getattr(settings,'GOOGLE_ANALYTICS_CODE',None)
- else:
- code = __clean_token(code, tag_name)
-
- if style:
- style = __clean_token(style, tag_name)
- else:
- style = 'async'
-
- return AnalyticsNode(code, style)
-
-class AnalyticsNode(template.Node):
- def __init__(self, code=None, style='async'):
- self.code = code
- self.style = style
-
- def render(self, context):
- if not self.code:
- return ''
-
- if self.style == 'async':
- template_path = 'google_analytics/async_analytics_template.html'
- else:
- template_path = 'google_analytics/analytics_template.html'
-
- if self.code.strip() != '':
- t = loader.get_template(template_path)
- c = Context({
- 'analytics_code': self.code,
- })
- return t.render(c)
- else:
- return ''
-
-register.tag('analytics', do_get_analytics)
--- a/web/hdalab/urls.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.conf.urls.defaults import patterns, include, url
-from django.contrib import admin
-from django.views.generic import TemplateView
-#from hdalab.views.ajax import filter
-
-# Uncomment the next two lines to enable the admin:
-# from django.contrib import admin
-# admin.autodiscover()
-
-urlpatterns = patterns('',
- # Examples:
- # url(r'^$', 'hdalab.views.home', name='home'),
- # url(r'^hdalab/', include('hdalab.foo.urls')),
-
- # Uncomment the admin/doc line below to enable admin documentation:
- # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
-
- # Uncomment the next line to enable the admin:
- url(r'^admin/', include(admin.site.urls)),
-
- url(r'^i18n/', include('django.conf.urls.i18n')),
- url('^jsi18n/?$', 'django.views.i18n.javascript_catalog', name='jsi18n.all'),
- url('^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog', {'domain':'djangojs'}, name='jsi18n'),
-
- url(r'^facettes/', TemplateView.as_view(template_name="facettes.html"), name='facettes'),
- url(r'^categories/', TemplateView.as_view(template_name="categories.html"), name='categories'),
- url(r'^thesaurus/', TemplateView.as_view(template_name="thesaurus.html"), name='thesaurus'),
- url(r'^$', TemplateView.as_view(template_name="index.html"), name='home'),
-
- url(r'^notice/(?P<hda_id>[\w-]+)$', 'hdalab.views.pages.datasheet', name='notice')
-
-)
-
-urlpatterns += patterns('hdalab.views.ajax',
- (r'^a/filter$', 'filter', {}, 'filter'),
- (r'^a/sessioninfo$', 'sessioninfo', {}, 'session_info'),
- (r'^a/tagsearch$', 'tagsearch', {}, 'tag_search'),
- (r'^a/catsearch$', 'catsearch', {}, 'cat_search'),
- (r'^a/cattree$', 'cattree', {}, 'cat_tree'),
- (r'^a/filltree$', 'filltree', {}, 'fill_tree'),
-)
--- a/web/hdalab/utils.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Mar 13, 2012
-
-@author: ymh
-'''
-from django.core.cache import cache
-from django.utils.encoding import smart_str
-import md5
-import re
-
-
-def fix_cache_key(key):
- cache_key = re.sub(r'\s+', '-', key)
- cache_key = smart_str(cache_key)
- if len(cache_key) > (250-(2+len(cache.key_prefix)+len(str(cache.version)))-33):
- cache_key = cache_key[:(250-(2+len(cache.key_prefix)+len(str(cache.version)))-33)] + '-' + md5.new(cache_key).hexdigest()
- return cache_key
\ No newline at end of file
--- a/web/hdalab/views/ajax.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,458 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 31, 2012
-
-@author: ymh
-'''
-from django.conf import settings
-from django.core.cache import cache
-from django.db.models import Q, Count, Min
-from django.http import HttpResponse
-from hdabo.models import Tag, Datasheet, TaggedSheet
-from hdalab.models import HdaSession, Country, TagYears, DatasheetExtras
-from hdalab.models.dataviz import DbpediaFieldsTranslation, DbpediaFields
-from hdalab.models.categories import WpCategory, WpCategoryInclusion, TagWpCategory
-from hdalab.utils import fix_cache_key
-import copy
-import django.utils.simplejson as json
-import hmac
-import itertools
-import uuid
-
-def tagtranslation(request):
-
- lang = request.GET.get('lang',request.LANGUAGE_CODE)
- labels = request.GET.get('labels',None)
-
- if not labels:
- return HttpResponse(content=json.dumps({}), mimetype='application/json')
-
- labelslist = [lbl.strip() for lbl in labels.split(",")]
- masters = []
-
- for lbl in labelslist:
- labelqs = Tag.objects.select_related('dbpedia_fields').filter(~Q(dbpedia_uri = None), label__iexact = lbl)[0:1]
- if len(labelqs) > 0:
- tag = labelqs.get()
- if tag.dbpedia_fields:
- masters.append(tag.dbpedia_fields)
-
- translationqs = DbpediaFieldsTranslation.objects.select_related("master", "master__tag").filter(master__in = masters, language_code=lang)
-
- translations = dict([(t.master.label, t.label) for t in translationqs])
-
- return HttpResponse(content=json.dumps(translations), mimetype='application/json')
-
-def subcat(category, globtags, level, max_level ):
- # recursive function used by cattree
- catlabel = category.label
- tags = Tag.objects.filter(wp_categories__wp_category = category).distinct()
- taglabels = [k for k in dict([(t.label,t.label) for t in tags])]
- resobj = {
- 'label': category.label,
- 'themes': [],
- 'contents': []
- }
- for label in taglabels:
- if label == catlabel:
- globtags[label] = {'level': level, 'access': resobj }
- else:
- tag_in_list = {'label' : label, 'contents': []}
- resobj['themes'].append(tag_in_list)
- globtags[label] = {'level': (level + 1), 'access': tag_in_list }
-
- if level < max_level:
- subcats = WpCategory.objects.filter(parent_categories__parent_category = category)
- resobj['themes'] += [subcat(subcats[i], globtags, level + 1, max_level ) for i in range(len(subcats))]
- return resobj
-
-def cleantags(category):
- if category.has_key('contents') and len(category['contents']) == 0:
- del category['contents']
- if category.has_key('contents'):
- category['contents'] = sorted(category['contents'], key=lambda content: -content['score'])
- if category.has_key('themes'):
- themes = []
- for theme in category['themes']:
- clean_theme = cleantags(theme)
- if clean_theme.has_key('themes') or clean_theme.has_key('contents'):
- themes.append(clean_theme)
- category['themes'] = sorted(themes, key=lambda cat: cat['label'])
- if len(category['themes']) == 0:
- del category['themes']
- return category
-
-def cattree(request):
- # Gets the category tree from a label
- ROOT_MAX_TAG_ORDER = 8
- MAX_TAG_ORDER = 8
- MAX_LEVEL = 3
- LEVEL_COEFF = 5
- label = request.GET.get('label', None)
- lowerlabel = label.lower()
- globtags = {}
- resobj = None
- master_category = WpCategory.objects.filter(label__iexact=label)[0:1]
- if len(master_category):
- resobj = subcat(master_category[0], globtags, 1, MAX_LEVEL )
-
-# tag_list = [k for k in globtags]
-
-# if len(tag_list):
- contents = []
-# datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__in = tag_list, taggedsheet__order__lte = MAX_TAG_ORDER).distinct()
- datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = ROOT_MAX_TAG_ORDER).select_related('organisation').distinct()
- for datasheet in datasheets:
- # Calculating where we add the datasheet in the tree
- maintag = None
- maintagscore = -5
- dsscore = 0
- rootscore = 0
- for ts in TaggedSheet.objects.select_related('tag','datasheet').filter(datasheet__id=datasheet.id,order__lte=MAX_TAG_ORDER):
- label = ts.tag.label
- if globtags.has_key(label):
- score = LEVEL_COEFF * globtags[label]['level'] - ts.order
- if score > maintagscore:
- maintagscore = score
- maintag = label
- dsscore = (MAX_TAG_ORDER - ts.order)
- if label.lower() == lowerlabel:
- rootscore = (ROOT_MAX_TAG_ORDER - ts.order)
- if maintag is not None:
- globtags[maintag]['access']['contents'].append({
- 'id': datasheet.id,
- 'title': datasheet.title,
- 'url': datasheet.url,
- 'description': datasheet.description,
- 'hda_id': datasheet.hda_id,
- 'organization': datasheet.organisation.name,
- 'organization_url': datasheet.organisation.website,
- 'score': max(dsscore, rootscore)
- })
- cleantags(resobj)
-
-# resobj['contents'] = [{'id': d.id, 'title': d.title, 'tags': [t.label for t in d.tags.filter(taggedsheet__order__lte=5)]} for d in datasheets]
-
- return HttpResponse(content=json.dumps(resobj), mimetype='application/json')
-
-def sessioninfo(request):
-
- data = json.loads(request.GET.get('data', "{}"))
- write = False
-
- if 'sessionid' in request.GET:
- request.session['sessionid'] = request.GET['sessionid']
- if 'sessionkey' in request.GET:
- request.session['sessionkey'] = request.GET['sessionkey']
-
- if 'sessionid' in request.session:
- sessionid = request.session['sessionid']
-
- if HdaSession.objects.filter(sessionid=sessionid).count() == 1:
- sessionkey = request.session.get('sessionkey',None)
- hm = hmac.new(settings.SECRET_KEY, sessionid)
- if hm.hexdigest() == sessionkey:
- write = True
- else:
- del request.session['sessionid']
-
- if 'sessionid' not in request.session:
- sessionid = unicode(uuid.uuid1())
- HdaSession.objects.create(sessionid=sessionid, data=json.dumps({}))
- write = True
- request.session['sessionid'] = sessionid
- request.session['sessionkey'] = hmac.new(settings.SECRET_KEY, sessionid).hexdigest()
-
- if write and data:
- HdaSession.objects.filter(sessionid=sessionid).update(data=json.dumps(data))
- else:
- data = HdaSession.objects.get(sessionid=sessionid).data
- data = json.loads(data) if data else {}
-
- resobj = {'data': data, "write_allowed" : write, "sessionid": sessionid }
- if write:
- resobj['sessionkey'] = request.session['sessionkey']
-
- return HttpResponse(content=json.dumps(resobj), mimetype='application/json')
-
-
-def tagsearch(request):
-
- q = request.GET.get('term',None)
- maxcount = int(request.GET.get('count','40'))
- lang = request.GET.get('lang',request.LANGUAGE_CODE)
-
- stemming_langs = [ 'fr', 'en', 'de', 'it' ]
- # For Japanese, there are no word boundaries, we should not use the regexp in that case
- no_translate_langs = [ 'fr' ]
-
- if q:
- lq = q.lower()
- qs = Tag.objects.select_related('dbpedia_fields').filter(datasheet__validated=True)
- qrx = '(\\m|\\b)%s'%q
- if lang in no_translate_langs:
- if lang in stemming_langs:
- qs = qs.filter( label__iregex = qrx )
- else:
- qs = qs.filter( label__icontains = q )
- else:
- if lang in stemming_langs:
- qs = qs.filter(dbpedia_fields__translations__label__iregex=qrx, dbpedia_fields__translations__language_code=lang, dbpedia_fields__translations__is_label_translated = True)
- else:
- qs = qs.filter(dbpedia_fields__translations__label__icontains=q, dbpedia_fields__translations__language_code=lang, dbpedia_fields__translations__is_label_translated = True)
- else:
- qs = Tag.objects.filter(~Q(dbpedia_uri = None))
-
- qs = qs.annotate(nb=Count('datasheet',distinct=True)).order_by('-nb')[:maxcount]
-
- qslist = list(qs)
-
- if lang in no_translate_langs:
- translations = {}
- else:
- transqs = DbpediaFieldsTranslation.objects.filter(master__tag__in = qslist, language_code=lang, is_label_translated=True).select_related("master")
- translations = dict([(tr.master.tag_id, {'label':tr.label,'abstract':tr.abstract, 'is_label_translated': tr.is_label_translated}) for tr in transqs])
-
- res = []
-
- for t in qslist:
- dbfields = t.dbpedia_fields
- resobj = {'original_label':t.label,'nb':t.nb}
- resobj['thumbnail'] = dbfields.thumbnail if dbfields is not None else None
-
-# if t.id in translations and not translations[t.id].get('is_label_translated', True):
-# continue
- if t.id in translations:
- resobj['value'] = translations[t.id]['label']
- resobj['abstract'] = translations[t.id]['abstract']
- else:
- resobj['value'] = t.label
- resobj['abstract'] = dbfields.abstract if dbfields is not None else None
- if q is None or resobj['value'].lower().find(lq) != -1:
- res.append(resobj)
-
- return HttpResponse(content=json.dumps(res), mimetype='application/json')
-
-def catsearch(request):
-
- q = request.GET.get('term',None)
-
- # On ne récupère que les catégories qui sont également des tags
- qrx = '(\\m|\\b)%s'%q
- qs = Tag.objects.filter(label__iregex=q)
-
- labels = [tag.label for tag in qs]
-
- qs = WpCategory.objects.annotate(nb=Count('child_categories__child_category__tags')).filter(label__in = labels, nb__gt=0)
-
- res = [{'value':t.label} for t in qs]
-
- return HttpResponse(content=json.dumps(res), mimetype='application/json')
-
-def filter(request):
-
- lang = request.GET.get('lang',request.LANGUAGE_CODE)
- periode = request.GET.get('period',None)
- label = request.GET.get('label', None)
- country = request.GET.get('country', None)
- contentlist = request.GET.get('contentlist', None)
- max_tag_order = int(request.GET.get('mto', '12'))
- content_count = request.GET.get('contentcount', 12)
- tag_count = request.GET.get('tagcount', 30)
- no_translate_langs = [ 'fr' ]
-
- key_parts = ("filter",lang,periode,label,country,contentlist,max_tag_order,content_count,tag_count)
- key_parts = [unicode(p).encode("utf-8") for p in key_parts]
-
- cache_key = fix_cache_key("-".join(key_parts))
-
- outputstr = cache.get(cache_key)
-
- if outputstr is None:
-
- matchtagids = []
-
- tagqs = Tag.objects.exclude(category__label__in = ['Datation', 'Localisation', 'Discipline artistique']).filter(~Q(dbpedia_uri = None))
- countryqs = Country.objects
- discqs = Tag.objects.filter(~Q(dbpedia_uri = None), category__label = u'Discipline artistique').select_related('dbpedia_fields')
- yearqs = TagYears.objects
-
- contentqs = Datasheet.objects.filter(validated=True)
- labeltranslations = []
-
- if label or periode or country or contentlist :
- matchtagqslist = []
-
- if periode:
- years = periode.split(",")
- start_year = int(years[0])
- end_year = int(years[0:2][-1])
- delta = max(1, (end_year-start_year)/2)
- minstart = start_year - delta
- maxend = end_year + delta
- matchtagqs = Tag.objects.filter(~Q(dbpedia_uri = None),
- years__end_year__gte = start_year,
- years__start_year__lte = end_year,
- years__end_year__lte = maxend,
- years__start_year__gte = minstart,
- )
- matchtagqslist.append(matchtagqs)
-
- if label:
- for txtlbl in label.split(","):
- matchtagqs = Tag.objects.select_related('dbpedia_fields').filter(~Q(dbpedia_uri = None), label__iexact = txtlbl.strip())
- matchtagqslist.append(matchtagqs)
-
- if country:
- for country_uri in country.split(","):
- matchtagqs = Tag.objects.filter(~Q(dbpedia_uri = None),locatedin__country__dbpedia_uri = country_uri)
- matchtagids += [t.id for t in matchtagqs if t.id not in matchtagids]
- matchtagqslist.append(matchtagqs)
- if contentlist:
- contentqs = contentqs.filter(id__in = contentlist.split(","))
-
- tagcond = None
- tagcondid = None
- for matchtagqs in matchtagqslist:
- newcond = Q(id__in = TaggedSheet.objects.filter(tag__in = copy.deepcopy(matchtagqs), order__lte = max_tag_order).values('datasheet_id'))
- newcondid = Q(id__in = matchtagqs)
- tagcond = newcond if tagcond is None else (tagcond & newcond)
- tagcondid = newcondid if tagcondid is None else (tagcondid | newcondid)
-
- contentqs = contentqs.filter(tagcond).distinct()
- matchtagidsqs = list(Tag.objects.select_related("dbpedia_fields").only("id").filter(tagcondid))
- matchtagids = [t.id for t in matchtagidsqs]
-
- if lang not in no_translate_langs:
- masters = [t.dbpedia_fields for t in matchtagidsqs if t.dbpedia_fields is not None]
-
- translationqs = DbpediaFieldsTranslation.objects.select_related("master", "master__tag").filter(master__in = masters, language_code=lang)
- labeltranslations = [{'label':t.master.label, 'translated_label':t.label} for t in translationqs]
-
- tagqs = tagqs.filter(datasheet__in = contentqs)
- countryqs = countryqs.filter(includes__tag__taggedsheet__datasheet__in = contentqs)
- discqs = discqs.filter(datasheet__in = contentqs)
- yearqs = yearqs.filter(tag__taggedsheet__datasheet__in = contentqs)
-
- if contentlist is None:
- contentqs.order_by('?')
-
- cont_count = contentqs.count()
-
- contenus = dict([(content.id, {'score' : 0, 'tags' : [], 'hda_id': content.hda_id, 'id':content.id, 'title': content.title, 'description': content.description, 'url': content.url}) for content in contentqs[0:content_count]])
- contentids = contenus.keys()
-
- qs = DatasheetExtras.objects.select_related('insee').filter(datasheet__in = contentids)
- for dse in qs:
- contenus[dse.datasheet_id]['coords'] = {'city_name': dse.insee.city_name, 'latitude': dse.insee.latitude, 'longitude': dse.insee.longitude}
-
- qs = list(TaggedSheet.objects.select_related('tag', 'tag__dbpedia_fields').filter(datasheet__in = contentids, order__lte = max_tag_order).order_by('order'))
-
- translations = {}
-
- if lang not in no_translate_langs:
- transqs = DbpediaFieldsTranslation.objects.filter(master__in = [ts.tag.dbpedia_fields for ts in qs], language_code = lang)
- translations = dict([(trans.master_id,trans.label) for trans in transqs])
-
- for ts in qs:
- match_tag = ts.tag.id in matchtagids
- contenus[ts.datasheet_id]['tags'].append({'id': ts.tag.id, 'label':ts.tag.label, 'order':ts.order, 'match': match_tag , 'translated_label': translations.get(ts.tag.dbpedia_fields.id, ts.tag.label) if ts.tag.dbpedia_fields is not None else ts.tag.label})
-
- if match_tag:
- contenus[ts.datasheet_id]['score'] += 2*max_tag_order - ts.order
-
- if contentlist is None:
- contenus = sorted(contenus.values(),key=lambda e: -e['score'])
- else:
- contenus = contenus.values()
-
- #tagqs = tagqs.annotate(nb=Count('datasheet')).order_by('-nb')[:tag_count]
- tagqs = tagqs.annotate(nb=Count('datasheet')).order_by('-nb').only('id','label')[:tag_count]
- #.select_related('dbpedia_fields')
- # hack to add only necessary fields in the group by
- # contournement bug https://code.djangoproject.com/ticket/17144
- tagqs.query.clear_select_fields()
- tagqs.query.add_fields(['id','label'], False)
- tagqs.query.set_group_by()
-
- tagqslist = list(tagqs)
-
- dbpediafields = dict([(df.tag_id, df) for df in DbpediaFields.objects.filter(tag__in = tagqslist)])
-
- if lang not in no_translate_langs:
- transqs = DbpediaFieldsTranslation.objects.filter(master__in = dbpediafields.values(), language_code = lang)
- translations = dict([(trans.master_id,trans.label) for trans in transqs])
-
- tags = [{'id': tag.id, 'label': tag.label, 'score': tag.nb, 'translated_label': translations.get(dbpediafields[tag.id].id, tag.label) if tag.id in dbpediafields else tag.label} for tag in tagqslist]
-
- countryqs = countryqs.annotate(nb=Count('includes__tag__taggedsheet'))
- countries = dict([(country.dbpedia_uri, country.nb) for country in countryqs])
-
- discqslist = list(discqs.annotate(nb=Count('taggedsheet')).order_by('-nb')[:10])
-
- if lang not in no_translate_langs:
- transqs = DbpediaFieldsTranslation.objects.filter(master__in = [tag.dbpedia_fields for tag in discqslist], language_code = lang)
- translations = dict([(trans.master_id,trans.label) for trans in transqs])
-
- disciplines = [{'label':tag.label,'score':tag.nb, 'translated_label': translations.get(tag.dbpedia_fields.id, tag.label) if tag.dbpedia_fields is not None else tag.label} for tag in discqslist]
-
- years = {}
- yearqs = yearqs.annotate(nb=Count('tag__taggedsheet'))
- for ty in yearqs:
- for year in range(ty.start_year, ty.end_year):
- years[year] = ty.nb + (years[year] if year in years else 0)
-
- yearchange = []
- for year in sorted(years.keys()):
- score = years[year]
- if year < 2011:
- if (year-1 not in years and score != 0) or (year-1 in years and years[year-1] != score):
- yearchange.append({'year': year, 'score': score})
- if year+1 not in years and year != -1 and score != 0:
- yearchange.append({'year': year+1, 'score': 0})
-
- tag_translations = {}
- for t in itertools.chain(labeltranslations,disciplines,tags):
- tag_translations[t['label']] = t['translated_label']
- for c in contenus:
- for t in c['tags']:
- tag_translations[t['label']] = t['translated_label']
-
- output = {'count': cont_count, 'contents': contenus, 'tags':tags, 'sparkline':yearchange, 'countries':countries, 'disciplines':disciplines, 'tagtranslations': tag_translations}
- outputstr = json.dumps(output)
- cache.set(cache_key, outputstr)
-
- return HttpResponse(content=outputstr, mimetype='application/json')
-
-def subtree(tree):
- MAX_TAG_ORDER = 16
- label = tree['label']
- sub = tree.get('contents',[])
-
- datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = MAX_TAG_ORDER).annotate(tagorder=Min('taggedsheet__order')).select_related('organisation').distinct()
-
- contents = [{ 'description': ds.description, 'title': ds.title, 'url': ds.url, 'score': int((MAX_TAG_ORDER - ds.tagorder)/2), 'id': ds.id, 'hda_id': ds.hda_id, 'organization': ds.organisation.name, 'organization_url': ds.organisation.website } for ds in datasheets]
-
- contents = sorted(contents, key=lambda e: -e['score'])
-
- res = { 'label': label }
-
- if len(contents):
- res['contents'] = contents
-
- if len(sub):
- subcats = [subtree(st) for st in sub]
- subcats = [sc for sc in subcats if len(sc.get('contents',[])) or len(sc.get('themes',[]))]
- res['themes'] = subcats
-
- return res
-
-def filltree(request):
-
- tree = request.GET.get('tree','{}')
-
- treeobj = json.loads(tree)
-
- res = subtree(treeobj)
-
- return HttpResponse(content=json.dumps(res), mimetype='application/json')
--- a/web/hdalab/views/pages.py Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.shortcuts import render_to_response, redirect
-from django.template import RequestContext
-from hdabo.models import Datasheet, TaggedSheet
-import re
-import django.utils.simplejson as json
-
-def datasheet(request, hda_id=None):
- MAX_TAG = 15
- MAX_RELATED = 50
-
- datasheet = Datasheet.objects.select_related("organisation").get(hda_id=hda_id)
-
- domain = re.findall(r"^https?://(www\.)?([^/]+)",datasheet.url)
- ordered_tags = TaggedSheet.objects.filter(datasheet=datasheet,order__lte=MAX_TAG).select_related("tag").order_by('order')
- tags = [t.tag.id for t in ordered_tags]
- tagorders = dict([(t.tag.id,t.order) for t in ordered_tags])
- tsqs = TaggedSheet.objects.exclude(datasheet=datasheet).filter(order__lte=MAX_TAG,tag_id__in=tags)
- dsscores = {}
- addtoscore = 2*MAX_TAG
-
- for ts in tsqs:
- a_order = tagorders[ts.tag_id]
- b_order = ts.order
- score = addtoscore - a_order - b_order
- dsscore = dsscores.get(ts.datasheet_id,0)
- dsscores[ts.datasheet_id] = dsscore + score
- relatedqs = Datasheet.objects.filter(id__in=dsscores.keys()).select_related("organisation")
- relatedds = [{
- 'id': ds.id,
- 'hda_id': ds.hda_id,
- 'title': ds.title,
- 'description': ds.description,
- 'organisation_name': ds.organisation.name,
- 'organisation_url': ds.organisation.website,
- 'score': dsscores.get(ds.id,0),
- } for ds in relatedqs]
- relatedds = sorted(relatedds, key=lambda ds: -ds['score'])[:MAX_RELATED]
-
- for ds in relatedds:
- otqs = TaggedSheet.objects.filter(datasheet_id=ds['id'],order__lte=MAX_TAG).select_related("tag").order_by('order')
- ds['ordered_tags'] = [{
- 'id': t.tag.id,
- 'label': t.tag.label,
- 'order': t.order,
- 'common' : (t.tag.id in tags)
- } for t in otqs]
-
- return render_to_response(
- "notice.html",
- {
- 'datasheet':datasheet,
- 'domain': domain[0][1] if domain else "",
- 'ordered_tags': ordered_tags,
- 'related': relatedds,
- },
- context_instance=RequestContext(request)
- )