From 6d9421d92d6c93cdedba5947fd59991148d1271f Mon Sep 17 00:00:00 2001 From: Florent 'Skia' Jacquet Date: Tue, 3 Mar 2026 17:37:09 +0100 Subject: [PATCH 01/17] WIP [ci skip] --- .github/copilot-instructions.md | 3 +- README.md | 2 + src/errors/api/resources.py | 54 ++++++++----------- src/errors/cassie.py | 2 - src/errors/context_processors.py | 5 +- src/errors/settings.py | 27 ++-------- .../static/js/mean_time_between_failures.js | 6 +-- src/errors/static/js/most_common_problems.js | 4 +- src/errors/templates/main.html | 18 +++---- src/errors/views.py | 5 +- src/errors/wsgi.py | 34 ++++-------- src/errortracker/launchpad.py | 11 +--- src/retracer/config/Ubuntu 26.04/sources.list | 6 +-- 13 files changed, 61 insertions(+), 116 deletions(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 1f3f8195..027405f7 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -51,6 +51,7 @@ src/ # Error Tracker application source amqp_utils.py # RabbitMQ/AMQP utilities config.py # Configuration handling utils.py # Shared utilities + populate-test-data.sh # Script to put test data into a local Cassandra (for development) retracer/ # Symbolic retracer (turns addresses into stack frames) config/ # Per-release retracer configuration retracer.py # Retracer entry point @@ -101,7 +102,7 @@ The application relies on: ### Test Architecture -There are two layers of testing: +There are multiple layers of testing: 1. **Unit/functional tests** (`src/tests/`) — pytest-based tests that require Cassandra, RabbitMQ, and Swift running locally. These test individual components (submission, retracing, Cassandra operations, OOPS processing). diff --git a/README.md b/README.md index 80edeb19..61e8bbec 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,8 @@ errors: ./run-errors.sh ``` +If you need test data in Cassandra, you can run the `./populate-test-data.sh` in that same folder. + From there, you can manually upload a crash with the following, from any folder containing a `.crash` file with its corresponding `.upload` file: ``` diff --git a/src/errors/api/resources.py b/src/errors/api/resources.py index db76b6f4..072152e7 100644 --- a/src/errors/api/resources.py +++ b/src/errors/api/resources.py @@ -169,20 +169,19 @@ def to_dict(self): class ErrorsResource(Resource): - # Wrap the view dispatch with a statsd timing. - @measure_view - def dispatch(self, *args, **kwargs): - return Resource.dispatch(self, *args, **kwargs) + pass + # def dispatch(self, *args, **kwargs): + # return Resource.dispatch(self, *args, **kwargs) - def _handle_500(self, request, exception): - # Create an OOPS report, then reply with a json-formatted error - # message. - import traceback + # def _handle_500(self, request, exception): + # # Create an OOPS report, then reply with a json-formatted error + # # message. + # import traceback - formatted = traceback.format_exc(exception) - exc_info = (type(exception), exception.args[0], formatted) - request.environ["oops.context"]["exc_info"] = exc_info - return Resource._handle_500(self, request, exception) + # formatted = traceback.format_exc(exception) + # exc_info = (type(exception), exception.args[0], formatted) + # request.environ["oops.context"]["exc_info"] = exc_info + # return Resource._handle_500(self, request, exception) class ErrorsMeta: @@ -338,7 +337,7 @@ class MostCommonProblemsResource(ErrorsResource): class Meta(ErrorsMeta): resource_name = "most-common-problems" - def _handle_request(self, bundle, start, finish): + def obj_get_list(self, bundle): release = bundle.request.GET.get("release", None) rootfs_build_version = bundle.request.GET.get("rootfs_build_version", None) channel_name = bundle.request.GET.get("channel_name", None) @@ -349,8 +348,10 @@ def _handle_request(self, bundle, start, finish): version = bundle.request.GET.get("version", None) pkg_arch = bundle.request.GET.get("pkg_arch", None) period = bundle.request.GET.get("period", None) - from_date = str(bundle.request.GET.get("from", "")).translate(None, "/-") - to_date = str(bundle.request.GET.get("to", "")).translate(None, "/-") + start = 0 + finish = int(bundle.request.GET.get("limit", "30")) + from_date = str(bundle.request.GET.get("from", "")).replace("/", "").replace("-", "") + to_date = str(bundle.request.GET.get("to", "")).replace("/", "").replace("-", "") user = bundle.request.GET.get("user", None) first_appearance = bundle.request.GET.get("first_appearance", False) snap = bundle.request.GET.get("snap", None) @@ -449,9 +450,7 @@ def _handle_request(self, bundle, start, finish): if first_appearance: if m.get("FirstSeen", "") != version: continue - if isinstance(bucket, str): - bucket = bucket.encode("utf-8") - hashed = sha1(bucket).hexdigest() + hashed = sha1(bucket.encode()).hexdigest() if cassie.get_problem_for_hash(hashed): href = "problem/%s" % hashed else: @@ -463,12 +462,12 @@ def _handle_request(self, bundle, start, finish): { "rank": rank, "count": count, - "package": srcpkg.decode("utf-8"), + "package": srcpkg, "first_seen": m.get("FirstSeen", ""), "last_seen": last_seen, "first_seen_release": m.get("FirstSeenRelease", ""), "last_seen_release": m.get("LastSeenRelease", ""), - "function": bucket.decode("utf-8"), + "function": bucket, "web_link": href, "report": report, } @@ -478,13 +477,6 @@ def _handle_request(self, bundle, start, finish): return results - def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - return self._handle_request(bundle, start, finish) - - return wrapped() - class CreateBugResource(ErrorsResource): signature = fields.CharField(attribute="signature") @@ -551,12 +543,8 @@ def obj_get_list(self, bundle): if ubuntu_version.startswith("Ubuntu "): ubuntu_version = ubuntu_version.replace("Ubuntu ", "") - class wrapped(list): - def __getslice__(self, start, finish): - results = launchpad.get_versions_for_binary(binary_package, ubuntu_version) - return [ResultObject({"versions": results})] - - return wrapped() + results = launchpad.get_versions_for_binary(binary_package, ubuntu_version) + return [ResultObject({"versions": results})] class SystemImageVersionsResource(ErrorsResource): diff --git a/src/errors/cassie.py b/src/errors/cassie.py index 06a3493f..46e1e642 100644 --- a/src/errors/cassie.py +++ b/src/errors/cassie.py @@ -171,8 +171,6 @@ def get_bucket_counts( count = row.value if not show_failed and column.startswith("failed"): continue - if isinstance(column, str): - column = column.encode("utf-8") try: existing = results[column] except KeyError: diff --git a/src/errors/context_processors.py b/src/errors/context_processors.py index 515eae28..f34ea498 100644 --- a/src/errors/context_processors.py +++ b/src/errors/context_processors.py @@ -1,9 +1,10 @@ +from urllib.parse import quote + from django.conf import settings from django.contrib.auth import REDIRECT_FIELD_NAME -from django.utils.http import urlquote def login_url_with_redirect(request): - path = urlquote(request.get_full_path()) + path = quote(request.get_full_path()) url = "%s?%s=%s" % (settings.LOGIN_URL, REDIRECT_FIELD_NAME, path) return {"login_url": url} diff --git a/src/errors/settings.py b/src/errors/settings.py index 510e2d21..b234e1be 100644 --- a/src/errors/settings.py +++ b/src/errors/settings.py @@ -7,21 +7,11 @@ ALLOWED_HOSTS = ["*"] -# DATABASES = config.django_databases - PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) -DEBUG = False - -ADMINS = () +DEBUG = True -MANAGERS = ADMINS - -# Full import path of a serializer class to use for serializing session data. -# Global default for this switched to JSONSerializer with Django 1.6 -# c.f. -# https://stackoverflow.com/questions/24229397/django-object-is-not-json-serializable-error-after-upgrading-django-to-1-6-5 -SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer" +WSGI_APPLICATION = "errors.wsgi.application" # If you set this to False, Django will make some optimizations so as not # to load the internationalization machinery. @@ -43,17 +33,12 @@ # 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 = "%s" % os.path.join(PROJECT_ROOT, "../static") +STATIC_ROOT = os.path.join(PROJECT_ROOT, "../static") # 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". @@ -73,7 +58,7 @@ # Make this unique, and don't share it with anybody. SECRET_KEY = config.errors_secret_key -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( "django.middleware.common.CommonMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.csrf.CsrfViewMiddleware", @@ -121,10 +106,6 @@ "django.contrib.sites", "django.contrib.messages", "django.contrib.staticfiles", - # Uncomment the next line to enable the admin: - # 'django.contrib.admin', - # Uncomment the next line to enable admin documentation: - # 'django.contrib.admindocs', "errors", "social_django", ) diff --git a/src/errors/static/js/mean_time_between_failures.js b/src/errors/static/js/mean_time_between_failures.js index 8e6f71f4..a30dc62f 100644 --- a/src/errors/static/js/mean_time_between_failures.js +++ b/src/errors/static/js/mean_time_between_failures.js @@ -167,7 +167,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { var oneDay = 86400000; for (obj in data.objects) { var vals = data.objects[obj].values; - if (vals.length > 0 && vals[vals.length - 1].x < releaseDay) { + if (vals && vals.length > 0 && vals[vals.length - 1].x < releaseDay) { /* If the graph doesn't include the release day, expand the * range to show it. Use three days past so that the label * fits. */ @@ -185,7 +185,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { container.transition().duration(500).call(chart); /* If we don't have any data */ - if (vals.length <= 0) { + if (vals && vals.length <= 0) { return chart; } @@ -240,7 +240,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { }); } -function mean_time_between_failures_graph(means) { +function mean_time_between_failures_graph() { YUI().use('node', 'event-key', 'event-valuechange', 'event-outside', function(Y) { function mean_time_between_failures_changed() { var selected_release; diff --git a/src/errors/static/js/most_common_problems.js b/src/errors/static/js/most_common_problems.js index 401f6be2..1fb3a1c9 100644 --- a/src/errors/static/js/most_common_problems.js +++ b/src/errors/static/js/most_common_problems.js @@ -147,7 +147,7 @@ function(Y) { } return o.value; } - if (reports_state_fixed_master[o.data.report][0]) { + if (reports_state_fixed_master && reports_state_fixed_master[o.data.report] && reports_state_fixed_master[o.data.report][0]) { /* If the problem has appeared in the most recent published version */ if (latest) { @@ -238,7 +238,7 @@ function(Y) { var bugFormatter = function(o) { var failed = o.data['function'].indexOf('failed:') == 0; var unknown = o.data['package'] == 'unknown package'; - if (o.value || !user_is_authenticated || failed) { + if (reports_state_fixed_master && (o.value || !user_is_authenticated || failed)) { bug_id = o.value; /* show master bug if bug is a duplicate */ state = reports_state_fixed_master[bug_id]; diff --git a/src/errors/templates/main.html b/src/errors/templates/main.html index 255b826d..62786748 100644 --- a/src/errors/templates/main.html +++ b/src/errors/templates/main.html @@ -31,17 +31,11 @@ var loggedin_user = ''; {% endif %} /* used in most_common_problems.js */ - var allow_bug_filing = {{ allow_bug_filing }}; - - var means = { - {% for release, m in means.items %} - '{{ release }}' : [ - {% for period, count in m %} - { x: {{ period }} * 1000, y: {{ count }} }, - {% endfor %} - ], - {% endfor %} - }; + {% if allow_bug_filing %} + var allow_bug_filing = true + {% else %} + var allow_bug_filing = false + {% endif %} YUI().use('event', 'querystring', 'node', function(Y) { Y.on('load', function() { @@ -64,7 +58,7 @@ Y.one('#notes').setStyle('display', 'block'); Y.one('#note-message').setHTML(msg); } - mean_time_between_failures_graph(means); + mean_time_between_failures_graph(); most_common_problems_table(loggedin_user); }); }); diff --git a/src/errors/views.py b/src/errors/views.py index 938efd5b..03904b25 100644 --- a/src/errors/views.py +++ b/src/errors/views.py @@ -9,6 +9,7 @@ from errors.auth import can_see_stacktraces from errors.metrics import measure_view from errortracker.launchpad import bug_get_master_id +from errortracker import config def common_c(): @@ -65,7 +66,7 @@ def bucket(request, bucketid=None, hashed=None): "traceback": traceback, "report": report, "report_master": bug_get_master_id(report), - "allow_bug_filing": settings.ALLOW_BUG_FILING, + "allow_bug_filing": config.allow_bug_filing, } if failuredata: c["retrace_failure_reason"] = failuredata.get("Reason", "") @@ -88,7 +89,7 @@ def oops(request, oopsid): @measure_view def main(request): - c = {"allow_bug_filing": settings.ALLOW_BUG_FILING} + c = {"allow_bug_filing": config.allow_bug_filing} # hacks for request being empty with django 1.11.11 after passing to render c["authenticated"] = request.user.is_authenticated c["username"] = request.user.username diff --git a/src/errors/wsgi.py b/src/errors/wsgi.py index 83b85e4c..ce46b9bd 100644 --- a/src/errors/wsgi.py +++ b/src/errors/wsgi.py @@ -1,30 +1,16 @@ -import os - -import oops_dictconfig -from oops_wsgi import install_hooks, make_app -from oops_wsgi.django import OOPSWSGIHandler - -from daisy import config -from errors import metrics -from errors.version_middleware import VersionMiddleware +""" +WSGI config for errors project. -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "errors.settings") -import django -from django.template.loader import render_to_string +It exposes the WSGI callable as a module-level variable named ``application``. +For more information on this file, see +https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/ +""" -def error_renderer(report): - return str(render_to_string("500.html", report)) +import os +from django.core.wsgi import get_wsgi_application -django.setup() +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "errors.settings") -cfg = oops_dictconfig.config_from_dict(config.oops_config) -install_hooks(cfg) -cfg.template["reporter"] = "errors" -kwargs = { - "oops_on_status": ["500"], - "error_render": error_renderer, -} -metrics.revno() -application = VersionMiddleware(make_app(OOPSWSGIHandler(), cfg, **kwargs)) +application = get_wsgi_application() diff --git a/src/errortracker/launchpad.py b/src/errortracker/launchpad.py index 014690ef..b2beb2cd 100644 --- a/src/errortracker/launchpad.py +++ b/src/errortracker/launchpad.py @@ -30,8 +30,6 @@ _oauth_realm = "https://api.launchpad.net" _launchpad_base = "https://api.launchpad.net/devel" -# TODO: replace hardcoding of 'ubuntu' in all these urls e.g. so we can use -# ubuntu-rtm too _get_published_binaries_url = ( _launchpad_base + "/ubuntu/+archive/primary" "?ws.op=getPublishedBinaries&binary_name=%s" @@ -290,17 +288,12 @@ def pocket_for_binaries(specific_packages): # None, as packages like Skype will always return None and we # shouldn't keep asking. _cache[package, version, release] = "%s" % (pocket) - result.append(pocket) + result.append(pocket) return result def _get_pocket_for_binary_version(package, version, release): - if release == "Ubuntu RTM 14.09": - url = _get_published_binaries_url.replace("/ubuntu/", "/ubuntu-rtm/") % urllib.parse.quote( - package - ) - else: - url = _get_published_binaries_url % urllib.parse.quote(package) + url = _get_published_binaries_url % urllib.parse.quote(package) # the package version may be Superseded or Obsolete url = url.replace("&status=Published", "") url += "&version=" + urllib.parse.quote_plus(version) diff --git a/src/retracer/config/Ubuntu 26.04/sources.list b/src/retracer/config/Ubuntu 26.04/sources.list index a0ecb221..cad1292f 100644 --- a/src/retracer/config/Ubuntu 26.04/sources.list +++ b/src/retracer/config/Ubuntu 26.04/sources.list @@ -8,6 +8,6 @@ deb-src http://archive.ubuntu.com/ubuntu/ resolute-updates main restricted unive #deb-src http://archive.ubuntu.com/ubuntu/ resolute-proposed main restricted universe multiverse deb-src http://security.ubuntu.com/ubuntu/ resolute-security main restricted universe multiverse -deb http://ddebs.ubuntu.com resolute main restricted universe multiverse -deb http://ddebs.ubuntu.com resolute-updates main restricted universe multiverse -deb http://ddebs.ubuntu.com resolute-proposed main restricted universe multiverse +deb [trusted=yes] http://ddebs.ubuntu.com resolute main restricted universe multiverse +deb [trusted=yes] http://ddebs.ubuntu.com resolute-updates main restricted universe multiverse +deb [trusted=yes] http://ddebs.ubuntu.com resolute-proposed main restricted universe multiverse From f0edb009098134e4e61eb00eac48a9f134256bb1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:07:10 +0000 Subject: [PATCH 02/17] fix(errors): replace Python 2 __getslice__ pattern with direct obj_get_list implementations All API resources previously used a 'wrapped(list)' subclass with __getslice__ to lazily fetch data from Cassandra when Tastypie applied pagination. In Python 3, __getslice__ is never called (replaced by __getitem__ with a slice object), causing all these endpoints to return empty results. Fix by implementing the logic directly in obj_get_list for each resource, returning a proper list. Also fix remaining Python 3 str/bytes issues: - sha1() in CreateBugResource and PackageVersionNewBuckets now uses .encode() - PackageVersionNewBuckets no longer converts str buckets to bytes unnecessarily - Remove unused measure_view import and commented-out dead code in ErrorsResource Co-authored-by: Hyask <7489759+Hyask@users.noreply.github.com> --- src/errors/api/resources.py | 473 ++++++++++++++++-------------------- src/errors/views.py | 3 +- 2 files changed, 208 insertions(+), 268 deletions(-) diff --git a/src/errors/api/resources.py b/src/errors/api/resources.py index 072152e7..bea3b0dc 100644 --- a/src/errors/api/resources.py +++ b/src/errors/api/resources.py @@ -20,8 +20,6 @@ from errors import cassie from errortracker import config, launchpad -from ..metrics import measure_view - release_color_mapping = OrderedDict() # If you add or change colors here, also update the colors in @@ -170,18 +168,6 @@ def to_dict(self): class ErrorsResource(Resource): pass - # def dispatch(self, *args, **kwargs): - # return Resource.dispatch(self, *args, **kwargs) - - # def _handle_500(self, request, exception): - # # Create an OOPS report, then reply with a json-formatted error - # # message. - # import traceback - - # formatted = traceback.format_exc(exception) - # exc_info = (type(exception), exception.args[0], formatted) - # request.environ["oops.context"]["exc_info"] = exc_info - # return Resource._handle_500(self, request, exception) class ErrorsMeta: @@ -203,16 +189,11 @@ class Meta(ErrorsMeta): resource_name = "retracers-results" def obj_get_list(self, bundle): - # The results are wrapped in the slice operation for a list to follow - # the pattern of lazy evalution that tastypie uses for talking to ORMs. - # The point at which tastypie attempts to slice a list is the first - # point that the pagination data is known. - class wrapped(list): - def __getslice__(self, start, finish): - for date, val in cassie.get_retracer_counts(start, finish): - yield ResultObject({"date": date, "value": val}) - - return wrapped() + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + return [ + ResultObject({"date": date, "value": val}) + for date, val in cassie.get_retracer_counts(0, limit) + ] def obj_get(self, request, **kwargs): date = kwargs["pk"] @@ -228,12 +209,11 @@ class Meta(ErrorsMeta): resource_name = "retracers-average-processing-time" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(self, start, finish): - for date, result in cassie.get_retracer_means(start, finish): - yield ResultObject({"date": date, "value": result}) - - return wrapped() + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + return [ + ResultObject({"date": date, "value": result}) + for date, result in cassie.get_retracer_means(0, limit) + ] class InstanceCountResource(ErrorsResource): @@ -245,22 +225,24 @@ class Meta(ErrorsMeta): resource_name = "instances-count" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(self, start, finish): - for release in release_color_mapping: - results = [] - counts = cassie.get_crash_count(start, finish, release) - for date, result in counts: - results.append({"date": date, "value": result}) - if results: - result = { + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + results = [] + for release in release_color_mapping: + release_results = [ + {"date": date, "value": result} + for date, result in cassie.get_crash_count(0, limit, release) + ] + if release_results: + results.append( + ResultObject( + { "release": release, - "value": results, + "value": release_results, "color": release_color_mapping[release], } - yield ResultObject(result) - - return wrapped() + ) + ) + return results class ProblemCountResource(ErrorsResource): @@ -271,12 +253,11 @@ class Meta(ErrorsMeta): resource_name = "problems-count" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(self, start, finish): - for date, result in cassie.get_total_buckets_by_day(start, finish): - yield ResultObject({"date": date, "value": result}) - - return wrapped() + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + return [ + ResultObject({"date": date, "value": result}) + for date, result in cassie.get_total_buckets_by_day(0, limit) + ] class DayOopsResource(ErrorsResource): @@ -515,7 +496,7 @@ def obj_create(self, bundle): if r[0].startswith("Ubuntu ") ] ) - hashed = sha1(bucket).hexdigest() + hashed = sha1(bucket.encode()).hexdigest() if not cassie.get_problem_for_hash(hashed): hashed = "" report, url = launchpad.create_bug(bucket, src, releases, hashed, lastseen) @@ -556,16 +537,9 @@ class Meta(ErrorsMeta): resource_name = "system-image-versions" def obj_get_list(self, bundle): - # image_type can be one of rootfs_build, channel, device_name, or - # device_image image_type = bundle.request.GET.get("image_type", None) - - class wrapped(list): - def __getslice__(self, start, finish): - results = cassie.get_system_image_versions(image_type) - return [ResultObject({"versions": results})] - - return wrapped() + results = cassie.get_system_image_versions(image_type) + return [ResultObject({"versions": results})] # TODO make SystemCrashesResource and InstanceResource obj_get only. @@ -584,30 +558,28 @@ class Meta(ErrorsMeta): resource_name = "reports-for-system" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - system_id = bundle.request.GET.get("system", None) - start = bundle.request.GET.get("start", None) - cols = ["Date", "ProblemType", "Package", "ExecutablePath"] - crashes = cassie.get_user_crashes(system_id, start=start) - # TODO: use a cassandra function that does a multiget of the - # crashes - for crash, ts in crashes: - d = cassie.get_crash(str(crash), columns=cols) - program = split_package_and_version(d.get("Package", ""))[0] - if not program: - program = d.get("ExecutablePath", "") - yield ResultObject( - { - "timestamp": ts, - "instance": crash, - "occurred": d.get("Date", ""), - "problemtype": d.get("ProblemType", ""), - "program": program, - } - ) - - return wrapped() + system_id = bundle.request.GET.get("system", None) + cursor = bundle.request.GET.get("start", None) + cols = ["Date", "ProblemType", "Package", "ExecutablePath"] + crashes = cassie.get_user_crashes(system_id, start=cursor) + results = [] + for crash, ts in crashes: + d = cassie.get_crash(str(crash), columns=cols) + program = split_package_and_version(d.get("Package", ""))[0] + if not program: + program = d.get("ExecutablePath", "") + results.append( + ResultObject( + { + "timestamp": ts, + "instance": crash, + "occurred": d.get("Date", ""), + "problemtype": d.get("ProblemType", ""), + "program": program, + } + ) + ) + return results class RateOfCrashesResource(ErrorsResource): @@ -631,22 +603,17 @@ def obj_get_list(self, bundle): release = bundle.request.GET.get("release", None) exclude_proposed = bundle.request.GET.get("exclude_proposed", None) absolute_uri = bundle.request.build_absolute_uri("/") - - class wrapped(list): - def __getslice__(self, start, finish): - result = cassie.get_package_crash_rate( - release, - src_package, - old_version, - new_version, - phased_update_percentage, - date, - absolute_uri, - exclude_proposed, - ) - yield ResultObject(result) - - return wrapped() + result = cassie.get_package_crash_rate( + release, + src_package, + old_version, + new_version, + phased_update_percentage, + date, + absolute_uri, + exclude_proposed, + ) + return [ResultObject(result)] class PackageVersionNewBuckets(ErrorsResource): @@ -656,7 +623,7 @@ class PackageVersionNewBuckets(ErrorsResource): class Meta(ErrorsMeta): resource_name = "package-version-new-buckets" - def _handle_request(self, bundle, start, finish): + def _handle_request(self, bundle): src_package = bundle.request.GET.get("package", None) previous_version = bundle.request.GET.get("previous_version", None) new_version = bundle.request.GET.get("new_version", None) @@ -671,23 +638,17 @@ def _handle_request(self, bundle, start, finish): results = [] buckets = cassie.get_package_new_buckets(src_package, previous_version, new_version) for bucket in buckets: - if isinstance(bucket, str): - bucket = bucket.encode("utf-8") - hashed = sha1(bucket).hexdigest() + hashed = sha1(bucket.encode()).hexdigest() if cassie.get_problem_for_hash(hashed): href = "problem/%s" % hashed else: href = "bucket/?id=%s" % quote(bucket) href = "%s%s" % (bundle.request.build_absolute_uri("/"), href) - results.append(ResultObject({"function": bucket.decode("utf-8"), "web_link": href})) + results.append(ResultObject({"function": bucket, "web_link": href})) return results def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - return self._handle_request(bundle, start, finish) - - return wrapped() + return self._handle_request(bundle) class InstanceResource(ErrorsResource): @@ -699,13 +660,8 @@ class Meta(ErrorsMeta): def obj_get_list(self, bundle): oopsid = bundle.request.GET.get("id", None) - - class wrapped(list): - def __getslice__(self, start, finish): - results = cassie.get_crash(oopsid) - return [ResultObject({"instance": results})] - - return wrapped() + results = cassie.get_crash(oopsid) + return [ResultObject({"instance": results})] class AverageCrashesResource(ErrorsResource): @@ -717,91 +673,88 @@ class Meta(ErrorsMeta): resource_name = "average-crashes" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - release = bundle.request.GET.get("release", None) - package = bundle.request.GET.get("package", None) - version = bundle.request.GET.get("version", None) - fields = [] - package and fields.append(package) - version and fields.append(version) - field = ":".join(fields) - if not release: - # releases = sorted(release_color_mapping.items()) - # By default only display non-EoL releases to make the - # legend fit better interim fix for LP: #1073560. - releases = [] - for release in release_color_mapping: - if release not in [ - "Ubuntu 12.04", - "Ubuntu 12.10", - "Ubuntu 13.04", - "Ubuntu 13.10", - "Ubuntu 14.04", - "Ubuntu 14.10", - "Ubuntu 15.04", - "Ubuntu 15.10", - "Ubuntu 16.04", - "Ubuntu 16.10", - "Ubuntu 17.04", - "Ubuntu 17.10", - "Ubuntu 18.10", - "Ubuntu 19.04", - "Ubuntu 19.10", - "Ubuntu 20.10", - "Ubuntu 21.04", - "Ubuntu 21.10", - "Ubuntu 22.10", - "Ubuntu 23.04", - "Ubuntu 23.10", - ]: - releases.append((release, release_color_mapping[release])) - else: - if release in release_color_mapping: - releases = [(release, release_color_mapping[release])] - else: - releases = [(release, "#000000")] - - for release, color in releases: - if field: - f = "%s:%s" % (release, field) - else: - f = release - if release != "Ubuntu 12.04": - standards_color = precise_standards_color_mapping[release] - problems = cassie.get_average_crashes(f, release, 360) - recoverables = cassie.get_average_crashes( - "RecoverableProblem:" + f, release, 360 - ) - - # Combine the Crash and RecoverableProblem data. - results = {} - for item in problems: - results[item[0]] = item[1] - for item in recoverables: - if item[0] in results: - results[item[0]] -= item[1] - results = sorted( - list(results.items()), key=cmp_to_key(lambda x, y: x[0] <= y[0]) - ) - - res = [{"x": result[0] * 1000, "y": result[1]} for result in results] - d = { - "key": "%s (by 12.04 standards)" % release, + release = bundle.request.GET.get("release", None) + package = bundle.request.GET.get("package", None) + version = bundle.request.GET.get("version", None) + field_parts = [] + package and field_parts.append(package) + version and field_parts.append(version) + field = ":".join(field_parts) + if not release: + # releases = sorted(release_color_mapping.items()) + # By default only display non-EoL releases to make the + # legend fit better interim fix for LP: #1073560. + releases = [ + (r, release_color_mapping[r]) + for r in release_color_mapping + if r + not in [ + "Ubuntu 12.04", + "Ubuntu 12.10", + "Ubuntu 13.04", + "Ubuntu 13.10", + "Ubuntu 14.04", + "Ubuntu 14.10", + "Ubuntu 15.04", + "Ubuntu 15.10", + "Ubuntu 16.04", + "Ubuntu 16.10", + "Ubuntu 17.04", + "Ubuntu 17.10", + "Ubuntu 18.10", + "Ubuntu 19.04", + "Ubuntu 19.10", + "Ubuntu 20.10", + "Ubuntu 21.04", + "Ubuntu 21.10", + "Ubuntu 22.10", + "Ubuntu 23.04", + "Ubuntu 23.10", + ] + ] + else: + if release in release_color_mapping: + releases = [(release, release_color_mapping[release])] + else: + releases = [(release, "#000000")] + + output = [] + for r, color in releases: + f = "%s:%s" % (r, field) if field else r + if r != "Ubuntu 12.04": + standards_color = precise_standards_color_mapping[r] + problems = cassie.get_average_crashes(f, r, 360) + recoverables = cassie.get_average_crashes("RecoverableProblem:" + f, r, 360) + + # Combine the Crash and RecoverableProblem data. + combined = {} + for item in problems: + combined[item[0]] = item[1] + for item in recoverables: + if item[0] in combined: + combined[item[0]] -= item[1] + combined = sorted( + list(combined.items()), key=cmp_to_key(lambda x, y: x[0] <= y[0]) + ) + + res = [{"x": result[0] * 1000, "y": result[1]} for result in combined] + output.append( + ResultObject( + { + "key": "%s (by 12.04 standards)" % r, "values": res, "color": standards_color, } - yield ResultObject(d) - - res = [{"x": result[0] * 1000, "y": result[1]} for result in problems] - d = {"key": release, "values": res, "color": color} - yield ResultObject(d) - else: - results = cassie.get_average_crashes(f, release, 360) - res = [{"x": result[0] * 1000, "y": result[1]} for result in results] - yield ResultObject({"key": release, "values": res, "color": color}) + ) + ) - return wrapped() + res = [{"x": result[0] * 1000, "y": result[1]} for result in problems] + output.append(ResultObject({"key": r, "values": res, "color": color})) + else: + results = cassie.get_average_crashes(f, r, 360) + res = [{"x": result[0] * 1000, "y": result[1]} for result in results] + output.append(ResultObject({"key": r, "values": res, "color": color})) + return output class AverageInstancesResource(ErrorsResource): @@ -813,16 +766,13 @@ class Meta(ErrorsMeta): resource_name = "average-instances" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - bucketid = unquote(bundle.request.GET.get("id", None)) - for release, color in release_color_mapping.items(): - r = cassie.get_average_instances(bucketid, release, 360) - values = [{"x": i[0] * 1000, "y": i[1]} for i in r] - d = {"key": release, "values": values, "color": color} - yield ResultObject(d) - - return wrapped() + bucketid = unquote(bundle.request.GET.get("id", None)) + results = [] + for release, color in release_color_mapping.items(): + raw = cassie.get_average_instances(bucketid, release, 360) + values = [{"x": i[0] * 1000, "y": i[1]} for i in raw] + results.append(ResultObject({"key": release, "values": values, "color": color})) + return results class ReportsStateResource(ErrorsResource): @@ -952,28 +902,28 @@ class Meta(ErrorsMeta): resource_name = "instances" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - bucketid = unquote(bundle.request.GET.get("id", None)) - start = bundle.request.GET.get("start", None) - cols = ["DistroRelease", "Package", "Architecture"] - gen = cassie.get_crashes_for_bucket(bucketid, start=start) - for oops in gen: - ts = (oops.time - 0x01B21DD213814000) * 100 / 1e9 - ts = datetime.datetime.utcfromtimestamp(ts) - d = cassie.get_crash(str(oops), columns=cols) - ver = split_package_and_version(d.get("Package", ""))[1] - yield ResultObject( - { - "timestamp": ts, - "incident": oops, - "package_version": ver, - "ubuntu_version": d.get("DistroRelease", ""), - "architecture": d.get("Architecture", ""), - } - ) - - return wrapped() + bucketid = unquote(bundle.request.GET.get("id", None)) + cursor = bundle.request.GET.get("start", None) + cols = ["DistroRelease", "Package", "Architecture"] + gen = cassie.get_crashes_for_bucket(bucketid, start=cursor) + results = [] + for oops in gen: + ts = (oops.time - 0x01B21DD213814000) * 100 / 1e9 + ts = datetime.datetime.utcfromtimestamp(ts) + d = cassie.get_crash(str(oops), columns=cols) + ver = split_package_and_version(d.get("Package", ""))[1] + results.append( + ResultObject( + { + "timestamp": ts, + "incident": oops, + "package_version": ver, + "ubuntu_version": d.get("DistroRelease", ""), + "architecture": d.get("Architecture", ""), + } + ) + ) + return results class VersionsResource(ErrorsResource): @@ -1038,36 +988,31 @@ def update(self, results, version, release, codename, total, src_pkg=None): results[version]._data["total"] += total def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - bucketid = bundle.request.GET.get("id", None) - vers = cassie.get_versions_for_bucket(bucketid) - src_pkg = cassie.get_source_package_for_bucket(bucketid) - results = {} - # store package versions for later sorting - versions = [] - for ver in vers: - release, version = ver - total = vers[ver] - if release in codenames: - codename = codenames[release] - else: - codename = "derivatives" - versions.append(version) - self.update(results, version, release, codename, total, src_pkg) - # Produce totals for all Ubuntu releases as the last row. - self.update(results, "All versions", release, codename, total) - versions.sort(key=cmp_to_key(apt.apt_pkg.version_compare)) - if vers: - versions.append("All versions") - oresults = OrderedDict() - for version in versions: - oresults[version] = results[version] - return list(oresults.values()) - else: - return {} - - return wrapped() + bucketid = bundle.request.GET.get("id", None) + vers = cassie.get_versions_for_bucket(bucketid) + src_pkg = cassie.get_source_package_for_bucket(bucketid) + results = {} + # store package versions for later sorting + versions = [] + for ver in vers: + release, version = ver + total = vers[ver] + if release in codenames: + codename = codenames[release] + else: + codename = "derivatives" + versions.append(version) + self.update(results, version, release, codename, total, src_pkg) + # Produce totals for all Ubuntu releases as the last row. + self.update(results, "All versions", release, codename, total) + versions.sort(key=cmp_to_key(apt.apt_pkg.version_compare)) + if vers: + versions.append("All versions") + oresults = OrderedDict() + for version in versions: + oresults[version] = results[version] + return list(oresults.values()) + return [] class CrashSignaturesForBug(ErrorsResource): @@ -1078,10 +1023,6 @@ class Meta(ErrorsMeta): def obj_get_list(self, bundle): bug = bundle.request.GET.get("bug", None) - - class wrapped(list): - def __getslice__(self, start, finish): - results = cassie.get_signatures_for_bug(bug) - return [ResultObject({"signatures": results[start:finish]})] - - return wrapped() + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + results = cassie.get_signatures_for_bug(bug) + return [ResultObject({"signatures": results[:limit]})] diff --git a/src/errors/views.py b/src/errors/views.py index 03904b25..a6732cd0 100644 --- a/src/errors/views.py +++ b/src/errors/views.py @@ -1,6 +1,5 @@ from urllib.parse import quote -from django.conf import settings from django.contrib.auth import logout from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render @@ -8,8 +7,8 @@ from errors import cassie, version from errors.auth import can_see_stacktraces from errors.metrics import measure_view -from errortracker.launchpad import bug_get_master_id from errortracker import config +from errortracker.launchpad import bug_get_master_id def common_c(): From 84f89dbeec73a7cf05c589173237172ab5a41f7d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:15:17 +0000 Subject: [PATCH 03/17] revert: undo WIP and its follow-up fix to re-apply as clean commits Co-authored-by: Hyask <7489759+Hyask@users.noreply.github.com> --- .github/copilot-instructions.md | 3 +- README.md | 2 - src/errors/api/resources.py | 507 ++++++++++-------- src/errors/cassie.py | 2 + src/errors/context_processors.py | 5 +- src/errors/settings.py | 27 +- .../static/js/mean_time_between_failures.js | 6 +- src/errors/static/js/most_common_problems.js | 4 +- src/errors/templates/main.html | 18 +- src/errors/views.py | 6 +- src/errors/wsgi.py | 34 +- src/errortracker/launchpad.py | 11 +- src/retracer/config/Ubuntu 26.04/sources.list | 6 +- 13 files changed, 373 insertions(+), 258 deletions(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 027405f7..1f3f8195 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -51,7 +51,6 @@ src/ # Error Tracker application source amqp_utils.py # RabbitMQ/AMQP utilities config.py # Configuration handling utils.py # Shared utilities - populate-test-data.sh # Script to put test data into a local Cassandra (for development) retracer/ # Symbolic retracer (turns addresses into stack frames) config/ # Per-release retracer configuration retracer.py # Retracer entry point @@ -102,7 +101,7 @@ The application relies on: ### Test Architecture -There are multiple layers of testing: +There are two layers of testing: 1. **Unit/functional tests** (`src/tests/`) — pytest-based tests that require Cassandra, RabbitMQ, and Swift running locally. These test individual components (submission, retracing, Cassandra operations, OOPS processing). diff --git a/README.md b/README.md index 61e8bbec..80edeb19 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,6 @@ errors: ./run-errors.sh ``` -If you need test data in Cassandra, you can run the `./populate-test-data.sh` in that same folder. - From there, you can manually upload a crash with the following, from any folder containing a `.crash` file with its corresponding `.upload` file: ``` diff --git a/src/errors/api/resources.py b/src/errors/api/resources.py index bea3b0dc..db76b6f4 100644 --- a/src/errors/api/resources.py +++ b/src/errors/api/resources.py @@ -20,6 +20,8 @@ from errors import cassie from errortracker import config, launchpad +from ..metrics import measure_view + release_color_mapping = OrderedDict() # If you add or change colors here, also update the colors in @@ -167,7 +169,20 @@ def to_dict(self): class ErrorsResource(Resource): - pass + # Wrap the view dispatch with a statsd timing. + @measure_view + def dispatch(self, *args, **kwargs): + return Resource.dispatch(self, *args, **kwargs) + + def _handle_500(self, request, exception): + # Create an OOPS report, then reply with a json-formatted error + # message. + import traceback + + formatted = traceback.format_exc(exception) + exc_info = (type(exception), exception.args[0], formatted) + request.environ["oops.context"]["exc_info"] = exc_info + return Resource._handle_500(self, request, exception) class ErrorsMeta: @@ -189,11 +204,16 @@ class Meta(ErrorsMeta): resource_name = "retracers-results" def obj_get_list(self, bundle): - limit = int(bundle.request.GET.get("limit", self._meta.limit)) - return [ - ResultObject({"date": date, "value": val}) - for date, val in cassie.get_retracer_counts(0, limit) - ] + # The results are wrapped in the slice operation for a list to follow + # the pattern of lazy evalution that tastypie uses for talking to ORMs. + # The point at which tastypie attempts to slice a list is the first + # point that the pagination data is known. + class wrapped(list): + def __getslice__(self, start, finish): + for date, val in cassie.get_retracer_counts(start, finish): + yield ResultObject({"date": date, "value": val}) + + return wrapped() def obj_get(self, request, **kwargs): date = kwargs["pk"] @@ -209,11 +229,12 @@ class Meta(ErrorsMeta): resource_name = "retracers-average-processing-time" def obj_get_list(self, bundle): - limit = int(bundle.request.GET.get("limit", self._meta.limit)) - return [ - ResultObject({"date": date, "value": result}) - for date, result in cassie.get_retracer_means(0, limit) - ] + class wrapped(list): + def __getslice__(self, start, finish): + for date, result in cassie.get_retracer_means(start, finish): + yield ResultObject({"date": date, "value": result}) + + return wrapped() class InstanceCountResource(ErrorsResource): @@ -225,24 +246,22 @@ class Meta(ErrorsMeta): resource_name = "instances-count" def obj_get_list(self, bundle): - limit = int(bundle.request.GET.get("limit", self._meta.limit)) - results = [] - for release in release_color_mapping: - release_results = [ - {"date": date, "value": result} - for date, result in cassie.get_crash_count(0, limit, release) - ] - if release_results: - results.append( - ResultObject( - { + class wrapped(list): + def __getslice__(self, start, finish): + for release in release_color_mapping: + results = [] + counts = cassie.get_crash_count(start, finish, release) + for date, result in counts: + results.append({"date": date, "value": result}) + if results: + result = { "release": release, - "value": release_results, + "value": results, "color": release_color_mapping[release], } - ) - ) - return results + yield ResultObject(result) + + return wrapped() class ProblemCountResource(ErrorsResource): @@ -253,11 +272,12 @@ class Meta(ErrorsMeta): resource_name = "problems-count" def obj_get_list(self, bundle): - limit = int(bundle.request.GET.get("limit", self._meta.limit)) - return [ - ResultObject({"date": date, "value": result}) - for date, result in cassie.get_total_buckets_by_day(0, limit) - ] + class wrapped(list): + def __getslice__(self, start, finish): + for date, result in cassie.get_total_buckets_by_day(start, finish): + yield ResultObject({"date": date, "value": result}) + + return wrapped() class DayOopsResource(ErrorsResource): @@ -318,7 +338,7 @@ class MostCommonProblemsResource(ErrorsResource): class Meta(ErrorsMeta): resource_name = "most-common-problems" - def obj_get_list(self, bundle): + def _handle_request(self, bundle, start, finish): release = bundle.request.GET.get("release", None) rootfs_build_version = bundle.request.GET.get("rootfs_build_version", None) channel_name = bundle.request.GET.get("channel_name", None) @@ -329,10 +349,8 @@ def obj_get_list(self, bundle): version = bundle.request.GET.get("version", None) pkg_arch = bundle.request.GET.get("pkg_arch", None) period = bundle.request.GET.get("period", None) - start = 0 - finish = int(bundle.request.GET.get("limit", "30")) - from_date = str(bundle.request.GET.get("from", "")).replace("/", "").replace("-", "") - to_date = str(bundle.request.GET.get("to", "")).replace("/", "").replace("-", "") + from_date = str(bundle.request.GET.get("from", "")).translate(None, "/-") + to_date = str(bundle.request.GET.get("to", "")).translate(None, "/-") user = bundle.request.GET.get("user", None) first_appearance = bundle.request.GET.get("first_appearance", False) snap = bundle.request.GET.get("snap", None) @@ -431,7 +449,9 @@ def obj_get_list(self, bundle): if first_appearance: if m.get("FirstSeen", "") != version: continue - hashed = sha1(bucket.encode()).hexdigest() + if isinstance(bucket, str): + bucket = bucket.encode("utf-8") + hashed = sha1(bucket).hexdigest() if cassie.get_problem_for_hash(hashed): href = "problem/%s" % hashed else: @@ -443,12 +463,12 @@ def obj_get_list(self, bundle): { "rank": rank, "count": count, - "package": srcpkg, + "package": srcpkg.decode("utf-8"), "first_seen": m.get("FirstSeen", ""), "last_seen": last_seen, "first_seen_release": m.get("FirstSeenRelease", ""), "last_seen_release": m.get("LastSeenRelease", ""), - "function": bucket, + "function": bucket.decode("utf-8"), "web_link": href, "report": report, } @@ -458,6 +478,13 @@ def obj_get_list(self, bundle): return results + def obj_get_list(self, bundle): + class wrapped(list): + def __getslice__(klass, start, finish): + return self._handle_request(bundle, start, finish) + + return wrapped() + class CreateBugResource(ErrorsResource): signature = fields.CharField(attribute="signature") @@ -496,7 +523,7 @@ def obj_create(self, bundle): if r[0].startswith("Ubuntu ") ] ) - hashed = sha1(bucket.encode()).hexdigest() + hashed = sha1(bucket).hexdigest() if not cassie.get_problem_for_hash(hashed): hashed = "" report, url = launchpad.create_bug(bucket, src, releases, hashed, lastseen) @@ -524,8 +551,12 @@ def obj_get_list(self, bundle): if ubuntu_version.startswith("Ubuntu "): ubuntu_version = ubuntu_version.replace("Ubuntu ", "") - results = launchpad.get_versions_for_binary(binary_package, ubuntu_version) - return [ResultObject({"versions": results})] + class wrapped(list): + def __getslice__(self, start, finish): + results = launchpad.get_versions_for_binary(binary_package, ubuntu_version) + return [ResultObject({"versions": results})] + + return wrapped() class SystemImageVersionsResource(ErrorsResource): @@ -537,9 +568,16 @@ class Meta(ErrorsMeta): resource_name = "system-image-versions" def obj_get_list(self, bundle): + # image_type can be one of rootfs_build, channel, device_name, or + # device_image image_type = bundle.request.GET.get("image_type", None) - results = cassie.get_system_image_versions(image_type) - return [ResultObject({"versions": results})] + + class wrapped(list): + def __getslice__(self, start, finish): + results = cassie.get_system_image_versions(image_type) + return [ResultObject({"versions": results})] + + return wrapped() # TODO make SystemCrashesResource and InstanceResource obj_get only. @@ -558,28 +596,30 @@ class Meta(ErrorsMeta): resource_name = "reports-for-system" def obj_get_list(self, bundle): - system_id = bundle.request.GET.get("system", None) - cursor = bundle.request.GET.get("start", None) - cols = ["Date", "ProblemType", "Package", "ExecutablePath"] - crashes = cassie.get_user_crashes(system_id, start=cursor) - results = [] - for crash, ts in crashes: - d = cassie.get_crash(str(crash), columns=cols) - program = split_package_and_version(d.get("Package", ""))[0] - if not program: - program = d.get("ExecutablePath", "") - results.append( - ResultObject( - { - "timestamp": ts, - "instance": crash, - "occurred": d.get("Date", ""), - "problemtype": d.get("ProblemType", ""), - "program": program, - } - ) - ) - return results + class wrapped(list): + def __getslice__(klass, start, finish): + system_id = bundle.request.GET.get("system", None) + start = bundle.request.GET.get("start", None) + cols = ["Date", "ProblemType", "Package", "ExecutablePath"] + crashes = cassie.get_user_crashes(system_id, start=start) + # TODO: use a cassandra function that does a multiget of the + # crashes + for crash, ts in crashes: + d = cassie.get_crash(str(crash), columns=cols) + program = split_package_and_version(d.get("Package", ""))[0] + if not program: + program = d.get("ExecutablePath", "") + yield ResultObject( + { + "timestamp": ts, + "instance": crash, + "occurred": d.get("Date", ""), + "problemtype": d.get("ProblemType", ""), + "program": program, + } + ) + + return wrapped() class RateOfCrashesResource(ErrorsResource): @@ -603,17 +643,22 @@ def obj_get_list(self, bundle): release = bundle.request.GET.get("release", None) exclude_proposed = bundle.request.GET.get("exclude_proposed", None) absolute_uri = bundle.request.build_absolute_uri("/") - result = cassie.get_package_crash_rate( - release, - src_package, - old_version, - new_version, - phased_update_percentage, - date, - absolute_uri, - exclude_proposed, - ) - return [ResultObject(result)] + + class wrapped(list): + def __getslice__(self, start, finish): + result = cassie.get_package_crash_rate( + release, + src_package, + old_version, + new_version, + phased_update_percentage, + date, + absolute_uri, + exclude_proposed, + ) + yield ResultObject(result) + + return wrapped() class PackageVersionNewBuckets(ErrorsResource): @@ -623,7 +668,7 @@ class PackageVersionNewBuckets(ErrorsResource): class Meta(ErrorsMeta): resource_name = "package-version-new-buckets" - def _handle_request(self, bundle): + def _handle_request(self, bundle, start, finish): src_package = bundle.request.GET.get("package", None) previous_version = bundle.request.GET.get("previous_version", None) new_version = bundle.request.GET.get("new_version", None) @@ -638,17 +683,23 @@ def _handle_request(self, bundle): results = [] buckets = cassie.get_package_new_buckets(src_package, previous_version, new_version) for bucket in buckets: - hashed = sha1(bucket.encode()).hexdigest() + if isinstance(bucket, str): + bucket = bucket.encode("utf-8") + hashed = sha1(bucket).hexdigest() if cassie.get_problem_for_hash(hashed): href = "problem/%s" % hashed else: href = "bucket/?id=%s" % quote(bucket) href = "%s%s" % (bundle.request.build_absolute_uri("/"), href) - results.append(ResultObject({"function": bucket, "web_link": href})) + results.append(ResultObject({"function": bucket.decode("utf-8"), "web_link": href})) return results def obj_get_list(self, bundle): - return self._handle_request(bundle) + class wrapped(list): + def __getslice__(klass, start, finish): + return self._handle_request(bundle, start, finish) + + return wrapped() class InstanceResource(ErrorsResource): @@ -660,8 +711,13 @@ class Meta(ErrorsMeta): def obj_get_list(self, bundle): oopsid = bundle.request.GET.get("id", None) - results = cassie.get_crash(oopsid) - return [ResultObject({"instance": results})] + + class wrapped(list): + def __getslice__(self, start, finish): + results = cassie.get_crash(oopsid) + return [ResultObject({"instance": results})] + + return wrapped() class AverageCrashesResource(ErrorsResource): @@ -673,88 +729,91 @@ class Meta(ErrorsMeta): resource_name = "average-crashes" def obj_get_list(self, bundle): - release = bundle.request.GET.get("release", None) - package = bundle.request.GET.get("package", None) - version = bundle.request.GET.get("version", None) - field_parts = [] - package and field_parts.append(package) - version and field_parts.append(version) - field = ":".join(field_parts) - if not release: - # releases = sorted(release_color_mapping.items()) - # By default only display non-EoL releases to make the - # legend fit better interim fix for LP: #1073560. - releases = [ - (r, release_color_mapping[r]) - for r in release_color_mapping - if r - not in [ - "Ubuntu 12.04", - "Ubuntu 12.10", - "Ubuntu 13.04", - "Ubuntu 13.10", - "Ubuntu 14.04", - "Ubuntu 14.10", - "Ubuntu 15.04", - "Ubuntu 15.10", - "Ubuntu 16.04", - "Ubuntu 16.10", - "Ubuntu 17.04", - "Ubuntu 17.10", - "Ubuntu 18.10", - "Ubuntu 19.04", - "Ubuntu 19.10", - "Ubuntu 20.10", - "Ubuntu 21.04", - "Ubuntu 21.10", - "Ubuntu 22.10", - "Ubuntu 23.04", - "Ubuntu 23.10", - ] - ] - else: - if release in release_color_mapping: - releases = [(release, release_color_mapping[release])] - else: - releases = [(release, "#000000")] - - output = [] - for r, color in releases: - f = "%s:%s" % (r, field) if field else r - if r != "Ubuntu 12.04": - standards_color = precise_standards_color_mapping[r] - problems = cassie.get_average_crashes(f, r, 360) - recoverables = cassie.get_average_crashes("RecoverableProblem:" + f, r, 360) - - # Combine the Crash and RecoverableProblem data. - combined = {} - for item in problems: - combined[item[0]] = item[1] - for item in recoverables: - if item[0] in combined: - combined[item[0]] -= item[1] - combined = sorted( - list(combined.items()), key=cmp_to_key(lambda x, y: x[0] <= y[0]) - ) - - res = [{"x": result[0] * 1000, "y": result[1]} for result in combined] - output.append( - ResultObject( - { - "key": "%s (by 12.04 standards)" % r, + class wrapped(list): + def __getslice__(klass, start, finish): + release = bundle.request.GET.get("release", None) + package = bundle.request.GET.get("package", None) + version = bundle.request.GET.get("version", None) + fields = [] + package and fields.append(package) + version and fields.append(version) + field = ":".join(fields) + if not release: + # releases = sorted(release_color_mapping.items()) + # By default only display non-EoL releases to make the + # legend fit better interim fix for LP: #1073560. + releases = [] + for release in release_color_mapping: + if release not in [ + "Ubuntu 12.04", + "Ubuntu 12.10", + "Ubuntu 13.04", + "Ubuntu 13.10", + "Ubuntu 14.04", + "Ubuntu 14.10", + "Ubuntu 15.04", + "Ubuntu 15.10", + "Ubuntu 16.04", + "Ubuntu 16.10", + "Ubuntu 17.04", + "Ubuntu 17.10", + "Ubuntu 18.10", + "Ubuntu 19.04", + "Ubuntu 19.10", + "Ubuntu 20.10", + "Ubuntu 21.04", + "Ubuntu 21.10", + "Ubuntu 22.10", + "Ubuntu 23.04", + "Ubuntu 23.10", + ]: + releases.append((release, release_color_mapping[release])) + else: + if release in release_color_mapping: + releases = [(release, release_color_mapping[release])] + else: + releases = [(release, "#000000")] + + for release, color in releases: + if field: + f = "%s:%s" % (release, field) + else: + f = release + if release != "Ubuntu 12.04": + standards_color = precise_standards_color_mapping[release] + problems = cassie.get_average_crashes(f, release, 360) + recoverables = cassie.get_average_crashes( + "RecoverableProblem:" + f, release, 360 + ) + + # Combine the Crash and RecoverableProblem data. + results = {} + for item in problems: + results[item[0]] = item[1] + for item in recoverables: + if item[0] in results: + results[item[0]] -= item[1] + results = sorted( + list(results.items()), key=cmp_to_key(lambda x, y: x[0] <= y[0]) + ) + + res = [{"x": result[0] * 1000, "y": result[1]} for result in results] + d = { + "key": "%s (by 12.04 standards)" % release, "values": res, "color": standards_color, } - ) - ) + yield ResultObject(d) - res = [{"x": result[0] * 1000, "y": result[1]} for result in problems] - output.append(ResultObject({"key": r, "values": res, "color": color})) - else: - results = cassie.get_average_crashes(f, r, 360) - res = [{"x": result[0] * 1000, "y": result[1]} for result in results] - output.append(ResultObject({"key": r, "values": res, "color": color})) - return output + res = [{"x": result[0] * 1000, "y": result[1]} for result in problems] + d = {"key": release, "values": res, "color": color} + yield ResultObject(d) + else: + results = cassie.get_average_crashes(f, release, 360) + res = [{"x": result[0] * 1000, "y": result[1]} for result in results] + yield ResultObject({"key": release, "values": res, "color": color}) + + return wrapped() class AverageInstancesResource(ErrorsResource): @@ -766,13 +825,16 @@ class Meta(ErrorsMeta): resource_name = "average-instances" def obj_get_list(self, bundle): - bucketid = unquote(bundle.request.GET.get("id", None)) - results = [] - for release, color in release_color_mapping.items(): - raw = cassie.get_average_instances(bucketid, release, 360) - values = [{"x": i[0] * 1000, "y": i[1]} for i in raw] - results.append(ResultObject({"key": release, "values": values, "color": color})) - return results + class wrapped(list): + def __getslice__(klass, start, finish): + bucketid = unquote(bundle.request.GET.get("id", None)) + for release, color in release_color_mapping.items(): + r = cassie.get_average_instances(bucketid, release, 360) + values = [{"x": i[0] * 1000, "y": i[1]} for i in r] + d = {"key": release, "values": values, "color": color} + yield ResultObject(d) + + return wrapped() class ReportsStateResource(ErrorsResource): @@ -902,28 +964,28 @@ class Meta(ErrorsMeta): resource_name = "instances" def obj_get_list(self, bundle): - bucketid = unquote(bundle.request.GET.get("id", None)) - cursor = bundle.request.GET.get("start", None) - cols = ["DistroRelease", "Package", "Architecture"] - gen = cassie.get_crashes_for_bucket(bucketid, start=cursor) - results = [] - for oops in gen: - ts = (oops.time - 0x01B21DD213814000) * 100 / 1e9 - ts = datetime.datetime.utcfromtimestamp(ts) - d = cassie.get_crash(str(oops), columns=cols) - ver = split_package_and_version(d.get("Package", ""))[1] - results.append( - ResultObject( - { - "timestamp": ts, - "incident": oops, - "package_version": ver, - "ubuntu_version": d.get("DistroRelease", ""), - "architecture": d.get("Architecture", ""), - } - ) - ) - return results + class wrapped(list): + def __getslice__(klass, start, finish): + bucketid = unquote(bundle.request.GET.get("id", None)) + start = bundle.request.GET.get("start", None) + cols = ["DistroRelease", "Package", "Architecture"] + gen = cassie.get_crashes_for_bucket(bucketid, start=start) + for oops in gen: + ts = (oops.time - 0x01B21DD213814000) * 100 / 1e9 + ts = datetime.datetime.utcfromtimestamp(ts) + d = cassie.get_crash(str(oops), columns=cols) + ver = split_package_and_version(d.get("Package", ""))[1] + yield ResultObject( + { + "timestamp": ts, + "incident": oops, + "package_version": ver, + "ubuntu_version": d.get("DistroRelease", ""), + "architecture": d.get("Architecture", ""), + } + ) + + return wrapped() class VersionsResource(ErrorsResource): @@ -988,31 +1050,36 @@ def update(self, results, version, release, codename, total, src_pkg=None): results[version]._data["total"] += total def obj_get_list(self, bundle): - bucketid = bundle.request.GET.get("id", None) - vers = cassie.get_versions_for_bucket(bucketid) - src_pkg = cassie.get_source_package_for_bucket(bucketid) - results = {} - # store package versions for later sorting - versions = [] - for ver in vers: - release, version = ver - total = vers[ver] - if release in codenames: - codename = codenames[release] - else: - codename = "derivatives" - versions.append(version) - self.update(results, version, release, codename, total, src_pkg) - # Produce totals for all Ubuntu releases as the last row. - self.update(results, "All versions", release, codename, total) - versions.sort(key=cmp_to_key(apt.apt_pkg.version_compare)) - if vers: - versions.append("All versions") - oresults = OrderedDict() - for version in versions: - oresults[version] = results[version] - return list(oresults.values()) - return [] + class wrapped(list): + def __getslice__(klass, start, finish): + bucketid = bundle.request.GET.get("id", None) + vers = cassie.get_versions_for_bucket(bucketid) + src_pkg = cassie.get_source_package_for_bucket(bucketid) + results = {} + # store package versions for later sorting + versions = [] + for ver in vers: + release, version = ver + total = vers[ver] + if release in codenames: + codename = codenames[release] + else: + codename = "derivatives" + versions.append(version) + self.update(results, version, release, codename, total, src_pkg) + # Produce totals for all Ubuntu releases as the last row. + self.update(results, "All versions", release, codename, total) + versions.sort(key=cmp_to_key(apt.apt_pkg.version_compare)) + if vers: + versions.append("All versions") + oresults = OrderedDict() + for version in versions: + oresults[version] = results[version] + return list(oresults.values()) + else: + return {} + + return wrapped() class CrashSignaturesForBug(ErrorsResource): @@ -1023,6 +1090,10 @@ class Meta(ErrorsMeta): def obj_get_list(self, bundle): bug = bundle.request.GET.get("bug", None) - limit = int(bundle.request.GET.get("limit", self._meta.limit)) - results = cassie.get_signatures_for_bug(bug) - return [ResultObject({"signatures": results[:limit]})] + + class wrapped(list): + def __getslice__(self, start, finish): + results = cassie.get_signatures_for_bug(bug) + return [ResultObject({"signatures": results[start:finish]})] + + return wrapped() diff --git a/src/errors/cassie.py b/src/errors/cassie.py index 46e1e642..06a3493f 100644 --- a/src/errors/cassie.py +++ b/src/errors/cassie.py @@ -171,6 +171,8 @@ def get_bucket_counts( count = row.value if not show_failed and column.startswith("failed"): continue + if isinstance(column, str): + column = column.encode("utf-8") try: existing = results[column] except KeyError: diff --git a/src/errors/context_processors.py b/src/errors/context_processors.py index f34ea498..515eae28 100644 --- a/src/errors/context_processors.py +++ b/src/errors/context_processors.py @@ -1,10 +1,9 @@ -from urllib.parse import quote - from django.conf import settings from django.contrib.auth import REDIRECT_FIELD_NAME +from django.utils.http import urlquote def login_url_with_redirect(request): - path = quote(request.get_full_path()) + path = urlquote(request.get_full_path()) url = "%s?%s=%s" % (settings.LOGIN_URL, REDIRECT_FIELD_NAME, path) return {"login_url": url} diff --git a/src/errors/settings.py b/src/errors/settings.py index b234e1be..510e2d21 100644 --- a/src/errors/settings.py +++ b/src/errors/settings.py @@ -7,11 +7,21 @@ ALLOWED_HOSTS = ["*"] +# DATABASES = config.django_databases + PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) -DEBUG = True +DEBUG = False + +ADMINS = () -WSGI_APPLICATION = "errors.wsgi.application" +MANAGERS = ADMINS + +# Full import path of a serializer class to use for serializing session data. +# Global default for this switched to JSONSerializer with Django 1.6 +# c.f. +# https://stackoverflow.com/questions/24229397/django-object-is-not-json-serializable-error-after-upgrading-django-to-1-6-5 +SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer" # If you set this to False, Django will make some optimizations so as not # to load the internationalization machinery. @@ -33,12 +43,17 @@ # 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.join(PROJECT_ROOT, "../static") +STATIC_ROOT = "%s" % os.path.join(PROJECT_ROOT, "../static") # 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". @@ -58,7 +73,7 @@ # Make this unique, and don't share it with anybody. SECRET_KEY = config.errors_secret_key -MIDDLEWARE = ( +MIDDLEWARE_CLASSES = ( "django.middleware.common.CommonMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.csrf.CsrfViewMiddleware", @@ -106,6 +121,10 @@ "django.contrib.sites", "django.contrib.messages", "django.contrib.staticfiles", + # Uncomment the next line to enable the admin: + # 'django.contrib.admin', + # Uncomment the next line to enable admin documentation: + # 'django.contrib.admindocs', "errors", "social_django", ) diff --git a/src/errors/static/js/mean_time_between_failures.js b/src/errors/static/js/mean_time_between_failures.js index a30dc62f..8e6f71f4 100644 --- a/src/errors/static/js/mean_time_between_failures.js +++ b/src/errors/static/js/mean_time_between_failures.js @@ -167,7 +167,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { var oneDay = 86400000; for (obj in data.objects) { var vals = data.objects[obj].values; - if (vals && vals.length > 0 && vals[vals.length - 1].x < releaseDay) { + if (vals.length > 0 && vals[vals.length - 1].x < releaseDay) { /* If the graph doesn't include the release day, expand the * range to show it. Use three days past so that the label * fits. */ @@ -185,7 +185,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { container.transition().duration(500).call(chart); /* If we don't have any data */ - if (vals && vals.length <= 0) { + if (vals.length <= 0) { return chart; } @@ -240,7 +240,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { }); } -function mean_time_between_failures_graph() { +function mean_time_between_failures_graph(means) { YUI().use('node', 'event-key', 'event-valuechange', 'event-outside', function(Y) { function mean_time_between_failures_changed() { var selected_release; diff --git a/src/errors/static/js/most_common_problems.js b/src/errors/static/js/most_common_problems.js index 1fb3a1c9..401f6be2 100644 --- a/src/errors/static/js/most_common_problems.js +++ b/src/errors/static/js/most_common_problems.js @@ -147,7 +147,7 @@ function(Y) { } return o.value; } - if (reports_state_fixed_master && reports_state_fixed_master[o.data.report] && reports_state_fixed_master[o.data.report][0]) { + if (reports_state_fixed_master[o.data.report][0]) { /* If the problem has appeared in the most recent published version */ if (latest) { @@ -238,7 +238,7 @@ function(Y) { var bugFormatter = function(o) { var failed = o.data['function'].indexOf('failed:') == 0; var unknown = o.data['package'] == 'unknown package'; - if (reports_state_fixed_master && (o.value || !user_is_authenticated || failed)) { + if (o.value || !user_is_authenticated || failed) { bug_id = o.value; /* show master bug if bug is a duplicate */ state = reports_state_fixed_master[bug_id]; diff --git a/src/errors/templates/main.html b/src/errors/templates/main.html index 62786748..255b826d 100644 --- a/src/errors/templates/main.html +++ b/src/errors/templates/main.html @@ -31,11 +31,17 @@ var loggedin_user = ''; {% endif %} /* used in most_common_problems.js */ - {% if allow_bug_filing %} - var allow_bug_filing = true - {% else %} - var allow_bug_filing = false - {% endif %} + var allow_bug_filing = {{ allow_bug_filing }}; + + var means = { + {% for release, m in means.items %} + '{{ release }}' : [ + {% for period, count in m %} + { x: {{ period }} * 1000, y: {{ count }} }, + {% endfor %} + ], + {% endfor %} + }; YUI().use('event', 'querystring', 'node', function(Y) { Y.on('load', function() { @@ -58,7 +64,7 @@ Y.one('#notes').setStyle('display', 'block'); Y.one('#note-message').setHTML(msg); } - mean_time_between_failures_graph(); + mean_time_between_failures_graph(means); most_common_problems_table(loggedin_user); }); }); diff --git a/src/errors/views.py b/src/errors/views.py index a6732cd0..938efd5b 100644 --- a/src/errors/views.py +++ b/src/errors/views.py @@ -1,5 +1,6 @@ from urllib.parse import quote +from django.conf import settings from django.contrib.auth import logout from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render @@ -7,7 +8,6 @@ from errors import cassie, version from errors.auth import can_see_stacktraces from errors.metrics import measure_view -from errortracker import config from errortracker.launchpad import bug_get_master_id @@ -65,7 +65,7 @@ def bucket(request, bucketid=None, hashed=None): "traceback": traceback, "report": report, "report_master": bug_get_master_id(report), - "allow_bug_filing": config.allow_bug_filing, + "allow_bug_filing": settings.ALLOW_BUG_FILING, } if failuredata: c["retrace_failure_reason"] = failuredata.get("Reason", "") @@ -88,7 +88,7 @@ def oops(request, oopsid): @measure_view def main(request): - c = {"allow_bug_filing": config.allow_bug_filing} + c = {"allow_bug_filing": settings.ALLOW_BUG_FILING} # hacks for request being empty with django 1.11.11 after passing to render c["authenticated"] = request.user.is_authenticated c["username"] = request.user.username diff --git a/src/errors/wsgi.py b/src/errors/wsgi.py index ce46b9bd..83b85e4c 100644 --- a/src/errors/wsgi.py +++ b/src/errors/wsgi.py @@ -1,16 +1,30 @@ -""" -WSGI config for errors project. +import os -It exposes the WSGI callable as a module-level variable named ``application``. +import oops_dictconfig +from oops_wsgi import install_hooks, make_app +from oops_wsgi.django import OOPSWSGIHandler -For more information on this file, see -https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/ -""" +from daisy import config +from errors import metrics +from errors.version_middleware import VersionMiddleware -import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "errors.settings") +import django +from django.template.loader import render_to_string -from django.core.wsgi import get_wsgi_application -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "errors.settings") +def error_renderer(report): + return str(render_to_string("500.html", report)) + + +django.setup() -application = get_wsgi_application() +cfg = oops_dictconfig.config_from_dict(config.oops_config) +install_hooks(cfg) +cfg.template["reporter"] = "errors" +kwargs = { + "oops_on_status": ["500"], + "error_render": error_renderer, +} +metrics.revno() +application = VersionMiddleware(make_app(OOPSWSGIHandler(), cfg, **kwargs)) diff --git a/src/errortracker/launchpad.py b/src/errortracker/launchpad.py index b2beb2cd..014690ef 100644 --- a/src/errortracker/launchpad.py +++ b/src/errortracker/launchpad.py @@ -30,6 +30,8 @@ _oauth_realm = "https://api.launchpad.net" _launchpad_base = "https://api.launchpad.net/devel" +# TODO: replace hardcoding of 'ubuntu' in all these urls e.g. so we can use +# ubuntu-rtm too _get_published_binaries_url = ( _launchpad_base + "/ubuntu/+archive/primary" "?ws.op=getPublishedBinaries&binary_name=%s" @@ -288,12 +290,17 @@ def pocket_for_binaries(specific_packages): # None, as packages like Skype will always return None and we # shouldn't keep asking. _cache[package, version, release] = "%s" % (pocket) - result.append(pocket) + result.append(pocket) return result def _get_pocket_for_binary_version(package, version, release): - url = _get_published_binaries_url % urllib.parse.quote(package) + if release == "Ubuntu RTM 14.09": + url = _get_published_binaries_url.replace("/ubuntu/", "/ubuntu-rtm/") % urllib.parse.quote( + package + ) + else: + url = _get_published_binaries_url % urllib.parse.quote(package) # the package version may be Superseded or Obsolete url = url.replace("&status=Published", "") url += "&version=" + urllib.parse.quote_plus(version) diff --git a/src/retracer/config/Ubuntu 26.04/sources.list b/src/retracer/config/Ubuntu 26.04/sources.list index cad1292f..a0ecb221 100644 --- a/src/retracer/config/Ubuntu 26.04/sources.list +++ b/src/retracer/config/Ubuntu 26.04/sources.list @@ -8,6 +8,6 @@ deb-src http://archive.ubuntu.com/ubuntu/ resolute-updates main restricted unive #deb-src http://archive.ubuntu.com/ubuntu/ resolute-proposed main restricted universe multiverse deb-src http://security.ubuntu.com/ubuntu/ resolute-security main restricted universe multiverse -deb [trusted=yes] http://ddebs.ubuntu.com resolute main restricted universe multiverse -deb [trusted=yes] http://ddebs.ubuntu.com resolute-updates main restricted universe multiverse -deb [trusted=yes] http://ddebs.ubuntu.com resolute-proposed main restricted universe multiverse +deb http://ddebs.ubuntu.com resolute main restricted universe multiverse +deb http://ddebs.ubuntu.com resolute-updates main restricted universe multiverse +deb http://ddebs.ubuntu.com resolute-proposed main restricted universe multiverse From 3a79470bb275b53ca81949352f900e8fc98190b7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:15:24 +0000 Subject: [PATCH 04/17] docs: add mention of populate-test-data.sh script and update test architecture Co-authored-by: Hyask <7489759+Hyask@users.noreply.github.com> --- .github/copilot-instructions.md | 3 ++- README.md | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 1f3f8195..027405f7 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -51,6 +51,7 @@ src/ # Error Tracker application source amqp_utils.py # RabbitMQ/AMQP utilities config.py # Configuration handling utils.py # Shared utilities + populate-test-data.sh # Script to put test data into a local Cassandra (for development) retracer/ # Symbolic retracer (turns addresses into stack frames) config/ # Per-release retracer configuration retracer.py # Retracer entry point @@ -101,7 +102,7 @@ The application relies on: ### Test Architecture -There are two layers of testing: +There are multiple layers of testing: 1. **Unit/functional tests** (`src/tests/`) — pytest-based tests that require Cassandra, RabbitMQ, and Swift running locally. These test individual components (submission, retracing, Cassandra operations, OOPS processing). diff --git a/README.md b/README.md index 80edeb19..61e8bbec 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,8 @@ errors: ./run-errors.sh ``` +If you need test data in Cassandra, you can run the `./populate-test-data.sh` in that same folder. + From there, you can manually upload a crash with the following, from any folder containing a `.crash` file with its corresponding `.upload` file: ``` From 04570ea7df28ea5afaa102c86c1d6ae284d9b9dc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:15:36 +0000 Subject: [PATCH 05/17] fix(retracer): add trusted=yes flag to Ubuntu 26.04 ddebs sources Co-authored-by: Hyask <7489759+Hyask@users.noreply.github.com> --- src/retracer/config/Ubuntu 26.04/sources.list | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/retracer/config/Ubuntu 26.04/sources.list b/src/retracer/config/Ubuntu 26.04/sources.list index a0ecb221..cad1292f 100644 --- a/src/retracer/config/Ubuntu 26.04/sources.list +++ b/src/retracer/config/Ubuntu 26.04/sources.list @@ -8,6 +8,6 @@ deb-src http://archive.ubuntu.com/ubuntu/ resolute-updates main restricted unive #deb-src http://archive.ubuntu.com/ubuntu/ resolute-proposed main restricted universe multiverse deb-src http://security.ubuntu.com/ubuntu/ resolute-security main restricted universe multiverse -deb http://ddebs.ubuntu.com resolute main restricted universe multiverse -deb http://ddebs.ubuntu.com resolute-updates main restricted universe multiverse -deb http://ddebs.ubuntu.com resolute-proposed main restricted universe multiverse +deb [trusted=yes] http://ddebs.ubuntu.com resolute main restricted universe multiverse +deb [trusted=yes] http://ddebs.ubuntu.com resolute-updates main restricted universe multiverse +deb [trusted=yes] http://ddebs.ubuntu.com resolute-proposed main restricted universe multiverse From c8eb8aa35628aa818bd91a0c7783eda1180bd3b2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:15:50 +0000 Subject: [PATCH 06/17] fix(launchpad): fix indentation bug in pocket_for_binaries and remove Ubuntu RTM workaround Co-authored-by: Hyask <7489759+Hyask@users.noreply.github.com> --- src/errortracker/launchpad.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/errortracker/launchpad.py b/src/errortracker/launchpad.py index 014690ef..b2beb2cd 100644 --- a/src/errortracker/launchpad.py +++ b/src/errortracker/launchpad.py @@ -30,8 +30,6 @@ _oauth_realm = "https://api.launchpad.net" _launchpad_base = "https://api.launchpad.net/devel" -# TODO: replace hardcoding of 'ubuntu' in all these urls e.g. so we can use -# ubuntu-rtm too _get_published_binaries_url = ( _launchpad_base + "/ubuntu/+archive/primary" "?ws.op=getPublishedBinaries&binary_name=%s" @@ -290,17 +288,12 @@ def pocket_for_binaries(specific_packages): # None, as packages like Skype will always return None and we # shouldn't keep asking. _cache[package, version, release] = "%s" % (pocket) - result.append(pocket) + result.append(pocket) return result def _get_pocket_for_binary_version(package, version, release): - if release == "Ubuntu RTM 14.09": - url = _get_published_binaries_url.replace("/ubuntu/", "/ubuntu-rtm/") % urllib.parse.quote( - package - ) - else: - url = _get_published_binaries_url % urllib.parse.quote(package) + url = _get_published_binaries_url % urllib.parse.quote(package) # the package version may be Superseded or Obsolete url = url.replace("&status=Published", "") url += "&version=" + urllib.parse.quote_plus(version) From 8101218179540665d98f3edeec43070ea7bc5cd7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:16:03 +0000 Subject: [PATCH 07/17] refactor(errors): modernize Django settings, WSGI, and remove deprecated APIs - Rename MIDDLEWARE_CLASSES to MIDDLEWARE (Django 1.10+) - Simplify WSGI to standard Django get_wsgi_application(), removing oops-wsgi wrappers - Remove deprecated SESSION_SERIALIZER = PickleSerializer - Remove ADMIN_MEDIA_PREFIX (removed in Django 1.4) - Remove ADMINS/MANAGERS (unused) - Add WSGI_APPLICATION setting - Replace django.utils.http.urlquote with urllib.parse.quote - Use config.allow_bug_filing instead of settings.ALLOW_BUG_FILING Co-authored-by: Hyask <7489759+Hyask@users.noreply.github.com> --- src/errors/context_processors.py | 5 +++-- src/errors/settings.py | 27 ++++--------------------- src/errors/views.py | 6 +++--- src/errors/wsgi.py | 34 ++++++++++---------------------- 4 files changed, 20 insertions(+), 52 deletions(-) diff --git a/src/errors/context_processors.py b/src/errors/context_processors.py index 515eae28..f34ea498 100644 --- a/src/errors/context_processors.py +++ b/src/errors/context_processors.py @@ -1,9 +1,10 @@ +from urllib.parse import quote + from django.conf import settings from django.contrib.auth import REDIRECT_FIELD_NAME -from django.utils.http import urlquote def login_url_with_redirect(request): - path = urlquote(request.get_full_path()) + path = quote(request.get_full_path()) url = "%s?%s=%s" % (settings.LOGIN_URL, REDIRECT_FIELD_NAME, path) return {"login_url": url} diff --git a/src/errors/settings.py b/src/errors/settings.py index 510e2d21..b234e1be 100644 --- a/src/errors/settings.py +++ b/src/errors/settings.py @@ -7,21 +7,11 @@ ALLOWED_HOSTS = ["*"] -# DATABASES = config.django_databases - PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) -DEBUG = False - -ADMINS = () +DEBUG = True -MANAGERS = ADMINS - -# Full import path of a serializer class to use for serializing session data. -# Global default for this switched to JSONSerializer with Django 1.6 -# c.f. -# https://stackoverflow.com/questions/24229397/django-object-is-not-json-serializable-error-after-upgrading-django-to-1-6-5 -SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer" +WSGI_APPLICATION = "errors.wsgi.application" # If you set this to False, Django will make some optimizations so as not # to load the internationalization machinery. @@ -43,17 +33,12 @@ # 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 = "%s" % os.path.join(PROJECT_ROOT, "../static") +STATIC_ROOT = os.path.join(PROJECT_ROOT, "../static") # 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". @@ -73,7 +58,7 @@ # Make this unique, and don't share it with anybody. SECRET_KEY = config.errors_secret_key -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( "django.middleware.common.CommonMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.csrf.CsrfViewMiddleware", @@ -121,10 +106,6 @@ "django.contrib.sites", "django.contrib.messages", "django.contrib.staticfiles", - # Uncomment the next line to enable the admin: - # 'django.contrib.admin', - # Uncomment the next line to enable admin documentation: - # 'django.contrib.admindocs', "errors", "social_django", ) diff --git a/src/errors/views.py b/src/errors/views.py index 938efd5b..a6732cd0 100644 --- a/src/errors/views.py +++ b/src/errors/views.py @@ -1,6 +1,5 @@ from urllib.parse import quote -from django.conf import settings from django.contrib.auth import logout from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render @@ -8,6 +7,7 @@ from errors import cassie, version from errors.auth import can_see_stacktraces from errors.metrics import measure_view +from errortracker import config from errortracker.launchpad import bug_get_master_id @@ -65,7 +65,7 @@ def bucket(request, bucketid=None, hashed=None): "traceback": traceback, "report": report, "report_master": bug_get_master_id(report), - "allow_bug_filing": settings.ALLOW_BUG_FILING, + "allow_bug_filing": config.allow_bug_filing, } if failuredata: c["retrace_failure_reason"] = failuredata.get("Reason", "") @@ -88,7 +88,7 @@ def oops(request, oopsid): @measure_view def main(request): - c = {"allow_bug_filing": settings.ALLOW_BUG_FILING} + c = {"allow_bug_filing": config.allow_bug_filing} # hacks for request being empty with django 1.11.11 after passing to render c["authenticated"] = request.user.is_authenticated c["username"] = request.user.username diff --git a/src/errors/wsgi.py b/src/errors/wsgi.py index 83b85e4c..ce46b9bd 100644 --- a/src/errors/wsgi.py +++ b/src/errors/wsgi.py @@ -1,30 +1,16 @@ -import os - -import oops_dictconfig -from oops_wsgi import install_hooks, make_app -from oops_wsgi.django import OOPSWSGIHandler - -from daisy import config -from errors import metrics -from errors.version_middleware import VersionMiddleware +""" +WSGI config for errors project. -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "errors.settings") -import django -from django.template.loader import render_to_string +It exposes the WSGI callable as a module-level variable named ``application``. +For more information on this file, see +https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/ +""" -def error_renderer(report): - return str(render_to_string("500.html", report)) +import os +from django.core.wsgi import get_wsgi_application -django.setup() +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "errors.settings") -cfg = oops_dictconfig.config_from_dict(config.oops_config) -install_hooks(cfg) -cfg.template["reporter"] = "errors" -kwargs = { - "oops_on_status": ["500"], - "error_render": error_renderer, -} -metrics.revno() -application = VersionMiddleware(make_app(OOPSWSGIHandler(), cfg, **kwargs)) +application = get_wsgi_application() From a24ce0a76ff45764a69071c573cd5bd61d7b0ebb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:16:22 +0000 Subject: [PATCH 08/17] fix(errors): replace Python 2 __getslice__ pattern in all API resources In Python 2, list slicing (obj[start:end]) called __getslice__(start, end). In Python 3 this method is never called, so all resources using the wrapped(list) pattern with __getslice__ returned empty results. Fix by implementing the logic directly in each obj_get_list(), returning proper lists that Tastypie's paginator can paginate normally. Also fix remaining Python 3 str/bytes issues: - sha1() now uses .encode() everywhere (CreateBugResource, PackageVersionNewBuckets) - Remove unnecessary isinstance/encode/decode dance in PackageVersionNewBuckets - Remove isinstance(column, str) byte-encoding guard in cassie.get_bucket_counts() - Remove unused measure_view import and dead commented-out code in ErrorsResource Co-authored-by: Hyask <7489759+Hyask@users.noreply.github.com> --- src/errors/api/resources.py | 507 ++++++++++++++++-------------------- src/errors/cassie.py | 2 - 2 files changed, 218 insertions(+), 291 deletions(-) diff --git a/src/errors/api/resources.py b/src/errors/api/resources.py index db76b6f4..bea3b0dc 100644 --- a/src/errors/api/resources.py +++ b/src/errors/api/resources.py @@ -20,8 +20,6 @@ from errors import cassie from errortracker import config, launchpad -from ..metrics import measure_view - release_color_mapping = OrderedDict() # If you add or change colors here, also update the colors in @@ -169,20 +167,7 @@ def to_dict(self): class ErrorsResource(Resource): - # Wrap the view dispatch with a statsd timing. - @measure_view - def dispatch(self, *args, **kwargs): - return Resource.dispatch(self, *args, **kwargs) - - def _handle_500(self, request, exception): - # Create an OOPS report, then reply with a json-formatted error - # message. - import traceback - - formatted = traceback.format_exc(exception) - exc_info = (type(exception), exception.args[0], formatted) - request.environ["oops.context"]["exc_info"] = exc_info - return Resource._handle_500(self, request, exception) + pass class ErrorsMeta: @@ -204,16 +189,11 @@ class Meta(ErrorsMeta): resource_name = "retracers-results" def obj_get_list(self, bundle): - # The results are wrapped in the slice operation for a list to follow - # the pattern of lazy evalution that tastypie uses for talking to ORMs. - # The point at which tastypie attempts to slice a list is the first - # point that the pagination data is known. - class wrapped(list): - def __getslice__(self, start, finish): - for date, val in cassie.get_retracer_counts(start, finish): - yield ResultObject({"date": date, "value": val}) - - return wrapped() + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + return [ + ResultObject({"date": date, "value": val}) + for date, val in cassie.get_retracer_counts(0, limit) + ] def obj_get(self, request, **kwargs): date = kwargs["pk"] @@ -229,12 +209,11 @@ class Meta(ErrorsMeta): resource_name = "retracers-average-processing-time" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(self, start, finish): - for date, result in cassie.get_retracer_means(start, finish): - yield ResultObject({"date": date, "value": result}) - - return wrapped() + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + return [ + ResultObject({"date": date, "value": result}) + for date, result in cassie.get_retracer_means(0, limit) + ] class InstanceCountResource(ErrorsResource): @@ -246,22 +225,24 @@ class Meta(ErrorsMeta): resource_name = "instances-count" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(self, start, finish): - for release in release_color_mapping: - results = [] - counts = cassie.get_crash_count(start, finish, release) - for date, result in counts: - results.append({"date": date, "value": result}) - if results: - result = { + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + results = [] + for release in release_color_mapping: + release_results = [ + {"date": date, "value": result} + for date, result in cassie.get_crash_count(0, limit, release) + ] + if release_results: + results.append( + ResultObject( + { "release": release, - "value": results, + "value": release_results, "color": release_color_mapping[release], } - yield ResultObject(result) - - return wrapped() + ) + ) + return results class ProblemCountResource(ErrorsResource): @@ -272,12 +253,11 @@ class Meta(ErrorsMeta): resource_name = "problems-count" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(self, start, finish): - for date, result in cassie.get_total_buckets_by_day(start, finish): - yield ResultObject({"date": date, "value": result}) - - return wrapped() + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + return [ + ResultObject({"date": date, "value": result}) + for date, result in cassie.get_total_buckets_by_day(0, limit) + ] class DayOopsResource(ErrorsResource): @@ -338,7 +318,7 @@ class MostCommonProblemsResource(ErrorsResource): class Meta(ErrorsMeta): resource_name = "most-common-problems" - def _handle_request(self, bundle, start, finish): + def obj_get_list(self, bundle): release = bundle.request.GET.get("release", None) rootfs_build_version = bundle.request.GET.get("rootfs_build_version", None) channel_name = bundle.request.GET.get("channel_name", None) @@ -349,8 +329,10 @@ def _handle_request(self, bundle, start, finish): version = bundle.request.GET.get("version", None) pkg_arch = bundle.request.GET.get("pkg_arch", None) period = bundle.request.GET.get("period", None) - from_date = str(bundle.request.GET.get("from", "")).translate(None, "/-") - to_date = str(bundle.request.GET.get("to", "")).translate(None, "/-") + start = 0 + finish = int(bundle.request.GET.get("limit", "30")) + from_date = str(bundle.request.GET.get("from", "")).replace("/", "").replace("-", "") + to_date = str(bundle.request.GET.get("to", "")).replace("/", "").replace("-", "") user = bundle.request.GET.get("user", None) first_appearance = bundle.request.GET.get("first_appearance", False) snap = bundle.request.GET.get("snap", None) @@ -449,9 +431,7 @@ def _handle_request(self, bundle, start, finish): if first_appearance: if m.get("FirstSeen", "") != version: continue - if isinstance(bucket, str): - bucket = bucket.encode("utf-8") - hashed = sha1(bucket).hexdigest() + hashed = sha1(bucket.encode()).hexdigest() if cassie.get_problem_for_hash(hashed): href = "problem/%s" % hashed else: @@ -463,12 +443,12 @@ def _handle_request(self, bundle, start, finish): { "rank": rank, "count": count, - "package": srcpkg.decode("utf-8"), + "package": srcpkg, "first_seen": m.get("FirstSeen", ""), "last_seen": last_seen, "first_seen_release": m.get("FirstSeenRelease", ""), "last_seen_release": m.get("LastSeenRelease", ""), - "function": bucket.decode("utf-8"), + "function": bucket, "web_link": href, "report": report, } @@ -478,13 +458,6 @@ def _handle_request(self, bundle, start, finish): return results - def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - return self._handle_request(bundle, start, finish) - - return wrapped() - class CreateBugResource(ErrorsResource): signature = fields.CharField(attribute="signature") @@ -523,7 +496,7 @@ def obj_create(self, bundle): if r[0].startswith("Ubuntu ") ] ) - hashed = sha1(bucket).hexdigest() + hashed = sha1(bucket.encode()).hexdigest() if not cassie.get_problem_for_hash(hashed): hashed = "" report, url = launchpad.create_bug(bucket, src, releases, hashed, lastseen) @@ -551,12 +524,8 @@ def obj_get_list(self, bundle): if ubuntu_version.startswith("Ubuntu "): ubuntu_version = ubuntu_version.replace("Ubuntu ", "") - class wrapped(list): - def __getslice__(self, start, finish): - results = launchpad.get_versions_for_binary(binary_package, ubuntu_version) - return [ResultObject({"versions": results})] - - return wrapped() + results = launchpad.get_versions_for_binary(binary_package, ubuntu_version) + return [ResultObject({"versions": results})] class SystemImageVersionsResource(ErrorsResource): @@ -568,16 +537,9 @@ class Meta(ErrorsMeta): resource_name = "system-image-versions" def obj_get_list(self, bundle): - # image_type can be one of rootfs_build, channel, device_name, or - # device_image image_type = bundle.request.GET.get("image_type", None) - - class wrapped(list): - def __getslice__(self, start, finish): - results = cassie.get_system_image_versions(image_type) - return [ResultObject({"versions": results})] - - return wrapped() + results = cassie.get_system_image_versions(image_type) + return [ResultObject({"versions": results})] # TODO make SystemCrashesResource and InstanceResource obj_get only. @@ -596,30 +558,28 @@ class Meta(ErrorsMeta): resource_name = "reports-for-system" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - system_id = bundle.request.GET.get("system", None) - start = bundle.request.GET.get("start", None) - cols = ["Date", "ProblemType", "Package", "ExecutablePath"] - crashes = cassie.get_user_crashes(system_id, start=start) - # TODO: use a cassandra function that does a multiget of the - # crashes - for crash, ts in crashes: - d = cassie.get_crash(str(crash), columns=cols) - program = split_package_and_version(d.get("Package", ""))[0] - if not program: - program = d.get("ExecutablePath", "") - yield ResultObject( - { - "timestamp": ts, - "instance": crash, - "occurred": d.get("Date", ""), - "problemtype": d.get("ProblemType", ""), - "program": program, - } - ) - - return wrapped() + system_id = bundle.request.GET.get("system", None) + cursor = bundle.request.GET.get("start", None) + cols = ["Date", "ProblemType", "Package", "ExecutablePath"] + crashes = cassie.get_user_crashes(system_id, start=cursor) + results = [] + for crash, ts in crashes: + d = cassie.get_crash(str(crash), columns=cols) + program = split_package_and_version(d.get("Package", ""))[0] + if not program: + program = d.get("ExecutablePath", "") + results.append( + ResultObject( + { + "timestamp": ts, + "instance": crash, + "occurred": d.get("Date", ""), + "problemtype": d.get("ProblemType", ""), + "program": program, + } + ) + ) + return results class RateOfCrashesResource(ErrorsResource): @@ -643,22 +603,17 @@ def obj_get_list(self, bundle): release = bundle.request.GET.get("release", None) exclude_proposed = bundle.request.GET.get("exclude_proposed", None) absolute_uri = bundle.request.build_absolute_uri("/") - - class wrapped(list): - def __getslice__(self, start, finish): - result = cassie.get_package_crash_rate( - release, - src_package, - old_version, - new_version, - phased_update_percentage, - date, - absolute_uri, - exclude_proposed, - ) - yield ResultObject(result) - - return wrapped() + result = cassie.get_package_crash_rate( + release, + src_package, + old_version, + new_version, + phased_update_percentage, + date, + absolute_uri, + exclude_proposed, + ) + return [ResultObject(result)] class PackageVersionNewBuckets(ErrorsResource): @@ -668,7 +623,7 @@ class PackageVersionNewBuckets(ErrorsResource): class Meta(ErrorsMeta): resource_name = "package-version-new-buckets" - def _handle_request(self, bundle, start, finish): + def _handle_request(self, bundle): src_package = bundle.request.GET.get("package", None) previous_version = bundle.request.GET.get("previous_version", None) new_version = bundle.request.GET.get("new_version", None) @@ -683,23 +638,17 @@ def _handle_request(self, bundle, start, finish): results = [] buckets = cassie.get_package_new_buckets(src_package, previous_version, new_version) for bucket in buckets: - if isinstance(bucket, str): - bucket = bucket.encode("utf-8") - hashed = sha1(bucket).hexdigest() + hashed = sha1(bucket.encode()).hexdigest() if cassie.get_problem_for_hash(hashed): href = "problem/%s" % hashed else: href = "bucket/?id=%s" % quote(bucket) href = "%s%s" % (bundle.request.build_absolute_uri("/"), href) - results.append(ResultObject({"function": bucket.decode("utf-8"), "web_link": href})) + results.append(ResultObject({"function": bucket, "web_link": href})) return results def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - return self._handle_request(bundle, start, finish) - - return wrapped() + return self._handle_request(bundle) class InstanceResource(ErrorsResource): @@ -711,13 +660,8 @@ class Meta(ErrorsMeta): def obj_get_list(self, bundle): oopsid = bundle.request.GET.get("id", None) - - class wrapped(list): - def __getslice__(self, start, finish): - results = cassie.get_crash(oopsid) - return [ResultObject({"instance": results})] - - return wrapped() + results = cassie.get_crash(oopsid) + return [ResultObject({"instance": results})] class AverageCrashesResource(ErrorsResource): @@ -729,91 +673,88 @@ class Meta(ErrorsMeta): resource_name = "average-crashes" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - release = bundle.request.GET.get("release", None) - package = bundle.request.GET.get("package", None) - version = bundle.request.GET.get("version", None) - fields = [] - package and fields.append(package) - version and fields.append(version) - field = ":".join(fields) - if not release: - # releases = sorted(release_color_mapping.items()) - # By default only display non-EoL releases to make the - # legend fit better interim fix for LP: #1073560. - releases = [] - for release in release_color_mapping: - if release not in [ - "Ubuntu 12.04", - "Ubuntu 12.10", - "Ubuntu 13.04", - "Ubuntu 13.10", - "Ubuntu 14.04", - "Ubuntu 14.10", - "Ubuntu 15.04", - "Ubuntu 15.10", - "Ubuntu 16.04", - "Ubuntu 16.10", - "Ubuntu 17.04", - "Ubuntu 17.10", - "Ubuntu 18.10", - "Ubuntu 19.04", - "Ubuntu 19.10", - "Ubuntu 20.10", - "Ubuntu 21.04", - "Ubuntu 21.10", - "Ubuntu 22.10", - "Ubuntu 23.04", - "Ubuntu 23.10", - ]: - releases.append((release, release_color_mapping[release])) - else: - if release in release_color_mapping: - releases = [(release, release_color_mapping[release])] - else: - releases = [(release, "#000000")] - - for release, color in releases: - if field: - f = "%s:%s" % (release, field) - else: - f = release - if release != "Ubuntu 12.04": - standards_color = precise_standards_color_mapping[release] - problems = cassie.get_average_crashes(f, release, 360) - recoverables = cassie.get_average_crashes( - "RecoverableProblem:" + f, release, 360 - ) - - # Combine the Crash and RecoverableProblem data. - results = {} - for item in problems: - results[item[0]] = item[1] - for item in recoverables: - if item[0] in results: - results[item[0]] -= item[1] - results = sorted( - list(results.items()), key=cmp_to_key(lambda x, y: x[0] <= y[0]) - ) - - res = [{"x": result[0] * 1000, "y": result[1]} for result in results] - d = { - "key": "%s (by 12.04 standards)" % release, + release = bundle.request.GET.get("release", None) + package = bundle.request.GET.get("package", None) + version = bundle.request.GET.get("version", None) + field_parts = [] + package and field_parts.append(package) + version and field_parts.append(version) + field = ":".join(field_parts) + if not release: + # releases = sorted(release_color_mapping.items()) + # By default only display non-EoL releases to make the + # legend fit better interim fix for LP: #1073560. + releases = [ + (r, release_color_mapping[r]) + for r in release_color_mapping + if r + not in [ + "Ubuntu 12.04", + "Ubuntu 12.10", + "Ubuntu 13.04", + "Ubuntu 13.10", + "Ubuntu 14.04", + "Ubuntu 14.10", + "Ubuntu 15.04", + "Ubuntu 15.10", + "Ubuntu 16.04", + "Ubuntu 16.10", + "Ubuntu 17.04", + "Ubuntu 17.10", + "Ubuntu 18.10", + "Ubuntu 19.04", + "Ubuntu 19.10", + "Ubuntu 20.10", + "Ubuntu 21.04", + "Ubuntu 21.10", + "Ubuntu 22.10", + "Ubuntu 23.04", + "Ubuntu 23.10", + ] + ] + else: + if release in release_color_mapping: + releases = [(release, release_color_mapping[release])] + else: + releases = [(release, "#000000")] + + output = [] + for r, color in releases: + f = "%s:%s" % (r, field) if field else r + if r != "Ubuntu 12.04": + standards_color = precise_standards_color_mapping[r] + problems = cassie.get_average_crashes(f, r, 360) + recoverables = cassie.get_average_crashes("RecoverableProblem:" + f, r, 360) + + # Combine the Crash and RecoverableProblem data. + combined = {} + for item in problems: + combined[item[0]] = item[1] + for item in recoverables: + if item[0] in combined: + combined[item[0]] -= item[1] + combined = sorted( + list(combined.items()), key=cmp_to_key(lambda x, y: x[0] <= y[0]) + ) + + res = [{"x": result[0] * 1000, "y": result[1]} for result in combined] + output.append( + ResultObject( + { + "key": "%s (by 12.04 standards)" % r, "values": res, "color": standards_color, } - yield ResultObject(d) - - res = [{"x": result[0] * 1000, "y": result[1]} for result in problems] - d = {"key": release, "values": res, "color": color} - yield ResultObject(d) - else: - results = cassie.get_average_crashes(f, release, 360) - res = [{"x": result[0] * 1000, "y": result[1]} for result in results] - yield ResultObject({"key": release, "values": res, "color": color}) + ) + ) - return wrapped() + res = [{"x": result[0] * 1000, "y": result[1]} for result in problems] + output.append(ResultObject({"key": r, "values": res, "color": color})) + else: + results = cassie.get_average_crashes(f, r, 360) + res = [{"x": result[0] * 1000, "y": result[1]} for result in results] + output.append(ResultObject({"key": r, "values": res, "color": color})) + return output class AverageInstancesResource(ErrorsResource): @@ -825,16 +766,13 @@ class Meta(ErrorsMeta): resource_name = "average-instances" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - bucketid = unquote(bundle.request.GET.get("id", None)) - for release, color in release_color_mapping.items(): - r = cassie.get_average_instances(bucketid, release, 360) - values = [{"x": i[0] * 1000, "y": i[1]} for i in r] - d = {"key": release, "values": values, "color": color} - yield ResultObject(d) - - return wrapped() + bucketid = unquote(bundle.request.GET.get("id", None)) + results = [] + for release, color in release_color_mapping.items(): + raw = cassie.get_average_instances(bucketid, release, 360) + values = [{"x": i[0] * 1000, "y": i[1]} for i in raw] + results.append(ResultObject({"key": release, "values": values, "color": color})) + return results class ReportsStateResource(ErrorsResource): @@ -964,28 +902,28 @@ class Meta(ErrorsMeta): resource_name = "instances" def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - bucketid = unquote(bundle.request.GET.get("id", None)) - start = bundle.request.GET.get("start", None) - cols = ["DistroRelease", "Package", "Architecture"] - gen = cassie.get_crashes_for_bucket(bucketid, start=start) - for oops in gen: - ts = (oops.time - 0x01B21DD213814000) * 100 / 1e9 - ts = datetime.datetime.utcfromtimestamp(ts) - d = cassie.get_crash(str(oops), columns=cols) - ver = split_package_and_version(d.get("Package", ""))[1] - yield ResultObject( - { - "timestamp": ts, - "incident": oops, - "package_version": ver, - "ubuntu_version": d.get("DistroRelease", ""), - "architecture": d.get("Architecture", ""), - } - ) - - return wrapped() + bucketid = unquote(bundle.request.GET.get("id", None)) + cursor = bundle.request.GET.get("start", None) + cols = ["DistroRelease", "Package", "Architecture"] + gen = cassie.get_crashes_for_bucket(bucketid, start=cursor) + results = [] + for oops in gen: + ts = (oops.time - 0x01B21DD213814000) * 100 / 1e9 + ts = datetime.datetime.utcfromtimestamp(ts) + d = cassie.get_crash(str(oops), columns=cols) + ver = split_package_and_version(d.get("Package", ""))[1] + results.append( + ResultObject( + { + "timestamp": ts, + "incident": oops, + "package_version": ver, + "ubuntu_version": d.get("DistroRelease", ""), + "architecture": d.get("Architecture", ""), + } + ) + ) + return results class VersionsResource(ErrorsResource): @@ -1050,36 +988,31 @@ def update(self, results, version, release, codename, total, src_pkg=None): results[version]._data["total"] += total def obj_get_list(self, bundle): - class wrapped(list): - def __getslice__(klass, start, finish): - bucketid = bundle.request.GET.get("id", None) - vers = cassie.get_versions_for_bucket(bucketid) - src_pkg = cassie.get_source_package_for_bucket(bucketid) - results = {} - # store package versions for later sorting - versions = [] - for ver in vers: - release, version = ver - total = vers[ver] - if release in codenames: - codename = codenames[release] - else: - codename = "derivatives" - versions.append(version) - self.update(results, version, release, codename, total, src_pkg) - # Produce totals for all Ubuntu releases as the last row. - self.update(results, "All versions", release, codename, total) - versions.sort(key=cmp_to_key(apt.apt_pkg.version_compare)) - if vers: - versions.append("All versions") - oresults = OrderedDict() - for version in versions: - oresults[version] = results[version] - return list(oresults.values()) - else: - return {} - - return wrapped() + bucketid = bundle.request.GET.get("id", None) + vers = cassie.get_versions_for_bucket(bucketid) + src_pkg = cassie.get_source_package_for_bucket(bucketid) + results = {} + # store package versions for later sorting + versions = [] + for ver in vers: + release, version = ver + total = vers[ver] + if release in codenames: + codename = codenames[release] + else: + codename = "derivatives" + versions.append(version) + self.update(results, version, release, codename, total, src_pkg) + # Produce totals for all Ubuntu releases as the last row. + self.update(results, "All versions", release, codename, total) + versions.sort(key=cmp_to_key(apt.apt_pkg.version_compare)) + if vers: + versions.append("All versions") + oresults = OrderedDict() + for version in versions: + oresults[version] = results[version] + return list(oresults.values()) + return [] class CrashSignaturesForBug(ErrorsResource): @@ -1090,10 +1023,6 @@ class Meta(ErrorsMeta): def obj_get_list(self, bundle): bug = bundle.request.GET.get("bug", None) - - class wrapped(list): - def __getslice__(self, start, finish): - results = cassie.get_signatures_for_bug(bug) - return [ResultObject({"signatures": results[start:finish]})] - - return wrapped() + limit = int(bundle.request.GET.get("limit", self._meta.limit)) + results = cassie.get_signatures_for_bug(bug) + return [ResultObject({"signatures": results[:limit]})] diff --git a/src/errors/cassie.py b/src/errors/cassie.py index 06a3493f..46e1e642 100644 --- a/src/errors/cassie.py +++ b/src/errors/cassie.py @@ -171,8 +171,6 @@ def get_bucket_counts( count = row.value if not show_failed and column.startswith("failed"): continue - if isinstance(column, str): - column = column.encode("utf-8") try: existing = results[column] except KeyError: From f8776694b1400ed83a2330684b6562ec6d2a43f3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:16:36 +0000 Subject: [PATCH 09/17] fix(errors/js): add null guards and remove server-side means data from template - Guard vals and reports_state_fixed_master accesses against null/undefined - Remove the server-rendered 'means' variable from main.html (data comes from the API) - Pass no argument to mean_time_between_failures_graph() since means is fetched via API Co-authored-by: Hyask <7489759+Hyask@users.noreply.github.com> --- .../static/js/mean_time_between_failures.js | 6 +++--- src/errors/static/js/most_common_problems.js | 4 ++-- src/errors/templates/main.html | 18 ++++++------------ 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/errors/static/js/mean_time_between_failures.js b/src/errors/static/js/mean_time_between_failures.js index 8e6f71f4..a30dc62f 100644 --- a/src/errors/static/js/mean_time_between_failures.js +++ b/src/errors/static/js/mean_time_between_failures.js @@ -167,7 +167,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { var oneDay = 86400000; for (obj in data.objects) { var vals = data.objects[obj].values; - if (vals.length > 0 && vals[vals.length - 1].x < releaseDay) { + if (vals && vals.length > 0 && vals[vals.length - 1].x < releaseDay) { /* If the graph doesn't include the release day, expand the * range to show it. Use three days past so that the label * fits. */ @@ -185,7 +185,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { container.transition().duration(500).call(chart); /* If we don't have any data */ - if (vals.length <= 0) { + if (vals && vals.length <= 0) { return chart; } @@ -240,7 +240,7 @@ function mean_time_between_failures_request(url, external_legend, constrain) { }); } -function mean_time_between_failures_graph(means) { +function mean_time_between_failures_graph() { YUI().use('node', 'event-key', 'event-valuechange', 'event-outside', function(Y) { function mean_time_between_failures_changed() { var selected_release; diff --git a/src/errors/static/js/most_common_problems.js b/src/errors/static/js/most_common_problems.js index 401f6be2..1fb3a1c9 100644 --- a/src/errors/static/js/most_common_problems.js +++ b/src/errors/static/js/most_common_problems.js @@ -147,7 +147,7 @@ function(Y) { } return o.value; } - if (reports_state_fixed_master[o.data.report][0]) { + if (reports_state_fixed_master && reports_state_fixed_master[o.data.report] && reports_state_fixed_master[o.data.report][0]) { /* If the problem has appeared in the most recent published version */ if (latest) { @@ -238,7 +238,7 @@ function(Y) { var bugFormatter = function(o) { var failed = o.data['function'].indexOf('failed:') == 0; var unknown = o.data['package'] == 'unknown package'; - if (o.value || !user_is_authenticated || failed) { + if (reports_state_fixed_master && (o.value || !user_is_authenticated || failed)) { bug_id = o.value; /* show master bug if bug is a duplicate */ state = reports_state_fixed_master[bug_id]; diff --git a/src/errors/templates/main.html b/src/errors/templates/main.html index 255b826d..62786748 100644 --- a/src/errors/templates/main.html +++ b/src/errors/templates/main.html @@ -31,17 +31,11 @@ var loggedin_user = ''; {% endif %} /* used in most_common_problems.js */ - var allow_bug_filing = {{ allow_bug_filing }}; - - var means = { - {% for release, m in means.items %} - '{{ release }}' : [ - {% for period, count in m %} - { x: {{ period }} * 1000, y: {{ count }} }, - {% endfor %} - ], - {% endfor %} - }; + {% if allow_bug_filing %} + var allow_bug_filing = true + {% else %} + var allow_bug_filing = false + {% endif %} YUI().use('event', 'querystring', 'node', function(Y) { Y.on('load', function() { @@ -64,7 +58,7 @@ Y.one('#notes').setStyle('display', 'block'); Y.one('#note-message').setHTML(msg); } - mean_time_between_failures_graph(means); + mean_time_between_failures_graph(); most_common_problems_table(loggedin_user); }); }); From 1f52e20e3dec5467605072530e95f363538668d0 Mon Sep 17 00:00:00 2001 From: Florent 'Skia' Jacquet Date: Wed, 22 Apr 2026 15:45:10 +0100 Subject: [PATCH 10/17] errors: static: import all missing js libraries from old repo --- src/errors/static/js/nvd3/lib/cie.js | 155 + src/errors/static/js/nvd3/lib/crossfilter.js | 1180 + .../static/js/nvd3/lib/crossfilter.min.js | 1 + src/errors/static/js/nvd3/lib/d3.v2.js | 7033 ++++++ src/errors/static/js/nvd3/lib/d3.v2.min.js | 4 + src/errors/static/js/nvd3/lib/fisheye.js | 86 + src/errors/static/js/nvd3/lib/hive.js | 80 + src/errors/static/js/nvd3/lib/horizon.js | 192 + src/errors/static/js/nvd3/lib/sankey.js | 292 + .../align-plugin/align-plugin-coverage.js | 295 + .../build/align-plugin/align-plugin-debug.js | 194 + .../build/align-plugin/align-plugin-min.js | 2 + .../js/yui/build/align-plugin/align-plugin.js | 194 + .../yui/build/anim-base/anim-base-coverage.js | 927 + .../js/yui/build/anim-base/anim-base-debug.js | 686 + .../js/yui/build/anim-base/anim-base-min.js | 2 + .../js/yui/build/anim-base/anim-base.js | 685 + .../build/anim-color/anim-color-coverage.js | 107 + .../yui/build/anim-color/anim-color-debug.js | 54 + .../js/yui/build/anim-color/anim-color-min.js | 2 + .../js/yui/build/anim-color/anim-color.js | 54 + .../build/anim-curve/anim-curve-coverage.js | 114 + .../yui/build/anim-curve/anim-curve-debug.js | 60 + .../js/yui/build/anim-curve/anim-curve-min.js | 2 + .../js/yui/build/anim-curve/anim-curve.js | 60 + .../build/anim-easing/anim-easing-coverage.js | 492 + .../build/anim-easing/anim-easing-debug.js | 366 + .../yui/build/anim-easing/anim-easing-min.js | 2 + .../js/yui/build/anim-easing/anim-easing.js | 366 + .../anim-node-plugin-coverage.js | 72 + .../anim-node-plugin-debug.js | 27 + .../anim-node-plugin/anim-node-plugin-min.js | 2 + .../anim-node-plugin/anim-node-plugin.js | 27 + .../build/anim-scroll/anim-scroll-coverage.js | 85 + .../build/anim-scroll/anim-scroll-debug.js | 39 + .../yui/build/anim-scroll/anim-scroll-min.js | 2 + .../js/yui/build/anim-scroll/anim-scroll.js | 39 + .../anim-shape-transform-coverage.js | 187 + .../build/anim-shape/anim-shape-coverage.js | 293 + .../yui/build/anim-shape/anim-shape-debug.js | 186 + .../js/yui/build/anim-shape/anim-shape-min.js | 2 + .../js/yui/build/anim-shape/anim-shape.js | 186 + .../js/yui/build/anim-xy/anim-xy-coverage.js | 68 + .../js/yui/build/anim-xy/anim-xy-debug.js | 27 + .../js/yui/build/anim-xy/anim-xy-min.js | 2 + .../static/js/yui/build/anim-xy/anim-xy.js | 27 + .../yui/build/app-base/app-base-coverage.js | 1275 + .../js/yui/build/app-base/app-base-debug.js | 1099 + .../js/yui/build/app-base/app-base-min.js | 2 + .../static/js/yui/build/app-base/app-base.js | 1099 + .../build/app-content/app-content-coverage.js | 310 + .../build/app-content/app-content-debug.js | 235 + .../yui/build/app-content/app-content-min.js | 2 + .../js/yui/build/app-content/app-content.js | 235 + .../app-transitions-css-min.css | 2 + .../app-transitions-css.css | 34 + .../app-transitions-native-coverage.js | 481 + .../app-transitions-native-debug.js | 354 + .../app-transitions-native-min.js | 2 + .../app-transitions-native.js | 354 + .../app-transitions-coverage.js | 290 + .../app-transitions/app-transitions-debug.js | 243 + .../app-transitions/app-transitions-min.js | 2 + .../build/app-transitions/app-transitions.js | 243 + .../array-extras/array-extras-coverage.js | 544 + .../build/array-extras/array-extras-debug.js | 401 + .../build/array-extras/array-extras-min.js | 2 + .../js/yui/build/array-extras/array-extras.js | 401 + .../array-invoke/array-invoke-coverage.js | 84 + .../build/array-invoke/array-invoke-debug.js | 41 + .../build/array-invoke/array-invoke-min.js | 2 + .../js/yui/build/array-invoke/array-invoke.js | 41 + .../arraylist-add/arraylist-add-coverage.js | 140 + .../arraylist-add/arraylist-add-debug.js | 88 + .../build/arraylist-add/arraylist-add-min.js | 2 + .../yui/build/arraylist-add/arraylist-add.js | 88 + .../arraylist-filter-coverage.js | 90 + .../arraylist-filter-debug.js | 46 + .../arraylist-filter/arraylist-filter-min.js | 2 + .../arraylist-filter/arraylist-filter.js | 46 + .../yui/build/arraylist/arraylist-coverage.js | 296 + .../js/yui/build/arraylist/arraylist-debug.js | 215 + .../js/yui/build/arraylist/arraylist-min.js | 2 + .../js/yui/build/arraylist/arraylist.js | 215 + .../yui/build/arraysort/arraysort-coverage.js | 119 + .../js/yui/build/arraysort/arraysort-debug.js | 66 + .../js/yui/build/arraysort/arraysort-min.js | 2 + .../js/yui/build/arraysort/arraysort.js | 66 + .../js/yui/build/assets/skins/sam/arrows.png | Bin 0 -> 258 bytes .../assets/skins/sam/autocomplete-list.css | 2 + .../js/yui/build/assets/skins/sam/bg.png | Bin 0 -> 121 bytes .../build/assets/skins/sam/calendar-base.css | 2 + .../yui/build/assets/skins/sam/calendar.css | 2 + .../assets/skins/sam/calendarnavigator.css | 2 + .../assets/skins/sam/console-filters.css | 2 + .../js/yui/build/assets/skins/sam/console.css | 2 + .../skins/sam/datatable-base-deprecated.css | 3 + .../build/assets/skins/sam/datatable-base.css | 2 + .../assets/skins/sam/datatable-message.css | 2 + .../assets/skins/sam/datatable-scroll.css | 2 + .../build/assets/skins/sam/datatable-sort.css | 2 + .../js/yui/build/assets/skins/sam/dial.css | 2 + .../build/assets/skins/sam/dt-arrow-dn.png | Bin 0 -> 101 bytes .../build/assets/skins/sam/dt-arrow-up.png | Bin 0 -> 99 bytes .../sam/horizontal-menu-submenu-indicator.png | Bin 0 -> 157 bytes .../sam/horizontal-menu-submenu-toggle.png | Bin 0 -> 183 bytes .../yui/build/assets/skins/sam/node-flick.css | 2 + .../build/assets/skins/sam/node-menunav.css | 2 + .../js/yui/build/assets/skins/sam/overlay.css | 2 + .../js/yui/build/assets/skins/sam/panel.css | 2 + .../build/assets/skins/sam/rail-x-lines.png | Bin 0 -> 3656 bytes .../js/yui/build/assets/skins/sam/rail-x.png | Bin 0 -> 3639 bytes .../build/assets/skins/sam/rail-y-lines.png | Bin 0 -> 3642 bytes .../js/yui/build/assets/skins/sam/rail-y.png | Bin 0 -> 3629 bytes .../build/assets/skins/sam/resize-base.css | 2 + .../assets/skins/sam/scrollview-base.css | 2 + .../assets/skins/sam/scrollview-list.css | 2 + .../skins/sam/scrollview-scrollbars.css | 2 + .../js/yui/build/assets/skins/sam/skin.css | 29 + .../build/assets/skins/sam/slider-base.css | 2 + .../assets/skins/sam/sort-arrow-sprite-ie.png | Bin 0 -> 3628 bytes .../assets/skins/sam/sort-arrow-sprite.png | Bin 0 -> 2884 bytes .../js/yui/build/assets/skins/sam/sprite.png | Bin 0 -> 2913 bytes .../build/assets/skins/sam/sprite_icons.gif | Bin 0 -> 142 bytes .../build/assets/skins/sam/sprite_icons.png | Bin 0 -> 176 bytes .../js/yui/build/assets/skins/sam/tabview.css | 2 + .../build/assets/skins/sam/test-console.css | 2 + .../js/yui/build/assets/skins/sam/thumb-x.png | Bin 0 -> 3873 bytes .../js/yui/build/assets/skins/sam/thumb-y.png | Bin 0 -> 3860 bytes .../sam/vertical-menu-submenu-indicator.png | Bin 0 -> 156 bytes .../yui/build/assets/skins/sam/warn_error.png | Bin 0 -> 571 bytes .../build/assets/skins/sam/widget-base.css | 2 + .../build/assets/skins/sam/widget-buttons.css | 2 + .../assets/skins/sam/widget-modality.css | 2 + .../build/assets/skins/sam/widget-stack.css | 2 + .../build/async-queue/async-queue-coverage.js | 680 + .../build/async-queue/async-queue-debug.js | 523 + .../yui/build/async-queue/async-queue-min.js | 2 + .../js/yui/build/async-queue/async-queue.js | 523 + .../attribute-base/attribute-base-coverage.js | 158 + .../attribute-base/attribute-base-debug.js | 111 + .../attribute-base/attribute-base-min.js | 2 + .../build/attribute-base/attribute-base.js | 111 + .../attribute-complex-coverage.js | 96 + .../attribute-complex-debug.js | 57 + .../attribute-complex-min.js | 2 + .../attribute-complex/attribute-complex.js | 57 + .../attribute-core/attribute-core-coverage.js | 1413 ++ .../attribute-core/attribute-core-debug.js | 1123 + .../attribute-core/attribute-core-min.js | 2 + .../build/attribute-core/attribute-core.js | 1111 + .../attribute-extras-coverage.js | 217 + .../attribute-extras-debug.js | 147 + .../attribute-extras/attribute-extras-min.js | 2 + .../attribute-extras/attribute-extras.js | 146 + .../attribute-observable-coverage.js | 287 + .../attribute-observable-debug.js | 212 + .../attribute-observable-min.js | 2 + .../attribute-observable.js | 211 + .../autocomplete-base-coverage.js | 1824 ++ .../autocomplete-base-debug.js | 1558 ++ .../autocomplete-base-min.js | 3 + .../autocomplete-base/autocomplete-base.js | 1550 ++ ...utocomplete-filters-accentfold-coverage.js | 213 + .../autocomplete-filters-accentfold-debug.js | 137 + .../autocomplete-filters-accentfold-min.js | 2 + .../autocomplete-filters-accentfold.js | 137 + .../autocomplete-filters-coverage.js | 329 + .../autocomplete-filters-debug.js | 240 + .../autocomplete-filters-min.js | 2 + .../autocomplete-filters.js | 240 + ...mplete-highlighters-accentfold-coverage.js | 167 + ...ocomplete-highlighters-accentfold-debug.js | 108 + ...utocomplete-highlighters-accentfold-min.js | 2 + .../autocomplete-highlighters-accentfold.js | 108 + .../autocomplete-highlighters-coverage.js | 268 + .../autocomplete-highlighters-debug.js | 200 + .../autocomplete-highlighters-min.js | 2 + .../autocomplete-highlighters.js | 200 + .../autocomplete-list-keys-coverage.js | 276 + .../autocomplete-list-keys-debug.js | 187 + .../autocomplete-list-keys-min.js | 2 + .../autocomplete-list-keys.js | 187 + .../assets/autocomplete-list-core.css | 28 + .../skins/night/autocomplete-list-skin.css | 52 + .../assets/skins/night/autocomplete-list.css | 2 + .../skins/sam/autocomplete-list-skin.css | 18 + .../assets/skins/sam/autocomplete-list.css | 2 + .../autocomplete-list-coverage.js | 1135 + .../autocomplete-list-debug.js | 905 + .../autocomplete-list-min.js | 3 + .../autocomplete-list/autocomplete-list.js | 905 + .../lang/autocomplete-list.js | 2 + .../lang/autocomplete-list_en.js | 2 + .../lang/autocomplete-list_es.js | 2 + .../autocomplete-plugin-coverage.js | 94 + .../autocomplete-plugin-debug.js | 49 + .../autocomplete-plugin-min.js | 2 + .../autocomplete-plugin.js | 49 + .../autocomplete-sources-coverage.js | 643 + .../autocomplete-sources-debug.js | 476 + .../autocomplete-sources-min.js | 2 + .../autocomplete-sources.js | 476 + .../yui/build/axis-base/axis-base-coverage.js | 1012 + .../js/yui/build/axis-base/axis-base-debug.js | 821 + .../js/yui/build/axis-base/axis-base-min.js | 2 + .../js/yui/build/axis-base/axis-base.js | 821 + .../axis-category-base-coverage.js | 273 + .../axis-category-base-debug.js | 203 + .../axis-category-base-min.js | 2 + .../axis-category-base/axis-category-base.js | 203 + .../axis-category/axis-category-coverage.js | 127 + .../axis-category/axis-category-debug.js | 79 + .../build/axis-category/axis-category-min.js | 2 + .../yui/build/axis-category/axis-category.js | 79 + .../axis-numeric-base-coverage.js | 880 + .../axis-numeric-base-debug.js | 646 + .../axis-numeric-base-min.js | 2 + .../axis-numeric-base/axis-numeric-base.js | 646 + .../axis-numeric/axis-numeric-coverage.js | 153 + .../build/axis-numeric/axis-numeric-debug.js | 94 + .../build/axis-numeric/axis-numeric-min.js | 2 + .../js/yui/build/axis-numeric/axis-numeric.js | 94 + .../axis-stacked-base-coverage.js | 203 + .../axis-stacked-base-debug.js | 134 + .../axis-stacked-base-min.js | 2 + .../axis-stacked-base/axis-stacked-base.js | 134 + .../axis-stacked/axis-stacked-coverage.js | 60 + .../build/axis-stacked/axis-stacked-debug.js | 24 + .../build/axis-stacked/axis-stacked-min.js | 2 + .../js/yui/build/axis-stacked/axis-stacked.js | 24 + .../axis-time-base/axis-time-base-coverage.js | 425 + .../axis-time-base/axis-time-base-debug.js | 318 + .../axis-time-base/axis-time-base-min.js | 2 + .../build/axis-time-base/axis-time-base.js | 318 + .../yui/build/axis-time/axis-time-coverage.js | 98 + .../js/yui/build/axis-time/axis-time-debug.js | 54 + .../js/yui/build/axis-time/axis-time-min.js | 2 + .../js/yui/build/axis-time/axis-time.js | 54 + .../static/js/yui/build/axis/axis-coverage.js | 4002 +++ .../static/js/yui/build/axis/axis-debug.js | 3108 +++ .../static/js/yui/build/axis/axis-min.js | 5 + src/errors/static/js/yui/build/axis/axis.js | 3108 +++ .../yui/build/base-base/base-base-coverage.js | 196 + .../js/yui/build/base-base/base-base-debug.js | 146 + .../js/yui/build/base-base/base-base-min.js | 2 + .../js/yui/build/base-base/base-base.js | 146 + .../build/base-build/base-build-coverage.js | 637 + .../yui/build/base-build/base-build-debug.js | 458 + .../js/yui/build/base-build/base-build-min.js | 2 + .../js/yui/build/base-build/base-build.js | 458 + .../yui/build/base-core/base-core-coverage.js | 834 + .../js/yui/build/base-core/base-core-debug.js | 644 + .../js/yui/build/base-core/base-core-min.js | 2 + .../js/yui/build/base-core/base-core.js | 638 + .../base-observable-coverage.js | 278 + .../base-observable/base-observable-debug.js | 204 + .../base-observable/base-observable-min.js | 2 + .../build/base-observable/base-observable.js | 203 + .../base-pluginhost-coverage.js | 76 + .../base-pluginhost/base-pluginhost-debug.js | 37 + .../base-pluginhost/base-pluginhost-min.js | 2 + .../build/base-pluginhost/base-pluginhost.js | 37 + .../build/button-core/button-core-coverage.js | 362 + .../build/button-core/button-core-debug.js | 275 + .../yui/build/button-core/button-core-min.js | 2 + .../js/yui/build/button-core/button-core.js | 275 + .../button-group/button-group-coverage.js | 259 + .../build/button-group/button-group-debug.js | 187 + .../build/button-group/button-group-min.js | 2 + .../js/yui/build/button-group/button-group.js | 187 + .../button-plugin/button-plugin-coverage.js | 199 + .../button-plugin/button-plugin-debug.js | 135 + .../build/button-plugin/button-plugin-min.js | 2 + .../yui/build/button-plugin/button-plugin.js | 135 + .../js/yui/build/button/button-coverage.js | 480 + .../js/yui/build/button/button-debug.js | 383 + .../static/js/yui/build/button/button-min.js | 2 + .../static/js/yui/build/button/button.js | 383 + .../build/cache-base/cache-base-coverage.js | 541 + .../yui/build/cache-base/cache-base-debug.js | 443 + .../js/yui/build/cache-base/cache-base-min.js | 2 + .../js/yui/build/cache-base/cache-base.js | 433 + .../cache-offline/cache-offline-coverage.js | 434 + .../cache-offline/cache-offline-debug.js | 342 + .../build/cache-offline/cache-offline-min.js | 2 + .../yui/build/cache-offline/cache-offline.js | 334 + .../cache-plugin/cache-plugin-coverage.js | 96 + .../build/cache-plugin/cache-plugin-debug.js | 54 + .../build/cache-plugin/cache-plugin-min.js | 2 + .../js/yui/build/cache-plugin/cache-plugin.js | 54 + .../assets/calendar-base-core.css | 22 + .../assets/skins/night/calendar-base-skin.css | 83 + .../assets/skins/night/calendar-base.css | 2 + .../assets/skins/sam/calendar-base-skin.css | 89 + .../assets/skins/sam/calendar-base.css | 2 + .../calendar-base/calendar-base-coverage.js | 2127 ++ .../calendar-base/calendar-base-debug.js | 1682 ++ .../build/calendar-base/calendar-base-min.js | 4 + .../yui/build/calendar-base/calendar-base.js | 1682 ++ .../build/calendar-base/lang/calendar-base.js | 2 + .../calendar-base/lang/calendar-base_de.js | 2 + .../calendar-base/lang/calendar-base_en.js | 2 + .../calendar-base/lang/calendar-base_es-AR.js | 2 + .../calendar-base/lang/calendar-base_es.js | 2 + .../calendar-base/lang/calendar-base_fr.js | 2 + .../calendar-base/lang/calendar-base_it.js | 2 + .../calendar-base/lang/calendar-base_ja.js | 2 + .../calendar-base/lang/calendar-base_nb-NO.js | 2 + .../calendar-base/lang/calendar-base_nl.js | 2 + .../calendar-base/lang/calendar-base_pt-BR.js | 2 + .../calendar-base/lang/calendar-base_ru.js | 2 + .../lang/calendar-base_zh-HANT-TW.js | 2 + .../build/calendar/assets/calendar-core.css | 32 + .../assets/skins/night/calendar-skin.css | 8 + .../calendar/assets/skins/night/calendar.css | 2 + .../assets/skins/sam/calendar-skin.css | 8 + .../calendar/assets/skins/sam/calendar.css | 2 + .../yui/build/calendar/calendar-coverage.js | 779 + .../js/yui/build/calendar/calendar-debug.js | 568 + .../js/yui/build/calendar/calendar-min.js | 2 + .../static/js/yui/build/calendar/calendar.js | 568 + .../js/yui/build/calendar/lang/calendar.js | 2 + .../js/yui/build/calendar/lang/calendar_de.js | 2 + .../js/yui/build/calendar/lang/calendar_en.js | 2 + .../yui/build/calendar/lang/calendar_es-AR.js | 2 + .../js/yui/build/calendar/lang/calendar_es.js | 2 + .../js/yui/build/calendar/lang/calendar_fr.js | 2 + .../js/yui/build/calendar/lang/calendar_it.js | 2 + .../js/yui/build/calendar/lang/calendar_ja.js | 2 + .../yui/build/calendar/lang/calendar_nb-NO.js | 2 + .../js/yui/build/calendar/lang/calendar_nl.js | 2 + .../yui/build/calendar/lang/calendar_pt-BR.js | 2 + .../js/yui/build/calendar/lang/calendar_ru.js | 2 + .../calendar/lang/calendar_zh-HANT-TW.js | 2 + .../assets/calendarnavigator-core.css | 17 + .../skins/night/calendarnavigator-skin.css | 34 + .../assets/skins/night/calendarnavigator.css | 2 + .../skins/sam/calendarnavigator-skin.css | 34 + .../assets/skins/sam/calendarnavigator.css | 2 + .../calendarnavigator-coverage.js | 407 + .../calendarnavigator-debug.js | 299 + .../calendarnavigator-min.js | 2 + .../calendarnavigator/calendarnavigator.js | 299 + .../build/charts-base/charts-base-coverage.js | 6520 +++++ .../build/charts-base/charts-base-debug.js | 4996 ++++ .../yui/build/charts-base/charts-base-min.js | 9 + .../js/yui/build/charts-base/charts-base.js | 4996 ++++ .../charts-legend/charts-legend-coverage.js | 2289 ++ .../charts-legend/charts-legend-debug.js | 1689 ++ .../build/charts-legend/charts-legend-min.js | 4 + .../yui/build/charts-legend/charts-legend.js | 1689 ++ .../js/yui/build/charts/charts-coverage.js | 66 + .../js/yui/build/charts/charts-debug.js | 25 + .../static/js/yui/build/charts/charts-min.js | 2 + .../static/js/yui/build/charts/charts.js | 25 + .../classnamemanager-coverage.js | 133 + .../classnamemanager-debug.js | 85 + .../classnamemanager/classnamemanager-min.js | 2 + .../classnamemanager/classnamemanager.js | 85 + .../assets/slider-base-core.css | 32 + .../clickable-rail/assets/slider-core.css | 32 + .../assets/thumb-x-oblong-dark.png | Bin 0 -> 4042 bytes .../clickable-rail/assets/thumb-x-oblong.png | Bin 0 -> 961 bytes .../assets/thumb-x-oblong2-dark.png | Bin 0 -> 4045 bytes .../clickable-rail/assets/thumb-x-oblong2.png | Bin 0 -> 706 bytes .../assets/thumb-y-oblong-dark.png | Bin 0 -> 519 bytes .../clickable-rail/assets/thumb-y-oblong.png | Bin 0 -> 1023 bytes .../assets/thumb-y-oblong2-dark.png | Bin 0 -> 706 bytes .../clickable-rail/assets/thumb-y-oblong2.png | Bin 0 -> 746 bytes .../clickable-rail/clickable-rail-coverage.js | 285 + .../clickable-rail/clickable-rail-debug.js | 213 + .../clickable-rail/clickable-rail-min.js | 2 + .../build/clickable-rail/clickable-rail.js | 213 + .../build/color-base/color-base-coverage.js | 593 + .../yui/build/color-base/color-base-debug.js | 449 + .../js/yui/build/color-base/color-base-min.js | 2 + .../js/yui/build/color-base/color-base.js | 449 + .../color-harmony/color-harmony-coverage.js | 760 + .../color-harmony/color-harmony-debug.js | 570 + .../build/color-harmony/color-harmony-min.js | 2 + .../yui/build/color-harmony/color-harmony.js | 569 + .../yui/build/color-hsl/color-hsl-coverage.js | 313 + .../js/yui/build/color-hsl/color-hsl-debug.js | 219 + .../js/yui/build/color-hsl/color-hsl-min.js | 2 + .../js/yui/build/color-hsl/color-hsl.js | 219 + .../yui/build/color-hsv/color-hsv-coverage.js | 266 + .../js/yui/build/color-hsv/color-hsv-debug.js | 183 + .../js/yui/build/color-hsv/color-hsv-min.js | 2 + .../js/yui/build/color-hsv/color-hsv.js | 183 + .../assets/console-filters-core.css | 1 + .../assets/skins/sam/console-filters-skin.css | 28 + .../assets/skins/sam/console-filters.css | 2 + .../console-filters-coverage.js | 915 + .../console-filters/console-filters-debug.js | 724 + .../console-filters/console-filters-min.js | 2 + .../build/console-filters/console-filters.js | 724 + .../yui/build/console/assets/console-core.css | 1 + .../console/assets/console-filters-core.css | 1 + .../yui/build/console/assets/skins/sam/bg.png | Bin 0 -> 121 bytes .../assets/skins/sam/console-filters-skin.css | 28 + .../assets/skins/sam/console-filters.css | 2 + .../console/assets/skins/sam/console-skin.css | 186 + .../console/assets/skins/sam/console.css | 2 + .../console/assets/skins/sam/warn_error.png | Bin 0 -> 571 bytes .../yui/build/console/assets/warn_error.png | Bin 0 -> 571 bytes .../js/yui/build/console/console-coverage.js | 1784 ++ .../js/yui/build/console/console-debug.js | 1515 ++ .../js/yui/build/console/console-min.js | 3 + .../static/js/yui/build/console/console.js | 1515 ++ .../js/yui/build/console/lang/console.js | 2 + .../js/yui/build/console/lang/console_en.js | 2 + .../js/yui/build/console/lang/console_es.js | 2 + .../js/yui/build/console/lang/console_ja.js | 2 + .../js/yui/build/cookie/cookie-coverage.js | 686 + .../js/yui/build/cookie/cookie-debug.js | 510 + .../static/js/yui/build/cookie/cookie-min.js | 2 + .../static/js/yui/build/cookie/cookie.js | 510 + .../createlink-base-coverage.js | 147 + .../createlink-base/createlink-base-debug.js | 87 + .../createlink-base/createlink-base-min.js | 2 + .../build/createlink-base/createlink-base.js | 86 + .../cssbase-context/base-context-min.css | 2 + .../build/cssbase-context/base-context.css | 76 + .../cssbase-context/cssbase-context-min.css | 2 + .../build/cssbase-context/cssbase-context.css | 77 + .../static/js/yui/build/cssbase/base-min.css | 2 + .../static/js/yui/build/cssbase/base.css | 76 + .../js/yui/build/cssbase/cssbase-min.css | 2 + .../static/js/yui/build/cssbase/cssbase.css | 77 + .../js/yui/build/cssbutton/cssbutton-min.css | 2 + .../js/yui/build/cssbutton/cssbutton.css | 148 + .../cssfonts-context/cssfonts-context-min.css | 2 + .../cssfonts-context/cssfonts-context.css | 43 + .../cssfonts-context/fonts-context-min.css | 2 + .../build/cssfonts-context/fonts-context.css | 43 + .../js/yui/build/cssfonts/cssfonts-min.css | 2 + .../static/js/yui/build/cssfonts/cssfonts.css | 43 + .../js/yui/build/cssfonts/fonts-min.css | 2 + .../static/js/yui/build/cssfonts/fonts.css | 43 + .../build/cssgrids-base/cssgrids-base-min.css | 2 + .../yui/build/cssgrids-base/cssgrids-base.css | 28 + .../grids-context-min.css | 3 + .../grids-context.css | 485 + .../cssgrids-responsive-min.css | 2 + .../cssgrids-responsive.css | 229 + .../cssgrids-units/cssgrids-units-min.css | 2 + .../build/cssgrids-units/cssgrids-units.css | 151 + .../js/yui/build/cssgrids/cssgrids-min.css | 2 + .../static/js/yui/build/cssgrids/cssgrids.css | 175 + .../js/yui/build/cssgrids/grids-min.css | 2 + .../static/js/yui/build/cssgrids/grids.css | 162 + .../cssnormalize-context-min.css | 3 + .../cssnormalize-context.css | 243 + .../build/cssnormalize/cssnormalize-min.css | 2 + .../yui/build/cssnormalize/cssnormalize.css | 534 + .../cssreset-context/cssreset-context-min.css | 2 + .../cssreset-context/cssreset-context.css | 122 + .../cssreset-context/reset-context-min.css | 2 + .../build/cssreset-context/reset-context.css | 121 + .../js/yui/build/cssreset/cssreset-min.css | 2 + .../static/js/yui/build/cssreset/cssreset.css | 122 + .../js/yui/build/cssreset/reset-min.css | 2 + .../static/js/yui/build/cssreset/reset.css | 121 + .../dataschema-array-coverage.js | 250 + .../dataschema-array-debug.js | 190 + .../dataschema-array/dataschema-array-min.js | 2 + .../dataschema-array/dataschema-array.js | 187 + .../dataschema-base-coverage.js | 113 + .../dataschema-base/dataschema-base-debug.js | 68 + .../dataschema-base/dataschema-base-min.js | 2 + .../build/dataschema-base/dataschema-base.js | 67 + .../dataschema-json-coverage.js | 571 + .../dataschema-json/dataschema-json-debug.js | 444 + .../dataschema-json/dataschema-json-min.js | 2 + .../build/dataschema-json/dataschema-json.js | 440 + .../dataschema-text-coverage.js | 245 + .../dataschema-text/dataschema-text-debug.js | 184 + .../dataschema-text/dataschema-text-min.js | 2 + .../build/dataschema-text/dataschema-text.js | 183 + .../dataschema-xml/dataschema-xml-coverage.js | 509 + .../dataschema-xml/dataschema-xml-debug.js | 386 + .../dataschema-xml/dataschema-xml-min.js | 2 + .../build/dataschema-xml/dataschema-xml.js | 384 + .../datasource-arrayschema-coverage.js | 157 + .../datasource-arrayschema-debug.js | 107 + .../datasource-arrayschema-min.js | 2 + .../datasource-arrayschema.js | 107 + .../datasource-cache-coverage.js | 227 + .../datasource-cache-debug.js | 167 + .../datasource-cache/datasource-cache-min.js | 2 + .../datasource-cache/datasource-cache.js | 167 + .../datasource-function-coverage.js | 157 + .../datasource-function-debug.js | 109 + .../datasource-function-min.js | 2 + .../datasource-function.js | 107 + .../datasource-get/datasource-get-coverage.js | 278 + .../datasource-get/datasource-get-debug.js | 214 + .../datasource-get/datasource-get-min.js | 2 + .../build/datasource-get/datasource-get.js | 210 + .../datasource-io/datasource-io-coverage.js | 268 + .../datasource-io/datasource-io-debug.js | 205 + .../build/datasource-io/datasource-io-min.js | 2 + .../yui/build/datasource-io/datasource-io.js | 202 + .../datasource-jsonschema-coverage.js | 152 + .../datasource-jsonschema-debug.js | 104 + .../datasource-jsonschema-min.js | 2 + .../datasource-jsonschema.js | 104 + .../datasource-local-coverage.js | 472 + .../datasource-local-debug.js | 403 + .../datasource-local/datasource-local-min.js | 2 + .../datasource-local/datasource-local.js | 399 + .../datasource-polling-coverage.js | 146 + .../datasource-polling-debug.js | 94 + .../datasource-polling-min.js | 2 + .../datasource-polling/datasource-polling.js | 94 + .../datasource-textschema-coverage.js | 151 + .../datasource-textschema-debug.js | 103 + .../datasource-textschema-min.js | 2 + .../datasource-textschema.js | 103 + .../datasource-xmlschema-coverage.js | 151 + .../datasource-xmlschema-debug.js | 103 + .../datasource-xmlschema-min.js | 2 + .../datasource-xmlschema.js | 103 + .../assets/datatable-base-deprecated-core.css | 88 + .../night/datatable-base-deprecated-skin.css | 290 + .../skins/night/datatable-base-deprecated.css | 3 + .../sam/datatable-base-deprecated-skin.css | 238 + .../skins/sam/datatable-base-deprecated.css | 3 + .../assets/skins/sam/dt-arrow-dn.png | Bin 0 -> 101 bytes .../assets/skins/sam/dt-arrow-up.png | Bin 0 -> 99 bytes .../datatable-base-deprecated-coverage.js | 2099 ++ .../datatable-base-deprecated-debug.js | 1740 ++ .../datatable-base-deprecated-min.js | 3 + .../datatable-base-deprecated.js | 1740 ++ .../assets/datatable-base-core.css | 5 + .../skins/night/datatable-base-skin.css | 75 + .../assets/skins/night/datatable-base.css | 2 + .../assets/skins/sam/datatable-base-skin.css | 70 + .../assets/skins/sam/datatable-base.css | 2 + .../datatable-base/datatable-base-coverage.js | 801 + .../datatable-base/datatable-base-debug.js | 695 + .../datatable-base/datatable-base-min.js | 2 + .../build/datatable-base/datatable-base.js | 695 + .../datatable-body/datatable-body-coverage.js | 1110 + .../datatable-body/datatable-body-debug.js | 913 + .../datatable-body/datatable-body-min.js | 2 + .../build/datatable-body/datatable-body.js | 913 + .../datatable-column-widths-coverage.js | 384 + .../datatable-column-widths-debug.js | 300 + .../datatable-column-widths-min.js | 2 + .../datatable-column-widths.js | 300 + .../datatable-core/datatable-core-coverage.js | 1138 + .../datatable-core/datatable-core-debug.js | 916 + .../datatable-core/datatable-core-min.js | 2 + .../build/datatable-core/datatable-core.js | 916 + ...atatable-datasource-deprecated-coverage.js | 255 + .../datatable-datasource-deprecated-debug.js | 199 + .../datatable-datasource-deprecated-min.js | 2 + .../datatable-datasource-deprecated.js | 199 + .../datatable-datasource-coverage.js | 237 + .../datatable-datasource-debug.js | 181 + .../datatable-datasource-min.js | 2 + .../datatable-datasource.js | 181 + .../datatable-formatters-coverage.js | 452 + .../datatable-formatters-debug.js | 341 + .../datatable-formatters-min.js | 2 + .../datatable-formatters.js | 341 + .../datatable-head/datatable-head-coverage.js | 674 + .../datatable-head/datatable-head-debug.js | 534 + .../datatable-head/datatable-head-min.js | 2 + .../build/datatable-head/datatable-head.js | 534 + .../assets/datatable-message-core.css | 9 + .../skins/night/datatable-message-skin.css | 7 + .../assets/skins/night/datatable-message.css | 2 + .../skins/sam/datatable-message-skin.css | 6 + .../assets/skins/sam/datatable-message.css | 2 + .../datatable-message-coverage.js | 382 + .../datatable-message-debug.js | 291 + .../datatable-message-min.js | 2 + .../datatable-message/datatable-message.js | 291 + .../lang/datatable-message.js | 2 + .../lang/datatable-message_en.js | 2 + .../lang/datatable-message_es.js | 2 + .../lang/datatable-message_fr.js | 2 + .../datatable-mutable-coverage.js | 777 + .../datatable-mutable-debug.js | 636 + .../datatable-mutable-min.js | 2 + .../datatable-mutable/datatable-mutable.js | 631 + .../datatable-scroll-deprecated-coverage.js | 929 + .../datatable-scroll-deprecated-debug.js | 749 + .../datatable-scroll-deprecated-min.js | 3 + .../datatable-scroll-deprecated.js | 749 + .../assets/datatable-scroll-core.css | 72 + .../skins/night/datatable-scroll-skin.css | 26 + .../assets/skins/night/datatable-scroll.css | 2 + .../skins/sam/datatable-scroll-skin.css | 25 + .../assets/skins/sam/datatable-scroll.css | 2 + .../datatable-scroll-coverage.js | 1749 ++ .../datatable-scroll-debug.js | 1387 + .../datatable-scroll/datatable-scroll-min.js | 3 + .../datatable-scroll/datatable-scroll.js | 1387 + .../datatable-sort-deprecated-coverage.js | 494 + .../datatable-sort-deprecated-debug.js | 381 + .../datatable-sort-deprecated-min.js | 2 + .../datatable-sort-deprecated.js | 381 + .../lang/datatable-sort-deprecated.js | 2 + .../lang/datatable-sort-deprecated_en.js | 2 + .../assets/datatable-sort-core.css | 18 + .../skins/night/datatable-sort-skin.css | 86 + .../assets/skins/night/datatable-sort.css | 2 + .../skins/night/sort-arrow-sprite-ie.png | Bin 0 -> 3629 bytes .../assets/skins/night/sort-arrow-sprite.png | Bin 0 -> 2885 bytes .../assets/skins/sam/datatable-sort-skin.css | 44 + .../assets/skins/sam/datatable-sort.css | 2 + .../assets/skins/sam/sort-arrow-sprite-ie.png | Bin 0 -> 3628 bytes .../assets/skins/sam/sort-arrow-sprite.png | Bin 0 -> 2884 bytes .../datatable-sort/datatable-sort-coverage.js | 1129 + .../datatable-sort/datatable-sort-debug.js | 897 + .../datatable-sort/datatable-sort-min.js | 2 + .../build/datatable-sort/datatable-sort.js | 897 + .../datatable-sort/lang/datatable-sort.js | 2 + .../datatable-sort/lang/datatable-sort_en.js | 2 + .../datatable-sort/lang/datatable-sort_es.js | 2 + .../datatable-sort/lang/datatable-sort_fr.js | 2 + .../datatable-table-coverage.js | 919 + .../datatable-table/datatable-table-debug.js | 757 + .../datatable-table/datatable-table-min.js | 2 + .../build/datatable-table/datatable-table.js | 757 + .../datatype-date-format-coverage.js | 533 + .../datatype-date-format-debug.js | 387 + .../datatype-date-format-min.js | 2 + .../datatype-date-format.js | 385 + .../lang/datatype-date-format.js | 2 + .../lang/datatype-date-format_ar-JO.js | 2 + .../lang/datatype-date-format_ar.js | 2 + .../lang/datatype-date-format_ca-ES.js | 2 + .../lang/datatype-date-format_ca.js | 2 + .../lang/datatype-date-format_da-DK.js | 2 + .../lang/datatype-date-format_da.js | 2 + .../lang/datatype-date-format_de-AT.js | 2 + .../lang/datatype-date-format_de-DE.js | 2 + .../lang/datatype-date-format_de.js | 2 + .../lang/datatype-date-format_el-GR.js | 2 + .../lang/datatype-date-format_el.js | 2 + .../lang/datatype-date-format_en-AU.js | 2 + .../lang/datatype-date-format_en-CA.js | 2 + .../lang/datatype-date-format_en-GB.js | 2 + .../lang/datatype-date-format_en-IE.js | 2 + .../lang/datatype-date-format_en-IN.js | 2 + .../lang/datatype-date-format_en-JO.js | 2 + .../lang/datatype-date-format_en-MY.js | 2 + .../lang/datatype-date-format_en-NZ.js | 2 + .../lang/datatype-date-format_en-PH.js | 2 + .../lang/datatype-date-format_en-SG.js | 2 + .../lang/datatype-date-format_en-US.js | 2 + .../lang/datatype-date-format_en.js | 2 + .../lang/datatype-date-format_es-AR.js | 2 + .../lang/datatype-date-format_es-BO.js | 2 + .../lang/datatype-date-format_es-CL.js | 2 + .../lang/datatype-date-format_es-CO.js | 2 + .../lang/datatype-date-format_es-EC.js | 2 + .../lang/datatype-date-format_es-ES.js | 2 + .../lang/datatype-date-format_es-MX.js | 2 + .../lang/datatype-date-format_es-PE.js | 2 + .../lang/datatype-date-format_es-PY.js | 2 + .../lang/datatype-date-format_es-US.js | 2 + .../lang/datatype-date-format_es-UY.js | 2 + .../lang/datatype-date-format_es-VE.js | 2 + .../lang/datatype-date-format_es.js | 2 + .../lang/datatype-date-format_fi-FI.js | 2 + .../lang/datatype-date-format_fi.js | 2 + .../lang/datatype-date-format_fr-BE.js | 2 + .../lang/datatype-date-format_fr-CA.js | 2 + .../lang/datatype-date-format_fr-FR.js | 2 + .../lang/datatype-date-format_fr.js | 2 + .../lang/datatype-date-format_hi-IN.js | 2 + .../lang/datatype-date-format_hi.js | 2 + .../lang/datatype-date-format_id-ID.js | 2 + .../lang/datatype-date-format_id.js | 2 + .../lang/datatype-date-format_it-IT.js | 2 + .../lang/datatype-date-format_it.js | 2 + .../lang/datatype-date-format_ja-JP.js | 2 + .../lang/datatype-date-format_ja.js | 2 + .../lang/datatype-date-format_ko-KR.js | 2 + .../lang/datatype-date-format_ko.js | 2 + .../lang/datatype-date-format_ms-MY.js | 2 + .../lang/datatype-date-format_ms.js | 2 + .../lang/datatype-date-format_nb-NO.js | 2 + .../lang/datatype-date-format_nb.js | 2 + .../lang/datatype-date-format_nl-BE.js | 2 + .../lang/datatype-date-format_nl-NL.js | 2 + .../lang/datatype-date-format_nl.js | 2 + .../lang/datatype-date-format_pl-PL.js | 2 + .../lang/datatype-date-format_pl.js | 2 + .../lang/datatype-date-format_pt-BR.js | 2 + .../lang/datatype-date-format_pt.js | 2 + .../lang/datatype-date-format_ro-RO.js | 2 + .../lang/datatype-date-format_ro.js | 2 + .../lang/datatype-date-format_ru-RU.js | 2 + .../lang/datatype-date-format_ru.js | 2 + .../lang/datatype-date-format_sv-SE.js | 2 + .../lang/datatype-date-format_sv.js | 2 + .../lang/datatype-date-format_th-TH.js | 2 + .../lang/datatype-date-format_th.js | 2 + .../lang/datatype-date-format_tr-TR.js | 2 + .../lang/datatype-date-format_tr.js | 2 + .../lang/datatype-date-format_vi-VN.js | 2 + .../lang/datatype-date-format_vi.js | 2 + .../lang/datatype-date-format_zh-Hans-CN.js | 2 + .../lang/datatype-date-format_zh-Hans.js | 2 + .../lang/datatype-date-format_zh-Hant-HK.js | 2 + .../lang/datatype-date-format_zh-Hant-TW.js | 2 + .../lang/datatype-date-format_zh-Hant.js | 2 + .../datatype-date-math-coverage.js | 297 + .../datatype-date-math-debug.js | 209 + .../datatype-date-math-min.js | 2 + .../datatype-date-math/datatype-date-math.js | 208 + .../datatype-date-parse-coverage.js | 80 + .../datatype-date-parse-debug.js | 37 + .../datatype-date-parse-min.js | 2 + .../datatype-date-parse.js | 36 + .../datatype-number-format-coverage.js | 170 + .../datatype-number-format-debug.js | 110 + .../datatype-number-format-min.js | 2 + .../datatype-number-format.js | 109 + .../datatype-number-parse-coverage.js | 85 + .../datatype-number-parse-debug.js | 41 + .../datatype-number-parse-min.js | 2 + .../datatype-number-parse.js | 40 + .../datatype-xml-format-coverage.js | 101 + .../datatype-xml-format-debug.js | 54 + .../datatype-xml-format-min.js | 2 + .../datatype-xml-format.js | 53 + .../datatype-xml-parse-coverage.js | 117 + .../datatype-xml-parse-debug.js | 63 + .../datatype-xml-parse-min.js | 2 + .../datatype-xml-parse/datatype-xml-parse.js | 61 + .../dd-constrain/dd-constrain-coverage.js | 756 + .../build/dd-constrain/dd-constrain-debug.js | 563 + .../build/dd-constrain/dd-constrain-min.js | 2 + .../js/yui/build/dd-constrain/dd-constrain.js | 563 + .../build/dd-ddm-base/dd-ddm-base-coverage.js | 513 + .../build/dd-ddm-base/dd-ddm-base-debug.js | 376 + .../yui/build/dd-ddm-base/dd-ddm-base-min.js | 2 + .../js/yui/build/dd-ddm-base/dd-ddm-base.js | 376 + .../build/dd-ddm-drop/dd-ddm-drop-coverage.js | 578 + .../build/dd-ddm-drop/dd-ddm-drop-debug.js | 402 + .../yui/build/dd-ddm-drop/dd-ddm-drop-min.js | 2 + .../js/yui/build/dd-ddm-drop/dd-ddm-drop.js | 402 + .../js/yui/build/dd-ddm/dd-ddm-coverage.js | 199 + .../js/yui/build/dd-ddm/dd-ddm-debug.js | 127 + .../static/js/yui/build/dd-ddm/dd-ddm-min.js | 2 + .../static/js/yui/build/dd-ddm/dd-ddm.js | 127 + .../build/dd-delegate/dd-delegate-coverage.js | 465 + .../build/dd-delegate/dd-delegate-debug.js | 339 + .../yui/build/dd-delegate/dd-delegate-min.js | 2 + .../js/yui/build/dd-delegate/dd-delegate.js | 339 + .../js/yui/build/dd-drag/dd-drag-coverage.js | 1632 ++ .../js/yui/build/dd-drag/dd-drag-debug.js | 1277 + .../js/yui/build/dd-drag/dd-drag-min.js | 3 + .../static/js/yui/build/dd-drag/dd-drag.js | 1274 + .../dd-drop-plugin/dd-drop-plugin-coverage.js | 89 + .../dd-drop-plugin/dd-drop-plugin-debug.js | 45 + .../dd-drop-plugin/dd-drop-plugin-min.js | 2 + .../build/dd-drop-plugin/dd-drop-plugin.js | 45 + .../js/yui/build/dd-drop/dd-drop-coverage.js | 764 + .../js/yui/build/dd-drop/dd-drop-debug.js | 556 + .../js/yui/build/dd-drop/dd-drop-min.js | 2 + .../static/js/yui/build/dd-drop/dd-drop.js | 555 + .../build/dd-gestures/dd-gestures-coverage.js | 109 + .../build/dd-gestures/dd-gestures-debug.js | 55 + .../yui/build/dd-gestures/dd-gestures-min.js | 2 + .../js/yui/build/dd-gestures/dd-gestures.js | 53 + .../yui/build/dd-plugin/dd-plugin-coverage.js | 285 + .../js/yui/build/dd-plugin/dd-plugin-debug.js | 206 + .../js/yui/build/dd-plugin/dd-plugin-min.js | 2 + .../js/yui/build/dd-plugin/dd-plugin.js | 201 + .../yui/build/dd-proxy/dd-proxy-coverage.js | 365 + .../js/yui/build/dd-proxy/dd-proxy-debug.js | 250 + .../js/yui/build/dd-proxy/dd-proxy-min.js | 2 + .../static/js/yui/build/dd-proxy/dd-proxy.js | 250 + .../yui/build/dd-scroll/dd-scroll-coverage.js | 574 + .../js/yui/build/dd-scroll/dd-scroll-debug.js | 423 + .../js/yui/build/dd-scroll/dd-scroll-min.js | 2 + .../js/yui/build/dd-scroll/dd-scroll.js | 423 + .../js/yui/build/dial/assets/dial-core.css | 43 + .../dial/assets/skins/night/dial-skin.css | 90 + .../build/dial/assets/skins/night/dial.css | 2 + .../build/dial/assets/skins/sam/dial-skin.css | 76 + .../yui/build/dial/assets/skins/sam/dial.css | 2 + .../static/js/yui/build/dial/dial-coverage.js | 1682 ++ .../static/js/yui/build/dial/dial-debug.js | 1314 + .../static/js/yui/build/dial/dial-min.js | 4 + src/errors/static/js/yui/build/dial/dial.js | 1314 + .../static/js/yui/build/dial/lang/dial.js | 2 + .../static/js/yui/build/dial/lang/dial_en.js | 2 + .../static/js/yui/build/dial/lang/dial_es.js | 2 + .../js/yui/build/dom-attrs/dom-attrs-debug.js | 209 + .../js/yui/build/dom-attrs/dom-attrs-min.js | 2 + .../js/yui/build/dom-attrs/dom-attrs.js | 206 + .../yui/build/dom-base/dom-base-coverage.js | 996 + .../js/yui/build/dom-base/dom-base-debug.js | 689 + .../js/yui/build/dom-base/dom-base-min.js | 3 + .../static/js/yui/build/dom-base/dom-base.js | 685 + .../js/yui/build/dom-class/dom-class-debug.js | 93 + .../js/yui/build/dom-class/dom-class-min.js | 2 + .../js/yui/build/dom-class/dom-class.js | 92 + .../yui/build/dom-core/dom-core-coverage.js | 556 + .../js/yui/build/dom-core/dom-core-debug.js | 390 + .../js/yui/build/dom-core/dom-core-min.js | 2 + .../static/js/yui/build/dom-core/dom-core.js | 390 + .../yui/build/dom-create/dom-create-debug.js | 280 + .../js/yui/build/dom-create/dom-create-min.js | 2 + .../js/yui/build/dom-create/dom-create.js | 279 + .../dom-deprecated/dom-deprecated-coverage.js | 114 + .../dom-deprecated/dom-deprecated-debug.js | 62 + .../dom-deprecated/dom-deprecated-min.js | 2 + .../build/dom-deprecated/dom-deprecated.js | 62 + .../build/dom-screen/dom-screen-coverage.js | 853 + .../yui/build/dom-screen/dom-screen-debug.js | 612 + .../js/yui/build/dom-screen/dom-screen-min.js | 2 + .../js/yui/build/dom-screen/dom-screen.js | 606 + .../js/yui/build/dom-size/dom-size-debug.js | 49 + .../js/yui/build/dom-size/dom-size-min.js | 2 + .../static/js/yui/build/dom-size/dom-size.js | 49 + .../dom-style-ie/dom-style-ie-coverage.js | 463 + .../build/dom-style-ie/dom-style-ie-debug.js | 307 + .../build/dom-style-ie/dom-style-ie-min.js | 2 + .../js/yui/build/dom-style-ie/dom-style-ie.js | 304 + .../yui/build/dom-style/dom-style-coverage.js | 508 + .../js/yui/build/dom-style/dom-style-debug.js | 341 + .../js/yui/build/dom-style/dom-style-min.js | 2 + .../js/yui/build/dom-style/dom-style.js | 341 + .../static/js/yui/build/dump/dump-coverage.js | 185 + .../static/js/yui/build/dump/dump-debug.js | 106 + .../static/js/yui/build/dump/dump-min.js | 2 + src/errors/static/js/yui/build/dump/dump.js | 106 + .../build/editor-base/editor-base-coverage.js | 1267 + .../build/editor-base/editor-base-debug.js | 919 + .../yui/build/editor-base/editor-base-min.js | 3 + .../js/yui/build/editor-base/editor-base.js | 916 + .../build/editor-bidi/editor-bidi-coverage.js | 488 + .../build/editor-bidi/editor-bidi-debug.js | 338 + .../yui/build/editor-bidi/editor-bidi-min.js | 2 + .../js/yui/build/editor-bidi/editor-bidi.js | 338 + .../yui/build/editor-br/editor-br-coverage.js | 206 + .../js/yui/build/editor-br/editor-br-debug.js | 130 + .../js/yui/build/editor-br/editor-br-min.js | 2 + .../js/yui/build/editor-br/editor-br.js | 130 + .../editor-lists/editor-lists-coverage.js | 197 + .../build/editor-lists/editor-lists-debug.js | 128 + .../build/editor-lists/editor-lists-min.js | 2 + .../js/yui/build/editor-lists/editor-lists.js | 123 + .../editor-para-base-coverage.js | 198 + .../editor-para-base-debug.js | 124 + .../editor-para-base/editor-para-base-min.js | 2 + .../editor-para-base/editor-para-base.js | 123 + .../editor-para-ie/editor-para-ie-coverage.js | 210 + .../editor-para-ie/editor-para-ie-debug.js | 126 + .../editor-para-ie/editor-para-ie-min.js | 2 + .../build/editor-para-ie/editor-para-ie.js | 126 + .../build/editor-para/editor-para-coverage.js | 498 + .../build/editor-para/editor-para-debug.js | 303 + .../yui/build/editor-para/editor-para-min.js | 2 + .../js/yui/build/editor-para/editor-para.js | 302 + .../editor-selection-coverage.js | 1420 ++ .../editor-selection-debug.js | 981 + .../editor-selection/editor-selection-min.js | 3 + .../editor-selection/editor-selection.js | 965 + .../build/editor-tab/editor-tab-coverage.js | 121 + .../yui/build/editor-tab/editor-tab-debug.js | 70 + .../js/yui/build/editor-tab/editor-tab-min.js | 2 + .../js/yui/build/editor-tab/editor-tab.js | 69 + .../js/yui/build/escape/escape-coverage.js | 137 + .../js/yui/build/escape/escape-debug.js | 93 + .../static/js/yui/build/escape/escape-min.js | 2 + .../static/js/yui/build/escape/escape.js | 93 + .../event-base-ie/event-base-ie-coverage.js | 470 + .../event-base-ie/event-base-ie-debug.js | 304 + .../build/event-base-ie/event-base-ie-min.js | 4 + .../yui/build/event-base-ie/event-base-ie.js | 304 + .../build/event-base/event-base-coverage.js | 1768 ++ .../yui/build/event-base/event-base-debug.js | 1381 + .../js/yui/build/event-base/event-base-min.js | 3 + .../js/yui/build/event-base/event-base.js | 1369 + .../event-contextmenu-coverage.js | 267 + .../event-contextmenu-debug.js | 186 + .../event-contextmenu-min.js | 2 + .../event-contextmenu/event-contextmenu.js | 186 + .../event-custom-base-coverage.js | 2881 +++ .../event-custom-base-debug.js | 2314 ++ .../event-custom-base-min.js | 3 + .../event-custom-base/event-custom-base.js | 2296 ++ .../event-custom-complex-coverage.js | 727 + .../event-custom-complex-debug.js | 507 + .../event-custom-complex-min.js | 2 + .../event-custom-complex.js | 503 + .../event-delegate/event-delegate-coverage.js | 478 + .../event-delegate/event-delegate-debug.js | 349 + .../event-delegate/event-delegate-min.js | 2 + .../build/event-delegate/event-delegate.js | 348 + .../build/event-flick/event-flick-coverage.js | 380 + .../build/event-flick/event-flick-debug.js | 273 + .../yui/build/event-flick/event-flick-min.js | 2 + .../js/yui/build/event-flick/event-flick.js | 272 + .../build/event-focus/event-focus-coverage.js | 410 + .../build/event-focus/event-focus-debug.js | 274 + .../yui/build/event-focus/event-focus-min.js | 2 + .../js/yui/build/event-focus/event-focus.js | 274 + .../build/event-hover/event-hover-coverage.js | 128 + .../build/event-hover/event-hover-debug.js | 71 + .../yui/build/event-hover/event-hover-min.js | 2 + .../js/yui/build/event-hover/event-hover.js | 71 + .../yui/build/event-key/event-key-coverage.js | 244 + .../js/yui/build/event-key/event-key-debug.js | 172 + .../js/yui/build/event-key/event-key-min.js | 2 + .../js/yui/build/event-key/event-key.js | 172 + .../event-mouseenter-coverage.js | 203 + .../event-mouseenter-debug.js | 130 + .../event-mouseenter/event-mouseenter-min.js | 2 + .../event-mouseenter/event-mouseenter.js | 130 + .../event-mousewheel-coverage.js | 102 + .../event-mousewheel-debug.js | 51 + .../event-mousewheel/event-mousewheel-min.js | 2 + .../event-mousewheel/event-mousewheel.js | 51 + .../build/event-move/event-move-coverage.js | 812 + .../yui/build/event-move/event-move-debug.js | 602 + .../js/yui/build/event-move/event-move-min.js | 2 + .../js/yui/build/event-move/event-move.js | 589 + .../event-outside/event-outside-coverage.js | 170 + .../event-outside/event-outside-debug.js | 108 + .../build/event-outside/event-outside-min.js | 2 + .../yui/build/event-outside/event-outside.js | 108 + .../event-resize/event-resize-coverage.js | 107 + .../build/event-resize/event-resize-debug.js | 54 + .../build/event-resize/event-resize-min.js | 2 + .../js/yui/build/event-resize/event-resize.js | 54 + .../event-simulate/event-simulate-coverage.js | 1262 + .../event-simulate/event-simulate-debug.js | 954 + .../event-simulate/event-simulate-min.js | 3 + .../build/event-simulate/event-simulate.js | 954 + .../event-synthetic-coverage.js | 1030 + .../event-synthetic/event-synthetic-debug.js | 833 + .../event-synthetic/event-synthetic-min.js | 2 + .../build/event-synthetic/event-synthetic.js | 833 + .../yui/build/event-tap/event-tap-coverage.js | 345 + .../js/yui/build/event-tap/event-tap-debug.js | 260 + .../js/yui/build/event-tap/event-tap-min.js | 2 + .../js/yui/build/event-tap/event-tap.js | 257 + .../build/event-touch/event-touch-coverage.js | 252 + .../build/event-touch/event-touch-debug.js | 178 + .../yui/build/event-touch/event-touch-min.js | 2 + .../js/yui/build/event-touch/event-touch.js | 172 + .../event-valuechange-coverage.js | 598 + .../event-valuechange-debug.js | 476 + .../event-valuechange-min.js | 2 + .../event-valuechange/event-valuechange.js | 462 + .../exec-command/exec-command-coverage.js | 1062 + .../build/exec-command/exec-command-debug.js | 720 + .../build/exec-command/exec-command-min.js | 3 + .../js/yui/build/exec-command/exec-command.js | 716 + .../yui/build/features/features-coverage.js | 562 + .../js/yui/build/features/features-debug.js | 410 + .../js/yui/build/features/features-min.js | 2 + .../static/js/yui/build/features/features.js | 409 + .../build/file-flash/file-flash-coverage.js | 413 + .../yui/build/file-flash/file-flash-debug.js | 341 + .../js/yui/build/file-flash/file-flash-min.js | 2 + .../js/yui/build/file-flash/file-flash.js | 341 + .../build/file-html5/file-html5-coverage.js | 611 + .../yui/build/file-html5/file-html5-debug.js | 496 + .../js/yui/build/file-html5/file-html5-min.js | 2 + .../js/yui/build/file-html5/file-html5.js | 496 + .../static/js/yui/build/file/file-coverage.js | 70 + .../static/js/yui/build/file/file-debug.js | 31 + .../static/js/yui/build/file/file-min.js | 2 + src/errors/static/js/yui/build/file/file.js | 31 + .../js/yui/build/frame/frame-coverage.js | 1386 + .../static/js/yui/build/frame/frame-debug.js | 1046 + .../static/js/yui/build/frame/frame-min.js | 3 + src/errors/static/js/yui/build/frame/frame.js | 1017 + .../manage-stale-min.js | 1 + .../manage-stale.js | 58 + .../gesture-simulate-coverage.js | 1658 ++ .../gesture-simulate-debug.js | 1324 + .../gesture-simulate/gesture-simulate-min.js | 3 + .../gesture-simulate/gesture-simulate.js | 1324 + .../build/get-nodejs/get-nodejs-coverage.js | 303 + .../yui/build/get-nodejs/get-nodejs-debug.js | 199 + .../js/yui/build/get-nodejs/get-nodejs-min.js | 2 + .../js/yui/build/get-nodejs/get-nodejs.js | 189 + .../static/js/yui/build/get/get-coverage.js | 1599 ++ .../static/js/yui/build/get/get-debug.js | 1292 + src/errors/static/js/yui/build/get/get-min.js | 3 + src/errors/static/js/yui/build/get/get.js | 1275 + .../graphics-canvas-default-coverage.js | 55 + .../graphics-canvas-default-debug.js | 13 + .../graphics-canvas-default-min.js | 2 + .../graphics-canvas-default.js | 13 + .../graphics-canvas-coverage.js | 4750 ++++ .../graphics-canvas/graphics-canvas-debug.js | 3671 +++ .../graphics-canvas/graphics-canvas-min.js | 6 + .../build/graphics-canvas/graphics-canvas.js | 3671 +++ .../graphics-group/graphics-group-coverage.js | 439 + .../graphics-group/graphics-group-debug.js | 311 + .../graphics-group/graphics-group-min.js | 2 + .../build/graphics-group/graphics-group.js | 311 + .../graphics-svg-default-coverage.js | 55 + .../graphics-svg-default-debug.js | 13 + .../graphics-svg-default-min.js | 2 + .../graphics-svg-default.js | 13 + .../graphics-svg/graphics-svg-coverage.js | 4566 ++++ .../build/graphics-svg/graphics-svg-debug.js | 3494 +++ .../build/graphics-svg/graphics-svg-min.js | 6 + .../js/yui/build/graphics-svg/graphics-svg.js | 3494 +++ .../graphics-vml-default-coverage.js | 55 + .../graphics-vml-default-debug.js | 13 + .../graphics-vml-default-min.js | 2 + .../graphics-vml-default.js | 13 + .../graphics-vml/graphics-vml-coverage.js | 4712 ++++ .../build/graphics-vml/graphics-vml-debug.js | 3606 +++ .../build/graphics-vml/graphics-vml-min.js | 6 + .../js/yui/build/graphics-vml/graphics-vml.js | 3606 +++ .../yui/build/graphics/graphics-coverage.js | 1319 + .../js/yui/build/graphics/graphics-debug.js | 1195 + .../js/yui/build/graphics/graphics-min.js | 2 + .../static/js/yui/build/graphics/graphics.js | 1195 + .../handlebars-base-coverage.js | 609 + .../handlebars-base/handlebars-base-debug.js | 434 + .../handlebars-base/handlebars-base-min.js | 7 + .../build/handlebars-base/handlebars-base.js | 434 + .../handlebars-compiler-coverage.js | 2789 +++ .../handlebars-compiler-debug.js | 1999 ++ .../handlebars-compiler-min.js | 12 + .../handlebars-compiler.js | 1999 ++ .../highlight-accentfold-coverage.js | 209 + .../highlight-accentfold-debug.js | 145 + .../highlight-accentfold-min.js | 2 + .../highlight-accentfold.js | 145 + .../highlight-base/highlight-base-coverage.js | 392 + .../highlight-base/highlight-base-debug.js | 313 + .../highlight-base/highlight-base-min.js | 2 + .../build/highlight-base/highlight-base.js | 313 + .../history-base/history-base-coverage.js | 764 + .../build/history-base/history-base-debug.js | 641 + .../build/history-base/history-base-min.js | 2 + .../js/yui/build/history-base/history-base.js | 641 + .../history-hash-ie-coverage.js | 205 + .../history-hash-ie/history-hash-ie-debug.js | 139 + .../history-hash-ie/history-hash-ie-min.js | 2 + .../build/history-hash-ie/history-hash-ie.js | 135 + .../history-hash/history-hash-coverage.js | 606 + .../build/history-hash/history-hash-debug.js | 468 + .../build/history-hash/history-hash-min.js | 2 + .../js/yui/build/history-hash/history-hash.js | 468 + .../history-html5/history-html5-coverage.js | 245 + .../history-html5/history-html5-debug.js | 184 + .../build/history-html5/history-html5-min.js | 2 + .../yui/build/history-html5/history-html5.js | 184 + .../build/imageloader/imageloader-coverage.js | 846 + .../build/imageloader/imageloader-debug.js | 666 + .../yui/build/imageloader/imageloader-min.js | 2 + .../js/yui/build/imageloader/imageloader.js | 654 + .../yui/build/intl-base/intl-base-coverage.js | 151 + .../js/yui/build/intl-base/intl-base-debug.js | 89 + .../js/yui/build/intl-base/intl-base-min.js | 2 + .../js/yui/build/intl-base/intl-base.js | 89 + .../static/js/yui/build/intl/intl-coverage.js | 215 + .../static/js/yui/build/intl/intl-debug.js | 151 + .../static/js/yui/build/intl/intl-min.js | 2 + src/errors/static/js/yui/build/intl/intl.js | 151 + .../js/yui/build/io-base/io-base-coverage.js | 1274 + .../js/yui/build/io-base/io-base-debug.js | 1013 + .../js/yui/build/io-base/io-base-min.js | 2 + .../static/js/yui/build/io-base/io-base.js | 1007 + .../js/yui/build/io-form/io-form-coverage.js | 206 + .../js/yui/build/io-form/io-form-debug.js | 131 + .../js/yui/build/io-form/io-form-min.js | 2 + .../static/js/yui/build/io-form/io-form.js | 130 + .../yui/build/io-nodejs/io-nodejs-coverage.js | 239 + .../js/yui/build/io-nodejs/io-nodejs-debug.js | 164 + .../js/yui/build/io-nodejs/io-nodejs-min.js | 2 + .../js/yui/build/io-nodejs/io-nodejs.js | 157 + .../yui/build/io-queue/io-queue-coverage.js | 259 + .../js/yui/build/io-queue/io-queue-debug.js | 174 + .../js/yui/build/io-queue/io-queue-min.js | 2 + .../static/js/yui/build/io-queue/io-queue.js | 171 + .../io-upload-iframe-coverage.js | 425 + .../io-upload-iframe-debug.js | 301 + .../io-upload-iframe/io-upload-iframe-min.js | 2 + .../io-upload-iframe/io-upload-iframe.js | 293 + .../js/yui/build/io-xdr/io-xdr-coverage.js | 447 + .../js/yui/build/io-xdr/io-xdr-debug.js | 318 + .../static/js/yui/build/io-xdr/io-xdr-min.js | 2 + .../static/js/yui/build/io-xdr/io-xdr.js | 318 + src/errors/static/js/yui/build/io-xdr/io.swf | Bin 0 -> 2247 bytes .../json-parse-shim-coverage.js | 243 + .../json-parse-shim/json-parse-shim-debug.js | 183 + .../json-parse-shim/json-parse-shim-min.js | 2 + .../build/json-parse-shim/json-parse-shim.js | 183 + .../build/json-parse/json-parse-coverage.js | 50 + .../yui/build/json-parse/json-parse-debug.js | 11 + .../js/yui/build/json-parse/json-parse-min.js | 2 + .../js/yui/build/json-parse/json-parse.js | 11 + .../json-stringify-shim-coverage.js | 346 + .../json-stringify-shim-debug.js | 233 + .../json-stringify-shim-min.js | 2 + .../json-stringify-shim.js | 233 + .../json-stringify/json-stringify-coverage.js | 143 + .../json-stringify/json-stringify-debug.js | 99 + .../json-stringify/json-stringify-min.js | 2 + .../build/json-stringify/json-stringify.js | 99 + .../yui/build/jsonp-url/jsonp-url-coverage.js | 189 + .../js/yui/build/jsonp-url/jsonp-url-debug.js | 127 + .../js/yui/build/jsonp-url/jsonp-url-min.js | 2 + .../js/yui/build/jsonp-url/jsonp-url.js | 127 + .../js/yui/build/jsonp/jsonp-coverage.js | 342 + .../static/js/yui/build/jsonp/jsonp-debug.js | 257 + .../static/js/yui/build/jsonp/jsonp-min.js | 2 + src/errors/static/js/yui/build/jsonp/jsonp.js | 252 + .../lazy-model-list-coverage.js | 632 + .../lazy-model-list/lazy-model-list-debug.js | 484 + .../lazy-model-list/lazy-model-list-min.js | 2 + .../build/lazy-model-list/lazy-model-list.js | 484 + .../build/loader-base/loader-base-coverage.js | 3793 +++ .../build/loader-base/loader-base-debug.js | 2820 +++ .../yui/build/loader-base/loader-base-min.js | 5 + .../js/yui/build/loader-base/loader-base.js | 2779 ++ .../loader-rollup/loader-rollup-coverage.js | 172 + .../loader-rollup/loader-rollup-debug.js | 103 + .../build/loader-rollup/loader-rollup-min.js | 2 + .../yui/build/loader-rollup/loader-rollup.js | 100 + .../build/loader-yui3/loader-yui3-coverage.js | 3023 +++ .../build/loader-yui3/loader-yui3-debug.js | 2917 +++ .../yui/build/loader-yui3/loader-yui3-min.js | 6 + .../js/yui/build/loader-yui3/loader-yui3.js | 2917 +++ .../js/yui/build/loader/loader-coverage.js | 6387 +++++ .../js/yui/build/loader/loader-debug.js | 5839 +++++ .../static/js/yui/build/loader/loader-min.js | 10 + .../static/js/yui/build/loader/loader.js | 5795 +++++ .../js/yui/build/matrix/matrix-coverage.js | 1213 + .../js/yui/build/matrix/matrix-debug.js | 933 + .../static/js/yui/build/matrix/matrix-min.js | 3 + .../static/js/yui/build/matrix/matrix.js | 933 + .../build/model-list/model-list-coverage.js | 1531 ++ .../yui/build/model-list/model-list-debug.js | 1240 + .../js/yui/build/model-list/model-list-min.js | 2 + .../js/yui/build/model-list/model-list.js | 1240 + .../model-sync-rest-coverage.js | 842 + .../model-sync-rest/model-sync-rest-debug.js | 734 + .../model-sync-rest/model-sync-rest-min.js | 2 + .../build/model-sync-rest/model-sync-rest.js | 734 + .../js/yui/build/model/model-coverage.js | 1207 + .../static/js/yui/build/model/model-debug.js | 988 + .../static/js/yui/build/model/model-min.js | 2 + src/errors/static/js/yui/build/model/model.js | 986 + .../yui/build/node-base/node-base-coverage.js | 1422 ++ .../js/yui/build/node-base/node-base-debug.js | 1160 + .../js/yui/build/node-base/node-base-min.js | 3 + .../js/yui/build/node-base/node-base.js | 1158 + .../yui/build/node-core/node-core-coverage.js | 2108 ++ .../js/yui/build/node-core/node-core-debug.js | 1603 ++ .../js/yui/build/node-core/node-core-min.js | 3 + .../js/yui/build/node-core/node-core.js | 1599 ++ .../node-deprecated-coverage.js | 177 + .../node-deprecated/node-deprecated-debug.js | 126 + .../node-deprecated/node-deprecated-min.js | 2 + .../build/node-deprecated/node-deprecated.js | 120 + .../node-event-delegate-coverage.js | 95 + .../node-event-delegate-debug.js | 55 + .../node-event-delegate-min.js | 2 + .../node-event-delegate.js | 55 + .../node-event-html5-coverage.js | 89 + .../node-event-html5-debug.js | 53 + .../node-event-html5/node-event-html5-min.js | 2 + .../node-event-html5/node-event-html5.js | 53 + .../node-event-simulate-coverage.js | 231 + .../node-event-simulate-debug.js | 190 + .../node-event-simulate-min.js | 2 + .../node-event-simulate.js | 190 + .../node-flick/assets/node-flick-core.css | 9 + .../assets/skins/sam/node-flick-skin.css | 2 + .../assets/skins/sam/node-flick.css | 2 + .../build/node-flick/node-flick-coverage.js | 666 + .../yui/build/node-flick/node-flick-debug.js | 525 + .../js/yui/build/node-flick/node-flick-min.js | 2 + .../js/yui/build/node-flick/node-flick.js | 524 + .../node-focusmanager-coverage.js | 1331 + .../node-focusmanager-debug.js | 1075 + .../node-focusmanager-min.js | 2 + .../node-focusmanager/node-focusmanager.js | 1071 + .../yui/build/node-load/node-load-coverage.js | 120 + .../js/yui/build/node-load/node-load-debug.js | 66 + .../js/yui/build/node-load/node-load-min.js | 2 + .../js/yui/build/node-load/node-load.js | 66 + .../node-menunav/assets/node-menunav-core.css | 170 + .../horizontal-menu-submenu-indicator.png | Bin 0 -> 157 bytes .../assets/skins/night/node-menunav-skin.css | 313 + .../assets/skins/night/node-menunav.css | 2 + .../night/vertical-menu-submenu-indicator.png | Bin 0 -> 156 bytes .../sam/horizontal-menu-submenu-indicator.png | Bin 0 -> 157 bytes .../sam/horizontal-menu-submenu-toggle.png | Bin 0 -> 183 bytes .../assets/skins/sam/node-menunav-skin.css | 267 + .../assets/skins/sam/node-menunav.css | 2 + .../sam/vertical-menu-submenu-indicator.png | Bin 0 -> 156 bytes .../node-menunav/node-menunav-coverage.js | 2756 ++ .../build/node-menunav/node-menunav-debug.js | 2190 ++ .../build/node-menunav/node-menunav-min.js | 3 + .../js/yui/build/node-menunav/node-menunav.js | 2189 ++ .../node-pluginhost-coverage.js | 149 + .../node-pluginhost/node-pluginhost-debug.js | 87 + .../node-pluginhost/node-pluginhost-min.js | 2 + .../build/node-pluginhost/node-pluginhost.js | 87 + .../build/node-screen/node-screen-coverage.js | 330 + .../build/node-screen/node-screen-debug.js | 241 + .../yui/build/node-screen/node-screen-min.js | 2 + .../js/yui/build/node-screen/node-screen.js | 239 + .../node-scroll-info-coverage.js | 707 + .../node-scroll-info-debug.js | 581 + .../node-scroll-info/node-scroll-info-min.js | 2 + .../node-scroll-info/node-scroll-info.js | 581 + .../build/node-style/node-style-coverage.js | 156 + .../yui/build/node-style/node-style-debug.js | 107 + .../js/yui/build/node-style/node-style-min.js | 2 + .../js/yui/build/node-style/node-style.js | 107 + .../static/js/yui/build/oop/oop-coverage.js | 553 + .../static/js/yui/build/oop/oop-debug.js | 402 + src/errors/static/js/yui/build/oop/oop-min.js | 2 + src/errors/static/js/yui/build/oop/oop.js | 402 + .../yui/build/overlay/assets/overlay-core.css | 12 + .../assets/skins/night/overlay-skin.css | 174 + .../overlay/assets/skins/night/overlay.css | 2 + .../overlay/assets/skins/sam/overlay-skin.css | 1 + .../overlay/assets/skins/sam/overlay.css | 2 + .../js/yui/build/overlay/overlay-coverage.js | 76 + .../js/yui/build/overlay/overlay-debug.js | 40 + .../js/yui/build/overlay/overlay-min.js | 2 + .../static/js/yui/build/overlay/overlay.js | 40 + .../js/yui/build/panel/assets/panel-core.css | 23 + .../panel/assets/skins/night/panel-skin.css | 124 + .../build/panel/assets/skins/night/panel.css | 2 + .../panel/assets/skins/night/sprite_icons.png | Bin 0 -> 176 bytes .../panel/assets/skins/sam/panel-skin.css | 96 + .../build/panel/assets/skins/sam/panel.css | 2 + .../panel/assets/skins/sam/sprite_icons.png | Bin 0 -> 176 bytes .../js/yui/build/panel/panel-coverage.js | 150 + .../static/js/yui/build/panel/panel-debug.js | 113 + .../static/js/yui/build/panel/panel-min.js | 2 + src/errors/static/js/yui/build/panel/panel.js | 113 + .../yui/build/parallel/parallel-coverage.js | 167 + .../js/yui/build/parallel/parallel-debug.js | 110 + .../js/yui/build/parallel/parallel-min.js | 2 + .../static/js/yui/build/parallel/parallel.js | 108 + .../yui/build/pjax-base/pjax-base-coverage.js | 550 + .../js/yui/build/pjax-base/pjax-base-debug.js | 441 + .../js/yui/build/pjax-base/pjax-base-min.js | 2 + .../js/yui/build/pjax-base/pjax-base.js | 440 + .../pjax-content/pjax-content-coverage.js | 349 + .../build/pjax-content/pjax-content-debug.js | 282 + .../build/pjax-content/pjax-content-min.js | 2 + .../js/yui/build/pjax-content/pjax-content.js | 282 + .../build/pjax-plugin/pjax-plugin-coverage.js | 68 + .../build/pjax-plugin/pjax-plugin-debug.js | 30 + .../yui/build/pjax-plugin/pjax-plugin-min.js | 2 + .../js/yui/build/pjax-plugin/pjax-plugin.js | 30 + .../static/js/yui/build/pjax/pjax-coverage.js | 221 + .../static/js/yui/build/pjax/pjax-debug.js | 171 + .../static/js/yui/build/pjax/pjax-min.js | 2 + src/errors/static/js/yui/build/pjax/pjax.js | 171 + .../js/yui/build/plugin/plugin-coverage.js | 311 + .../js/yui/build/plugin/plugin-debug.js | 230 + .../static/js/yui/build/plugin/plugin-min.js | 2 + .../static/js/yui/build/plugin/plugin.js | 228 + .../pluginhost-base-coverage.js | 267 + .../pluginhost-base/pluginhost-base-debug.js | 184 + .../pluginhost-base/pluginhost-base-min.js | 2 + .../build/pluginhost-base/pluginhost-base.js | 182 + .../pluginhost-config-coverage.js | 210 + .../pluginhost-config-debug.js | 131 + .../pluginhost-config-min.js | 2 + .../pluginhost-config/pluginhost-config.js | 131 + .../yui/build/profiler/profiler-coverage.js | 714 + .../js/yui/build/profiler/profiler-debug.js | 547 + .../js/yui/build/profiler/profiler-min.js | 2 + .../static/js/yui/build/profiler/profiler.js | 547 + .../js/yui/build/promise/promise-coverage.js | 605 + .../js/yui/build/promise/promise-debug.js | 466 + .../js/yui/build/promise/promise-min.js | 2 + .../static/js/yui/build/promise/promise.js | 466 + .../querystring-parse-simple-coverage.js | 98 + .../querystring-parse-simple-debug.js | 50 + .../querystring-parse-simple-min.js | 2 + .../querystring-parse-simple.js | 50 + .../querystring-parse-coverage.js | 239 + .../querystring-parse-debug.js | 163 + .../querystring-parse-min.js | 2 + .../querystring-parse/querystring-parse.js | 163 + .../querystring-stringify-simple-coverage.js | 91 + .../querystring-stringify-simple-debug.js | 45 + .../querystring-stringify-simple-min.js | 2 + .../querystring-stringify-simple.js | 45 + .../querystring-stringify-coverage.js | 176 + .../querystring-stringify-debug.js | 112 + .../querystring-stringify-min.js | 2 + .../querystring-stringify.js | 107 + .../queue-promote/queue-promote-coverage.js | 100 + .../queue-promote/queue-promote-debug.js | 54 + .../build/queue-promote/queue-promote-min.js | 2 + .../yui/build/queue-promote/queue-promote.js | 54 + .../range-slider/assets/slider-base-core.css | 32 + .../build/range-slider/assets/slider-core.css | 32 + .../assets/thumb-x-oblong-dark.png | Bin 0 -> 4042 bytes .../range-slider/assets/thumb-x-oblong.png | Bin 0 -> 961 bytes .../assets/thumb-x-oblong2-dark.png | Bin 0 -> 4045 bytes .../range-slider/assets/thumb-x-oblong2.png | Bin 0 -> 706 bytes .../assets/thumb-y-oblong-dark.png | Bin 0 -> 519 bytes .../range-slider/assets/thumb-y-oblong.png | Bin 0 -> 1023 bytes .../assets/thumb-y-oblong2-dark.png | Bin 0 -> 706 bytes .../range-slider/assets/thumb-y-oblong2.png | Bin 0 -> 746 bytes .../range-slider/range-slider-coverage.js | 65 + .../build/range-slider/range-slider-debug.js | 29 + .../build/range-slider/range-slider-min.js | 2 + .../js/yui/build/range-slider/range-slider.js | 29 + .../recordset-base/recordset-base-coverage.js | 800 + .../recordset-base/recordset-base-debug.js | 652 + .../recordset-base/recordset-base-min.js | 2 + .../build/recordset-base/recordset-base.js | 651 + .../recordset-filter-coverage.js | 160 + .../recordset-filter-debug.js | 106 + .../recordset-filter/recordset-filter-min.js | 2 + .../recordset-filter/recordset-filter.js | 106 + .../recordset-indexer-coverage.js | 308 + .../recordset-indexer-debug.js | 228 + .../recordset-indexer-min.js | 2 + .../recordset-indexer/recordset-indexer.js | 228 + .../recordset-sort/recordset-sort-coverage.js | 283 + .../recordset-sort/recordset-sort-debug.js | 207 + .../recordset-sort/recordset-sort-min.js | 2 + .../build/recordset-sort/recordset-sort.js | 206 + .../resize-base/assets/resize-base-core.css | 242 + .../resize-base/assets/skins/night/arrows.png | Bin 0 -> 258 bytes .../assets/skins/night/resize-base-skin.css | 47 + .../assets/skins/night/resize-base.css | 2 + .../resize-base/assets/skins/sam/arrows.png | Bin 0 -> 258 bytes .../assets/skins/sam/resize-base-skin.css | 47 + .../assets/skins/sam/resize-base.css | 2 + .../build/resize-base/resize-base-coverage.js | 2003 ++ .../build/resize-base/resize-base-debug.js | 1650 ++ .../yui/build/resize-base/resize-base-min.js | 3 + .../js/yui/build/resize-base/resize-base.js | 1649 ++ .../assets/resize-base-core.css | 242 + .../assets/skins/night/arrows.png | Bin 0 -> 258 bytes .../assets/skins/night/resize-base-skin.css | 47 + .../assets/skins/sam/arrows.png | Bin 0 -> 258 bytes .../assets/skins/sam/resize-base-skin.css | 47 + .../resize-constrain-coverage.js | 596 + .../resize-constrain-debug.js | 456 + .../resize-constrain/resize-constrain-min.js | 2 + .../resize-constrain/resize-constrain.js | 456 + .../resize-plugin/assets/resize-base-core.css | 242 + .../assets/skins/night/arrows.png | Bin 0 -> 258 bytes .../assets/skins/night/resize-base-skin.css | 47 + .../resize-plugin/assets/skins/sam/arrows.png | Bin 0 -> 258 bytes .../assets/skins/sam/resize-base-skin.css | 47 + .../resize-plugin/resize-plugin-coverage.js | 287 + .../resize-plugin/resize-plugin-debug.js | 209 + .../build/resize-plugin/resize-plugin-min.js | 2 + .../yui/build/resize-plugin/resize-plugin.js | 209 + .../resize-proxy/assets/resize-base-core.css | 242 + .../assets/skins/night/arrows.png | Bin 0 -> 258 bytes .../assets/skins/night/resize-base-skin.css | 47 + .../resize-proxy/assets/skins/sam/arrows.png | Bin 0 -> 258 bytes .../assets/skins/sam/resize-base-skin.css | 47 + .../resize-proxy/resize-proxy-coverage.js | 243 + .../build/resize-proxy/resize-proxy-debug.js | 167 + .../build/resize-proxy/resize-proxy-min.js | 2 + .../js/yui/build/resize-proxy/resize-proxy.js | 167 + .../js/yui/build/router/router-coverage.js | 1751 ++ .../js/yui/build/router/router-debug.js | 1421 ++ .../static/js/yui/build/router/router-min.js | 3 + .../static/js/yui/build/router/router.js | 1418 ++ .../scrollview-base-ie-coverage.js | 103 + .../scrollview-base-ie-debug.js | 55 + .../scrollview-base-ie-min.js | 2 + .../scrollview-base-ie/scrollview-base-ie.js | 55 + .../assets/scrollview-base-core.css | 15 + .../skins/night/scrollview-base-skin.css | 1 + .../assets/skins/night/scrollview-base.css | 2 + .../assets/skins/sam/scrollview-base-skin.css | 4 + .../assets/skins/sam/scrollview-base.css | 2 + .../scrollview-base-coverage.js | 1751 ++ .../scrollview-base/scrollview-base-debug.js | 1457 ++ .../scrollview-base/scrollview-base-min.js | 3 + .../build/scrollview-base/scrollview-base.js | 1457 ++ .../assets/scrollview-list-core.css | 1 + .../skins/night/scrollview-list-skin.css | 58 + .../assets/skins/night/scrollview-list.css | 2 + .../assets/skins/sam/scrollview-list-skin.css | 38 + .../assets/skins/sam/scrollview-list.css | 2 + .../scrollview-list-coverage.js | 191 + .../scrollview-list/scrollview-list-debug.js | 131 + .../scrollview-list/scrollview-list-min.js | 2 + .../build/scrollview-list/scrollview-list.js | 131 + .../scrollview-paginator-coverage.js | 921 + .../scrollview-paginator-debug.js | 733 + .../scrollview-paginator-min.js | 2 + .../scrollview-paginator.js | 733 + .../assets/scrollview-scrollbars-core.css | 96 + .../night/scrollview-scrollbars-skin.css | 97 + .../skins/night/scrollview-scrollbars.css | 2 + .../skins/sam/scrollview-scrollbars-skin.css | 91 + .../skins/sam/scrollview-scrollbars.css | 2 + .../scrollview-scrollbars-coverage.js | 748 + .../scrollview-scrollbars-debug.js | 564 + .../scrollview-scrollbars-min.js | 2 + .../scrollview-scrollbars.js | 564 + .../build/scrollview/scrollview-coverage.js | 58 + .../yui/build/scrollview/scrollview-debug.js | 22 + .../js/yui/build/scrollview/scrollview-min.js | 2 + .../js/yui/build/scrollview/scrollview.js | 22 + .../selector-css2/selector-css2-coverage.js | 640 + .../selector-css2/selector-css2-debug.js | 446 + .../build/selector-css2/selector-css2-min.js | 2 + .../yui/build/selector-css2/selector-css2.js | 445 + .../selector-css3/selector-css3-coverage.js | 257 + .../selector-css3/selector-css3-debug.js | 153 + .../build/selector-css3/selector-css3-min.js | 2 + .../yui/build/selector-css3/selector-css3.js | 153 + .../selector-native-coverage.js | 563 + .../selector-native/selector-native-debug.js | 376 + .../selector-native/selector-native-min.js | 2 + .../build/selector-native/selector-native.js | 371 + .../yui/build/selector/selector-coverage.js | 40 + .../js/yui/build/selector/selector-debug.js | 6 + .../js/yui/build/selector/selector-min.js | 2 + .../static/js/yui/build/selector/selector.js | 6 + .../series-area-stacked-coverage.js | 102 + .../series-area-stacked-debug.js | 61 + .../series-area-stacked-min.js | 2 + .../series-area-stacked.js | 61 + .../build/series-area/series-area-coverage.js | 149 + .../build/series-area/series-area-debug.js | 104 + .../yui/build/series-area/series-area-min.js | 2 + .../js/yui/build/series-area/series-area.js | 104 + .../series-areaspline-stacked-coverage.js | 90 + .../series-areaspline-stacked-debug.js | 51 + .../series-areaspline-stacked-min.js | 2 + .../series-areaspline-stacked.js | 51 + .../series-areaspline-coverage.js | 102 + .../series-areaspline-debug.js | 64 + .../series-areaspline-min.js | 2 + .../series-areaspline/series-areaspline.js | 64 + .../series-bar-stacked-coverage.js | 499 + .../series-bar-stacked-debug.js | 366 + .../series-bar-stacked-min.js | 2 + .../series-bar-stacked/series-bar-stacked.js | 366 + .../build/series-bar/series-bar-coverage.js | 237 + .../yui/build/series-bar/series-bar-debug.js | 170 + .../js/yui/build/series-bar/series-bar-min.js | 2 + .../js/yui/build/series-bar/series-bar.js | 170 + .../build/series-base/series-base-coverage.js | 458 + .../build/series-base/series-base-debug.js | 351 + .../yui/build/series-base/series-base-min.js | 2 + .../js/yui/build/series-base/series-base.js | 351 + .../series-candlestick-coverage.js | 384 + .../series-candlestick-debug.js | 292 + .../series-candlestick-min.js | 2 + .../series-candlestick/series-candlestick.js | 292 + .../series-cartesian-coverage.js | 1285 + .../series-cartesian-debug.js | 1021 + .../series-cartesian/series-cartesian-min.js | 3 + .../series-cartesian/series-cartesian.js | 1021 + .../series-column-stacked-coverage.js | 489 + .../series-column-stacked-debug.js | 353 + .../series-column-stacked-min.js | 2 + .../series-column-stacked.js | 353 + .../series-column/series-column-coverage.js | 228 + .../series-column/series-column-debug.js | 161 + .../build/series-column/series-column-min.js | 2 + .../yui/build/series-column/series-column.js | 161 + .../series-combo-stacked-coverage.js | 133 + .../series-combo-stacked-debug.js | 87 + .../series-combo-stacked-min.js | 2 + .../series-combo-stacked.js | 87 + .../series-combo/series-combo-coverage.js | 360 + .../build/series-combo/series-combo-debug.js | 284 + .../build/series-combo/series-combo-min.js | 2 + .../js/yui/build/series-combo/series-combo.js | 284 + .../series-combospline-stacked-coverage.js | 116 + .../series-combospline-stacked-debug.js | 73 + .../series-combospline-stacked-min.js | 2 + .../series-combospline-stacked.js | 73 + .../series-combospline-coverage.js | 104 + .../series-combospline-debug.js | 61 + .../series-combospline-min.js | 2 + .../series-combospline/series-combospline.js | 61 + .../series-curve-util-coverage.js | 209 + .../series-curve-util-debug.js | 131 + .../series-curve-util-min.js | 2 + .../series-curve-util/series-curve-util.js | 131 + .../series-fill-util-coverage.js | 757 + .../series-fill-util-debug.js | 517 + .../series-fill-util/series-fill-util-min.js | 2 + .../series-fill-util/series-fill-util.js | 517 + .../series-histogram-base-coverage.js | 344 + .../series-histogram-base-debug.js | 234 + .../series-histogram-base-min.js | 2 + .../series-histogram-base.js | 234 + .../series-line-stacked-coverage.js | 89 + .../series-line-stacked-debug.js | 50 + .../series-line-stacked-min.js | 2 + .../series-line-stacked.js | 50 + .../series-line-util-coverage.js | 406 + .../series-line-util-debug.js | 288 + .../series-line-util/series-line-util-min.js | 2 + .../series-line-util/series-line-util.js | 288 + .../build/series-line/series-line-coverage.js | 159 + .../build/series-line/series-line-debug.js | 114 + .../yui/build/series-line/series-line-min.js | 2 + .../js/yui/build/series-line/series-line.js | 114 + .../series-marker-stacked-coverage.js | 90 + .../series-marker-stacked-debug.js | 51 + .../series-marker-stacked-min.js | 2 + .../series-marker-stacked.js | 51 + .../series-marker/series-marker-coverage.js | 131 + .../series-marker/series-marker-debug.js | 90 + .../build/series-marker/series-marker-min.js | 2 + .../yui/build/series-marker/series-marker.js | 90 + .../build/series-ohlc/series-ohlc-coverage.js | 320 + .../build/series-ohlc/series-ohlc-debug.js | 235 + .../yui/build/series-ohlc/series-ohlc-min.js | 2 + .../js/yui/build/series-ohlc/series-ohlc.js | 235 + .../build/series-pie/series-pie-coverage.js | 942 + .../yui/build/series-pie/series-pie-debug.js | 727 + .../js/yui/build/series-pie/series-pie-min.js | 3 + .../js/yui/build/series-pie/series-pie.js | 727 + .../series-plot-util-coverage.js | 749 + .../series-plot-util-debug.js | 555 + .../series-plot-util/series-plot-util-min.js | 2 + .../series-plot-util/series-plot-util.js | 555 + .../series-range/series-range-coverage.js | 141 + .../build/series-range/series-range-debug.js | 94 + .../build/series-range/series-range-min.js | 2 + .../js/yui/build/series-range/series-range.js | 94 + .../series-spline-stacked-coverage.js | 90 + .../series-spline-stacked-debug.js | 51 + .../series-spline-stacked-min.js | 2 + .../series-spline-stacked.js | 51 + .../series-spline/series-spline-coverage.js | 121 + .../series-spline/series-spline-debug.js | 83 + .../build/series-spline/series-spline-min.js | 2 + .../yui/build/series-spline/series-spline.js | 83 + .../series-stacked/series-stacked-coverage.js | 504 + .../series-stacked/series-stacked-debug.js | 359 + .../series-stacked/series-stacked-min.js | 2 + .../build/series-stacked/series-stacked.js | 359 + .../build/shim-plugin/shim-plugin-coverage.js | 173 + .../build/shim-plugin/shim-plugin-debug.js | 107 + .../yui/build/shim-plugin/shim-plugin-min.js | 2 + .../js/yui/build/shim-plugin/shim-plugin.js | 107 + .../js/yui/build/simpleyui/simpleyui-debug.js | 20887 ++++++++++++++++ .../js/yui/build/simpleyui/simpleyui-min.js | 27 + .../js/yui/build/simpleyui/simpleyui.js | 20466 +++++++++++++++ .../assets/skins/audio-light/rail-x.png | Bin 0 -> 3668 bytes .../assets/skins/audio-light/rail-y.png | Bin 0 -> 3664 bytes .../skins/audio-light/slider-base-skin.css | 92 + .../assets/skins/audio-light/slider-base.css | 2 + .../assets/skins/audio-light/slider-skin.css | 92 + .../assets/skins/audio-light/thumb-x.png | Bin 0 -> 400 bytes .../assets/skins/audio-light/thumb-y.png | Bin 0 -> 503 bytes .../slider-base/assets/skins/audio/rail-x.png | Bin 0 -> 3662 bytes .../slider-base/assets/skins/audio/rail-y.png | Bin 0 -> 3660 bytes .../assets/skins/audio/slider-base-skin.css | 92 + .../assets/skins/audio/slider-base.css | 2 + .../assets/skins/audio/slider-skin.css | 92 + .../assets/skins/audio/thumb-x.png | Bin 0 -> 3742 bytes .../assets/skins/audio/thumb-y.png | Bin 0 -> 414 bytes .../assets/skins/capsule-dark/rail-x-dots.png | Bin 0 -> 3651 bytes .../skins/capsule-dark/rail-x-lines.png | Bin 0 -> 3673 bytes .../assets/skins/capsule-dark/rail-x.png | Bin 0 -> 3710 bytes .../assets/skins/capsule-dark/rail-y-dots.png | Bin 0 -> 3642 bytes .../skins/capsule-dark/rail-y-lines.png | Bin 0 -> 3667 bytes .../assets/skins/capsule-dark/rail-y.png | Bin 0 -> 3673 bytes .../skins/capsule-dark/slider-base-skin.css | 92 + .../assets/skins/capsule-dark/slider-base.css | 2 + .../assets/skins/capsule-dark/slider-skin.css | 92 + .../skins/capsule-dark/thumb-x-line.png | Bin 0 -> 3845 bytes .../assets/skins/capsule-dark/thumb-x.png | Bin 0 -> 4166 bytes .../skins/capsule-dark/thumb-y-line.png | Bin 0 -> 518 bytes .../assets/skins/capsule-dark/thumb-y.png | Bin 0 -> 685 bytes .../assets/skins/capsule/rail-x-dots.png | Bin 0 -> 3655 bytes .../assets/skins/capsule/rail-x-lines.png | Bin 0 -> 3669 bytes .../assets/skins/capsule/rail-x.png | Bin 0 -> 3701 bytes .../assets/skins/capsule/rail-y-dots.png | Bin 0 -> 3643 bytes .../assets/skins/capsule/rail-y-lines.png | Bin 0 -> 3643 bytes .../assets/skins/capsule/rail-y.png | Bin 0 -> 3689 bytes .../assets/skins/capsule/slider-base-skin.css | 94 + .../assets/skins/capsule/slider-base.css | 2 + .../assets/skins/capsule/slider-skin.css | 94 + .../assets/skins/capsule/thumb-x-line.png | Bin 0 -> 828 bytes .../assets/skins/capsule/thumb-x.png | Bin 0 -> 768 bytes .../assets/skins/capsule/thumb-y-line.png | Bin 0 -> 669 bytes .../assets/skins/capsule/thumb-y-lines.png | Bin 0 -> 3665 bytes .../assets/skins/capsule/thumb-y.png | Bin 0 -> 541 bytes .../assets/skins/night/rail-x-lines.png | Bin 0 -> 301 bytes .../slider-base/assets/skins/night/rail-x.png | Bin 0 -> 273 bytes .../assets/skins/night/rail-y-lines.png | Bin 0 -> 262 bytes .../slider-base/assets/skins/night/rail-y.png | Bin 0 -> 321 bytes .../assets/skins/night/slider-base-skin.css | 88 + .../assets/skins/night/slider-base.css | 2 + .../assets/skins/night/slider-skin.css | 88 + .../assets/skins/night/thumb-x.png | Bin 0 -> 467 bytes .../assets/skins/night/thumb-y.png | Bin 0 -> 566 bytes .../assets/skins/round-dark/rail-x.png | Bin 0 -> 3637 bytes .../assets/skins/round-dark/rail-y.png | Bin 0 -> 3635 bytes .../skins/round-dark/slider-base-skin.css | 90 + .../assets/skins/round-dark/slider-base.css | 2 + .../assets/skins/round-dark/slider-skin.css | 90 + .../assets/skins/round-dark/thumb-x-grip.png | Bin 0 -> 4365 bytes .../assets/skins/round-dark/thumb-x.png | Bin 0 -> 4333 bytes .../assets/skins/round-dark/thumb-y-grip.png | Bin 0 -> 648 bytes .../assets/skins/round-dark/thumb-y.png | Bin 0 -> 835 bytes .../slider-base/assets/skins/round/rail-x.png | Bin 0 -> 3642 bytes .../slider-base/assets/skins/round/rail-y.png | Bin 0 -> 3637 bytes .../assets/skins/round/slider-base-skin.css | 90 + .../assets/skins/round/slider-base.css | 2 + .../assets/skins/round/slider-skin.css | 90 + .../assets/skins/round/thumb-x-grip.png | Bin 0 -> 692 bytes .../assets/skins/round/thumb-x.png | Bin 0 -> 4143 bytes .../assets/skins/round/thumb-y-grip.png | Bin 0 -> 731 bytes .../assets/skins/round/thumb-y.png | Bin 0 -> 890 bytes .../assets/skins/sam-dark/rail-x-lines.png | Bin 0 -> 3647 bytes .../assets/skins/sam-dark/rail-x.png | Bin 0 -> 3635 bytes .../assets/skins/sam-dark/rail-y-lines.png | Bin 0 -> 3640 bytes .../assets/skins/sam-dark/rail-y.png | Bin 0 -> 3628 bytes .../skins/sam-dark/slider-base-skin.css | 88 + .../assets/skins/sam-dark/slider-base.css | 2 + .../assets/skins/sam-dark/slider-skin.css | 88 + .../assets/skins/sam-dark/thumb-x.png | Bin 0 -> 3853 bytes .../assets/skins/sam-dark/thumb-y.png | Bin 0 -> 602 bytes .../assets/skins/sam/rail-x-lines.png | Bin 0 -> 3656 bytes .../slider-base/assets/skins/sam/rail-x.png | Bin 0 -> 3639 bytes .../assets/skins/sam/rail-y-lines.png | Bin 0 -> 3642 bytes .../slider-base/assets/skins/sam/rail-y.png | Bin 0 -> 3629 bytes .../assets/skins/sam/slider-base-skin.css | 88 + .../assets/skins/sam/slider-base.css | 2 + .../assets/skins/sam/slider-skin.css | 88 + .../slider-base/assets/skins/sam/thumb-x.png | Bin 0 -> 3873 bytes .../slider-base/assets/skins/sam/thumb-y.png | Bin 0 -> 3860 bytes .../slider-base/assets/slider-base-core.css | 32 + .../build/slider-base/assets/slider-core.css | 32 + .../assets/thumb-x-oblong-dark.png | Bin 0 -> 4042 bytes .../slider-base/assets/thumb-x-oblong.png | Bin 0 -> 961 bytes .../assets/thumb-x-oblong2-dark.png | Bin 0 -> 4045 bytes .../slider-base/assets/thumb-x-oblong2.png | Bin 0 -> 706 bytes .../assets/thumb-y-oblong-dark.png | Bin 0 -> 519 bytes .../slider-base/assets/thumb-y-oblong.png | Bin 0 -> 1023 bytes .../assets/thumb-y-oblong2-dark.png | Bin 0 -> 706 bytes .../slider-base/assets/thumb-y-oblong2.png | Bin 0 -> 746 bytes .../build/slider-base/slider-base-coverage.js | 921 + .../build/slider-base/slider-base-debug.js | 763 + .../yui/build/slider-base/slider-base-min.js | 2 + .../js/yui/build/slider-base/slider-base.js | 761 + .../assets/slider-base-core.css | 32 + .../slider-value-range/assets/slider-core.css | 32 + .../assets/thumb-x-oblong-dark.png | Bin 0 -> 4042 bytes .../assets/thumb-x-oblong.png | Bin 0 -> 961 bytes .../assets/thumb-x-oblong2-dark.png | Bin 0 -> 4045 bytes .../assets/thumb-x-oblong2.png | Bin 0 -> 706 bytes .../assets/thumb-y-oblong-dark.png | Bin 0 -> 519 bytes .../assets/thumb-y-oblong.png | Bin 0 -> 1023 bytes .../assets/thumb-y-oblong2-dark.png | Bin 0 -> 706 bytes .../assets/thumb-y-oblong2.png | Bin 0 -> 746 bytes .../slider-value-range-coverage.js | 508 + .../slider-value-range-debug.js | 420 + .../slider-value-range-min.js | 2 + .../slider-value-range/slider-value-range.js | 416 + .../sortable-scroll-coverage.js | 116 + .../sortable-scroll/sortable-scroll-debug.js | 68 + .../sortable-scroll/sortable-scroll-min.js | 2 + .../build/sortable-scroll/sortable-scroll.js | 68 + .../yui/build/sortable/sortable-coverage.js | 716 + .../js/yui/build/sortable/sortable-debug.js | 533 + .../js/yui/build/sortable/sortable-min.js | 2 + .../static/js/yui/build/sortable/sortable.js | 532 + .../build/stylesheet/stylesheet-coverage.js | 845 + .../yui/build/stylesheet/stylesheet-debug.js | 643 + .../js/yui/build/stylesheet/stylesheet-min.js | 2 + .../js/yui/build/stylesheet/stylesheet.js | 639 + .../build/substitute/substitute-coverage.js | 249 + .../yui/build/substitute/substitute-debug.js | 171 + .../js/yui/build/substitute/substitute-min.js | 2 + .../js/yui/build/substitute/substitute.js | 171 + .../static/js/yui/build/swf/swf-coverage.js | 302 + .../static/js/yui/build/swf/swf-debug.js | 204 + src/errors/static/js/yui/build/swf/swf-min.js | 2 + src/errors/static/js/yui/build/swf/swf.js | 203 + .../yui/build/swfdetect/swfdetect-coverage.js | 192 + .../js/yui/build/swfdetect/swfdetect-debug.js | 117 + .../js/yui/build/swfdetect/swfdetect-min.js | 2 + .../js/yui/build/swfdetect/swfdetect.js | 116 + .../tabview-base/assets/tabview-core.css | 43 + .../yui/build/tabview-base/assets/tabview.css | 23 + .../tabview-base/tabview-base-coverage.js | 231 + .../build/tabview-base/tabview-base-debug.js | 144 + .../build/tabview-base/tabview-base-min.js | 2 + .../js/yui/build/tabview-base/tabview-base.js | 144 + .../tabview-plugin/assets/tabview-core.css | 43 + .../build/tabview-plugin/assets/tabview.css | 23 + .../tabview-plugin/tabview-plugin-coverage.js | 60 + .../tabview-plugin/tabview-plugin-debug.js | 17 + .../tabview-plugin/tabview-plugin-min.js | 2 + .../build/tabview-plugin/tabview-plugin.js | 17 + .../assets/skins/night/tabview-skin.css | 90 + .../tabview/assets/skins/night/tabview.css | 2 + .../tabview/assets/skins/sam/tabview-skin.css | 59 + .../tabview/assets/skins/sam/tabview.css | 2 + .../yui/build/tabview/assets/tabview-core.css | 43 + .../js/yui/build/tabview/assets/tabview.css | 23 + .../js/yui/build/tabview/tabview-coverage.js | 600 + .../js/yui/build/tabview/tabview-debug.js | 418 + .../js/yui/build/tabview/tabview-min.js | 2 + .../static/js/yui/build/tabview/tabview.js | 418 + .../template-base/template-base-coverage.js | 216 + .../template-base/template-base-debug.js | 159 + .../build/template-base/template-base-min.js | 2 + .../yui/build/template-base/template-base.js | 159 + .../template-micro/template-micro-coverage.js | 319 + .../template-micro/template-micro-debug.js | 250 + .../template-micro/template-micro-min.js | 2 + .../build/template-micro/template-micro.js | 250 + .../assets/skins/sam/test-console-skin.css | 59 + .../assets/skins/sam/test-console.css | 2 + .../test-console/assets/test-console-core.css | 9 + .../test-console/test-console-coverage.js | 437 + .../build/test-console/test-console-debug.js | 308 + .../build/test-console/test-console-min.js | 2 + .../js/yui/build/test-console/test-console.js | 308 + .../static/js/yui/build/test/test-coverage.js | 4846 ++++ .../static/js/yui/build/test/test-debug.js | 3767 +++ .../static/js/yui/build/test/test-min.js | 7 + src/errors/static/js/yui/build/test/test.js | 3767 +++ .../text-accentfold-coverage.js | 221 + .../text-accentfold/text-accentfold-debug.js | 163 + .../text-accentfold/text-accentfold-min.js | 2 + .../build/text-accentfold/text-accentfold.js | 163 + .../text-data-accentfold-coverage.js | 83 + .../text-data-accentfold-debug.js | 47 + .../text-data-accentfold-min.js | 2 + .../text-data-accentfold.js | 47 + .../text-data-wordbreak-coverage.js | 66 + .../text-data-wordbreak-debug.js | 30 + .../text-data-wordbreak-min.js | 3 + .../text-data-wordbreak.js | 30 + .../text-wordbreak/text-wordbreak-coverage.js | 466 + .../text-wordbreak/text-wordbreak-debug.js | 364 + .../text-wordbreak/text-wordbreak-min.js | 2 + .../build/text-wordbreak/text-wordbreak.js | 363 + .../js/yui/build/timers/timers-coverage.js | 153 + .../js/yui/build/timers/timers-debug.js | 95 + .../static/js/yui/build/timers/timers-min.js | 2 + .../static/js/yui/build/timers/timers.js | 95 + .../transition-timer-coverage.js | 483 + .../transition-timer-debug.js | 335 + .../transition-timer/transition-timer-min.js | 2 + .../transition-timer/transition-timer.js | 335 + .../build/transition/transition-coverage.js | 1095 + .../yui/build/transition/transition-debug.js | 753 + .../js/yui/build/transition/transition-min.js | 3 + .../js/yui/build/transition/transition.js | 751 + .../tree-labelable/tree-labelable-coverage.js | 127 + .../tree-labelable/tree-labelable-debug.js | 80 + .../tree-labelable/tree-labelable-min.js | 2 + .../build/tree-labelable/tree-labelable.js | 80 + .../yui/build/tree-lazy/tree-lazy-coverage.js | 244 + .../js/yui/build/tree-lazy/tree-lazy-debug.js | 177 + .../js/yui/build/tree-lazy/tree-lazy-min.js | 2 + .../js/yui/build/tree-lazy/tree-lazy.js | 176 + .../yui/build/tree-node/tree-node-coverage.js | 559 + .../js/yui/build/tree-node/tree-node-debug.js | 451 + .../js/yui/build/tree-node/tree-node-min.js | 2 + .../js/yui/build/tree-node/tree-node.js | 451 + .../tree-openable/tree-openable-coverage.js | 278 + .../tree-openable/tree-openable-debug.js | 208 + .../build/tree-openable/tree-openable-min.js | 2 + .../yui/build/tree-openable/tree-openable.js | 208 + .../tree-selectable-coverage.js | 361 + .../tree-selectable/tree-selectable-debug.js | 264 + .../tree-selectable/tree-selectable-min.js | 2 + .../build/tree-selectable/tree-selectable.js | 264 + .../static/js/yui/build/tree/tree-coverage.js | 920 + .../static/js/yui/build/tree/tree-debug.js | 720 + .../static/js/yui/build/tree/tree-min.js | 2 + src/errors/static/js/yui/build/tree/tree.js | 720 + .../uploader-deprecated/assets/uploader.swf | Bin 0 -> 6611 bytes .../uploader-deprecated-coverage.js | 708 + .../uploader-deprecated-debug.js | 597 + .../uploader-deprecated-min.js | 2 + .../uploader-deprecated.js | 595 + .../assets/uploader-flash-core.css | 5 + .../uploader-flash/uploader-flash-coverage.js | 1334 + .../uploader-flash/uploader-flash-debug.js | 1066 + .../uploader-flash/uploader-flash-min.js | 3 + .../build/uploader-flash/uploader-flash.js | 1066 + .../assets/uploader-flash-core.css | 5 + .../uploader-html5/uploader-html5-coverage.js | 1234 + .../uploader-html5/uploader-html5-debug.js | 1004 + .../uploader-html5/uploader-html5-min.js | 3 + .../build/uploader-html5/uploader-html5.js | 1004 + .../assets/uploader-flash-core.css | 5 + .../uploader-queue/uploader-queue-coverage.js | 852 + .../uploader-queue/uploader-queue-debug.js | 657 + .../uploader-queue/uploader-queue-min.js | 2 + .../build/uploader-queue/uploader-queue.js | 657 + .../build/uploader/assets/flashuploader.swf | Bin 0 -> 5080 bytes .../uploader/assets/uploader-flash-core.css | 5 + .../yui/build/uploader/uploader-coverage.js | 95 + .../js/yui/build/uploader/uploader-debug.js | 53 + .../js/yui/build/uploader/uploader-min.js | 2 + .../static/js/yui/build/uploader/uploader.js | 53 + .../view-node-map/view-node-map-coverage.js | 140 + .../view-node-map/view-node-map-debug.js | 85 + .../build/view-node-map/view-node-map-min.js | 2 + .../yui/build/view-node-map/view-node-map.js | 85 + .../static/js/yui/build/view/view-coverage.js | 532 + .../static/js/yui/build/view/view-debug.js | 435 + .../static/js/yui/build/view/view-min.js | 2 + src/errors/static/js/yui/build/view/view.js | 434 + .../build/widget-anim/widget-anim-coverage.js | 341 + .../build/widget-anim/widget-anim-debug.js | 258 + .../yui/build/widget-anim/widget-anim-min.js | 2 + .../js/yui/build/widget-anim/widget-anim.js | 258 + .../widget-autohide-coverage.js | 321 + .../widget-autohide/widget-autohide-debug.js | 238 + .../widget-autohide/widget-autohide-min.js | 2 + .../build/widget-autohide/widget-autohide.js | 237 + .../assets/widget-base-core.css | 21 + .../widget-base-ie/widget-base-ie-coverage.js | 100 + .../widget-base-ie/widget-base-ie-debug.js | 50 + .../widget-base-ie/widget-base-ie-min.js | 2 + .../build/widget-base-ie/widget-base-ie.js | 50 + .../assets/skins/night/widget-base-skin.css | 1 + .../assets/skins/night/widget-base.css | 2 + .../assets/skins/sam/widget-base-skin.css | 1 + .../assets/skins/sam/widget-base.css | 2 + .../widget-base/assets/widget-base-core.css | 21 + .../build/widget-base/widget-base-coverage.js | 1550 ++ .../build/widget-base/widget-base-debug.js | 1277 + .../yui/build/widget-base/widget-base-min.js | 3 + .../js/yui/build/widget-base/widget-base.js | 1273 + .../assets/skins/night/sprite_icons.gif | Bin 0 -> 142 bytes .../skins/night/widget-buttons-skin.css | 4 + .../assets/skins/night/widget-buttons.css | 2 + .../assets/skins/sam/sprite_icons.gif | Bin 0 -> 142 bytes .../assets/skins/sam/widget-buttons-skin.css | 4 + .../assets/skins/sam/widget-buttons.css | 2 + .../assets/widget-buttons-core.css | 16 + .../widget-buttons/widget-buttons-coverage.js | 1607 ++ .../widget-buttons/widget-buttons-debug.js | 1295 + .../widget-buttons/widget-buttons-min.js | 3 + .../build/widget-buttons/widget-buttons.js | 1295 + .../widget-child/widget-child-coverage.js | 488 + .../build/widget-child/widget-child-debug.js | 377 + .../build/widget-child/widget-child-min.js | 2 + .../js/yui/build/widget-child/widget-child.js | 377 + .../assets/widget-base-core.css | 21 + .../widget-htmlparser-coverage.js | 249 + .../widget-htmlparser-debug.js | 178 + .../widget-htmlparser-min.js | 2 + .../widget-htmlparser/widget-htmlparser.js | 178 + .../widget-locale/assets/widget-base-core.css | 21 + .../widget-locale/widget-locale-coverage.js | 249 + .../widget-locale/widget-locale-debug.js | 174 + .../build/widget-locale/widget-locale-min.js | 2 + .../yui/build/widget-locale/widget-locale.js | 170 + .../skins/night/widget-modality-skin.css | 8 + .../assets/skins/night/widget-modality.css | 2 + .../assets/skins/sam/widget-modality-skin.css | 8 + .../assets/skins/sam/widget-modality.css | 2 + .../assets/widget-modality-core.css | 2 + .../widget-modality-coverage.js | 745 + .../widget-modality/widget-modality-debug.js | 567 + .../widget-modality/widget-modality-min.js | 4 + .../build/widget-modality/widget-modality.js | 567 + .../widget-parent/widget-parent-coverage.js | 1103 + .../widget-parent/widget-parent-debug.js | 871 + .../build/widget-parent/widget-parent-min.js | 2 + .../yui/build/widget-parent/widget-parent.js | 870 + .../widget-position-align-coverage.js | 816 + .../widget-position-align-debug.js | 654 + .../widget-position-align-min.js | 2 + .../widget-position-align.js | 650 + .../widget-position-constrain-coverage.js | 457 + .../widget-position-constrain-debug.js | 347 + .../widget-position-constrain-min.js | 2 + .../widget-position-constrain.js | 347 + .../widget-position-coverage.js | 361 + .../widget-position/widget-position-debug.js | 276 + .../widget-position/widget-position-min.js | 2 + .../build/widget-position/widget-position.js | 276 + .../widget-skin/assets/widget-base-core.css | 21 + .../build/widget-skin/widget-skin-coverage.js | 89 + .../build/widget-skin/widget-skin-debug.js | 44 + .../yui/build/widget-skin/widget-skin-min.js | 2 + .../js/yui/build/widget-skin/widget-skin.js | 44 + .../assets/skins/night/widget-stack-skin.css | 1 + .../assets/skins/night/widget-stack.css | 2 + .../assets/skins/sam/widget-stack-skin.css | 1 + .../assets/skins/sam/widget-stack.css | 2 + .../widget-stack/assets/widget-stack-core.css | 20 + .../widget-stack/widget-stack-coverage.js | 564 + .../build/widget-stack/widget-stack-debug.js | 439 + .../build/widget-stack/widget-stack-min.js | 2 + .../js/yui/build/widget-stack/widget-stack.js | 439 + .../widget-stdmod/widget-stdmod-coverage.js | 981 + .../widget-stdmod/widget-stdmod-debug.js | 780 + .../build/widget-stdmod/widget-stdmod-min.js | 2 + .../yui/build/widget-stdmod/widget-stdmod.js | 780 + .../assets/widget-base-core.css | 21 + .../widget-uievents-coverage.js | 315 + .../widget-uievents/widget-uievents-debug.js | 228 + .../widget-uievents/widget-uievents-min.js | 2 + .../build/widget-uievents/widget-uievents.js | 227 + .../yui/build/yql-jsonp/yql-jsonp-coverage.js | 75 + .../js/yui/build/yql-jsonp/yql-jsonp-debug.js | 30 + .../js/yui/build/yql-jsonp/yql-jsonp-min.js | 2 + .../js/yui/build/yql-jsonp/yql-jsonp.js | 30 + .../build/yql-nodejs/yql-nodejs-coverage.js | 74 + .../yui/build/yql-nodejs/yql-nodejs-debug.js | 31 + .../js/yui/build/yql-nodejs/yql-nodejs-min.js | 2 + .../js/yui/build/yql-nodejs/yql-nodejs.js | 31 + .../yui/build/yql-winjs/yql-winjs-coverage.js | 84 + .../js/yui/build/yql-winjs/yql-winjs-debug.js | 35 + .../js/yui/build/yql-winjs/yql-winjs-min.js | 2 + .../js/yui/build/yql-winjs/yql-winjs.js | 35 + .../static/js/yui/build/yql/yql-coverage.js | 246 + .../static/js/yui/build/yql/yql-debug.js | 169 + src/errors/static/js/yui/build/yql/yql-min.js | 2 + src/errors/static/js/yui/build/yql/yql.js | 168 + .../yui/build/yui-base/yui-base-coverage.js | 4606 ++++ .../js/yui/build/yui-base/yui-base-debug.js | 5963 +++++ .../js/yui/build/yui-base/yui-base-min.js | 7 + .../static/js/yui/build/yui-base/yui-base.js | 5606 +++++ .../yui/build/yui-core/yui-core-coverage.js | 4606 ++++ .../js/yui/build/yui-core/yui-core-debug.js | 3985 +++ .../js/yui/build/yui-core/yui-core-min.js | 5 + .../static/js/yui/build/yui-core/yui-core.js | 3646 +++ .../yui/build/yui-later/yui-later-coverage.js | 133 + .../js/yui/build/yui-later/yui-later-debug.js | 79 + .../js/yui/build/yui-later/yui-later-min.js | 2 + .../js/yui/build/yui-later/yui-later.js | 79 + .../yui-log-nodejs/yui-log-nodejs-coverage.js | 160 + .../yui-log-nodejs/yui-log-nodejs-debug.js | 82 + .../yui-log-nodejs/yui-log-nodejs-min.js | 2 + .../build/yui-log-nodejs/yui-log-nodejs.js | 82 + .../js/yui/build/yui-log/yui-log-coverage.js | 180 + .../js/yui/build/yui-log/yui-log-debug.js | 112 + .../js/yui/build/yui-log/yui-log-min.js | 2 + .../static/js/yui/build/yui-log/yui-log.js | 112 + .../build/yui-nodejs/yui-nodejs-coverage.js | 4619 ++++ .../yui/build/yui-nodejs/yui-nodejs-debug.js | 10813 ++++++++ .../js/yui/build/yui-nodejs/yui-nodejs-min.js | 15 + .../js/yui/build/yui-nodejs/yui-nodejs.js | 10419 ++++++++ .../yui-throttle/yui-throttle-coverage.js | 104 + .../build/yui-throttle/yui-throttle-debug.js | 55 + .../build/yui-throttle/yui-throttle-min.js | 4 + .../js/yui/build/yui-throttle/yui-throttle.js | 55 + .../static/js/yui/build/yui/yui-coverage.js | 4618 ++++ .../static/js/yui/build/yui/yui-debug.js | 11824 +++++++++ src/errors/static/js/yui/build/yui/yui-min.js | 16 + src/errors/static/js/yui/build/yui/yui.js | 11423 +++++++++ 1972 files changed, 686279 insertions(+) create mode 100644 src/errors/static/js/nvd3/lib/cie.js create mode 100644 src/errors/static/js/nvd3/lib/crossfilter.js create mode 100644 src/errors/static/js/nvd3/lib/crossfilter.min.js create mode 100644 src/errors/static/js/nvd3/lib/d3.v2.js create mode 100644 src/errors/static/js/nvd3/lib/d3.v2.min.js create mode 100644 src/errors/static/js/nvd3/lib/fisheye.js create mode 100644 src/errors/static/js/nvd3/lib/hive.js create mode 100644 src/errors/static/js/nvd3/lib/horizon.js create mode 100644 src/errors/static/js/nvd3/lib/sankey.js create mode 100644 src/errors/static/js/yui/build/align-plugin/align-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/align-plugin/align-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/align-plugin/align-plugin-min.js create mode 100644 src/errors/static/js/yui/build/align-plugin/align-plugin.js create mode 100644 src/errors/static/js/yui/build/anim-base/anim-base-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-base/anim-base-debug.js create mode 100644 src/errors/static/js/yui/build/anim-base/anim-base-min.js create mode 100644 src/errors/static/js/yui/build/anim-base/anim-base.js create mode 100644 src/errors/static/js/yui/build/anim-color/anim-color-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-color/anim-color-debug.js create mode 100644 src/errors/static/js/yui/build/anim-color/anim-color-min.js create mode 100644 src/errors/static/js/yui/build/anim-color/anim-color.js create mode 100644 src/errors/static/js/yui/build/anim-curve/anim-curve-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-curve/anim-curve-debug.js create mode 100644 src/errors/static/js/yui/build/anim-curve/anim-curve-min.js create mode 100644 src/errors/static/js/yui/build/anim-curve/anim-curve.js create mode 100644 src/errors/static/js/yui/build/anim-easing/anim-easing-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-easing/anim-easing-debug.js create mode 100644 src/errors/static/js/yui/build/anim-easing/anim-easing-min.js create mode 100644 src/errors/static/js/yui/build/anim-easing/anim-easing.js create mode 100644 src/errors/static/js/yui/build/anim-node-plugin/anim-node-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-node-plugin/anim-node-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/anim-node-plugin/anim-node-plugin-min.js create mode 100644 src/errors/static/js/yui/build/anim-node-plugin/anim-node-plugin.js create mode 100644 src/errors/static/js/yui/build/anim-scroll/anim-scroll-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-scroll/anim-scroll-debug.js create mode 100644 src/errors/static/js/yui/build/anim-scroll/anim-scroll-min.js create mode 100644 src/errors/static/js/yui/build/anim-scroll/anim-scroll.js create mode 100644 src/errors/static/js/yui/build/anim-shape-transform/anim-shape-transform-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-shape/anim-shape-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-shape/anim-shape-debug.js create mode 100644 src/errors/static/js/yui/build/anim-shape/anim-shape-min.js create mode 100644 src/errors/static/js/yui/build/anim-shape/anim-shape.js create mode 100644 src/errors/static/js/yui/build/anim-xy/anim-xy-coverage.js create mode 100644 src/errors/static/js/yui/build/anim-xy/anim-xy-debug.js create mode 100644 src/errors/static/js/yui/build/anim-xy/anim-xy-min.js create mode 100644 src/errors/static/js/yui/build/anim-xy/anim-xy.js create mode 100644 src/errors/static/js/yui/build/app-base/app-base-coverage.js create mode 100644 src/errors/static/js/yui/build/app-base/app-base-debug.js create mode 100644 src/errors/static/js/yui/build/app-base/app-base-min.js create mode 100644 src/errors/static/js/yui/build/app-base/app-base.js create mode 100644 src/errors/static/js/yui/build/app-content/app-content-coverage.js create mode 100644 src/errors/static/js/yui/build/app-content/app-content-debug.js create mode 100644 src/errors/static/js/yui/build/app-content/app-content-min.js create mode 100644 src/errors/static/js/yui/build/app-content/app-content.js create mode 100644 src/errors/static/js/yui/build/app-transitions-css/app-transitions-css-min.css create mode 100644 src/errors/static/js/yui/build/app-transitions-css/app-transitions-css.css create mode 100644 src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-coverage.js create mode 100644 src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-debug.js create mode 100644 src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-min.js create mode 100644 src/errors/static/js/yui/build/app-transitions-native/app-transitions-native.js create mode 100644 src/errors/static/js/yui/build/app-transitions/app-transitions-coverage.js create mode 100644 src/errors/static/js/yui/build/app-transitions/app-transitions-debug.js create mode 100644 src/errors/static/js/yui/build/app-transitions/app-transitions-min.js create mode 100644 src/errors/static/js/yui/build/app-transitions/app-transitions.js create mode 100644 src/errors/static/js/yui/build/array-extras/array-extras-coverage.js create mode 100644 src/errors/static/js/yui/build/array-extras/array-extras-debug.js create mode 100644 src/errors/static/js/yui/build/array-extras/array-extras-min.js create mode 100644 src/errors/static/js/yui/build/array-extras/array-extras.js create mode 100644 src/errors/static/js/yui/build/array-invoke/array-invoke-coverage.js create mode 100644 src/errors/static/js/yui/build/array-invoke/array-invoke-debug.js create mode 100644 src/errors/static/js/yui/build/array-invoke/array-invoke-min.js create mode 100644 src/errors/static/js/yui/build/array-invoke/array-invoke.js create mode 100644 src/errors/static/js/yui/build/arraylist-add/arraylist-add-coverage.js create mode 100644 src/errors/static/js/yui/build/arraylist-add/arraylist-add-debug.js create mode 100644 src/errors/static/js/yui/build/arraylist-add/arraylist-add-min.js create mode 100644 src/errors/static/js/yui/build/arraylist-add/arraylist-add.js create mode 100644 src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-coverage.js create mode 100644 src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-debug.js create mode 100644 src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-min.js create mode 100644 src/errors/static/js/yui/build/arraylist-filter/arraylist-filter.js create mode 100644 src/errors/static/js/yui/build/arraylist/arraylist-coverage.js create mode 100644 src/errors/static/js/yui/build/arraylist/arraylist-debug.js create mode 100644 src/errors/static/js/yui/build/arraylist/arraylist-min.js create mode 100644 src/errors/static/js/yui/build/arraylist/arraylist.js create mode 100644 src/errors/static/js/yui/build/arraysort/arraysort-coverage.js create mode 100644 src/errors/static/js/yui/build/arraysort/arraysort-debug.js create mode 100644 src/errors/static/js/yui/build/arraysort/arraysort-min.js create mode 100644 src/errors/static/js/yui/build/arraysort/arraysort.js create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/arrows.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/autocomplete-list.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/bg.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/calendar-base.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/calendar.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/calendarnavigator.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/console-filters.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/console.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/datatable-base-deprecated.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/datatable-base.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/datatable-message.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/datatable-scroll.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/datatable-sort.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/dial.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/dt-arrow-dn.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/dt-arrow-up.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/horizontal-menu-submenu-indicator.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/horizontal-menu-submenu-toggle.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/node-flick.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/node-menunav.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/overlay.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/panel.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/rail-x-lines.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/rail-x.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/rail-y-lines.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/rail-y.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/resize-base.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/scrollview-base.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/scrollview-list.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/scrollview-scrollbars.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/skin.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/slider-base.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/sort-arrow-sprite-ie.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/sort-arrow-sprite.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/sprite.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/sprite_icons.gif create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/sprite_icons.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/tabview.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/test-console.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/thumb-x.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/thumb-y.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/vertical-menu-submenu-indicator.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/warn_error.png create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/widget-base.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/widget-buttons.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/widget-modality.css create mode 100644 src/errors/static/js/yui/build/assets/skins/sam/widget-stack.css create mode 100644 src/errors/static/js/yui/build/async-queue/async-queue-coverage.js create mode 100644 src/errors/static/js/yui/build/async-queue/async-queue-debug.js create mode 100644 src/errors/static/js/yui/build/async-queue/async-queue-min.js create mode 100644 src/errors/static/js/yui/build/async-queue/async-queue.js create mode 100644 src/errors/static/js/yui/build/attribute-base/attribute-base-coverage.js create mode 100644 src/errors/static/js/yui/build/attribute-base/attribute-base-debug.js create mode 100644 src/errors/static/js/yui/build/attribute-base/attribute-base-min.js create mode 100644 src/errors/static/js/yui/build/attribute-base/attribute-base.js create mode 100644 src/errors/static/js/yui/build/attribute-complex/attribute-complex-coverage.js create mode 100644 src/errors/static/js/yui/build/attribute-complex/attribute-complex-debug.js create mode 100644 src/errors/static/js/yui/build/attribute-complex/attribute-complex-min.js create mode 100644 src/errors/static/js/yui/build/attribute-complex/attribute-complex.js create mode 100644 src/errors/static/js/yui/build/attribute-core/attribute-core-coverage.js create mode 100644 src/errors/static/js/yui/build/attribute-core/attribute-core-debug.js create mode 100644 src/errors/static/js/yui/build/attribute-core/attribute-core-min.js create mode 100644 src/errors/static/js/yui/build/attribute-core/attribute-core.js create mode 100644 src/errors/static/js/yui/build/attribute-extras/attribute-extras-coverage.js create mode 100644 src/errors/static/js/yui/build/attribute-extras/attribute-extras-debug.js create mode 100644 src/errors/static/js/yui/build/attribute-extras/attribute-extras-min.js create mode 100644 src/errors/static/js/yui/build/attribute-extras/attribute-extras.js create mode 100644 src/errors/static/js/yui/build/attribute-observable/attribute-observable-coverage.js create mode 100644 src/errors/static/js/yui/build/attribute-observable/attribute-observable-debug.js create mode 100644 src/errors/static/js/yui/build/attribute-observable/attribute-observable-min.js create mode 100644 src/errors/static/js/yui/build/attribute-observable/attribute-observable.js create mode 100644 src/errors/static/js/yui/build/autocomplete-base/autocomplete-base-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-base/autocomplete-base-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-base/autocomplete-base-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-base/autocomplete-base.js create mode 100644 src/errors/static/js/yui/build/autocomplete-filters-accentfold/autocomplete-filters-accentfold-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-filters-accentfold/autocomplete-filters-accentfold-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-filters-accentfold/autocomplete-filters-accentfold-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-filters-accentfold/autocomplete-filters-accentfold.js create mode 100644 src/errors/static/js/yui/build/autocomplete-filters/autocomplete-filters-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-filters/autocomplete-filters-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-filters/autocomplete-filters-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-filters/autocomplete-filters.js create mode 100644 src/errors/static/js/yui/build/autocomplete-highlighters-accentfold/autocomplete-highlighters-accentfold-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-highlighters-accentfold/autocomplete-highlighters-accentfold-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-highlighters-accentfold/autocomplete-highlighters-accentfold-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-highlighters-accentfold/autocomplete-highlighters-accentfold.js create mode 100644 src/errors/static/js/yui/build/autocomplete-highlighters/autocomplete-highlighters-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-highlighters/autocomplete-highlighters-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-highlighters/autocomplete-highlighters-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-highlighters/autocomplete-highlighters.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list-keys/autocomplete-list-keys-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list-keys/autocomplete-list-keys-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list-keys/autocomplete-list-keys-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list-keys/autocomplete-list-keys.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list/assets/autocomplete-list-core.css create mode 100644 src/errors/static/js/yui/build/autocomplete-list/assets/skins/night/autocomplete-list-skin.css create mode 100644 src/errors/static/js/yui/build/autocomplete-list/assets/skins/night/autocomplete-list.css create mode 100644 src/errors/static/js/yui/build/autocomplete-list/assets/skins/sam/autocomplete-list-skin.css create mode 100644 src/errors/static/js/yui/build/autocomplete-list/assets/skins/sam/autocomplete-list.css create mode 100644 src/errors/static/js/yui/build/autocomplete-list/autocomplete-list-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list/autocomplete-list-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list/autocomplete-list-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list/autocomplete-list.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list/lang/autocomplete-list.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list/lang/autocomplete-list_en.js create mode 100644 src/errors/static/js/yui/build/autocomplete-list/lang/autocomplete-list_es.js create mode 100644 src/errors/static/js/yui/build/autocomplete-plugin/autocomplete-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-plugin/autocomplete-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-plugin/autocomplete-plugin-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-plugin/autocomplete-plugin.js create mode 100644 src/errors/static/js/yui/build/autocomplete-sources/autocomplete-sources-coverage.js create mode 100644 src/errors/static/js/yui/build/autocomplete-sources/autocomplete-sources-debug.js create mode 100644 src/errors/static/js/yui/build/autocomplete-sources/autocomplete-sources-min.js create mode 100644 src/errors/static/js/yui/build/autocomplete-sources/autocomplete-sources.js create mode 100644 src/errors/static/js/yui/build/axis-base/axis-base-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-base/axis-base-debug.js create mode 100644 src/errors/static/js/yui/build/axis-base/axis-base-min.js create mode 100644 src/errors/static/js/yui/build/axis-base/axis-base.js create mode 100644 src/errors/static/js/yui/build/axis-category-base/axis-category-base-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-category-base/axis-category-base-debug.js create mode 100644 src/errors/static/js/yui/build/axis-category-base/axis-category-base-min.js create mode 100644 src/errors/static/js/yui/build/axis-category-base/axis-category-base.js create mode 100644 src/errors/static/js/yui/build/axis-category/axis-category-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-category/axis-category-debug.js create mode 100644 src/errors/static/js/yui/build/axis-category/axis-category-min.js create mode 100644 src/errors/static/js/yui/build/axis-category/axis-category.js create mode 100644 src/errors/static/js/yui/build/axis-numeric-base/axis-numeric-base-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-numeric-base/axis-numeric-base-debug.js create mode 100644 src/errors/static/js/yui/build/axis-numeric-base/axis-numeric-base-min.js create mode 100644 src/errors/static/js/yui/build/axis-numeric-base/axis-numeric-base.js create mode 100644 src/errors/static/js/yui/build/axis-numeric/axis-numeric-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-numeric/axis-numeric-debug.js create mode 100644 src/errors/static/js/yui/build/axis-numeric/axis-numeric-min.js create mode 100644 src/errors/static/js/yui/build/axis-numeric/axis-numeric.js create mode 100644 src/errors/static/js/yui/build/axis-stacked-base/axis-stacked-base-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-stacked-base/axis-stacked-base-debug.js create mode 100644 src/errors/static/js/yui/build/axis-stacked-base/axis-stacked-base-min.js create mode 100644 src/errors/static/js/yui/build/axis-stacked-base/axis-stacked-base.js create mode 100644 src/errors/static/js/yui/build/axis-stacked/axis-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-stacked/axis-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/axis-stacked/axis-stacked-min.js create mode 100644 src/errors/static/js/yui/build/axis-stacked/axis-stacked.js create mode 100644 src/errors/static/js/yui/build/axis-time-base/axis-time-base-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-time-base/axis-time-base-debug.js create mode 100644 src/errors/static/js/yui/build/axis-time-base/axis-time-base-min.js create mode 100644 src/errors/static/js/yui/build/axis-time-base/axis-time-base.js create mode 100644 src/errors/static/js/yui/build/axis-time/axis-time-coverage.js create mode 100644 src/errors/static/js/yui/build/axis-time/axis-time-debug.js create mode 100644 src/errors/static/js/yui/build/axis-time/axis-time-min.js create mode 100644 src/errors/static/js/yui/build/axis-time/axis-time.js create mode 100644 src/errors/static/js/yui/build/axis/axis-coverage.js create mode 100644 src/errors/static/js/yui/build/axis/axis-debug.js create mode 100644 src/errors/static/js/yui/build/axis/axis-min.js create mode 100644 src/errors/static/js/yui/build/axis/axis.js create mode 100644 src/errors/static/js/yui/build/base-base/base-base-coverage.js create mode 100644 src/errors/static/js/yui/build/base-base/base-base-debug.js create mode 100644 src/errors/static/js/yui/build/base-base/base-base-min.js create mode 100644 src/errors/static/js/yui/build/base-base/base-base.js create mode 100644 src/errors/static/js/yui/build/base-build/base-build-coverage.js create mode 100644 src/errors/static/js/yui/build/base-build/base-build-debug.js create mode 100644 src/errors/static/js/yui/build/base-build/base-build-min.js create mode 100644 src/errors/static/js/yui/build/base-build/base-build.js create mode 100644 src/errors/static/js/yui/build/base-core/base-core-coverage.js create mode 100644 src/errors/static/js/yui/build/base-core/base-core-debug.js create mode 100644 src/errors/static/js/yui/build/base-core/base-core-min.js create mode 100644 src/errors/static/js/yui/build/base-core/base-core.js create mode 100644 src/errors/static/js/yui/build/base-observable/base-observable-coverage.js create mode 100644 src/errors/static/js/yui/build/base-observable/base-observable-debug.js create mode 100644 src/errors/static/js/yui/build/base-observable/base-observable-min.js create mode 100644 src/errors/static/js/yui/build/base-observable/base-observable.js create mode 100644 src/errors/static/js/yui/build/base-pluginhost/base-pluginhost-coverage.js create mode 100644 src/errors/static/js/yui/build/base-pluginhost/base-pluginhost-debug.js create mode 100644 src/errors/static/js/yui/build/base-pluginhost/base-pluginhost-min.js create mode 100644 src/errors/static/js/yui/build/base-pluginhost/base-pluginhost.js create mode 100644 src/errors/static/js/yui/build/button-core/button-core-coverage.js create mode 100644 src/errors/static/js/yui/build/button-core/button-core-debug.js create mode 100644 src/errors/static/js/yui/build/button-core/button-core-min.js create mode 100644 src/errors/static/js/yui/build/button-core/button-core.js create mode 100644 src/errors/static/js/yui/build/button-group/button-group-coverage.js create mode 100644 src/errors/static/js/yui/build/button-group/button-group-debug.js create mode 100644 src/errors/static/js/yui/build/button-group/button-group-min.js create mode 100644 src/errors/static/js/yui/build/button-group/button-group.js create mode 100644 src/errors/static/js/yui/build/button-plugin/button-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/button-plugin/button-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/button-plugin/button-plugin-min.js create mode 100644 src/errors/static/js/yui/build/button-plugin/button-plugin.js create mode 100644 src/errors/static/js/yui/build/button/button-coverage.js create mode 100644 src/errors/static/js/yui/build/button/button-debug.js create mode 100644 src/errors/static/js/yui/build/button/button-min.js create mode 100644 src/errors/static/js/yui/build/button/button.js create mode 100644 src/errors/static/js/yui/build/cache-base/cache-base-coverage.js create mode 100644 src/errors/static/js/yui/build/cache-base/cache-base-debug.js create mode 100644 src/errors/static/js/yui/build/cache-base/cache-base-min.js create mode 100644 src/errors/static/js/yui/build/cache-base/cache-base.js create mode 100644 src/errors/static/js/yui/build/cache-offline/cache-offline-coverage.js create mode 100644 src/errors/static/js/yui/build/cache-offline/cache-offline-debug.js create mode 100644 src/errors/static/js/yui/build/cache-offline/cache-offline-min.js create mode 100644 src/errors/static/js/yui/build/cache-offline/cache-offline.js create mode 100644 src/errors/static/js/yui/build/cache-plugin/cache-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/cache-plugin/cache-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/cache-plugin/cache-plugin-min.js create mode 100644 src/errors/static/js/yui/build/cache-plugin/cache-plugin.js create mode 100644 src/errors/static/js/yui/build/calendar-base/assets/calendar-base-core.css create mode 100644 src/errors/static/js/yui/build/calendar-base/assets/skins/night/calendar-base-skin.css create mode 100644 src/errors/static/js/yui/build/calendar-base/assets/skins/night/calendar-base.css create mode 100644 src/errors/static/js/yui/build/calendar-base/assets/skins/sam/calendar-base-skin.css create mode 100644 src/errors/static/js/yui/build/calendar-base/assets/skins/sam/calendar-base.css create mode 100644 src/errors/static/js/yui/build/calendar-base/calendar-base-coverage.js create mode 100644 src/errors/static/js/yui/build/calendar-base/calendar-base-debug.js create mode 100644 src/errors/static/js/yui/build/calendar-base/calendar-base-min.js create mode 100644 src/errors/static/js/yui/build/calendar-base/calendar-base.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_de.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_en.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_es-AR.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_es.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_fr.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_it.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_ja.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_nb-NO.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_nl.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_pt-BR.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_ru.js create mode 100644 src/errors/static/js/yui/build/calendar-base/lang/calendar-base_zh-HANT-TW.js create mode 100644 src/errors/static/js/yui/build/calendar/assets/calendar-core.css create mode 100644 src/errors/static/js/yui/build/calendar/assets/skins/night/calendar-skin.css create mode 100644 src/errors/static/js/yui/build/calendar/assets/skins/night/calendar.css create mode 100644 src/errors/static/js/yui/build/calendar/assets/skins/sam/calendar-skin.css create mode 100644 src/errors/static/js/yui/build/calendar/assets/skins/sam/calendar.css create mode 100644 src/errors/static/js/yui/build/calendar/calendar-coverage.js create mode 100644 src/errors/static/js/yui/build/calendar/calendar-debug.js create mode 100644 src/errors/static/js/yui/build/calendar/calendar-min.js create mode 100644 src/errors/static/js/yui/build/calendar/calendar.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_de.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_en.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_es-AR.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_es.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_fr.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_it.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_ja.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_nb-NO.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_nl.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_pt-BR.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_ru.js create mode 100644 src/errors/static/js/yui/build/calendar/lang/calendar_zh-HANT-TW.js create mode 100644 src/errors/static/js/yui/build/calendarnavigator/assets/calendarnavigator-core.css create mode 100644 src/errors/static/js/yui/build/calendarnavigator/assets/skins/night/calendarnavigator-skin.css create mode 100644 src/errors/static/js/yui/build/calendarnavigator/assets/skins/night/calendarnavigator.css create mode 100644 src/errors/static/js/yui/build/calendarnavigator/assets/skins/sam/calendarnavigator-skin.css create mode 100644 src/errors/static/js/yui/build/calendarnavigator/assets/skins/sam/calendarnavigator.css create mode 100644 src/errors/static/js/yui/build/calendarnavigator/calendarnavigator-coverage.js create mode 100644 src/errors/static/js/yui/build/calendarnavigator/calendarnavigator-debug.js create mode 100644 src/errors/static/js/yui/build/calendarnavigator/calendarnavigator-min.js create mode 100644 src/errors/static/js/yui/build/calendarnavigator/calendarnavigator.js create mode 100644 src/errors/static/js/yui/build/charts-base/charts-base-coverage.js create mode 100644 src/errors/static/js/yui/build/charts-base/charts-base-debug.js create mode 100644 src/errors/static/js/yui/build/charts-base/charts-base-min.js create mode 100644 src/errors/static/js/yui/build/charts-base/charts-base.js create mode 100644 src/errors/static/js/yui/build/charts-legend/charts-legend-coverage.js create mode 100644 src/errors/static/js/yui/build/charts-legend/charts-legend-debug.js create mode 100644 src/errors/static/js/yui/build/charts-legend/charts-legend-min.js create mode 100644 src/errors/static/js/yui/build/charts-legend/charts-legend.js create mode 100644 src/errors/static/js/yui/build/charts/charts-coverage.js create mode 100644 src/errors/static/js/yui/build/charts/charts-debug.js create mode 100644 src/errors/static/js/yui/build/charts/charts-min.js create mode 100644 src/errors/static/js/yui/build/charts/charts.js create mode 100644 src/errors/static/js/yui/build/classnamemanager/classnamemanager-coverage.js create mode 100644 src/errors/static/js/yui/build/classnamemanager/classnamemanager-debug.js create mode 100644 src/errors/static/js/yui/build/classnamemanager/classnamemanager-min.js create mode 100644 src/errors/static/js/yui/build/classnamemanager/classnamemanager.js create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/slider-base-core.css create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/slider-core.css create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/thumb-x-oblong-dark.png create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/thumb-x-oblong.png create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/thumb-x-oblong2-dark.png create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/thumb-x-oblong2.png create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/thumb-y-oblong-dark.png create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/thumb-y-oblong.png create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/thumb-y-oblong2-dark.png create mode 100644 src/errors/static/js/yui/build/clickable-rail/assets/thumb-y-oblong2.png create mode 100644 src/errors/static/js/yui/build/clickable-rail/clickable-rail-coverage.js create mode 100644 src/errors/static/js/yui/build/clickable-rail/clickable-rail-debug.js create mode 100644 src/errors/static/js/yui/build/clickable-rail/clickable-rail-min.js create mode 100644 src/errors/static/js/yui/build/clickable-rail/clickable-rail.js create mode 100644 src/errors/static/js/yui/build/color-base/color-base-coverage.js create mode 100644 src/errors/static/js/yui/build/color-base/color-base-debug.js create mode 100644 src/errors/static/js/yui/build/color-base/color-base-min.js create mode 100644 src/errors/static/js/yui/build/color-base/color-base.js create mode 100644 src/errors/static/js/yui/build/color-harmony/color-harmony-coverage.js create mode 100644 src/errors/static/js/yui/build/color-harmony/color-harmony-debug.js create mode 100644 src/errors/static/js/yui/build/color-harmony/color-harmony-min.js create mode 100644 src/errors/static/js/yui/build/color-harmony/color-harmony.js create mode 100644 src/errors/static/js/yui/build/color-hsl/color-hsl-coverage.js create mode 100644 src/errors/static/js/yui/build/color-hsl/color-hsl-debug.js create mode 100644 src/errors/static/js/yui/build/color-hsl/color-hsl-min.js create mode 100644 src/errors/static/js/yui/build/color-hsl/color-hsl.js create mode 100644 src/errors/static/js/yui/build/color-hsv/color-hsv-coverage.js create mode 100644 src/errors/static/js/yui/build/color-hsv/color-hsv-debug.js create mode 100644 src/errors/static/js/yui/build/color-hsv/color-hsv-min.js create mode 100644 src/errors/static/js/yui/build/color-hsv/color-hsv.js create mode 100644 src/errors/static/js/yui/build/console-filters/assets/console-filters-core.css create mode 100644 src/errors/static/js/yui/build/console-filters/assets/skins/sam/console-filters-skin.css create mode 100644 src/errors/static/js/yui/build/console-filters/assets/skins/sam/console-filters.css create mode 100644 src/errors/static/js/yui/build/console-filters/console-filters-coverage.js create mode 100644 src/errors/static/js/yui/build/console-filters/console-filters-debug.js create mode 100644 src/errors/static/js/yui/build/console-filters/console-filters-min.js create mode 100644 src/errors/static/js/yui/build/console-filters/console-filters.js create mode 100644 src/errors/static/js/yui/build/console/assets/console-core.css create mode 100644 src/errors/static/js/yui/build/console/assets/console-filters-core.css create mode 100644 src/errors/static/js/yui/build/console/assets/skins/sam/bg.png create mode 100644 src/errors/static/js/yui/build/console/assets/skins/sam/console-filters-skin.css create mode 100644 src/errors/static/js/yui/build/console/assets/skins/sam/console-filters.css create mode 100644 src/errors/static/js/yui/build/console/assets/skins/sam/console-skin.css create mode 100644 src/errors/static/js/yui/build/console/assets/skins/sam/console.css create mode 100644 src/errors/static/js/yui/build/console/assets/skins/sam/warn_error.png create mode 100644 src/errors/static/js/yui/build/console/assets/warn_error.png create mode 100644 src/errors/static/js/yui/build/console/console-coverage.js create mode 100644 src/errors/static/js/yui/build/console/console-debug.js create mode 100644 src/errors/static/js/yui/build/console/console-min.js create mode 100644 src/errors/static/js/yui/build/console/console.js create mode 100644 src/errors/static/js/yui/build/console/lang/console.js create mode 100644 src/errors/static/js/yui/build/console/lang/console_en.js create mode 100644 src/errors/static/js/yui/build/console/lang/console_es.js create mode 100644 src/errors/static/js/yui/build/console/lang/console_ja.js create mode 100644 src/errors/static/js/yui/build/cookie/cookie-coverage.js create mode 100644 src/errors/static/js/yui/build/cookie/cookie-debug.js create mode 100644 src/errors/static/js/yui/build/cookie/cookie-min.js create mode 100644 src/errors/static/js/yui/build/cookie/cookie.js create mode 100644 src/errors/static/js/yui/build/createlink-base/createlink-base-coverage.js create mode 100644 src/errors/static/js/yui/build/createlink-base/createlink-base-debug.js create mode 100644 src/errors/static/js/yui/build/createlink-base/createlink-base-min.js create mode 100644 src/errors/static/js/yui/build/createlink-base/createlink-base.js create mode 100644 src/errors/static/js/yui/build/cssbase-context/base-context-min.css create mode 100644 src/errors/static/js/yui/build/cssbase-context/base-context.css create mode 100644 src/errors/static/js/yui/build/cssbase-context/cssbase-context-min.css create mode 100644 src/errors/static/js/yui/build/cssbase-context/cssbase-context.css create mode 100644 src/errors/static/js/yui/build/cssbase/base-min.css create mode 100644 src/errors/static/js/yui/build/cssbase/base.css create mode 100644 src/errors/static/js/yui/build/cssbase/cssbase-min.css create mode 100644 src/errors/static/js/yui/build/cssbase/cssbase.css create mode 100644 src/errors/static/js/yui/build/cssbutton/cssbutton-min.css create mode 100644 src/errors/static/js/yui/build/cssbutton/cssbutton.css create mode 100644 src/errors/static/js/yui/build/cssfonts-context/cssfonts-context-min.css create mode 100644 src/errors/static/js/yui/build/cssfonts-context/cssfonts-context.css create mode 100644 src/errors/static/js/yui/build/cssfonts-context/fonts-context-min.css create mode 100644 src/errors/static/js/yui/build/cssfonts-context/fonts-context.css create mode 100644 src/errors/static/js/yui/build/cssfonts/cssfonts-min.css create mode 100644 src/errors/static/js/yui/build/cssfonts/cssfonts.css create mode 100644 src/errors/static/js/yui/build/cssfonts/fonts-min.css create mode 100644 src/errors/static/js/yui/build/cssfonts/fonts.css create mode 100644 src/errors/static/js/yui/build/cssgrids-base/cssgrids-base-min.css create mode 100644 src/errors/static/js/yui/build/cssgrids-base/cssgrids-base.css create mode 100644 src/errors/static/js/yui/build/cssgrids-context-deprecated/grids-context-min.css create mode 100644 src/errors/static/js/yui/build/cssgrids-context-deprecated/grids-context.css create mode 100644 src/errors/static/js/yui/build/cssgrids-responsive/cssgrids-responsive-min.css create mode 100644 src/errors/static/js/yui/build/cssgrids-responsive/cssgrids-responsive.css create mode 100644 src/errors/static/js/yui/build/cssgrids-units/cssgrids-units-min.css create mode 100644 src/errors/static/js/yui/build/cssgrids-units/cssgrids-units.css create mode 100644 src/errors/static/js/yui/build/cssgrids/cssgrids-min.css create mode 100644 src/errors/static/js/yui/build/cssgrids/cssgrids.css create mode 100644 src/errors/static/js/yui/build/cssgrids/grids-min.css create mode 100644 src/errors/static/js/yui/build/cssgrids/grids.css create mode 100644 src/errors/static/js/yui/build/cssnormalize-context/cssnormalize-context-min.css create mode 100644 src/errors/static/js/yui/build/cssnormalize-context/cssnormalize-context.css create mode 100644 src/errors/static/js/yui/build/cssnormalize/cssnormalize-min.css create mode 100644 src/errors/static/js/yui/build/cssnormalize/cssnormalize.css create mode 100644 src/errors/static/js/yui/build/cssreset-context/cssreset-context-min.css create mode 100644 src/errors/static/js/yui/build/cssreset-context/cssreset-context.css create mode 100644 src/errors/static/js/yui/build/cssreset-context/reset-context-min.css create mode 100644 src/errors/static/js/yui/build/cssreset-context/reset-context.css create mode 100644 src/errors/static/js/yui/build/cssreset/cssreset-min.css create mode 100644 src/errors/static/js/yui/build/cssreset/cssreset.css create mode 100644 src/errors/static/js/yui/build/cssreset/reset-min.css create mode 100644 src/errors/static/js/yui/build/cssreset/reset.css create mode 100644 src/errors/static/js/yui/build/dataschema-array/dataschema-array-coverage.js create mode 100644 src/errors/static/js/yui/build/dataschema-array/dataschema-array-debug.js create mode 100644 src/errors/static/js/yui/build/dataschema-array/dataschema-array-min.js create mode 100644 src/errors/static/js/yui/build/dataschema-array/dataschema-array.js create mode 100644 src/errors/static/js/yui/build/dataschema-base/dataschema-base-coverage.js create mode 100644 src/errors/static/js/yui/build/dataschema-base/dataschema-base-debug.js create mode 100644 src/errors/static/js/yui/build/dataschema-base/dataschema-base-min.js create mode 100644 src/errors/static/js/yui/build/dataschema-base/dataschema-base.js create mode 100644 src/errors/static/js/yui/build/dataschema-json/dataschema-json-coverage.js create mode 100644 src/errors/static/js/yui/build/dataschema-json/dataschema-json-debug.js create mode 100644 src/errors/static/js/yui/build/dataschema-json/dataschema-json-min.js create mode 100644 src/errors/static/js/yui/build/dataschema-json/dataschema-json.js create mode 100644 src/errors/static/js/yui/build/dataschema-text/dataschema-text-coverage.js create mode 100644 src/errors/static/js/yui/build/dataschema-text/dataschema-text-debug.js create mode 100644 src/errors/static/js/yui/build/dataschema-text/dataschema-text-min.js create mode 100644 src/errors/static/js/yui/build/dataschema-text/dataschema-text.js create mode 100644 src/errors/static/js/yui/build/dataschema-xml/dataschema-xml-coverage.js create mode 100644 src/errors/static/js/yui/build/dataschema-xml/dataschema-xml-debug.js create mode 100644 src/errors/static/js/yui/build/dataschema-xml/dataschema-xml-min.js create mode 100644 src/errors/static/js/yui/build/dataschema-xml/dataschema-xml.js create mode 100644 src/errors/static/js/yui/build/datasource-arrayschema/datasource-arrayschema-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-arrayschema/datasource-arrayschema-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-arrayschema/datasource-arrayschema-min.js create mode 100644 src/errors/static/js/yui/build/datasource-arrayschema/datasource-arrayschema.js create mode 100644 src/errors/static/js/yui/build/datasource-cache/datasource-cache-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-cache/datasource-cache-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-cache/datasource-cache-min.js create mode 100644 src/errors/static/js/yui/build/datasource-cache/datasource-cache.js create mode 100644 src/errors/static/js/yui/build/datasource-function/datasource-function-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-function/datasource-function-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-function/datasource-function-min.js create mode 100644 src/errors/static/js/yui/build/datasource-function/datasource-function.js create mode 100644 src/errors/static/js/yui/build/datasource-get/datasource-get-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-get/datasource-get-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-get/datasource-get-min.js create mode 100644 src/errors/static/js/yui/build/datasource-get/datasource-get.js create mode 100644 src/errors/static/js/yui/build/datasource-io/datasource-io-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-io/datasource-io-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-io/datasource-io-min.js create mode 100644 src/errors/static/js/yui/build/datasource-io/datasource-io.js create mode 100644 src/errors/static/js/yui/build/datasource-jsonschema/datasource-jsonschema-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-jsonschema/datasource-jsonschema-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-jsonschema/datasource-jsonschema-min.js create mode 100644 src/errors/static/js/yui/build/datasource-jsonschema/datasource-jsonschema.js create mode 100644 src/errors/static/js/yui/build/datasource-local/datasource-local-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-local/datasource-local-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-local/datasource-local-min.js create mode 100644 src/errors/static/js/yui/build/datasource-local/datasource-local.js create mode 100644 src/errors/static/js/yui/build/datasource-polling/datasource-polling-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-polling/datasource-polling-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-polling/datasource-polling-min.js create mode 100644 src/errors/static/js/yui/build/datasource-polling/datasource-polling.js create mode 100644 src/errors/static/js/yui/build/datasource-textschema/datasource-textschema-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-textschema/datasource-textschema-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-textschema/datasource-textschema-min.js create mode 100644 src/errors/static/js/yui/build/datasource-textschema/datasource-textschema.js create mode 100644 src/errors/static/js/yui/build/datasource-xmlschema/datasource-xmlschema-coverage.js create mode 100644 src/errors/static/js/yui/build/datasource-xmlschema/datasource-xmlschema-debug.js create mode 100644 src/errors/static/js/yui/build/datasource-xmlschema/datasource-xmlschema-min.js create mode 100644 src/errors/static/js/yui/build/datasource-xmlschema/datasource-xmlschema.js create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/assets/datatable-base-deprecated-core.css create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/assets/skins/night/datatable-base-deprecated-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/assets/skins/night/datatable-base-deprecated.css create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/assets/skins/sam/datatable-base-deprecated-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/assets/skins/sam/datatable-base-deprecated.css create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/assets/skins/sam/dt-arrow-dn.png create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/assets/skins/sam/dt-arrow-up.png create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/datatable-base-deprecated-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/datatable-base-deprecated-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/datatable-base-deprecated-min.js create mode 100644 src/errors/static/js/yui/build/datatable-base-deprecated/datatable-base-deprecated.js create mode 100644 src/errors/static/js/yui/build/datatable-base/assets/datatable-base-core.css create mode 100644 src/errors/static/js/yui/build/datatable-base/assets/skins/night/datatable-base-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-base/assets/skins/night/datatable-base.css create mode 100644 src/errors/static/js/yui/build/datatable-base/assets/skins/sam/datatable-base-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-base/assets/skins/sam/datatable-base.css create mode 100644 src/errors/static/js/yui/build/datatable-base/datatable-base-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-base/datatable-base-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-base/datatable-base-min.js create mode 100644 src/errors/static/js/yui/build/datatable-base/datatable-base.js create mode 100644 src/errors/static/js/yui/build/datatable-body/datatable-body-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-body/datatable-body-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-body/datatable-body-min.js create mode 100644 src/errors/static/js/yui/build/datatable-body/datatable-body.js create mode 100644 src/errors/static/js/yui/build/datatable-column-widths/datatable-column-widths-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-column-widths/datatable-column-widths-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-column-widths/datatable-column-widths-min.js create mode 100644 src/errors/static/js/yui/build/datatable-column-widths/datatable-column-widths.js create mode 100644 src/errors/static/js/yui/build/datatable-core/datatable-core-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-core/datatable-core-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-core/datatable-core-min.js create mode 100644 src/errors/static/js/yui/build/datatable-core/datatable-core.js create mode 100644 src/errors/static/js/yui/build/datatable-datasource-deprecated/datatable-datasource-deprecated-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-datasource-deprecated/datatable-datasource-deprecated-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-datasource-deprecated/datatable-datasource-deprecated-min.js create mode 100644 src/errors/static/js/yui/build/datatable-datasource-deprecated/datatable-datasource-deprecated.js create mode 100644 src/errors/static/js/yui/build/datatable-datasource/datatable-datasource-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-datasource/datatable-datasource-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-datasource/datatable-datasource-min.js create mode 100644 src/errors/static/js/yui/build/datatable-datasource/datatable-datasource.js create mode 100644 src/errors/static/js/yui/build/datatable-formatters/datatable-formatters-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-formatters/datatable-formatters-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-formatters/datatable-formatters-min.js create mode 100644 src/errors/static/js/yui/build/datatable-formatters/datatable-formatters.js create mode 100644 src/errors/static/js/yui/build/datatable-head/datatable-head-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-head/datatable-head-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-head/datatable-head-min.js create mode 100644 src/errors/static/js/yui/build/datatable-head/datatable-head.js create mode 100644 src/errors/static/js/yui/build/datatable-message/assets/datatable-message-core.css create mode 100644 src/errors/static/js/yui/build/datatable-message/assets/skins/night/datatable-message-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-message/assets/skins/night/datatable-message.css create mode 100644 src/errors/static/js/yui/build/datatable-message/assets/skins/sam/datatable-message-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-message/assets/skins/sam/datatable-message.css create mode 100644 src/errors/static/js/yui/build/datatable-message/datatable-message-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-message/datatable-message-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-message/datatable-message-min.js create mode 100644 src/errors/static/js/yui/build/datatable-message/datatable-message.js create mode 100644 src/errors/static/js/yui/build/datatable-message/lang/datatable-message.js create mode 100644 src/errors/static/js/yui/build/datatable-message/lang/datatable-message_en.js create mode 100644 src/errors/static/js/yui/build/datatable-message/lang/datatable-message_es.js create mode 100644 src/errors/static/js/yui/build/datatable-message/lang/datatable-message_fr.js create mode 100644 src/errors/static/js/yui/build/datatable-mutable/datatable-mutable-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-mutable/datatable-mutable-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-mutable/datatable-mutable-min.js create mode 100644 src/errors/static/js/yui/build/datatable-mutable/datatable-mutable.js create mode 100644 src/errors/static/js/yui/build/datatable-scroll-deprecated/datatable-scroll-deprecated-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-scroll-deprecated/datatable-scroll-deprecated-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-scroll-deprecated/datatable-scroll-deprecated-min.js create mode 100644 src/errors/static/js/yui/build/datatable-scroll-deprecated/datatable-scroll-deprecated.js create mode 100644 src/errors/static/js/yui/build/datatable-scroll/assets/datatable-scroll-core.css create mode 100644 src/errors/static/js/yui/build/datatable-scroll/assets/skins/night/datatable-scroll-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-scroll/assets/skins/night/datatable-scroll.css create mode 100644 src/errors/static/js/yui/build/datatable-scroll/assets/skins/sam/datatable-scroll-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-scroll/assets/skins/sam/datatable-scroll.css create mode 100644 src/errors/static/js/yui/build/datatable-scroll/datatable-scroll-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-scroll/datatable-scroll-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-scroll/datatable-scroll-min.js create mode 100644 src/errors/static/js/yui/build/datatable-scroll/datatable-scroll.js create mode 100644 src/errors/static/js/yui/build/datatable-sort-deprecated/datatable-sort-deprecated-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-sort-deprecated/datatable-sort-deprecated-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-sort-deprecated/datatable-sort-deprecated-min.js create mode 100644 src/errors/static/js/yui/build/datatable-sort-deprecated/datatable-sort-deprecated.js create mode 100644 src/errors/static/js/yui/build/datatable-sort-deprecated/lang/datatable-sort-deprecated.js create mode 100644 src/errors/static/js/yui/build/datatable-sort-deprecated/lang/datatable-sort-deprecated_en.js create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/datatable-sort-core.css create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/skins/night/datatable-sort-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/skins/night/datatable-sort.css create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/skins/night/sort-arrow-sprite-ie.png create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/skins/night/sort-arrow-sprite.png create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/skins/sam/datatable-sort-skin.css create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/skins/sam/datatable-sort.css create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/skins/sam/sort-arrow-sprite-ie.png create mode 100644 src/errors/static/js/yui/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png create mode 100644 src/errors/static/js/yui/build/datatable-sort/datatable-sort-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-sort/datatable-sort-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-sort/datatable-sort-min.js create mode 100644 src/errors/static/js/yui/build/datatable-sort/datatable-sort.js create mode 100644 src/errors/static/js/yui/build/datatable-sort/lang/datatable-sort.js create mode 100644 src/errors/static/js/yui/build/datatable-sort/lang/datatable-sort_en.js create mode 100644 src/errors/static/js/yui/build/datatable-sort/lang/datatable-sort_es.js create mode 100644 src/errors/static/js/yui/build/datatable-sort/lang/datatable-sort_fr.js create mode 100644 src/errors/static/js/yui/build/datatable-table/datatable-table-coverage.js create mode 100644 src/errors/static/js/yui/build/datatable-table/datatable-table-debug.js create mode 100644 src/errors/static/js/yui/build/datatable-table/datatable-table-min.js create mode 100644 src/errors/static/js/yui/build/datatable-table/datatable-table.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/datatype-date-format-coverage.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/datatype-date-format-debug.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/datatype-date-format-min.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/datatype-date-format.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ar-JO.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ar.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ca-ES.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ca.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_da-DK.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_da.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_de-AT.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_de-DE.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_de.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_el-GR.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_el.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-AU.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-CA.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-GB.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-IE.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-IN.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-JO.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-MY.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-NZ.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-PH.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-SG.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en-US.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_en.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-AR.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-BO.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-CL.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-CO.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-EC.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-ES.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-MX.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-PE.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-PY.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-US.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-UY.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es-VE.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_es.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_fi-FI.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_fi.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_fr-BE.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_fr-CA.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_fr-FR.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_fr.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_hi-IN.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_hi.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_id-ID.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_id.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_it-IT.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_it.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ja-JP.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ja.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ko-KR.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ko.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ms-MY.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ms.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_nb-NO.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_nb.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_nl-BE.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_nl-NL.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_nl.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_pl-PL.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_pl.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_pt-BR.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_pt.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ro-RO.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ro.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ru-RU.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_ru.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_sv-SE.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_sv.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_th-TH.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_th.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_tr-TR.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_tr.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_vi-VN.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_vi.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_zh-Hans-CN.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_zh-Hans.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_zh-Hant-HK.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_zh-Hant-TW.js create mode 100644 src/errors/static/js/yui/build/datatype-date-format/lang/datatype-date-format_zh-Hant.js create mode 100644 src/errors/static/js/yui/build/datatype-date-math/datatype-date-math-coverage.js create mode 100644 src/errors/static/js/yui/build/datatype-date-math/datatype-date-math-debug.js create mode 100644 src/errors/static/js/yui/build/datatype-date-math/datatype-date-math-min.js create mode 100644 src/errors/static/js/yui/build/datatype-date-math/datatype-date-math.js create mode 100644 src/errors/static/js/yui/build/datatype-date-parse/datatype-date-parse-coverage.js create mode 100644 src/errors/static/js/yui/build/datatype-date-parse/datatype-date-parse-debug.js create mode 100644 src/errors/static/js/yui/build/datatype-date-parse/datatype-date-parse-min.js create mode 100644 src/errors/static/js/yui/build/datatype-date-parse/datatype-date-parse.js create mode 100644 src/errors/static/js/yui/build/datatype-number-format/datatype-number-format-coverage.js create mode 100644 src/errors/static/js/yui/build/datatype-number-format/datatype-number-format-debug.js create mode 100644 src/errors/static/js/yui/build/datatype-number-format/datatype-number-format-min.js create mode 100644 src/errors/static/js/yui/build/datatype-number-format/datatype-number-format.js create mode 100644 src/errors/static/js/yui/build/datatype-number-parse/datatype-number-parse-coverage.js create mode 100644 src/errors/static/js/yui/build/datatype-number-parse/datatype-number-parse-debug.js create mode 100644 src/errors/static/js/yui/build/datatype-number-parse/datatype-number-parse-min.js create mode 100644 src/errors/static/js/yui/build/datatype-number-parse/datatype-number-parse.js create mode 100644 src/errors/static/js/yui/build/datatype-xml-format/datatype-xml-format-coverage.js create mode 100644 src/errors/static/js/yui/build/datatype-xml-format/datatype-xml-format-debug.js create mode 100644 src/errors/static/js/yui/build/datatype-xml-format/datatype-xml-format-min.js create mode 100644 src/errors/static/js/yui/build/datatype-xml-format/datatype-xml-format.js create mode 100644 src/errors/static/js/yui/build/datatype-xml-parse/datatype-xml-parse-coverage.js create mode 100644 src/errors/static/js/yui/build/datatype-xml-parse/datatype-xml-parse-debug.js create mode 100644 src/errors/static/js/yui/build/datatype-xml-parse/datatype-xml-parse-min.js create mode 100644 src/errors/static/js/yui/build/datatype-xml-parse/datatype-xml-parse.js create mode 100644 src/errors/static/js/yui/build/dd-constrain/dd-constrain-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-constrain/dd-constrain-debug.js create mode 100644 src/errors/static/js/yui/build/dd-constrain/dd-constrain-min.js create mode 100644 src/errors/static/js/yui/build/dd-constrain/dd-constrain.js create mode 100644 src/errors/static/js/yui/build/dd-ddm-base/dd-ddm-base-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-ddm-base/dd-ddm-base-debug.js create mode 100644 src/errors/static/js/yui/build/dd-ddm-base/dd-ddm-base-min.js create mode 100644 src/errors/static/js/yui/build/dd-ddm-base/dd-ddm-base.js create mode 100644 src/errors/static/js/yui/build/dd-ddm-drop/dd-ddm-drop-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-ddm-drop/dd-ddm-drop-debug.js create mode 100644 src/errors/static/js/yui/build/dd-ddm-drop/dd-ddm-drop-min.js create mode 100644 src/errors/static/js/yui/build/dd-ddm-drop/dd-ddm-drop.js create mode 100644 src/errors/static/js/yui/build/dd-ddm/dd-ddm-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-ddm/dd-ddm-debug.js create mode 100644 src/errors/static/js/yui/build/dd-ddm/dd-ddm-min.js create mode 100644 src/errors/static/js/yui/build/dd-ddm/dd-ddm.js create mode 100644 src/errors/static/js/yui/build/dd-delegate/dd-delegate-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-delegate/dd-delegate-debug.js create mode 100644 src/errors/static/js/yui/build/dd-delegate/dd-delegate-min.js create mode 100644 src/errors/static/js/yui/build/dd-delegate/dd-delegate.js create mode 100644 src/errors/static/js/yui/build/dd-drag/dd-drag-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-drag/dd-drag-debug.js create mode 100644 src/errors/static/js/yui/build/dd-drag/dd-drag-min.js create mode 100644 src/errors/static/js/yui/build/dd-drag/dd-drag.js create mode 100644 src/errors/static/js/yui/build/dd-drop-plugin/dd-drop-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-drop-plugin/dd-drop-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/dd-drop-plugin/dd-drop-plugin-min.js create mode 100644 src/errors/static/js/yui/build/dd-drop-plugin/dd-drop-plugin.js create mode 100644 src/errors/static/js/yui/build/dd-drop/dd-drop-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-drop/dd-drop-debug.js create mode 100644 src/errors/static/js/yui/build/dd-drop/dd-drop-min.js create mode 100644 src/errors/static/js/yui/build/dd-drop/dd-drop.js create mode 100644 src/errors/static/js/yui/build/dd-gestures/dd-gestures-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-gestures/dd-gestures-debug.js create mode 100644 src/errors/static/js/yui/build/dd-gestures/dd-gestures-min.js create mode 100644 src/errors/static/js/yui/build/dd-gestures/dd-gestures.js create mode 100644 src/errors/static/js/yui/build/dd-plugin/dd-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-plugin/dd-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/dd-plugin/dd-plugin-min.js create mode 100644 src/errors/static/js/yui/build/dd-plugin/dd-plugin.js create mode 100644 src/errors/static/js/yui/build/dd-proxy/dd-proxy-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-proxy/dd-proxy-debug.js create mode 100644 src/errors/static/js/yui/build/dd-proxy/dd-proxy-min.js create mode 100644 src/errors/static/js/yui/build/dd-proxy/dd-proxy.js create mode 100644 src/errors/static/js/yui/build/dd-scroll/dd-scroll-coverage.js create mode 100644 src/errors/static/js/yui/build/dd-scroll/dd-scroll-debug.js create mode 100644 src/errors/static/js/yui/build/dd-scroll/dd-scroll-min.js create mode 100644 src/errors/static/js/yui/build/dd-scroll/dd-scroll.js create mode 100644 src/errors/static/js/yui/build/dial/assets/dial-core.css create mode 100644 src/errors/static/js/yui/build/dial/assets/skins/night/dial-skin.css create mode 100644 src/errors/static/js/yui/build/dial/assets/skins/night/dial.css create mode 100644 src/errors/static/js/yui/build/dial/assets/skins/sam/dial-skin.css create mode 100644 src/errors/static/js/yui/build/dial/assets/skins/sam/dial.css create mode 100644 src/errors/static/js/yui/build/dial/dial-coverage.js create mode 100644 src/errors/static/js/yui/build/dial/dial-debug.js create mode 100644 src/errors/static/js/yui/build/dial/dial-min.js create mode 100644 src/errors/static/js/yui/build/dial/dial.js create mode 100644 src/errors/static/js/yui/build/dial/lang/dial.js create mode 100644 src/errors/static/js/yui/build/dial/lang/dial_en.js create mode 100644 src/errors/static/js/yui/build/dial/lang/dial_es.js create mode 100644 src/errors/static/js/yui/build/dom-attrs/dom-attrs-debug.js create mode 100644 src/errors/static/js/yui/build/dom-attrs/dom-attrs-min.js create mode 100644 src/errors/static/js/yui/build/dom-attrs/dom-attrs.js create mode 100644 src/errors/static/js/yui/build/dom-base/dom-base-coverage.js create mode 100644 src/errors/static/js/yui/build/dom-base/dom-base-debug.js create mode 100644 src/errors/static/js/yui/build/dom-base/dom-base-min.js create mode 100644 src/errors/static/js/yui/build/dom-base/dom-base.js create mode 100644 src/errors/static/js/yui/build/dom-class/dom-class-debug.js create mode 100644 src/errors/static/js/yui/build/dom-class/dom-class-min.js create mode 100644 src/errors/static/js/yui/build/dom-class/dom-class.js create mode 100644 src/errors/static/js/yui/build/dom-core/dom-core-coverage.js create mode 100644 src/errors/static/js/yui/build/dom-core/dom-core-debug.js create mode 100644 src/errors/static/js/yui/build/dom-core/dom-core-min.js create mode 100644 src/errors/static/js/yui/build/dom-core/dom-core.js create mode 100644 src/errors/static/js/yui/build/dom-create/dom-create-debug.js create mode 100644 src/errors/static/js/yui/build/dom-create/dom-create-min.js create mode 100644 src/errors/static/js/yui/build/dom-create/dom-create.js create mode 100644 src/errors/static/js/yui/build/dom-deprecated/dom-deprecated-coverage.js create mode 100644 src/errors/static/js/yui/build/dom-deprecated/dom-deprecated-debug.js create mode 100644 src/errors/static/js/yui/build/dom-deprecated/dom-deprecated-min.js create mode 100644 src/errors/static/js/yui/build/dom-deprecated/dom-deprecated.js create mode 100644 src/errors/static/js/yui/build/dom-screen/dom-screen-coverage.js create mode 100644 src/errors/static/js/yui/build/dom-screen/dom-screen-debug.js create mode 100644 src/errors/static/js/yui/build/dom-screen/dom-screen-min.js create mode 100644 src/errors/static/js/yui/build/dom-screen/dom-screen.js create mode 100644 src/errors/static/js/yui/build/dom-size/dom-size-debug.js create mode 100644 src/errors/static/js/yui/build/dom-size/dom-size-min.js create mode 100644 src/errors/static/js/yui/build/dom-size/dom-size.js create mode 100644 src/errors/static/js/yui/build/dom-style-ie/dom-style-ie-coverage.js create mode 100644 src/errors/static/js/yui/build/dom-style-ie/dom-style-ie-debug.js create mode 100644 src/errors/static/js/yui/build/dom-style-ie/dom-style-ie-min.js create mode 100644 src/errors/static/js/yui/build/dom-style-ie/dom-style-ie.js create mode 100644 src/errors/static/js/yui/build/dom-style/dom-style-coverage.js create mode 100644 src/errors/static/js/yui/build/dom-style/dom-style-debug.js create mode 100644 src/errors/static/js/yui/build/dom-style/dom-style-min.js create mode 100644 src/errors/static/js/yui/build/dom-style/dom-style.js create mode 100644 src/errors/static/js/yui/build/dump/dump-coverage.js create mode 100644 src/errors/static/js/yui/build/dump/dump-debug.js create mode 100644 src/errors/static/js/yui/build/dump/dump-min.js create mode 100644 src/errors/static/js/yui/build/dump/dump.js create mode 100644 src/errors/static/js/yui/build/editor-base/editor-base-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-base/editor-base-debug.js create mode 100644 src/errors/static/js/yui/build/editor-base/editor-base-min.js create mode 100644 src/errors/static/js/yui/build/editor-base/editor-base.js create mode 100644 src/errors/static/js/yui/build/editor-bidi/editor-bidi-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-bidi/editor-bidi-debug.js create mode 100644 src/errors/static/js/yui/build/editor-bidi/editor-bidi-min.js create mode 100644 src/errors/static/js/yui/build/editor-bidi/editor-bidi.js create mode 100644 src/errors/static/js/yui/build/editor-br/editor-br-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-br/editor-br-debug.js create mode 100644 src/errors/static/js/yui/build/editor-br/editor-br-min.js create mode 100644 src/errors/static/js/yui/build/editor-br/editor-br.js create mode 100644 src/errors/static/js/yui/build/editor-lists/editor-lists-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-lists/editor-lists-debug.js create mode 100644 src/errors/static/js/yui/build/editor-lists/editor-lists-min.js create mode 100644 src/errors/static/js/yui/build/editor-lists/editor-lists.js create mode 100644 src/errors/static/js/yui/build/editor-para-base/editor-para-base-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-para-base/editor-para-base-debug.js create mode 100644 src/errors/static/js/yui/build/editor-para-base/editor-para-base-min.js create mode 100644 src/errors/static/js/yui/build/editor-para-base/editor-para-base.js create mode 100644 src/errors/static/js/yui/build/editor-para-ie/editor-para-ie-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-para-ie/editor-para-ie-debug.js create mode 100644 src/errors/static/js/yui/build/editor-para-ie/editor-para-ie-min.js create mode 100644 src/errors/static/js/yui/build/editor-para-ie/editor-para-ie.js create mode 100644 src/errors/static/js/yui/build/editor-para/editor-para-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-para/editor-para-debug.js create mode 100644 src/errors/static/js/yui/build/editor-para/editor-para-min.js create mode 100644 src/errors/static/js/yui/build/editor-para/editor-para.js create mode 100644 src/errors/static/js/yui/build/editor-selection/editor-selection-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-selection/editor-selection-debug.js create mode 100644 src/errors/static/js/yui/build/editor-selection/editor-selection-min.js create mode 100644 src/errors/static/js/yui/build/editor-selection/editor-selection.js create mode 100644 src/errors/static/js/yui/build/editor-tab/editor-tab-coverage.js create mode 100644 src/errors/static/js/yui/build/editor-tab/editor-tab-debug.js create mode 100644 src/errors/static/js/yui/build/editor-tab/editor-tab-min.js create mode 100644 src/errors/static/js/yui/build/editor-tab/editor-tab.js create mode 100644 src/errors/static/js/yui/build/escape/escape-coverage.js create mode 100644 src/errors/static/js/yui/build/escape/escape-debug.js create mode 100644 src/errors/static/js/yui/build/escape/escape-min.js create mode 100644 src/errors/static/js/yui/build/escape/escape.js create mode 100644 src/errors/static/js/yui/build/event-base-ie/event-base-ie-coverage.js create mode 100644 src/errors/static/js/yui/build/event-base-ie/event-base-ie-debug.js create mode 100644 src/errors/static/js/yui/build/event-base-ie/event-base-ie-min.js create mode 100644 src/errors/static/js/yui/build/event-base-ie/event-base-ie.js create mode 100644 src/errors/static/js/yui/build/event-base/event-base-coverage.js create mode 100644 src/errors/static/js/yui/build/event-base/event-base-debug.js create mode 100644 src/errors/static/js/yui/build/event-base/event-base-min.js create mode 100644 src/errors/static/js/yui/build/event-base/event-base.js create mode 100644 src/errors/static/js/yui/build/event-contextmenu/event-contextmenu-coverage.js create mode 100644 src/errors/static/js/yui/build/event-contextmenu/event-contextmenu-debug.js create mode 100644 src/errors/static/js/yui/build/event-contextmenu/event-contextmenu-min.js create mode 100644 src/errors/static/js/yui/build/event-contextmenu/event-contextmenu.js create mode 100644 src/errors/static/js/yui/build/event-custom-base/event-custom-base-coverage.js create mode 100644 src/errors/static/js/yui/build/event-custom-base/event-custom-base-debug.js create mode 100644 src/errors/static/js/yui/build/event-custom-base/event-custom-base-min.js create mode 100644 src/errors/static/js/yui/build/event-custom-base/event-custom-base.js create mode 100644 src/errors/static/js/yui/build/event-custom-complex/event-custom-complex-coverage.js create mode 100644 src/errors/static/js/yui/build/event-custom-complex/event-custom-complex-debug.js create mode 100644 src/errors/static/js/yui/build/event-custom-complex/event-custom-complex-min.js create mode 100644 src/errors/static/js/yui/build/event-custom-complex/event-custom-complex.js create mode 100644 src/errors/static/js/yui/build/event-delegate/event-delegate-coverage.js create mode 100644 src/errors/static/js/yui/build/event-delegate/event-delegate-debug.js create mode 100644 src/errors/static/js/yui/build/event-delegate/event-delegate-min.js create mode 100644 src/errors/static/js/yui/build/event-delegate/event-delegate.js create mode 100644 src/errors/static/js/yui/build/event-flick/event-flick-coverage.js create mode 100644 src/errors/static/js/yui/build/event-flick/event-flick-debug.js create mode 100644 src/errors/static/js/yui/build/event-flick/event-flick-min.js create mode 100644 src/errors/static/js/yui/build/event-flick/event-flick.js create mode 100644 src/errors/static/js/yui/build/event-focus/event-focus-coverage.js create mode 100644 src/errors/static/js/yui/build/event-focus/event-focus-debug.js create mode 100644 src/errors/static/js/yui/build/event-focus/event-focus-min.js create mode 100644 src/errors/static/js/yui/build/event-focus/event-focus.js create mode 100644 src/errors/static/js/yui/build/event-hover/event-hover-coverage.js create mode 100644 src/errors/static/js/yui/build/event-hover/event-hover-debug.js create mode 100644 src/errors/static/js/yui/build/event-hover/event-hover-min.js create mode 100644 src/errors/static/js/yui/build/event-hover/event-hover.js create mode 100644 src/errors/static/js/yui/build/event-key/event-key-coverage.js create mode 100644 src/errors/static/js/yui/build/event-key/event-key-debug.js create mode 100644 src/errors/static/js/yui/build/event-key/event-key-min.js create mode 100644 src/errors/static/js/yui/build/event-key/event-key.js create mode 100644 src/errors/static/js/yui/build/event-mouseenter/event-mouseenter-coverage.js create mode 100644 src/errors/static/js/yui/build/event-mouseenter/event-mouseenter-debug.js create mode 100644 src/errors/static/js/yui/build/event-mouseenter/event-mouseenter-min.js create mode 100644 src/errors/static/js/yui/build/event-mouseenter/event-mouseenter.js create mode 100644 src/errors/static/js/yui/build/event-mousewheel/event-mousewheel-coverage.js create mode 100644 src/errors/static/js/yui/build/event-mousewheel/event-mousewheel-debug.js create mode 100644 src/errors/static/js/yui/build/event-mousewheel/event-mousewheel-min.js create mode 100644 src/errors/static/js/yui/build/event-mousewheel/event-mousewheel.js create mode 100644 src/errors/static/js/yui/build/event-move/event-move-coverage.js create mode 100644 src/errors/static/js/yui/build/event-move/event-move-debug.js create mode 100644 src/errors/static/js/yui/build/event-move/event-move-min.js create mode 100644 src/errors/static/js/yui/build/event-move/event-move.js create mode 100644 src/errors/static/js/yui/build/event-outside/event-outside-coverage.js create mode 100644 src/errors/static/js/yui/build/event-outside/event-outside-debug.js create mode 100644 src/errors/static/js/yui/build/event-outside/event-outside-min.js create mode 100644 src/errors/static/js/yui/build/event-outside/event-outside.js create mode 100644 src/errors/static/js/yui/build/event-resize/event-resize-coverage.js create mode 100644 src/errors/static/js/yui/build/event-resize/event-resize-debug.js create mode 100644 src/errors/static/js/yui/build/event-resize/event-resize-min.js create mode 100644 src/errors/static/js/yui/build/event-resize/event-resize.js create mode 100644 src/errors/static/js/yui/build/event-simulate/event-simulate-coverage.js create mode 100644 src/errors/static/js/yui/build/event-simulate/event-simulate-debug.js create mode 100644 src/errors/static/js/yui/build/event-simulate/event-simulate-min.js create mode 100644 src/errors/static/js/yui/build/event-simulate/event-simulate.js create mode 100644 src/errors/static/js/yui/build/event-synthetic/event-synthetic-coverage.js create mode 100644 src/errors/static/js/yui/build/event-synthetic/event-synthetic-debug.js create mode 100644 src/errors/static/js/yui/build/event-synthetic/event-synthetic-min.js create mode 100644 src/errors/static/js/yui/build/event-synthetic/event-synthetic.js create mode 100644 src/errors/static/js/yui/build/event-tap/event-tap-coverage.js create mode 100644 src/errors/static/js/yui/build/event-tap/event-tap-debug.js create mode 100644 src/errors/static/js/yui/build/event-tap/event-tap-min.js create mode 100644 src/errors/static/js/yui/build/event-tap/event-tap.js create mode 100644 src/errors/static/js/yui/build/event-touch/event-touch-coverage.js create mode 100644 src/errors/static/js/yui/build/event-touch/event-touch-debug.js create mode 100644 src/errors/static/js/yui/build/event-touch/event-touch-min.js create mode 100644 src/errors/static/js/yui/build/event-touch/event-touch.js create mode 100644 src/errors/static/js/yui/build/event-valuechange/event-valuechange-coverage.js create mode 100644 src/errors/static/js/yui/build/event-valuechange/event-valuechange-debug.js create mode 100644 src/errors/static/js/yui/build/event-valuechange/event-valuechange-min.js create mode 100644 src/errors/static/js/yui/build/event-valuechange/event-valuechange.js create mode 100644 src/errors/static/js/yui/build/exec-command/exec-command-coverage.js create mode 100644 src/errors/static/js/yui/build/exec-command/exec-command-debug.js create mode 100644 src/errors/static/js/yui/build/exec-command/exec-command-min.js create mode 100644 src/errors/static/js/yui/build/exec-command/exec-command.js create mode 100644 src/errors/static/js/yui/build/features/features-coverage.js create mode 100644 src/errors/static/js/yui/build/features/features-debug.js create mode 100644 src/errors/static/js/yui/build/features/features-min.js create mode 100644 src/errors/static/js/yui/build/features/features.js create mode 100644 src/errors/static/js/yui/build/file-flash/file-flash-coverage.js create mode 100644 src/errors/static/js/yui/build/file-flash/file-flash-debug.js create mode 100644 src/errors/static/js/yui/build/file-flash/file-flash-min.js create mode 100644 src/errors/static/js/yui/build/file-flash/file-flash.js create mode 100644 src/errors/static/js/yui/build/file-html5/file-html5-coverage.js create mode 100644 src/errors/static/js/yui/build/file-html5/file-html5-debug.js create mode 100644 src/errors/static/js/yui/build/file-html5/file-html5-min.js create mode 100644 src/errors/static/js/yui/build/file-html5/file-html5.js create mode 100644 src/errors/static/js/yui/build/file/file-coverage.js create mode 100644 src/errors/static/js/yui/build/file/file-debug.js create mode 100644 src/errors/static/js/yui/build/file/file-min.js create mode 100644 src/errors/static/js/yui/build/file/file.js create mode 100644 src/errors/static/js/yui/build/frame/frame-coverage.js create mode 100644 src/errors/static/js/yui/build/frame/frame-debug.js create mode 100644 src/errors/static/js/yui/build/frame/frame-min.js create mode 100644 src/errors/static/js/yui/build/frame/frame.js create mode 100644 src/errors/static/js/yui/build/gallery-datasource-manage-stale/manage-stale-min.js create mode 100644 src/errors/static/js/yui/build/gallery-datasource-manage-stale/manage-stale.js create mode 100644 src/errors/static/js/yui/build/gesture-simulate/gesture-simulate-coverage.js create mode 100644 src/errors/static/js/yui/build/gesture-simulate/gesture-simulate-debug.js create mode 100644 src/errors/static/js/yui/build/gesture-simulate/gesture-simulate-min.js create mode 100644 src/errors/static/js/yui/build/gesture-simulate/gesture-simulate.js create mode 100644 src/errors/static/js/yui/build/get-nodejs/get-nodejs-coverage.js create mode 100644 src/errors/static/js/yui/build/get-nodejs/get-nodejs-debug.js create mode 100644 src/errors/static/js/yui/build/get-nodejs/get-nodejs-min.js create mode 100644 src/errors/static/js/yui/build/get-nodejs/get-nodejs.js create mode 100644 src/errors/static/js/yui/build/get/get-coverage.js create mode 100644 src/errors/static/js/yui/build/get/get-debug.js create mode 100644 src/errors/static/js/yui/build/get/get-min.js create mode 100644 src/errors/static/js/yui/build/get/get.js create mode 100644 src/errors/static/js/yui/build/graphics-canvas-default/graphics-canvas-default-coverage.js create mode 100644 src/errors/static/js/yui/build/graphics-canvas-default/graphics-canvas-default-debug.js create mode 100644 src/errors/static/js/yui/build/graphics-canvas-default/graphics-canvas-default-min.js create mode 100644 src/errors/static/js/yui/build/graphics-canvas-default/graphics-canvas-default.js create mode 100644 src/errors/static/js/yui/build/graphics-canvas/graphics-canvas-coverage.js create mode 100644 src/errors/static/js/yui/build/graphics-canvas/graphics-canvas-debug.js create mode 100644 src/errors/static/js/yui/build/graphics-canvas/graphics-canvas-min.js create mode 100644 src/errors/static/js/yui/build/graphics-canvas/graphics-canvas.js create mode 100644 src/errors/static/js/yui/build/graphics-group/graphics-group-coverage.js create mode 100644 src/errors/static/js/yui/build/graphics-group/graphics-group-debug.js create mode 100644 src/errors/static/js/yui/build/graphics-group/graphics-group-min.js create mode 100644 src/errors/static/js/yui/build/graphics-group/graphics-group.js create mode 100644 src/errors/static/js/yui/build/graphics-svg-default/graphics-svg-default-coverage.js create mode 100644 src/errors/static/js/yui/build/graphics-svg-default/graphics-svg-default-debug.js create mode 100644 src/errors/static/js/yui/build/graphics-svg-default/graphics-svg-default-min.js create mode 100644 src/errors/static/js/yui/build/graphics-svg-default/graphics-svg-default.js create mode 100644 src/errors/static/js/yui/build/graphics-svg/graphics-svg-coverage.js create mode 100644 src/errors/static/js/yui/build/graphics-svg/graphics-svg-debug.js create mode 100644 src/errors/static/js/yui/build/graphics-svg/graphics-svg-min.js create mode 100644 src/errors/static/js/yui/build/graphics-svg/graphics-svg.js create mode 100644 src/errors/static/js/yui/build/graphics-vml-default/graphics-vml-default-coverage.js create mode 100644 src/errors/static/js/yui/build/graphics-vml-default/graphics-vml-default-debug.js create mode 100644 src/errors/static/js/yui/build/graphics-vml-default/graphics-vml-default-min.js create mode 100644 src/errors/static/js/yui/build/graphics-vml-default/graphics-vml-default.js create mode 100644 src/errors/static/js/yui/build/graphics-vml/graphics-vml-coverage.js create mode 100644 src/errors/static/js/yui/build/graphics-vml/graphics-vml-debug.js create mode 100644 src/errors/static/js/yui/build/graphics-vml/graphics-vml-min.js create mode 100644 src/errors/static/js/yui/build/graphics-vml/graphics-vml.js create mode 100644 src/errors/static/js/yui/build/graphics/graphics-coverage.js create mode 100644 src/errors/static/js/yui/build/graphics/graphics-debug.js create mode 100644 src/errors/static/js/yui/build/graphics/graphics-min.js create mode 100644 src/errors/static/js/yui/build/graphics/graphics.js create mode 100644 src/errors/static/js/yui/build/handlebars-base/handlebars-base-coverage.js create mode 100644 src/errors/static/js/yui/build/handlebars-base/handlebars-base-debug.js create mode 100644 src/errors/static/js/yui/build/handlebars-base/handlebars-base-min.js create mode 100644 src/errors/static/js/yui/build/handlebars-base/handlebars-base.js create mode 100644 src/errors/static/js/yui/build/handlebars-compiler/handlebars-compiler-coverage.js create mode 100644 src/errors/static/js/yui/build/handlebars-compiler/handlebars-compiler-debug.js create mode 100644 src/errors/static/js/yui/build/handlebars-compiler/handlebars-compiler-min.js create mode 100644 src/errors/static/js/yui/build/handlebars-compiler/handlebars-compiler.js create mode 100644 src/errors/static/js/yui/build/highlight-accentfold/highlight-accentfold-coverage.js create mode 100644 src/errors/static/js/yui/build/highlight-accentfold/highlight-accentfold-debug.js create mode 100644 src/errors/static/js/yui/build/highlight-accentfold/highlight-accentfold-min.js create mode 100644 src/errors/static/js/yui/build/highlight-accentfold/highlight-accentfold.js create mode 100644 src/errors/static/js/yui/build/highlight-base/highlight-base-coverage.js create mode 100644 src/errors/static/js/yui/build/highlight-base/highlight-base-debug.js create mode 100644 src/errors/static/js/yui/build/highlight-base/highlight-base-min.js create mode 100644 src/errors/static/js/yui/build/highlight-base/highlight-base.js create mode 100644 src/errors/static/js/yui/build/history-base/history-base-coverage.js create mode 100644 src/errors/static/js/yui/build/history-base/history-base-debug.js create mode 100644 src/errors/static/js/yui/build/history-base/history-base-min.js create mode 100644 src/errors/static/js/yui/build/history-base/history-base.js create mode 100644 src/errors/static/js/yui/build/history-hash-ie/history-hash-ie-coverage.js create mode 100644 src/errors/static/js/yui/build/history-hash-ie/history-hash-ie-debug.js create mode 100644 src/errors/static/js/yui/build/history-hash-ie/history-hash-ie-min.js create mode 100644 src/errors/static/js/yui/build/history-hash-ie/history-hash-ie.js create mode 100644 src/errors/static/js/yui/build/history-hash/history-hash-coverage.js create mode 100644 src/errors/static/js/yui/build/history-hash/history-hash-debug.js create mode 100644 src/errors/static/js/yui/build/history-hash/history-hash-min.js create mode 100644 src/errors/static/js/yui/build/history-hash/history-hash.js create mode 100644 src/errors/static/js/yui/build/history-html5/history-html5-coverage.js create mode 100644 src/errors/static/js/yui/build/history-html5/history-html5-debug.js create mode 100644 src/errors/static/js/yui/build/history-html5/history-html5-min.js create mode 100644 src/errors/static/js/yui/build/history-html5/history-html5.js create mode 100644 src/errors/static/js/yui/build/imageloader/imageloader-coverage.js create mode 100644 src/errors/static/js/yui/build/imageloader/imageloader-debug.js create mode 100644 src/errors/static/js/yui/build/imageloader/imageloader-min.js create mode 100644 src/errors/static/js/yui/build/imageloader/imageloader.js create mode 100644 src/errors/static/js/yui/build/intl-base/intl-base-coverage.js create mode 100644 src/errors/static/js/yui/build/intl-base/intl-base-debug.js create mode 100644 src/errors/static/js/yui/build/intl-base/intl-base-min.js create mode 100644 src/errors/static/js/yui/build/intl-base/intl-base.js create mode 100644 src/errors/static/js/yui/build/intl/intl-coverage.js create mode 100644 src/errors/static/js/yui/build/intl/intl-debug.js create mode 100644 src/errors/static/js/yui/build/intl/intl-min.js create mode 100644 src/errors/static/js/yui/build/intl/intl.js create mode 100644 src/errors/static/js/yui/build/io-base/io-base-coverage.js create mode 100644 src/errors/static/js/yui/build/io-base/io-base-debug.js create mode 100644 src/errors/static/js/yui/build/io-base/io-base-min.js create mode 100644 src/errors/static/js/yui/build/io-base/io-base.js create mode 100644 src/errors/static/js/yui/build/io-form/io-form-coverage.js create mode 100644 src/errors/static/js/yui/build/io-form/io-form-debug.js create mode 100644 src/errors/static/js/yui/build/io-form/io-form-min.js create mode 100644 src/errors/static/js/yui/build/io-form/io-form.js create mode 100644 src/errors/static/js/yui/build/io-nodejs/io-nodejs-coverage.js create mode 100644 src/errors/static/js/yui/build/io-nodejs/io-nodejs-debug.js create mode 100644 src/errors/static/js/yui/build/io-nodejs/io-nodejs-min.js create mode 100644 src/errors/static/js/yui/build/io-nodejs/io-nodejs.js create mode 100644 src/errors/static/js/yui/build/io-queue/io-queue-coverage.js create mode 100644 src/errors/static/js/yui/build/io-queue/io-queue-debug.js create mode 100644 src/errors/static/js/yui/build/io-queue/io-queue-min.js create mode 100644 src/errors/static/js/yui/build/io-queue/io-queue.js create mode 100644 src/errors/static/js/yui/build/io-upload-iframe/io-upload-iframe-coverage.js create mode 100644 src/errors/static/js/yui/build/io-upload-iframe/io-upload-iframe-debug.js create mode 100644 src/errors/static/js/yui/build/io-upload-iframe/io-upload-iframe-min.js create mode 100644 src/errors/static/js/yui/build/io-upload-iframe/io-upload-iframe.js create mode 100644 src/errors/static/js/yui/build/io-xdr/io-xdr-coverage.js create mode 100644 src/errors/static/js/yui/build/io-xdr/io-xdr-debug.js create mode 100644 src/errors/static/js/yui/build/io-xdr/io-xdr-min.js create mode 100644 src/errors/static/js/yui/build/io-xdr/io-xdr.js create mode 100644 src/errors/static/js/yui/build/io-xdr/io.swf create mode 100644 src/errors/static/js/yui/build/json-parse-shim/json-parse-shim-coverage.js create mode 100644 src/errors/static/js/yui/build/json-parse-shim/json-parse-shim-debug.js create mode 100644 src/errors/static/js/yui/build/json-parse-shim/json-parse-shim-min.js create mode 100644 src/errors/static/js/yui/build/json-parse-shim/json-parse-shim.js create mode 100644 src/errors/static/js/yui/build/json-parse/json-parse-coverage.js create mode 100644 src/errors/static/js/yui/build/json-parse/json-parse-debug.js create mode 100644 src/errors/static/js/yui/build/json-parse/json-parse-min.js create mode 100644 src/errors/static/js/yui/build/json-parse/json-parse.js create mode 100644 src/errors/static/js/yui/build/json-stringify-shim/json-stringify-shim-coverage.js create mode 100644 src/errors/static/js/yui/build/json-stringify-shim/json-stringify-shim-debug.js create mode 100644 src/errors/static/js/yui/build/json-stringify-shim/json-stringify-shim-min.js create mode 100644 src/errors/static/js/yui/build/json-stringify-shim/json-stringify-shim.js create mode 100644 src/errors/static/js/yui/build/json-stringify/json-stringify-coverage.js create mode 100644 src/errors/static/js/yui/build/json-stringify/json-stringify-debug.js create mode 100644 src/errors/static/js/yui/build/json-stringify/json-stringify-min.js create mode 100644 src/errors/static/js/yui/build/json-stringify/json-stringify.js create mode 100644 src/errors/static/js/yui/build/jsonp-url/jsonp-url-coverage.js create mode 100644 src/errors/static/js/yui/build/jsonp-url/jsonp-url-debug.js create mode 100644 src/errors/static/js/yui/build/jsonp-url/jsonp-url-min.js create mode 100644 src/errors/static/js/yui/build/jsonp-url/jsonp-url.js create mode 100644 src/errors/static/js/yui/build/jsonp/jsonp-coverage.js create mode 100644 src/errors/static/js/yui/build/jsonp/jsonp-debug.js create mode 100644 src/errors/static/js/yui/build/jsonp/jsonp-min.js create mode 100644 src/errors/static/js/yui/build/jsonp/jsonp.js create mode 100644 src/errors/static/js/yui/build/lazy-model-list/lazy-model-list-coverage.js create mode 100644 src/errors/static/js/yui/build/lazy-model-list/lazy-model-list-debug.js create mode 100644 src/errors/static/js/yui/build/lazy-model-list/lazy-model-list-min.js create mode 100644 src/errors/static/js/yui/build/lazy-model-list/lazy-model-list.js create mode 100644 src/errors/static/js/yui/build/loader-base/loader-base-coverage.js create mode 100644 src/errors/static/js/yui/build/loader-base/loader-base-debug.js create mode 100644 src/errors/static/js/yui/build/loader-base/loader-base-min.js create mode 100644 src/errors/static/js/yui/build/loader-base/loader-base.js create mode 100644 src/errors/static/js/yui/build/loader-rollup/loader-rollup-coverage.js create mode 100644 src/errors/static/js/yui/build/loader-rollup/loader-rollup-debug.js create mode 100644 src/errors/static/js/yui/build/loader-rollup/loader-rollup-min.js create mode 100644 src/errors/static/js/yui/build/loader-rollup/loader-rollup.js create mode 100644 src/errors/static/js/yui/build/loader-yui3/loader-yui3-coverage.js create mode 100644 src/errors/static/js/yui/build/loader-yui3/loader-yui3-debug.js create mode 100644 src/errors/static/js/yui/build/loader-yui3/loader-yui3-min.js create mode 100644 src/errors/static/js/yui/build/loader-yui3/loader-yui3.js create mode 100644 src/errors/static/js/yui/build/loader/loader-coverage.js create mode 100644 src/errors/static/js/yui/build/loader/loader-debug.js create mode 100644 src/errors/static/js/yui/build/loader/loader-min.js create mode 100644 src/errors/static/js/yui/build/loader/loader.js create mode 100644 src/errors/static/js/yui/build/matrix/matrix-coverage.js create mode 100644 src/errors/static/js/yui/build/matrix/matrix-debug.js create mode 100644 src/errors/static/js/yui/build/matrix/matrix-min.js create mode 100644 src/errors/static/js/yui/build/matrix/matrix.js create mode 100644 src/errors/static/js/yui/build/model-list/model-list-coverage.js create mode 100644 src/errors/static/js/yui/build/model-list/model-list-debug.js create mode 100644 src/errors/static/js/yui/build/model-list/model-list-min.js create mode 100644 src/errors/static/js/yui/build/model-list/model-list.js create mode 100644 src/errors/static/js/yui/build/model-sync-rest/model-sync-rest-coverage.js create mode 100644 src/errors/static/js/yui/build/model-sync-rest/model-sync-rest-debug.js create mode 100644 src/errors/static/js/yui/build/model-sync-rest/model-sync-rest-min.js create mode 100644 src/errors/static/js/yui/build/model-sync-rest/model-sync-rest.js create mode 100644 src/errors/static/js/yui/build/model/model-coverage.js create mode 100644 src/errors/static/js/yui/build/model/model-debug.js create mode 100644 src/errors/static/js/yui/build/model/model-min.js create mode 100644 src/errors/static/js/yui/build/model/model.js create mode 100644 src/errors/static/js/yui/build/node-base/node-base-coverage.js create mode 100644 src/errors/static/js/yui/build/node-base/node-base-debug.js create mode 100644 src/errors/static/js/yui/build/node-base/node-base-min.js create mode 100644 src/errors/static/js/yui/build/node-base/node-base.js create mode 100644 src/errors/static/js/yui/build/node-core/node-core-coverage.js create mode 100644 src/errors/static/js/yui/build/node-core/node-core-debug.js create mode 100644 src/errors/static/js/yui/build/node-core/node-core-min.js create mode 100644 src/errors/static/js/yui/build/node-core/node-core.js create mode 100644 src/errors/static/js/yui/build/node-deprecated/node-deprecated-coverage.js create mode 100644 src/errors/static/js/yui/build/node-deprecated/node-deprecated-debug.js create mode 100644 src/errors/static/js/yui/build/node-deprecated/node-deprecated-min.js create mode 100644 src/errors/static/js/yui/build/node-deprecated/node-deprecated.js create mode 100644 src/errors/static/js/yui/build/node-event-delegate/node-event-delegate-coverage.js create mode 100644 src/errors/static/js/yui/build/node-event-delegate/node-event-delegate-debug.js create mode 100644 src/errors/static/js/yui/build/node-event-delegate/node-event-delegate-min.js create mode 100644 src/errors/static/js/yui/build/node-event-delegate/node-event-delegate.js create mode 100644 src/errors/static/js/yui/build/node-event-html5/node-event-html5-coverage.js create mode 100644 src/errors/static/js/yui/build/node-event-html5/node-event-html5-debug.js create mode 100644 src/errors/static/js/yui/build/node-event-html5/node-event-html5-min.js create mode 100644 src/errors/static/js/yui/build/node-event-html5/node-event-html5.js create mode 100644 src/errors/static/js/yui/build/node-event-simulate/node-event-simulate-coverage.js create mode 100644 src/errors/static/js/yui/build/node-event-simulate/node-event-simulate-debug.js create mode 100644 src/errors/static/js/yui/build/node-event-simulate/node-event-simulate-min.js create mode 100644 src/errors/static/js/yui/build/node-event-simulate/node-event-simulate.js create mode 100644 src/errors/static/js/yui/build/node-flick/assets/node-flick-core.css create mode 100644 src/errors/static/js/yui/build/node-flick/assets/skins/sam/node-flick-skin.css create mode 100644 src/errors/static/js/yui/build/node-flick/assets/skins/sam/node-flick.css create mode 100644 src/errors/static/js/yui/build/node-flick/node-flick-coverage.js create mode 100644 src/errors/static/js/yui/build/node-flick/node-flick-debug.js create mode 100644 src/errors/static/js/yui/build/node-flick/node-flick-min.js create mode 100644 src/errors/static/js/yui/build/node-flick/node-flick.js create mode 100644 src/errors/static/js/yui/build/node-focusmanager/node-focusmanager-coverage.js create mode 100644 src/errors/static/js/yui/build/node-focusmanager/node-focusmanager-debug.js create mode 100644 src/errors/static/js/yui/build/node-focusmanager/node-focusmanager-min.js create mode 100644 src/errors/static/js/yui/build/node-focusmanager/node-focusmanager.js create mode 100644 src/errors/static/js/yui/build/node-load/node-load-coverage.js create mode 100644 src/errors/static/js/yui/build/node-load/node-load-debug.js create mode 100644 src/errors/static/js/yui/build/node-load/node-load-min.js create mode 100644 src/errors/static/js/yui/build/node-load/node-load.js create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/node-menunav-core.css create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/night/horizontal-menu-submenu-indicator.png create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/night/node-menunav-skin.css create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/night/node-menunav.css create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/night/vertical-menu-submenu-indicator.png create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/sam/horizontal-menu-submenu-indicator.png create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/sam/horizontal-menu-submenu-toggle.png create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/sam/node-menunav-skin.css create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/sam/node-menunav.css create mode 100644 src/errors/static/js/yui/build/node-menunav/assets/skins/sam/vertical-menu-submenu-indicator.png create mode 100644 src/errors/static/js/yui/build/node-menunav/node-menunav-coverage.js create mode 100644 src/errors/static/js/yui/build/node-menunav/node-menunav-debug.js create mode 100644 src/errors/static/js/yui/build/node-menunav/node-menunav-min.js create mode 100644 src/errors/static/js/yui/build/node-menunav/node-menunav.js create mode 100644 src/errors/static/js/yui/build/node-pluginhost/node-pluginhost-coverage.js create mode 100644 src/errors/static/js/yui/build/node-pluginhost/node-pluginhost-debug.js create mode 100644 src/errors/static/js/yui/build/node-pluginhost/node-pluginhost-min.js create mode 100644 src/errors/static/js/yui/build/node-pluginhost/node-pluginhost.js create mode 100644 src/errors/static/js/yui/build/node-screen/node-screen-coverage.js create mode 100644 src/errors/static/js/yui/build/node-screen/node-screen-debug.js create mode 100644 src/errors/static/js/yui/build/node-screen/node-screen-min.js create mode 100644 src/errors/static/js/yui/build/node-screen/node-screen.js create mode 100644 src/errors/static/js/yui/build/node-scroll-info/node-scroll-info-coverage.js create mode 100644 src/errors/static/js/yui/build/node-scroll-info/node-scroll-info-debug.js create mode 100644 src/errors/static/js/yui/build/node-scroll-info/node-scroll-info-min.js create mode 100644 src/errors/static/js/yui/build/node-scroll-info/node-scroll-info.js create mode 100644 src/errors/static/js/yui/build/node-style/node-style-coverage.js create mode 100644 src/errors/static/js/yui/build/node-style/node-style-debug.js create mode 100644 src/errors/static/js/yui/build/node-style/node-style-min.js create mode 100644 src/errors/static/js/yui/build/node-style/node-style.js create mode 100644 src/errors/static/js/yui/build/oop/oop-coverage.js create mode 100644 src/errors/static/js/yui/build/oop/oop-debug.js create mode 100644 src/errors/static/js/yui/build/oop/oop-min.js create mode 100644 src/errors/static/js/yui/build/oop/oop.js create mode 100644 src/errors/static/js/yui/build/overlay/assets/overlay-core.css create mode 100644 src/errors/static/js/yui/build/overlay/assets/skins/night/overlay-skin.css create mode 100644 src/errors/static/js/yui/build/overlay/assets/skins/night/overlay.css create mode 100644 src/errors/static/js/yui/build/overlay/assets/skins/sam/overlay-skin.css create mode 100644 src/errors/static/js/yui/build/overlay/assets/skins/sam/overlay.css create mode 100644 src/errors/static/js/yui/build/overlay/overlay-coverage.js create mode 100644 src/errors/static/js/yui/build/overlay/overlay-debug.js create mode 100644 src/errors/static/js/yui/build/overlay/overlay-min.js create mode 100644 src/errors/static/js/yui/build/overlay/overlay.js create mode 100644 src/errors/static/js/yui/build/panel/assets/panel-core.css create mode 100644 src/errors/static/js/yui/build/panel/assets/skins/night/panel-skin.css create mode 100644 src/errors/static/js/yui/build/panel/assets/skins/night/panel.css create mode 100644 src/errors/static/js/yui/build/panel/assets/skins/night/sprite_icons.png create mode 100644 src/errors/static/js/yui/build/panel/assets/skins/sam/panel-skin.css create mode 100644 src/errors/static/js/yui/build/panel/assets/skins/sam/panel.css create mode 100644 src/errors/static/js/yui/build/panel/assets/skins/sam/sprite_icons.png create mode 100644 src/errors/static/js/yui/build/panel/panel-coverage.js create mode 100644 src/errors/static/js/yui/build/panel/panel-debug.js create mode 100644 src/errors/static/js/yui/build/panel/panel-min.js create mode 100644 src/errors/static/js/yui/build/panel/panel.js create mode 100644 src/errors/static/js/yui/build/parallel/parallel-coverage.js create mode 100644 src/errors/static/js/yui/build/parallel/parallel-debug.js create mode 100644 src/errors/static/js/yui/build/parallel/parallel-min.js create mode 100644 src/errors/static/js/yui/build/parallel/parallel.js create mode 100644 src/errors/static/js/yui/build/pjax-base/pjax-base-coverage.js create mode 100644 src/errors/static/js/yui/build/pjax-base/pjax-base-debug.js create mode 100644 src/errors/static/js/yui/build/pjax-base/pjax-base-min.js create mode 100644 src/errors/static/js/yui/build/pjax-base/pjax-base.js create mode 100644 src/errors/static/js/yui/build/pjax-content/pjax-content-coverage.js create mode 100644 src/errors/static/js/yui/build/pjax-content/pjax-content-debug.js create mode 100644 src/errors/static/js/yui/build/pjax-content/pjax-content-min.js create mode 100644 src/errors/static/js/yui/build/pjax-content/pjax-content.js create mode 100644 src/errors/static/js/yui/build/pjax-plugin/pjax-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/pjax-plugin/pjax-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/pjax-plugin/pjax-plugin-min.js create mode 100644 src/errors/static/js/yui/build/pjax-plugin/pjax-plugin.js create mode 100644 src/errors/static/js/yui/build/pjax/pjax-coverage.js create mode 100644 src/errors/static/js/yui/build/pjax/pjax-debug.js create mode 100644 src/errors/static/js/yui/build/pjax/pjax-min.js create mode 100644 src/errors/static/js/yui/build/pjax/pjax.js create mode 100644 src/errors/static/js/yui/build/plugin/plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/plugin/plugin-debug.js create mode 100644 src/errors/static/js/yui/build/plugin/plugin-min.js create mode 100644 src/errors/static/js/yui/build/plugin/plugin.js create mode 100644 src/errors/static/js/yui/build/pluginhost-base/pluginhost-base-coverage.js create mode 100644 src/errors/static/js/yui/build/pluginhost-base/pluginhost-base-debug.js create mode 100644 src/errors/static/js/yui/build/pluginhost-base/pluginhost-base-min.js create mode 100644 src/errors/static/js/yui/build/pluginhost-base/pluginhost-base.js create mode 100644 src/errors/static/js/yui/build/pluginhost-config/pluginhost-config-coverage.js create mode 100644 src/errors/static/js/yui/build/pluginhost-config/pluginhost-config-debug.js create mode 100644 src/errors/static/js/yui/build/pluginhost-config/pluginhost-config-min.js create mode 100644 src/errors/static/js/yui/build/pluginhost-config/pluginhost-config.js create mode 100644 src/errors/static/js/yui/build/profiler/profiler-coverage.js create mode 100644 src/errors/static/js/yui/build/profiler/profiler-debug.js create mode 100644 src/errors/static/js/yui/build/profiler/profiler-min.js create mode 100644 src/errors/static/js/yui/build/profiler/profiler.js create mode 100644 src/errors/static/js/yui/build/promise/promise-coverage.js create mode 100644 src/errors/static/js/yui/build/promise/promise-debug.js create mode 100644 src/errors/static/js/yui/build/promise/promise-min.js create mode 100644 src/errors/static/js/yui/build/promise/promise.js create mode 100644 src/errors/static/js/yui/build/querystring-parse-simple/querystring-parse-simple-coverage.js create mode 100644 src/errors/static/js/yui/build/querystring-parse-simple/querystring-parse-simple-debug.js create mode 100644 src/errors/static/js/yui/build/querystring-parse-simple/querystring-parse-simple-min.js create mode 100644 src/errors/static/js/yui/build/querystring-parse-simple/querystring-parse-simple.js create mode 100644 src/errors/static/js/yui/build/querystring-parse/querystring-parse-coverage.js create mode 100644 src/errors/static/js/yui/build/querystring-parse/querystring-parse-debug.js create mode 100644 src/errors/static/js/yui/build/querystring-parse/querystring-parse-min.js create mode 100644 src/errors/static/js/yui/build/querystring-parse/querystring-parse.js create mode 100644 src/errors/static/js/yui/build/querystring-stringify-simple/querystring-stringify-simple-coverage.js create mode 100644 src/errors/static/js/yui/build/querystring-stringify-simple/querystring-stringify-simple-debug.js create mode 100644 src/errors/static/js/yui/build/querystring-stringify-simple/querystring-stringify-simple-min.js create mode 100644 src/errors/static/js/yui/build/querystring-stringify-simple/querystring-stringify-simple.js create mode 100644 src/errors/static/js/yui/build/querystring-stringify/querystring-stringify-coverage.js create mode 100644 src/errors/static/js/yui/build/querystring-stringify/querystring-stringify-debug.js create mode 100644 src/errors/static/js/yui/build/querystring-stringify/querystring-stringify-min.js create mode 100644 src/errors/static/js/yui/build/querystring-stringify/querystring-stringify.js create mode 100644 src/errors/static/js/yui/build/queue-promote/queue-promote-coverage.js create mode 100644 src/errors/static/js/yui/build/queue-promote/queue-promote-debug.js create mode 100644 src/errors/static/js/yui/build/queue-promote/queue-promote-min.js create mode 100644 src/errors/static/js/yui/build/queue-promote/queue-promote.js create mode 100644 src/errors/static/js/yui/build/range-slider/assets/slider-base-core.css create mode 100644 src/errors/static/js/yui/build/range-slider/assets/slider-core.css create mode 100644 src/errors/static/js/yui/build/range-slider/assets/thumb-x-oblong-dark.png create mode 100644 src/errors/static/js/yui/build/range-slider/assets/thumb-x-oblong.png create mode 100644 src/errors/static/js/yui/build/range-slider/assets/thumb-x-oblong2-dark.png create mode 100644 src/errors/static/js/yui/build/range-slider/assets/thumb-x-oblong2.png create mode 100644 src/errors/static/js/yui/build/range-slider/assets/thumb-y-oblong-dark.png create mode 100644 src/errors/static/js/yui/build/range-slider/assets/thumb-y-oblong.png create mode 100644 src/errors/static/js/yui/build/range-slider/assets/thumb-y-oblong2-dark.png create mode 100644 src/errors/static/js/yui/build/range-slider/assets/thumb-y-oblong2.png create mode 100644 src/errors/static/js/yui/build/range-slider/range-slider-coverage.js create mode 100644 src/errors/static/js/yui/build/range-slider/range-slider-debug.js create mode 100644 src/errors/static/js/yui/build/range-slider/range-slider-min.js create mode 100644 src/errors/static/js/yui/build/range-slider/range-slider.js create mode 100644 src/errors/static/js/yui/build/recordset-base/recordset-base-coverage.js create mode 100644 src/errors/static/js/yui/build/recordset-base/recordset-base-debug.js create mode 100644 src/errors/static/js/yui/build/recordset-base/recordset-base-min.js create mode 100644 src/errors/static/js/yui/build/recordset-base/recordset-base.js create mode 100644 src/errors/static/js/yui/build/recordset-filter/recordset-filter-coverage.js create mode 100644 src/errors/static/js/yui/build/recordset-filter/recordset-filter-debug.js create mode 100644 src/errors/static/js/yui/build/recordset-filter/recordset-filter-min.js create mode 100644 src/errors/static/js/yui/build/recordset-filter/recordset-filter.js create mode 100644 src/errors/static/js/yui/build/recordset-indexer/recordset-indexer-coverage.js create mode 100644 src/errors/static/js/yui/build/recordset-indexer/recordset-indexer-debug.js create mode 100644 src/errors/static/js/yui/build/recordset-indexer/recordset-indexer-min.js create mode 100644 src/errors/static/js/yui/build/recordset-indexer/recordset-indexer.js create mode 100644 src/errors/static/js/yui/build/recordset-sort/recordset-sort-coverage.js create mode 100644 src/errors/static/js/yui/build/recordset-sort/recordset-sort-debug.js create mode 100644 src/errors/static/js/yui/build/recordset-sort/recordset-sort-min.js create mode 100644 src/errors/static/js/yui/build/recordset-sort/recordset-sort.js create mode 100644 src/errors/static/js/yui/build/resize-base/assets/resize-base-core.css create mode 100644 src/errors/static/js/yui/build/resize-base/assets/skins/night/arrows.png create mode 100644 src/errors/static/js/yui/build/resize-base/assets/skins/night/resize-base-skin.css create mode 100644 src/errors/static/js/yui/build/resize-base/assets/skins/night/resize-base.css create mode 100644 src/errors/static/js/yui/build/resize-base/assets/skins/sam/arrows.png create mode 100644 src/errors/static/js/yui/build/resize-base/assets/skins/sam/resize-base-skin.css create mode 100644 src/errors/static/js/yui/build/resize-base/assets/skins/sam/resize-base.css create mode 100644 src/errors/static/js/yui/build/resize-base/resize-base-coverage.js create mode 100644 src/errors/static/js/yui/build/resize-base/resize-base-debug.js create mode 100644 src/errors/static/js/yui/build/resize-base/resize-base-min.js create mode 100644 src/errors/static/js/yui/build/resize-base/resize-base.js create mode 100644 src/errors/static/js/yui/build/resize-constrain/assets/resize-base-core.css create mode 100644 src/errors/static/js/yui/build/resize-constrain/assets/skins/night/arrows.png create mode 100644 src/errors/static/js/yui/build/resize-constrain/assets/skins/night/resize-base-skin.css create mode 100644 src/errors/static/js/yui/build/resize-constrain/assets/skins/sam/arrows.png create mode 100644 src/errors/static/js/yui/build/resize-constrain/assets/skins/sam/resize-base-skin.css create mode 100644 src/errors/static/js/yui/build/resize-constrain/resize-constrain-coverage.js create mode 100644 src/errors/static/js/yui/build/resize-constrain/resize-constrain-debug.js create mode 100644 src/errors/static/js/yui/build/resize-constrain/resize-constrain-min.js create mode 100644 src/errors/static/js/yui/build/resize-constrain/resize-constrain.js create mode 100644 src/errors/static/js/yui/build/resize-plugin/assets/resize-base-core.css create mode 100644 src/errors/static/js/yui/build/resize-plugin/assets/skins/night/arrows.png create mode 100644 src/errors/static/js/yui/build/resize-plugin/assets/skins/night/resize-base-skin.css create mode 100644 src/errors/static/js/yui/build/resize-plugin/assets/skins/sam/arrows.png create mode 100644 src/errors/static/js/yui/build/resize-plugin/assets/skins/sam/resize-base-skin.css create mode 100644 src/errors/static/js/yui/build/resize-plugin/resize-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/resize-plugin/resize-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/resize-plugin/resize-plugin-min.js create mode 100644 src/errors/static/js/yui/build/resize-plugin/resize-plugin.js create mode 100644 src/errors/static/js/yui/build/resize-proxy/assets/resize-base-core.css create mode 100644 src/errors/static/js/yui/build/resize-proxy/assets/skins/night/arrows.png create mode 100644 src/errors/static/js/yui/build/resize-proxy/assets/skins/night/resize-base-skin.css create mode 100644 src/errors/static/js/yui/build/resize-proxy/assets/skins/sam/arrows.png create mode 100644 src/errors/static/js/yui/build/resize-proxy/assets/skins/sam/resize-base-skin.css create mode 100644 src/errors/static/js/yui/build/resize-proxy/resize-proxy-coverage.js create mode 100644 src/errors/static/js/yui/build/resize-proxy/resize-proxy-debug.js create mode 100644 src/errors/static/js/yui/build/resize-proxy/resize-proxy-min.js create mode 100644 src/errors/static/js/yui/build/resize-proxy/resize-proxy.js create mode 100644 src/errors/static/js/yui/build/router/router-coverage.js create mode 100644 src/errors/static/js/yui/build/router/router-debug.js create mode 100644 src/errors/static/js/yui/build/router/router-min.js create mode 100644 src/errors/static/js/yui/build/router/router.js create mode 100644 src/errors/static/js/yui/build/scrollview-base-ie/scrollview-base-ie-coverage.js create mode 100644 src/errors/static/js/yui/build/scrollview-base-ie/scrollview-base-ie-debug.js create mode 100644 src/errors/static/js/yui/build/scrollview-base-ie/scrollview-base-ie-min.js create mode 100644 src/errors/static/js/yui/build/scrollview-base-ie/scrollview-base-ie.js create mode 100644 src/errors/static/js/yui/build/scrollview-base/assets/scrollview-base-core.css create mode 100644 src/errors/static/js/yui/build/scrollview-base/assets/skins/night/scrollview-base-skin.css create mode 100644 src/errors/static/js/yui/build/scrollview-base/assets/skins/night/scrollview-base.css create mode 100644 src/errors/static/js/yui/build/scrollview-base/assets/skins/sam/scrollview-base-skin.css create mode 100644 src/errors/static/js/yui/build/scrollview-base/assets/skins/sam/scrollview-base.css create mode 100644 src/errors/static/js/yui/build/scrollview-base/scrollview-base-coverage.js create mode 100644 src/errors/static/js/yui/build/scrollview-base/scrollview-base-debug.js create mode 100644 src/errors/static/js/yui/build/scrollview-base/scrollview-base-min.js create mode 100644 src/errors/static/js/yui/build/scrollview-base/scrollview-base.js create mode 100644 src/errors/static/js/yui/build/scrollview-list/assets/scrollview-list-core.css create mode 100644 src/errors/static/js/yui/build/scrollview-list/assets/skins/night/scrollview-list-skin.css create mode 100644 src/errors/static/js/yui/build/scrollview-list/assets/skins/night/scrollview-list.css create mode 100644 src/errors/static/js/yui/build/scrollview-list/assets/skins/sam/scrollview-list-skin.css create mode 100644 src/errors/static/js/yui/build/scrollview-list/assets/skins/sam/scrollview-list.css create mode 100644 src/errors/static/js/yui/build/scrollview-list/scrollview-list-coverage.js create mode 100644 src/errors/static/js/yui/build/scrollview-list/scrollview-list-debug.js create mode 100644 src/errors/static/js/yui/build/scrollview-list/scrollview-list-min.js create mode 100644 src/errors/static/js/yui/build/scrollview-list/scrollview-list.js create mode 100644 src/errors/static/js/yui/build/scrollview-paginator/scrollview-paginator-coverage.js create mode 100644 src/errors/static/js/yui/build/scrollview-paginator/scrollview-paginator-debug.js create mode 100644 src/errors/static/js/yui/build/scrollview-paginator/scrollview-paginator-min.js create mode 100644 src/errors/static/js/yui/build/scrollview-paginator/scrollview-paginator.js create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/assets/scrollview-scrollbars-core.css create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/assets/skins/night/scrollview-scrollbars-skin.css create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/assets/skins/night/scrollview-scrollbars.css create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/assets/skins/sam/scrollview-scrollbars-skin.css create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/assets/skins/sam/scrollview-scrollbars.css create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/scrollview-scrollbars-coverage.js create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/scrollview-scrollbars-debug.js create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/scrollview-scrollbars-min.js create mode 100644 src/errors/static/js/yui/build/scrollview-scrollbars/scrollview-scrollbars.js create mode 100644 src/errors/static/js/yui/build/scrollview/scrollview-coverage.js create mode 100644 src/errors/static/js/yui/build/scrollview/scrollview-debug.js create mode 100644 src/errors/static/js/yui/build/scrollview/scrollview-min.js create mode 100644 src/errors/static/js/yui/build/scrollview/scrollview.js create mode 100644 src/errors/static/js/yui/build/selector-css2/selector-css2-coverage.js create mode 100644 src/errors/static/js/yui/build/selector-css2/selector-css2-debug.js create mode 100644 src/errors/static/js/yui/build/selector-css2/selector-css2-min.js create mode 100644 src/errors/static/js/yui/build/selector-css2/selector-css2.js create mode 100644 src/errors/static/js/yui/build/selector-css3/selector-css3-coverage.js create mode 100644 src/errors/static/js/yui/build/selector-css3/selector-css3-debug.js create mode 100644 src/errors/static/js/yui/build/selector-css3/selector-css3-min.js create mode 100644 src/errors/static/js/yui/build/selector-css3/selector-css3.js create mode 100644 src/errors/static/js/yui/build/selector-native/selector-native-coverage.js create mode 100644 src/errors/static/js/yui/build/selector-native/selector-native-debug.js create mode 100644 src/errors/static/js/yui/build/selector-native/selector-native-min.js create mode 100644 src/errors/static/js/yui/build/selector-native/selector-native.js create mode 100644 src/errors/static/js/yui/build/selector/selector-coverage.js create mode 100644 src/errors/static/js/yui/build/selector/selector-debug.js create mode 100644 src/errors/static/js/yui/build/selector/selector-min.js create mode 100644 src/errors/static/js/yui/build/selector/selector.js create mode 100644 src/errors/static/js/yui/build/series-area-stacked/series-area-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-area-stacked/series-area-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-area-stacked/series-area-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-area-stacked/series-area-stacked.js create mode 100644 src/errors/static/js/yui/build/series-area/series-area-coverage.js create mode 100644 src/errors/static/js/yui/build/series-area/series-area-debug.js create mode 100644 src/errors/static/js/yui/build/series-area/series-area-min.js create mode 100644 src/errors/static/js/yui/build/series-area/series-area.js create mode 100644 src/errors/static/js/yui/build/series-areaspline-stacked/series-areaspline-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-areaspline-stacked/series-areaspline-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-areaspline-stacked/series-areaspline-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-areaspline-stacked/series-areaspline-stacked.js create mode 100644 src/errors/static/js/yui/build/series-areaspline/series-areaspline-coverage.js create mode 100644 src/errors/static/js/yui/build/series-areaspline/series-areaspline-debug.js create mode 100644 src/errors/static/js/yui/build/series-areaspline/series-areaspline-min.js create mode 100644 src/errors/static/js/yui/build/series-areaspline/series-areaspline.js create mode 100644 src/errors/static/js/yui/build/series-bar-stacked/series-bar-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-bar-stacked/series-bar-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-bar-stacked/series-bar-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-bar-stacked/series-bar-stacked.js create mode 100644 src/errors/static/js/yui/build/series-bar/series-bar-coverage.js create mode 100644 src/errors/static/js/yui/build/series-bar/series-bar-debug.js create mode 100644 src/errors/static/js/yui/build/series-bar/series-bar-min.js create mode 100644 src/errors/static/js/yui/build/series-bar/series-bar.js create mode 100644 src/errors/static/js/yui/build/series-base/series-base-coverage.js create mode 100644 src/errors/static/js/yui/build/series-base/series-base-debug.js create mode 100644 src/errors/static/js/yui/build/series-base/series-base-min.js create mode 100644 src/errors/static/js/yui/build/series-base/series-base.js create mode 100644 src/errors/static/js/yui/build/series-candlestick/series-candlestick-coverage.js create mode 100644 src/errors/static/js/yui/build/series-candlestick/series-candlestick-debug.js create mode 100644 src/errors/static/js/yui/build/series-candlestick/series-candlestick-min.js create mode 100644 src/errors/static/js/yui/build/series-candlestick/series-candlestick.js create mode 100644 src/errors/static/js/yui/build/series-cartesian/series-cartesian-coverage.js create mode 100644 src/errors/static/js/yui/build/series-cartesian/series-cartesian-debug.js create mode 100644 src/errors/static/js/yui/build/series-cartesian/series-cartesian-min.js create mode 100644 src/errors/static/js/yui/build/series-cartesian/series-cartesian.js create mode 100644 src/errors/static/js/yui/build/series-column-stacked/series-column-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-column-stacked/series-column-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-column-stacked/series-column-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-column-stacked/series-column-stacked.js create mode 100644 src/errors/static/js/yui/build/series-column/series-column-coverage.js create mode 100644 src/errors/static/js/yui/build/series-column/series-column-debug.js create mode 100644 src/errors/static/js/yui/build/series-column/series-column-min.js create mode 100644 src/errors/static/js/yui/build/series-column/series-column.js create mode 100644 src/errors/static/js/yui/build/series-combo-stacked/series-combo-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-combo-stacked/series-combo-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-combo-stacked/series-combo-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-combo-stacked/series-combo-stacked.js create mode 100644 src/errors/static/js/yui/build/series-combo/series-combo-coverage.js create mode 100644 src/errors/static/js/yui/build/series-combo/series-combo-debug.js create mode 100644 src/errors/static/js/yui/build/series-combo/series-combo-min.js create mode 100644 src/errors/static/js/yui/build/series-combo/series-combo.js create mode 100644 src/errors/static/js/yui/build/series-combospline-stacked/series-combospline-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-combospline-stacked/series-combospline-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-combospline-stacked/series-combospline-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-combospline-stacked/series-combospline-stacked.js create mode 100644 src/errors/static/js/yui/build/series-combospline/series-combospline-coverage.js create mode 100644 src/errors/static/js/yui/build/series-combospline/series-combospline-debug.js create mode 100644 src/errors/static/js/yui/build/series-combospline/series-combospline-min.js create mode 100644 src/errors/static/js/yui/build/series-combospline/series-combospline.js create mode 100644 src/errors/static/js/yui/build/series-curve-util/series-curve-util-coverage.js create mode 100644 src/errors/static/js/yui/build/series-curve-util/series-curve-util-debug.js create mode 100644 src/errors/static/js/yui/build/series-curve-util/series-curve-util-min.js create mode 100644 src/errors/static/js/yui/build/series-curve-util/series-curve-util.js create mode 100644 src/errors/static/js/yui/build/series-fill-util/series-fill-util-coverage.js create mode 100644 src/errors/static/js/yui/build/series-fill-util/series-fill-util-debug.js create mode 100644 src/errors/static/js/yui/build/series-fill-util/series-fill-util-min.js create mode 100644 src/errors/static/js/yui/build/series-fill-util/series-fill-util.js create mode 100644 src/errors/static/js/yui/build/series-histogram-base/series-histogram-base-coverage.js create mode 100644 src/errors/static/js/yui/build/series-histogram-base/series-histogram-base-debug.js create mode 100644 src/errors/static/js/yui/build/series-histogram-base/series-histogram-base-min.js create mode 100644 src/errors/static/js/yui/build/series-histogram-base/series-histogram-base.js create mode 100644 src/errors/static/js/yui/build/series-line-stacked/series-line-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-line-stacked/series-line-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-line-stacked/series-line-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-line-stacked/series-line-stacked.js create mode 100644 src/errors/static/js/yui/build/series-line-util/series-line-util-coverage.js create mode 100644 src/errors/static/js/yui/build/series-line-util/series-line-util-debug.js create mode 100644 src/errors/static/js/yui/build/series-line-util/series-line-util-min.js create mode 100644 src/errors/static/js/yui/build/series-line-util/series-line-util.js create mode 100644 src/errors/static/js/yui/build/series-line/series-line-coverage.js create mode 100644 src/errors/static/js/yui/build/series-line/series-line-debug.js create mode 100644 src/errors/static/js/yui/build/series-line/series-line-min.js create mode 100644 src/errors/static/js/yui/build/series-line/series-line.js create mode 100644 src/errors/static/js/yui/build/series-marker-stacked/series-marker-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-marker-stacked/series-marker-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-marker-stacked/series-marker-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-marker-stacked/series-marker-stacked.js create mode 100644 src/errors/static/js/yui/build/series-marker/series-marker-coverage.js create mode 100644 src/errors/static/js/yui/build/series-marker/series-marker-debug.js create mode 100644 src/errors/static/js/yui/build/series-marker/series-marker-min.js create mode 100644 src/errors/static/js/yui/build/series-marker/series-marker.js create mode 100644 src/errors/static/js/yui/build/series-ohlc/series-ohlc-coverage.js create mode 100644 src/errors/static/js/yui/build/series-ohlc/series-ohlc-debug.js create mode 100644 src/errors/static/js/yui/build/series-ohlc/series-ohlc-min.js create mode 100644 src/errors/static/js/yui/build/series-ohlc/series-ohlc.js create mode 100644 src/errors/static/js/yui/build/series-pie/series-pie-coverage.js create mode 100644 src/errors/static/js/yui/build/series-pie/series-pie-debug.js create mode 100644 src/errors/static/js/yui/build/series-pie/series-pie-min.js create mode 100644 src/errors/static/js/yui/build/series-pie/series-pie.js create mode 100644 src/errors/static/js/yui/build/series-plot-util/series-plot-util-coverage.js create mode 100644 src/errors/static/js/yui/build/series-plot-util/series-plot-util-debug.js create mode 100644 src/errors/static/js/yui/build/series-plot-util/series-plot-util-min.js create mode 100644 src/errors/static/js/yui/build/series-plot-util/series-plot-util.js create mode 100644 src/errors/static/js/yui/build/series-range/series-range-coverage.js create mode 100644 src/errors/static/js/yui/build/series-range/series-range-debug.js create mode 100644 src/errors/static/js/yui/build/series-range/series-range-min.js create mode 100644 src/errors/static/js/yui/build/series-range/series-range.js create mode 100644 src/errors/static/js/yui/build/series-spline-stacked/series-spline-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-spline-stacked/series-spline-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-spline-stacked/series-spline-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-spline-stacked/series-spline-stacked.js create mode 100644 src/errors/static/js/yui/build/series-spline/series-spline-coverage.js create mode 100644 src/errors/static/js/yui/build/series-spline/series-spline-debug.js create mode 100644 src/errors/static/js/yui/build/series-spline/series-spline-min.js create mode 100644 src/errors/static/js/yui/build/series-spline/series-spline.js create mode 100644 src/errors/static/js/yui/build/series-stacked/series-stacked-coverage.js create mode 100644 src/errors/static/js/yui/build/series-stacked/series-stacked-debug.js create mode 100644 src/errors/static/js/yui/build/series-stacked/series-stacked-min.js create mode 100644 src/errors/static/js/yui/build/series-stacked/series-stacked.js create mode 100644 src/errors/static/js/yui/build/shim-plugin/shim-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/shim-plugin/shim-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/shim-plugin/shim-plugin-min.js create mode 100644 src/errors/static/js/yui/build/shim-plugin/shim-plugin.js create mode 100644 src/errors/static/js/yui/build/simpleyui/simpleyui-debug.js create mode 100644 src/errors/static/js/yui/build/simpleyui/simpleyui-min.js create mode 100644 src/errors/static/js/yui/build/simpleyui/simpleyui.js create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio-light/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio-light/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio-light/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio-light/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio-light/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio-light/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio-light/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/audio/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/rail-x-dots.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/rail-x-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/rail-y-dots.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/rail-y-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/thumb-x-line.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/thumb-y-line.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule-dark/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/rail-x-dots.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/rail-x-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/rail-y-dots.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/rail-y-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/thumb-x-line.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/thumb-y-line.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/thumb-y-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/capsule/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/rail-x-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/rail-y-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/night/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/thumb-x-grip.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/thumb-y-grip.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round-dark/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/thumb-x-grip.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/thumb-y-grip.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/round/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/rail-x-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/rail-y-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam-dark/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/rail-x-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/rail-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/rail-y-lines.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/rail-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/slider-base-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/slider-base.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/slider-skin.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/thumb-x.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/skins/sam/thumb-y.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/slider-base-core.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/slider-core.css create mode 100644 src/errors/static/js/yui/build/slider-base/assets/thumb-x-oblong-dark.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/thumb-x-oblong.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/thumb-x-oblong2-dark.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/thumb-x-oblong2.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/thumb-y-oblong-dark.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/thumb-y-oblong.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/thumb-y-oblong2-dark.png create mode 100644 src/errors/static/js/yui/build/slider-base/assets/thumb-y-oblong2.png create mode 100644 src/errors/static/js/yui/build/slider-base/slider-base-coverage.js create mode 100644 src/errors/static/js/yui/build/slider-base/slider-base-debug.js create mode 100644 src/errors/static/js/yui/build/slider-base/slider-base-min.js create mode 100644 src/errors/static/js/yui/build/slider-base/slider-base.js create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/slider-base-core.css create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/slider-core.css create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/thumb-x-oblong-dark.png create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/thumb-x-oblong.png create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/thumb-x-oblong2-dark.png create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/thumb-x-oblong2.png create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/thumb-y-oblong-dark.png create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/thumb-y-oblong.png create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/thumb-y-oblong2-dark.png create mode 100644 src/errors/static/js/yui/build/slider-value-range/assets/thumb-y-oblong2.png create mode 100644 src/errors/static/js/yui/build/slider-value-range/slider-value-range-coverage.js create mode 100644 src/errors/static/js/yui/build/slider-value-range/slider-value-range-debug.js create mode 100644 src/errors/static/js/yui/build/slider-value-range/slider-value-range-min.js create mode 100644 src/errors/static/js/yui/build/slider-value-range/slider-value-range.js create mode 100644 src/errors/static/js/yui/build/sortable-scroll/sortable-scroll-coverage.js create mode 100644 src/errors/static/js/yui/build/sortable-scroll/sortable-scroll-debug.js create mode 100644 src/errors/static/js/yui/build/sortable-scroll/sortable-scroll-min.js create mode 100644 src/errors/static/js/yui/build/sortable-scroll/sortable-scroll.js create mode 100644 src/errors/static/js/yui/build/sortable/sortable-coverage.js create mode 100644 src/errors/static/js/yui/build/sortable/sortable-debug.js create mode 100644 src/errors/static/js/yui/build/sortable/sortable-min.js create mode 100644 src/errors/static/js/yui/build/sortable/sortable.js create mode 100644 src/errors/static/js/yui/build/stylesheet/stylesheet-coverage.js create mode 100644 src/errors/static/js/yui/build/stylesheet/stylesheet-debug.js create mode 100644 src/errors/static/js/yui/build/stylesheet/stylesheet-min.js create mode 100644 src/errors/static/js/yui/build/stylesheet/stylesheet.js create mode 100644 src/errors/static/js/yui/build/substitute/substitute-coverage.js create mode 100644 src/errors/static/js/yui/build/substitute/substitute-debug.js create mode 100644 src/errors/static/js/yui/build/substitute/substitute-min.js create mode 100644 src/errors/static/js/yui/build/substitute/substitute.js create mode 100644 src/errors/static/js/yui/build/swf/swf-coverage.js create mode 100644 src/errors/static/js/yui/build/swf/swf-debug.js create mode 100644 src/errors/static/js/yui/build/swf/swf-min.js create mode 100644 src/errors/static/js/yui/build/swf/swf.js create mode 100644 src/errors/static/js/yui/build/swfdetect/swfdetect-coverage.js create mode 100644 src/errors/static/js/yui/build/swfdetect/swfdetect-debug.js create mode 100644 src/errors/static/js/yui/build/swfdetect/swfdetect-min.js create mode 100644 src/errors/static/js/yui/build/swfdetect/swfdetect.js create mode 100644 src/errors/static/js/yui/build/tabview-base/assets/tabview-core.css create mode 100644 src/errors/static/js/yui/build/tabview-base/assets/tabview.css create mode 100644 src/errors/static/js/yui/build/tabview-base/tabview-base-coverage.js create mode 100644 src/errors/static/js/yui/build/tabview-base/tabview-base-debug.js create mode 100644 src/errors/static/js/yui/build/tabview-base/tabview-base-min.js create mode 100644 src/errors/static/js/yui/build/tabview-base/tabview-base.js create mode 100644 src/errors/static/js/yui/build/tabview-plugin/assets/tabview-core.css create mode 100644 src/errors/static/js/yui/build/tabview-plugin/assets/tabview.css create mode 100644 src/errors/static/js/yui/build/tabview-plugin/tabview-plugin-coverage.js create mode 100644 src/errors/static/js/yui/build/tabview-plugin/tabview-plugin-debug.js create mode 100644 src/errors/static/js/yui/build/tabview-plugin/tabview-plugin-min.js create mode 100644 src/errors/static/js/yui/build/tabview-plugin/tabview-plugin.js create mode 100644 src/errors/static/js/yui/build/tabview/assets/skins/night/tabview-skin.css create mode 100644 src/errors/static/js/yui/build/tabview/assets/skins/night/tabview.css create mode 100644 src/errors/static/js/yui/build/tabview/assets/skins/sam/tabview-skin.css create mode 100644 src/errors/static/js/yui/build/tabview/assets/skins/sam/tabview.css create mode 100644 src/errors/static/js/yui/build/tabview/assets/tabview-core.css create mode 100644 src/errors/static/js/yui/build/tabview/assets/tabview.css create mode 100644 src/errors/static/js/yui/build/tabview/tabview-coverage.js create mode 100644 src/errors/static/js/yui/build/tabview/tabview-debug.js create mode 100644 src/errors/static/js/yui/build/tabview/tabview-min.js create mode 100644 src/errors/static/js/yui/build/tabview/tabview.js create mode 100644 src/errors/static/js/yui/build/template-base/template-base-coverage.js create mode 100644 src/errors/static/js/yui/build/template-base/template-base-debug.js create mode 100644 src/errors/static/js/yui/build/template-base/template-base-min.js create mode 100644 src/errors/static/js/yui/build/template-base/template-base.js create mode 100644 src/errors/static/js/yui/build/template-micro/template-micro-coverage.js create mode 100644 src/errors/static/js/yui/build/template-micro/template-micro-debug.js create mode 100644 src/errors/static/js/yui/build/template-micro/template-micro-min.js create mode 100644 src/errors/static/js/yui/build/template-micro/template-micro.js create mode 100644 src/errors/static/js/yui/build/test-console/assets/skins/sam/test-console-skin.css create mode 100644 src/errors/static/js/yui/build/test-console/assets/skins/sam/test-console.css create mode 100644 src/errors/static/js/yui/build/test-console/assets/test-console-core.css create mode 100644 src/errors/static/js/yui/build/test-console/test-console-coverage.js create mode 100644 src/errors/static/js/yui/build/test-console/test-console-debug.js create mode 100644 src/errors/static/js/yui/build/test-console/test-console-min.js create mode 100644 src/errors/static/js/yui/build/test-console/test-console.js create mode 100644 src/errors/static/js/yui/build/test/test-coverage.js create mode 100644 src/errors/static/js/yui/build/test/test-debug.js create mode 100644 src/errors/static/js/yui/build/test/test-min.js create mode 100644 src/errors/static/js/yui/build/test/test.js create mode 100644 src/errors/static/js/yui/build/text-accentfold/text-accentfold-coverage.js create mode 100644 src/errors/static/js/yui/build/text-accentfold/text-accentfold-debug.js create mode 100644 src/errors/static/js/yui/build/text-accentfold/text-accentfold-min.js create mode 100644 src/errors/static/js/yui/build/text-accentfold/text-accentfold.js create mode 100644 src/errors/static/js/yui/build/text-data-accentfold/text-data-accentfold-coverage.js create mode 100644 src/errors/static/js/yui/build/text-data-accentfold/text-data-accentfold-debug.js create mode 100644 src/errors/static/js/yui/build/text-data-accentfold/text-data-accentfold-min.js create mode 100644 src/errors/static/js/yui/build/text-data-accentfold/text-data-accentfold.js create mode 100644 src/errors/static/js/yui/build/text-data-wordbreak/text-data-wordbreak-coverage.js create mode 100644 src/errors/static/js/yui/build/text-data-wordbreak/text-data-wordbreak-debug.js create mode 100644 src/errors/static/js/yui/build/text-data-wordbreak/text-data-wordbreak-min.js create mode 100644 src/errors/static/js/yui/build/text-data-wordbreak/text-data-wordbreak.js create mode 100644 src/errors/static/js/yui/build/text-wordbreak/text-wordbreak-coverage.js create mode 100644 src/errors/static/js/yui/build/text-wordbreak/text-wordbreak-debug.js create mode 100644 src/errors/static/js/yui/build/text-wordbreak/text-wordbreak-min.js create mode 100644 src/errors/static/js/yui/build/text-wordbreak/text-wordbreak.js create mode 100644 src/errors/static/js/yui/build/timers/timers-coverage.js create mode 100644 src/errors/static/js/yui/build/timers/timers-debug.js create mode 100644 src/errors/static/js/yui/build/timers/timers-min.js create mode 100644 src/errors/static/js/yui/build/timers/timers.js create mode 100644 src/errors/static/js/yui/build/transition-timer/transition-timer-coverage.js create mode 100644 src/errors/static/js/yui/build/transition-timer/transition-timer-debug.js create mode 100644 src/errors/static/js/yui/build/transition-timer/transition-timer-min.js create mode 100644 src/errors/static/js/yui/build/transition-timer/transition-timer.js create mode 100644 src/errors/static/js/yui/build/transition/transition-coverage.js create mode 100644 src/errors/static/js/yui/build/transition/transition-debug.js create mode 100644 src/errors/static/js/yui/build/transition/transition-min.js create mode 100644 src/errors/static/js/yui/build/transition/transition.js create mode 100644 src/errors/static/js/yui/build/tree-labelable/tree-labelable-coverage.js create mode 100644 src/errors/static/js/yui/build/tree-labelable/tree-labelable-debug.js create mode 100644 src/errors/static/js/yui/build/tree-labelable/tree-labelable-min.js create mode 100644 src/errors/static/js/yui/build/tree-labelable/tree-labelable.js create mode 100644 src/errors/static/js/yui/build/tree-lazy/tree-lazy-coverage.js create mode 100644 src/errors/static/js/yui/build/tree-lazy/tree-lazy-debug.js create mode 100644 src/errors/static/js/yui/build/tree-lazy/tree-lazy-min.js create mode 100644 src/errors/static/js/yui/build/tree-lazy/tree-lazy.js create mode 100644 src/errors/static/js/yui/build/tree-node/tree-node-coverage.js create mode 100644 src/errors/static/js/yui/build/tree-node/tree-node-debug.js create mode 100644 src/errors/static/js/yui/build/tree-node/tree-node-min.js create mode 100644 src/errors/static/js/yui/build/tree-node/tree-node.js create mode 100644 src/errors/static/js/yui/build/tree-openable/tree-openable-coverage.js create mode 100644 src/errors/static/js/yui/build/tree-openable/tree-openable-debug.js create mode 100644 src/errors/static/js/yui/build/tree-openable/tree-openable-min.js create mode 100644 src/errors/static/js/yui/build/tree-openable/tree-openable.js create mode 100644 src/errors/static/js/yui/build/tree-selectable/tree-selectable-coverage.js create mode 100644 src/errors/static/js/yui/build/tree-selectable/tree-selectable-debug.js create mode 100644 src/errors/static/js/yui/build/tree-selectable/tree-selectable-min.js create mode 100644 src/errors/static/js/yui/build/tree-selectable/tree-selectable.js create mode 100644 src/errors/static/js/yui/build/tree/tree-coverage.js create mode 100644 src/errors/static/js/yui/build/tree/tree-debug.js create mode 100644 src/errors/static/js/yui/build/tree/tree-min.js create mode 100644 src/errors/static/js/yui/build/tree/tree.js create mode 100644 src/errors/static/js/yui/build/uploader-deprecated/assets/uploader.swf create mode 100644 src/errors/static/js/yui/build/uploader-deprecated/uploader-deprecated-coverage.js create mode 100644 src/errors/static/js/yui/build/uploader-deprecated/uploader-deprecated-debug.js create mode 100644 src/errors/static/js/yui/build/uploader-deprecated/uploader-deprecated-min.js create mode 100644 src/errors/static/js/yui/build/uploader-deprecated/uploader-deprecated.js create mode 100644 src/errors/static/js/yui/build/uploader-flash/assets/uploader-flash-core.css create mode 100644 src/errors/static/js/yui/build/uploader-flash/uploader-flash-coverage.js create mode 100644 src/errors/static/js/yui/build/uploader-flash/uploader-flash-debug.js create mode 100644 src/errors/static/js/yui/build/uploader-flash/uploader-flash-min.js create mode 100644 src/errors/static/js/yui/build/uploader-flash/uploader-flash.js create mode 100644 src/errors/static/js/yui/build/uploader-html5/assets/uploader-flash-core.css create mode 100644 src/errors/static/js/yui/build/uploader-html5/uploader-html5-coverage.js create mode 100644 src/errors/static/js/yui/build/uploader-html5/uploader-html5-debug.js create mode 100644 src/errors/static/js/yui/build/uploader-html5/uploader-html5-min.js create mode 100644 src/errors/static/js/yui/build/uploader-html5/uploader-html5.js create mode 100644 src/errors/static/js/yui/build/uploader-queue/assets/uploader-flash-core.css create mode 100644 src/errors/static/js/yui/build/uploader-queue/uploader-queue-coverage.js create mode 100644 src/errors/static/js/yui/build/uploader-queue/uploader-queue-debug.js create mode 100644 src/errors/static/js/yui/build/uploader-queue/uploader-queue-min.js create mode 100644 src/errors/static/js/yui/build/uploader-queue/uploader-queue.js create mode 100644 src/errors/static/js/yui/build/uploader/assets/flashuploader.swf create mode 100644 src/errors/static/js/yui/build/uploader/assets/uploader-flash-core.css create mode 100644 src/errors/static/js/yui/build/uploader/uploader-coverage.js create mode 100644 src/errors/static/js/yui/build/uploader/uploader-debug.js create mode 100644 src/errors/static/js/yui/build/uploader/uploader-min.js create mode 100644 src/errors/static/js/yui/build/uploader/uploader.js create mode 100644 src/errors/static/js/yui/build/view-node-map/view-node-map-coverage.js create mode 100644 src/errors/static/js/yui/build/view-node-map/view-node-map-debug.js create mode 100644 src/errors/static/js/yui/build/view-node-map/view-node-map-min.js create mode 100644 src/errors/static/js/yui/build/view-node-map/view-node-map.js create mode 100644 src/errors/static/js/yui/build/view/view-coverage.js create mode 100644 src/errors/static/js/yui/build/view/view-debug.js create mode 100644 src/errors/static/js/yui/build/view/view-min.js create mode 100644 src/errors/static/js/yui/build/view/view.js create mode 100644 src/errors/static/js/yui/build/widget-anim/widget-anim-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-anim/widget-anim-debug.js create mode 100644 src/errors/static/js/yui/build/widget-anim/widget-anim-min.js create mode 100644 src/errors/static/js/yui/build/widget-anim/widget-anim.js create mode 100644 src/errors/static/js/yui/build/widget-autohide/widget-autohide-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-autohide/widget-autohide-debug.js create mode 100644 src/errors/static/js/yui/build/widget-autohide/widget-autohide-min.js create mode 100644 src/errors/static/js/yui/build/widget-autohide/widget-autohide.js create mode 100644 src/errors/static/js/yui/build/widget-base-ie/assets/widget-base-core.css create mode 100644 src/errors/static/js/yui/build/widget-base-ie/widget-base-ie-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-base-ie/widget-base-ie-debug.js create mode 100644 src/errors/static/js/yui/build/widget-base-ie/widget-base-ie-min.js create mode 100644 src/errors/static/js/yui/build/widget-base-ie/widget-base-ie.js create mode 100644 src/errors/static/js/yui/build/widget-base/assets/skins/night/widget-base-skin.css create mode 100644 src/errors/static/js/yui/build/widget-base/assets/skins/night/widget-base.css create mode 100644 src/errors/static/js/yui/build/widget-base/assets/skins/sam/widget-base-skin.css create mode 100644 src/errors/static/js/yui/build/widget-base/assets/skins/sam/widget-base.css create mode 100644 src/errors/static/js/yui/build/widget-base/assets/widget-base-core.css create mode 100644 src/errors/static/js/yui/build/widget-base/widget-base-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-base/widget-base-debug.js create mode 100644 src/errors/static/js/yui/build/widget-base/widget-base-min.js create mode 100644 src/errors/static/js/yui/build/widget-base/widget-base.js create mode 100644 src/errors/static/js/yui/build/widget-buttons/assets/skins/night/sprite_icons.gif create mode 100644 src/errors/static/js/yui/build/widget-buttons/assets/skins/night/widget-buttons-skin.css create mode 100644 src/errors/static/js/yui/build/widget-buttons/assets/skins/night/widget-buttons.css create mode 100644 src/errors/static/js/yui/build/widget-buttons/assets/skins/sam/sprite_icons.gif create mode 100644 src/errors/static/js/yui/build/widget-buttons/assets/skins/sam/widget-buttons-skin.css create mode 100644 src/errors/static/js/yui/build/widget-buttons/assets/skins/sam/widget-buttons.css create mode 100644 src/errors/static/js/yui/build/widget-buttons/assets/widget-buttons-core.css create mode 100644 src/errors/static/js/yui/build/widget-buttons/widget-buttons-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-buttons/widget-buttons-debug.js create mode 100644 src/errors/static/js/yui/build/widget-buttons/widget-buttons-min.js create mode 100644 src/errors/static/js/yui/build/widget-buttons/widget-buttons.js create mode 100644 src/errors/static/js/yui/build/widget-child/widget-child-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-child/widget-child-debug.js create mode 100644 src/errors/static/js/yui/build/widget-child/widget-child-min.js create mode 100644 src/errors/static/js/yui/build/widget-child/widget-child.js create mode 100644 src/errors/static/js/yui/build/widget-htmlparser/assets/widget-base-core.css create mode 100644 src/errors/static/js/yui/build/widget-htmlparser/widget-htmlparser-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-htmlparser/widget-htmlparser-debug.js create mode 100644 src/errors/static/js/yui/build/widget-htmlparser/widget-htmlparser-min.js create mode 100644 src/errors/static/js/yui/build/widget-htmlparser/widget-htmlparser.js create mode 100644 src/errors/static/js/yui/build/widget-locale/assets/widget-base-core.css create mode 100644 src/errors/static/js/yui/build/widget-locale/widget-locale-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-locale/widget-locale-debug.js create mode 100644 src/errors/static/js/yui/build/widget-locale/widget-locale-min.js create mode 100644 src/errors/static/js/yui/build/widget-locale/widget-locale.js create mode 100644 src/errors/static/js/yui/build/widget-modality/assets/skins/night/widget-modality-skin.css create mode 100644 src/errors/static/js/yui/build/widget-modality/assets/skins/night/widget-modality.css create mode 100644 src/errors/static/js/yui/build/widget-modality/assets/skins/sam/widget-modality-skin.css create mode 100644 src/errors/static/js/yui/build/widget-modality/assets/skins/sam/widget-modality.css create mode 100644 src/errors/static/js/yui/build/widget-modality/assets/widget-modality-core.css create mode 100644 src/errors/static/js/yui/build/widget-modality/widget-modality-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-modality/widget-modality-debug.js create mode 100644 src/errors/static/js/yui/build/widget-modality/widget-modality-min.js create mode 100644 src/errors/static/js/yui/build/widget-modality/widget-modality.js create mode 100644 src/errors/static/js/yui/build/widget-parent/widget-parent-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-parent/widget-parent-debug.js create mode 100644 src/errors/static/js/yui/build/widget-parent/widget-parent-min.js create mode 100644 src/errors/static/js/yui/build/widget-parent/widget-parent.js create mode 100644 src/errors/static/js/yui/build/widget-position-align/widget-position-align-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-position-align/widget-position-align-debug.js create mode 100644 src/errors/static/js/yui/build/widget-position-align/widget-position-align-min.js create mode 100644 src/errors/static/js/yui/build/widget-position-align/widget-position-align.js create mode 100644 src/errors/static/js/yui/build/widget-position-constrain/widget-position-constrain-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-position-constrain/widget-position-constrain-debug.js create mode 100644 src/errors/static/js/yui/build/widget-position-constrain/widget-position-constrain-min.js create mode 100644 src/errors/static/js/yui/build/widget-position-constrain/widget-position-constrain.js create mode 100644 src/errors/static/js/yui/build/widget-position/widget-position-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-position/widget-position-debug.js create mode 100644 src/errors/static/js/yui/build/widget-position/widget-position-min.js create mode 100644 src/errors/static/js/yui/build/widget-position/widget-position.js create mode 100644 src/errors/static/js/yui/build/widget-skin/assets/widget-base-core.css create mode 100644 src/errors/static/js/yui/build/widget-skin/widget-skin-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-skin/widget-skin-debug.js create mode 100644 src/errors/static/js/yui/build/widget-skin/widget-skin-min.js create mode 100644 src/errors/static/js/yui/build/widget-skin/widget-skin.js create mode 100644 src/errors/static/js/yui/build/widget-stack/assets/skins/night/widget-stack-skin.css create mode 100644 src/errors/static/js/yui/build/widget-stack/assets/skins/night/widget-stack.css create mode 100644 src/errors/static/js/yui/build/widget-stack/assets/skins/sam/widget-stack-skin.css create mode 100644 src/errors/static/js/yui/build/widget-stack/assets/skins/sam/widget-stack.css create mode 100644 src/errors/static/js/yui/build/widget-stack/assets/widget-stack-core.css create mode 100644 src/errors/static/js/yui/build/widget-stack/widget-stack-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-stack/widget-stack-debug.js create mode 100644 src/errors/static/js/yui/build/widget-stack/widget-stack-min.js create mode 100644 src/errors/static/js/yui/build/widget-stack/widget-stack.js create mode 100644 src/errors/static/js/yui/build/widget-stdmod/widget-stdmod-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-stdmod/widget-stdmod-debug.js create mode 100644 src/errors/static/js/yui/build/widget-stdmod/widget-stdmod-min.js create mode 100644 src/errors/static/js/yui/build/widget-stdmod/widget-stdmod.js create mode 100644 src/errors/static/js/yui/build/widget-uievents/assets/widget-base-core.css create mode 100644 src/errors/static/js/yui/build/widget-uievents/widget-uievents-coverage.js create mode 100644 src/errors/static/js/yui/build/widget-uievents/widget-uievents-debug.js create mode 100644 src/errors/static/js/yui/build/widget-uievents/widget-uievents-min.js create mode 100644 src/errors/static/js/yui/build/widget-uievents/widget-uievents.js create mode 100644 src/errors/static/js/yui/build/yql-jsonp/yql-jsonp-coverage.js create mode 100644 src/errors/static/js/yui/build/yql-jsonp/yql-jsonp-debug.js create mode 100644 src/errors/static/js/yui/build/yql-jsonp/yql-jsonp-min.js create mode 100644 src/errors/static/js/yui/build/yql-jsonp/yql-jsonp.js create mode 100644 src/errors/static/js/yui/build/yql-nodejs/yql-nodejs-coverage.js create mode 100644 src/errors/static/js/yui/build/yql-nodejs/yql-nodejs-debug.js create mode 100644 src/errors/static/js/yui/build/yql-nodejs/yql-nodejs-min.js create mode 100644 src/errors/static/js/yui/build/yql-nodejs/yql-nodejs.js create mode 100644 src/errors/static/js/yui/build/yql-winjs/yql-winjs-coverage.js create mode 100644 src/errors/static/js/yui/build/yql-winjs/yql-winjs-debug.js create mode 100644 src/errors/static/js/yui/build/yql-winjs/yql-winjs-min.js create mode 100644 src/errors/static/js/yui/build/yql-winjs/yql-winjs.js create mode 100644 src/errors/static/js/yui/build/yql/yql-coverage.js create mode 100644 src/errors/static/js/yui/build/yql/yql-debug.js create mode 100644 src/errors/static/js/yui/build/yql/yql-min.js create mode 100644 src/errors/static/js/yui/build/yql/yql.js create mode 100644 src/errors/static/js/yui/build/yui-base/yui-base-coverage.js create mode 100644 src/errors/static/js/yui/build/yui-base/yui-base-debug.js create mode 100644 src/errors/static/js/yui/build/yui-base/yui-base-min.js create mode 100644 src/errors/static/js/yui/build/yui-base/yui-base.js create mode 100644 src/errors/static/js/yui/build/yui-core/yui-core-coverage.js create mode 100644 src/errors/static/js/yui/build/yui-core/yui-core-debug.js create mode 100644 src/errors/static/js/yui/build/yui-core/yui-core-min.js create mode 100644 src/errors/static/js/yui/build/yui-core/yui-core.js create mode 100644 src/errors/static/js/yui/build/yui-later/yui-later-coverage.js create mode 100644 src/errors/static/js/yui/build/yui-later/yui-later-debug.js create mode 100644 src/errors/static/js/yui/build/yui-later/yui-later-min.js create mode 100644 src/errors/static/js/yui/build/yui-later/yui-later.js create mode 100644 src/errors/static/js/yui/build/yui-log-nodejs/yui-log-nodejs-coverage.js create mode 100644 src/errors/static/js/yui/build/yui-log-nodejs/yui-log-nodejs-debug.js create mode 100644 src/errors/static/js/yui/build/yui-log-nodejs/yui-log-nodejs-min.js create mode 100644 src/errors/static/js/yui/build/yui-log-nodejs/yui-log-nodejs.js create mode 100644 src/errors/static/js/yui/build/yui-log/yui-log-coverage.js create mode 100644 src/errors/static/js/yui/build/yui-log/yui-log-debug.js create mode 100644 src/errors/static/js/yui/build/yui-log/yui-log-min.js create mode 100644 src/errors/static/js/yui/build/yui-log/yui-log.js create mode 100644 src/errors/static/js/yui/build/yui-nodejs/yui-nodejs-coverage.js create mode 100644 src/errors/static/js/yui/build/yui-nodejs/yui-nodejs-debug.js create mode 100644 src/errors/static/js/yui/build/yui-nodejs/yui-nodejs-min.js create mode 100644 src/errors/static/js/yui/build/yui-nodejs/yui-nodejs.js create mode 100644 src/errors/static/js/yui/build/yui-throttle/yui-throttle-coverage.js create mode 100644 src/errors/static/js/yui/build/yui-throttle/yui-throttle-debug.js create mode 100644 src/errors/static/js/yui/build/yui-throttle/yui-throttle-min.js create mode 100644 src/errors/static/js/yui/build/yui-throttle/yui-throttle.js create mode 100644 src/errors/static/js/yui/build/yui/yui-coverage.js create mode 100644 src/errors/static/js/yui/build/yui/yui-debug.js create mode 100644 src/errors/static/js/yui/build/yui/yui-min.js create mode 100644 src/errors/static/js/yui/build/yui/yui.js diff --git a/src/errors/static/js/nvd3/lib/cie.js b/src/errors/static/js/nvd3/lib/cie.js new file mode 100644 index 00000000..45f01329 --- /dev/null +++ b/src/errors/static/js/nvd3/lib/cie.js @@ -0,0 +1,155 @@ +(function(d3) { + var cie = d3.cie = {}; + + cie.lab = function(l, a, b) { + return arguments.length === 1 + ? (l instanceof Lab ? lab(l.l, l.a, l.b) + : (l instanceof Lch ? lch_lab(l.l, l.c, l.h) + : rgb_lab((l = d3.rgb(l)).r, l.g, l.b))) + : lab(+l, +a, +b); + }; + + cie.lch = function(l, c, h) { + return arguments.length === 1 + ? (l instanceof Lch ? lch(l.l, l.c, l.h) + : (l instanceof Lab ? lab_lch(l.l, l.a, l.b) + : lab_lch((l = rgb_lab((l = d3.rgb(l)).r, l.g, l.b)).l, l.a, l.b))) + : lch(+l, +c, +h); + }; + + cie.interpolateLab = function(a, b) { + a = cie.lab(a); + b = cie.lab(b); + var al = a.l, + aa = a.a, + ab = a.b, + bl = b.l - al, + ba = b.a - aa, + bb = b.b - ab; + return function(t) { + return lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; + }; + }; + + cie.interpolateLch = function(a, b) { + a = cie.lch(a); + b = cie.lch(b); + var al = a.l, + ac = a.c, + ah = a.h, + bl = b.l - al, + bc = b.c - ac, + bh = b.h - ah; + if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; // shortest path + return function(t) { + return lch_lab(al + bl * t, ac + bc * t, ah + bh * t) + ""; + }; + }; + + function lab(l, a, b) { + return new Lab(l, a, b); + } + + function Lab(l, a, b) { + this.l = l; + this.a = a; + this.b = b; + } + + Lab.prototype.brighter = function(k) { + return lab(Math.min(100, this.l + K * (arguments.length ? k : 1)), this.a, this.b); + }; + + Lab.prototype.darker = function(k) { + return lab(Math.max(0, this.l - K * (arguments.length ? k : 1)), this.a, this.b); + }; + + Lab.prototype.rgb = function() { + return lab_rgb(this.l, this.a, this.b); + }; + + Lab.prototype.toString = function() { + return this.rgb() + ""; + }; + + function lch(l, c, h) { + return new Lch(l, c, h); + } + + function Lch(l, c, h) { + this.l = l; + this.c = c; + this.h = h; + } + + Lch.prototype.brighter = function(k) { + return lch(Math.min(100, this.l + K * (arguments.length ? k : 1)), this.c, this.h); + }; + + Lch.prototype.darker = function(k) { + return lch(Math.max(0, this.l - K * (arguments.length ? k : 1)), this.c, this.h); + }; + + Lch.prototype.rgb = function() { + return lch_lab(this.l, this.c, this.h).rgb(); + }; + + Lch.prototype.toString = function() { + return this.rgb() + ""; + }; + + // Corresponds roughly to RGB brighter/darker + var K = 18; + + // D65 standard referent + var X = 0.950470, Y = 1, Z = 1.088830; + + function lab_rgb(l, a, b) { + var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; + x = lab_xyz(x) * X; + y = lab_xyz(y) * Y; + z = lab_xyz(z) * Z; + return d3.rgb( + xyz_rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), + xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z), + xyz_rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z) + ); + } + + function rgb_lab(r, g, b) { + r = rgb_xyz(r); + g = rgb_xyz(g); + b = rgb_xyz(b); + var x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / X), + y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / Y), + z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / Z); + return lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); + } + + function lab_lch(l, a, b) { + var c = Math.sqrt(a * a + b * b), + h = Math.atan2(b, a) / Math.PI * 180; + return lch(l, c, h); + } + + function lch_lab(l, c, h) { + h = h * Math.PI / 180; + return lab(l, Math.cos(h) * c, Math.sin(h) * c); + } + + function lab_xyz(x) { + return x > 0.206893034 ? x * x * x : (x - 4 / 29) / 7.787037; + } + + function xyz_lab(x) { + return x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; + } + + function xyz_rgb(r) { + return Math.round(255 * (r <= 0.00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - 0.055)); + } + + function rgb_xyz(r) { + return (r /= 255) <= 0.04045 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4); + } +})(d3); diff --git a/src/errors/static/js/nvd3/lib/crossfilter.js b/src/errors/static/js/nvd3/lib/crossfilter.js new file mode 100644 index 00000000..1aaabca2 --- /dev/null +++ b/src/errors/static/js/nvd3/lib/crossfilter.js @@ -0,0 +1,1180 @@ +(function(exports){ +crossfilter.version = "1.0.3"; +function crossfilter_identity(d) { + return d; +} +crossfilter.permute = permute; + +function permute(array, index) { + for (var i = 0, n = index.length, copy = new Array(n); i < n; ++i) { + copy[i] = array[index[i]]; + } + return copy; +} +var bisect = crossfilter.bisect = bisect_by(crossfilter_identity); + +bisect.by = bisect_by; + +function bisect_by(f) { + + // Locate the insertion point for x in a to maintain sorted order. The + // arguments lo and hi may be used to specify a subset of the array which + // should be considered; by default the entire array is used. If x is already + // present in a, the insertion point will be before (to the left of) any + // existing entries. The return value is suitable for use as the first + // argument to `array.splice` assuming that a is already sorted. + // + // The returned insertion point i partitions the array a into two halves so + // that all v < x for v in a[lo:i] for the left side and all v >= x for v in + // a[i:hi] for the right side. + function bisectLeft(a, x, lo, hi) { + while (lo < hi) { + var mid = lo + hi >> 1; + if (f(a[mid]) < x) lo = mid + 1; + else hi = mid; + } + return lo; + } + + // Similar to bisectLeft, but returns an insertion point which comes after (to + // the right of) any existing entries of x in a. + // + // The returned insertion point i partitions the array into two halves so that + // all v <= x for v in a[lo:i] for the left side and all v > x for v in + // a[i:hi] for the right side. + function bisectRight(a, x, lo, hi) { + while (lo < hi) { + var mid = lo + hi >> 1; + if (x < f(a[mid])) hi = mid; + else lo = mid + 1; + } + return lo; + } + + bisectRight.right = bisectRight; + bisectRight.left = bisectLeft; + return bisectRight; +} +var heap = crossfilter.heap = heap_by(crossfilter_identity); + +heap.by = heap_by; + +function heap_by(f) { + + // Builds a binary heap within the specified array a[lo:hi]. The heap has the + // property such that the parent a[lo+i] is always less than or equal to its + // two children: a[lo+2*i+1] and a[lo+2*i+2]. + function heap(a, lo, hi) { + var n = hi - lo, + i = (n >>> 1) + 1; + while (--i > 0) sift(a, i, n, lo); + return a; + } + + // Sorts the specified array a[lo:hi] in descending order, assuming it is + // already a heap. + function sort(a, lo, hi) { + var n = hi - lo, + t; + while (--n > 0) t = a[lo], a[lo] = a[lo + n], a[lo + n] = t, sift(a, 1, n, lo); + return a; + } + + // Sifts the element a[lo+i-1] down the heap, where the heap is the contiguous + // slice of array a[lo:lo+n]. This method can also be used to update the heap + // incrementally, without incurring the full cost of reconstructing the heap. + function sift(a, i, n, lo) { + var d = a[--lo + i], + x = f(d), + child; + while ((child = i << 1) <= n) { + if (child < n && f(a[lo + child]) > f(a[lo + child + 1])) child++; + if (x <= f(a[lo + child])) break; + a[lo + i] = a[lo + child]; + i = child; + } + a[lo + i] = d; + } + + heap.sort = sort; + return heap; +} +var heapselect = crossfilter.heapselect = heapselect_by(crossfilter_identity); + +heapselect.by = heapselect_by; + +function heapselect_by(f) { + var heap = heap_by(f); + + // Returns a new array containing the top k elements in the array a[lo:hi]. + // The returned array is not sorted, but maintains the heap property. If k is + // greater than hi - lo, then fewer than k elements will be returned. The + // order of elements in a is unchanged by this operation. + function heapselect(a, lo, hi, k) { + var queue = new Array(k = Math.min(hi - lo, k)), + min, + i, + x, + d; + + for (i = 0; i < k; ++i) queue[i] = a[lo++]; + heap(queue, 0, k); + + if (lo < hi) { + min = f(queue[0]); + do { + if (x = f(d = a[lo]) > min) { + queue[0] = d; + min = f(heap(queue, 0, k)[0]); + } + } while (++lo < hi); + } + + return queue; + } + + return heapselect; +} +var insertionsort = crossfilter.insertionsort = insertionsort_by(crossfilter_identity); + +insertionsort.by = insertionsort_by; + +function insertionsort_by(f) { + + function insertionsort(a, lo, hi) { + for (var i = lo + 1; i < hi; ++i) { + for (var j = i, t = a[i], x = f(t); j > lo && f(a[j - 1]) > x; --j) { + a[j] = a[j - 1]; + } + a[j] = t; + } + return a; + } + + return insertionsort; +} +// Algorithm designed by Vladimir Yaroslavskiy. +// Implementation based on the Dart project; see lib/dart/LICENSE for details. + +var quicksort = crossfilter.quicksort = quicksort_by(crossfilter_identity); + +quicksort.by = quicksort_by; + +function quicksort_by(f) { + var insertionsort = insertionsort_by(f); + + function sort(a, lo, hi) { + return (hi - lo < quicksort_sizeThreshold + ? insertionsort + : quicksort)(a, lo, hi); + } + + function quicksort(a, lo, hi) { + + // Compute the two pivots by looking at 5 elements. + var sixth = (hi - lo) / 6 | 0, + i1 = lo + sixth, + i5 = hi - 1 - sixth, + i3 = lo + hi - 1 >> 1, // The midpoint. + i2 = i3 - sixth, + i4 = i3 + sixth; + + var e1 = a[i1], x1 = f(e1), + e2 = a[i2], x2 = f(e2), + e3 = a[i3], x3 = f(e3), + e4 = a[i4], x4 = f(e4), + e5 = a[i5], x5 = f(e5); + + var t; + + // Sort the selected 5 elements using a sorting network. + if (x1 > x2) t = e1, e1 = e2, e2 = t, t = x1, x1 = x2, x2 = t; + if (x4 > x5) t = e4, e4 = e5, e5 = t, t = x4, x4 = x5, x5 = t; + if (x1 > x3) t = e1, e1 = e3, e3 = t, t = x1, x1 = x3, x3 = t; + if (x2 > x3) t = e2, e2 = e3, e3 = t, t = x2, x2 = x3, x3 = t; + if (x1 > x4) t = e1, e1 = e4, e4 = t, t = x1, x1 = x4, x4 = t; + if (x3 > x4) t = e3, e3 = e4, e4 = t, t = x3, x3 = x4, x4 = t; + if (x2 > x5) t = e2, e2 = e5, e5 = t, t = x2, x2 = x5, x5 = t; + if (x2 > x3) t = e2, e2 = e3, e3 = t, t = x2, x2 = x3, x3 = t; + if (x4 > x5) t = e4, e4 = e5, e5 = t, t = x4, x4 = x5, x5 = t; + + var pivot1 = e2, pivotValue1 = x2, + pivot2 = e4, pivotValue2 = x4; + + // e2 and e4 have been saved in the pivot variables. They will be written + // back, once the partitioning is finished. + a[i1] = e1; + a[i2] = a[lo]; + a[i3] = e3; + a[i4] = a[hi - 1]; + a[i5] = e5; + + var less = lo + 1, // First element in the middle partition. + great = hi - 2; // Last element in the middle partition. + + // Note that for value comparison, <, <=, >= and > coerce to a primitive via + // Object.prototype.valueOf; == and === do not, so in order to be consistent + // with natural order (such as for Date objects), we must do two compares. + var pivotsEqual = pivotValue1 <= pivotValue2 && pivotValue1 >= pivotValue2; + if (pivotsEqual) { + + // Degenerated case where the partitioning becomes a dutch national flag + // problem. + // + // [ | < pivot | == pivot | unpartitioned | > pivot | ] + // ^ ^ ^ ^ ^ + // left less k great right + // + // a[left] and a[right] are undefined and are filled after the + // partitioning. + // + // Invariants: + // 1) for x in ]left, less[ : x < pivot. + // 2) for x in [less, k[ : x == pivot. + // 3) for x in ]great, right[ : x > pivot. + for (var k = less; k <= great; ++k) { + var ek = a[k], xk = f(ek); + if (xk < pivotValue1) { + if (k !== less) { + a[k] = a[less]; + a[less] = ek; + } + ++less; + } else if (xk > pivotValue1) { + + // Find the first element <= pivot in the range [k - 1, great] and + // put [:ek:] there. We know that such an element must exist: + // When k == less, then el3 (which is equal to pivot) lies in the + // interval. Otherwise a[k - 1] == pivot and the search stops at k-1. + // Note that in the latter case invariant 2 will be violated for a + // short amount of time. The invariant will be restored when the + // pivots are put into their final positions. + while (true) { + var greatValue = f(a[great]); + if (greatValue > pivotValue1) { + great--; + // This is the only location in the while-loop where a new + // iteration is started. + continue; + } else if (greatValue < pivotValue1) { + // Triple exchange. + a[k] = a[less]; + a[less++] = a[great]; + a[great--] = ek; + break; + } else { + a[k] = a[great]; + a[great--] = ek; + // Note: if great < k then we will exit the outer loop and fix + // invariant 2 (which we just violated). + break; + } + } + } + } + } else { + + // We partition the list into three parts: + // 1. < pivot1 + // 2. >= pivot1 && <= pivot2 + // 3. > pivot2 + // + // During the loop we have: + // [ | < pivot1 | >= pivot1 && <= pivot2 | unpartitioned | > pivot2 | ] + // ^ ^ ^ ^ ^ + // left less k great right + // + // a[left] and a[right] are undefined and are filled after the + // partitioning. + // + // Invariants: + // 1. for x in ]left, less[ : x < pivot1 + // 2. for x in [less, k[ : pivot1 <= x && x <= pivot2 + // 3. for x in ]great, right[ : x > pivot2 + for (var k = less; k <= great; k++) { + var ek = a[k], xk = f(ek); + if (xk < pivotValue1) { + if (k !== less) { + a[k] = a[less]; + a[less] = ek; + } + ++less; + } else { + if (xk > pivotValue2) { + while (true) { + var greatValue = f(a[great]); + if (greatValue > pivotValue2) { + great--; + if (great < k) break; + // This is the only location inside the loop where a new + // iteration is started. + continue; + } else { + // a[great] <= pivot2. + if (greatValue < pivotValue1) { + // Triple exchange. + a[k] = a[less]; + a[less++] = a[great]; + a[great--] = ek; + } else { + // a[great] >= pivot1. + a[k] = a[great]; + a[great--] = ek; + } + break; + } + } + } + } + } + } + + // Move pivots into their final positions. + // We shrunk the list from both sides (a[left] and a[right] have + // meaningless values in them) and now we move elements from the first + // and third partition into these locations so that we can store the + // pivots. + a[lo] = a[less - 1]; + a[less - 1] = pivot1; + a[hi - 1] = a[great + 1]; + a[great + 1] = pivot2; + + // The list is now partitioned into three partitions: + // [ < pivot1 | >= pivot1 && <= pivot2 | > pivot2 ] + // ^ ^ ^ ^ + // left less great right + + // Recursive descent. (Don't include the pivot values.) + sort(a, lo, less - 1); + sort(a, great + 2, hi); + + if (pivotsEqual) { + // All elements in the second partition are equal to the pivot. No + // need to sort them. + return a; + } + + // In theory it should be enough to call _doSort recursively on the second + // partition. + // The Android source however removes the pivot elements from the recursive + // call if the second partition is too large (more than 2/3 of the list). + if (less < i1 && great > i5) { + var lessValue, greatValue; + while ((lessValue = f(a[less])) <= pivotValue1 && lessValue >= pivotValue1) ++less; + while ((greatValue = f(a[great])) <= pivotValue2 && greatValue >= pivotValue2) --great; + + // Copy paste of the previous 3-way partitioning with adaptions. + // + // We partition the list into three parts: + // 1. == pivot1 + // 2. > pivot1 && < pivot2 + // 3. == pivot2 + // + // During the loop we have: + // [ == pivot1 | > pivot1 && < pivot2 | unpartitioned | == pivot2 ] + // ^ ^ ^ + // less k great + // + // Invariants: + // 1. for x in [ *, less[ : x == pivot1 + // 2. for x in [less, k[ : pivot1 < x && x < pivot2 + // 3. for x in ]great, * ] : x == pivot2 + for (var k = less; k <= great; k++) { + var ek = a[k], xk = f(ek); + if (xk <= pivotValue1 && xk >= pivotValue1) { + if (k !== less) { + a[k] = a[less]; + a[less] = ek; + } + less++; + } else { + if (xk <= pivotValue2 && xk >= pivotValue2) { + while (true) { + var greatValue = f(a[great]); + if (greatValue <= pivotValue2 && greatValue >= pivotValue2) { + great--; + if (great < k) break; + // This is the only location inside the loop where a new + // iteration is started. + continue; + } else { + // a[great] < pivot2. + if (greatValue < pivotValue1) { + // Triple exchange. + a[k] = a[less]; + a[less++] = a[great]; + a[great--] = ek; + } else { + // a[great] == pivot1. + a[k] = a[great]; + a[great--] = ek; + } + break; + } + } + } + } + } + } + + // The second partition has now been cleared of pivot elements and looks + // as follows: + // [ * | > pivot1 && < pivot2 | * ] + // ^ ^ + // less great + // Sort the second partition using recursive descent. + + // The second partition looks as follows: + // [ * | >= pivot1 && <= pivot2 | * ] + // ^ ^ + // less great + // Simply sort it by recursive descent. + + return sort(a, less, great + 1); + } + + return sort; +} + +var quicksort_sizeThreshold = 32; +var crossfilter_array8 = crossfilter_arrayUntyped, + crossfilter_array16 = crossfilter_arrayUntyped, + crossfilter_array32 = crossfilter_arrayUntyped, + crossfilter_arrayLengthen = crossfilter_identity, + crossfilter_arrayWiden = crossfilter_identity; + +if (typeof Uint8Array !== "undefined") { + crossfilter_array8 = function(n) { return new Uint8Array(n); }; + crossfilter_array16 = function(n) { return new Uint16Array(n); }; + crossfilter_array32 = function(n) { return new Uint32Array(n); }; + + crossfilter_arrayLengthen = function(array, length) { + var copy = new array.constructor(length); + copy.set(array); + return copy; + }; + + crossfilter_arrayWiden = function(array, width) { + var copy; + switch (width) { + case 16: copy = crossfilter_array16(array.length); break; + case 32: copy = crossfilter_array32(array.length); break; + default: throw new Error("invalid array width!"); + } + copy.set(array); + return copy; + }; +} + +function crossfilter_arrayUntyped(n) { + return new Array(n); +} +function crossfilter_filterExact(bisect, value) { + return function(values) { + var n = values.length; + return [bisect.left(values, value, 0, n), bisect.right(values, value, 0, n)]; + }; +} + +function crossfilter_filterRange(bisect, range) { + var min = range[0], + max = range[1]; + return function(values) { + var n = values.length; + return [bisect.left(values, min, 0, n), bisect.left(values, max, 0, n)]; + }; +} + +function crossfilter_filterAll(values) { + return [0, values.length]; +} +function crossfilter_null() { + return null; +} +function crossfilter_zero() { + return 0; +} +function crossfilter_reduceIncrement(p) { + return p + 1; +} + +function crossfilter_reduceDecrement(p) { + return p - 1; +} + +function crossfilter_reduceAdd(f) { + return function(p, v) { + return p + +f(v); + }; +} + +function crossfilter_reduceSubtract(f) { + return function(p, v) { + return p - f(v); + }; +} +exports.crossfilter = crossfilter; + +function crossfilter() { + var crossfilter = { + add: add, + dimension: dimension, + groupAll: groupAll, + size: size + }; + + var data = [], // the records + n = 0, // the number of records; data.length + m = 0, // number of dimensions in use + M = 8, // number of dimensions that can fit in `filters` + filters = crossfilter_array8(0), // M bits per record; 1 is filtered out + filterListeners = [], // when the filters change + dataListeners = []; // when data is added + + // Adds the specified new records to this crossfilter. + function add(newData) { + var n0 = n, + n1 = newData.length; + + // If there's actually new data to add… + // Merge the new data into the existing data. + // Lengthen the filter bitset to handle the new records. + // Notify listeners (dimensions and groups) that new data is available. + if (n1) { + data = data.concat(newData); + filters = crossfilter_arrayLengthen(filters, n += n1); + dataListeners.forEach(function(l) { l(newData, n0, n1); }); + } + + return crossfilter; + } + + // Adds a new dimension with the specified value accessor function. + function dimension(value) { + var dimension = { + filter: filter, + filterExact: filterExact, + filterRange: filterRange, + filterAll: filterAll, + top: top, + group: group, + groupAll: groupAll + }; + + var one = 1 << m++, // bit mask, e.g., 00001000 + zero = ~one, // inverted one, e.g., 11110111 + values, // sorted, cached array + index, // value rank ↦ object id + newValues, // temporary array storing newly-added values + newIndex, // temporary array storing newly-added index + sort = quicksort_by(function(i) { return newValues[i]; }), + refilter = crossfilter_filterAll, // for recomputing filter + indexListeners = [], // when data is added + lo0 = 0, + hi0 = 0; + + // Updating a dimension is a two-stage process. First, we must update the + // associated filters for the newly-added records. Once all dimensions have + // updated their filters, the groups are notified to update. + dataListeners.unshift(preAdd); + dataListeners.push(postAdd); + + // Incorporate any existing data into this dimension, and make sure that the + // filter bitset is wide enough to handle the new dimension. + if (m > M) filters = crossfilter_arrayWiden(filters, M <<= 1); + preAdd(data, 0, n); + postAdd(data, 0, n); + + // Incorporates the specified new records into this dimension. + // This function is responsible for updating filters, values, and index. + function preAdd(newData, n0, n1) { + + // Permute new values into natural order using a sorted index. + newValues = newData.map(value); + newIndex = sort(crossfilter_range(n1), 0, n1); + newValues = permute(newValues, newIndex); + + // Bisect newValues to determine which new records are selected. + var bounds = refilter(newValues), lo1 = bounds[0], hi1 = bounds[1], i; + for (i = 0; i < lo1; ++i) filters[newIndex[i] + n0] |= one; + for (i = hi1; i < n1; ++i) filters[newIndex[i] + n0] |= one; + + // If this dimension previously had no data, then we don't need to do the + // more expensive merge operation; use the new values and index as-is. + if (!n0) { + values = newValues; + index = newIndex; + lo0 = lo1; + hi0 = hi1; + return; + } + + var oldValues = values, + oldIndex = index, + i0 = 0, + i1 = 0; + + // Otherwise, create new arrays into which to merge new and old. + values = new Array(n); + index = crossfilter_index(n, n); + + // Merge the old and new sorted values, and old and new index. + for (i = 0; i0 < n0 && i1 < n1; ++i) { + if (oldValues[i0] < newValues[i1]) { + values[i] = oldValues[i0]; + index[i] = oldIndex[i0++]; + } else { + values[i] = newValues[i1]; + index[i] = newIndex[i1++] + n0; + } + } + + // Add any remaining old values. + for (; i0 < n0; ++i0, ++i) { + values[i] = oldValues[i0]; + index[i] = oldIndex[i0]; + } + + // Add any remaining new values. + for (; i1 < n1; ++i1, ++i) { + values[i] = newValues[i1]; + index[i] = newIndex[i1] + n0; + } + + // Bisect again to recompute lo0 and hi0. + bounds = refilter(values), lo0 = bounds[0], hi0 = bounds[1]; + } + + // When all filters have updated, notify index listeners of the new values. + function postAdd(newData, n0, n1) { + indexListeners.forEach(function(l) { l(newValues, newIndex, n0, n1); }); + newValues = newIndex = null; + } + + // Updates the selected values based on the specified bounds [lo, hi]. + // This implementation is used by all the public filter methods. + function filterIndex(bounds) { + var i, + j, + k, + lo1 = bounds[0], + hi1 = bounds[1], + added = [], + removed = []; + + // Fast incremental update based on previous lo index. + if (lo1 < lo0) { + for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) { + filters[k = index[i]] ^= one; + added.push(k); + } + } else if (lo1 > lo0) { + for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) { + filters[k = index[i]] ^= one; + removed.push(k); + } + } + + // Fast incremental update based on previous hi index. + if (hi1 > hi0) { + for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) { + filters[k = index[i]] ^= one; + added.push(k); + } + } else if (hi1 < hi0) { + for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) { + filters[k = index[i]] ^= one; + removed.push(k); + } + } + + lo0 = lo1; + hi0 = hi1; + filterListeners.forEach(function(l) { l(one, added, removed); }); + return dimension; + } + + // Filters this dimension using the specified range, value, or null. + // If the range is null, this is equivalent to filterAll. + // If the range is an array, this is equivalent to filterRange. + // Otherwise, this is equivalent to filterExact. + function filter(range) { + return range == null + ? filterAll() : Array.isArray(range) + ? filterRange(range) + : filterExact(range); + } + + // Filters this dimension to select the exact value. + function filterExact(value) { + return filterIndex((refilter = crossfilter_filterExact(bisect, value))(values)); + } + + // Filters this dimension to select the specified range [lo, hi]. + // The lower bound is inclusive, and the upper bound is exclusive. + function filterRange(range) { + return filterIndex((refilter = crossfilter_filterRange(bisect, range))(values)); + } + + // Clears any filters on this dimension. + function filterAll() { + return filterIndex((refilter = crossfilter_filterAll)(values)); + } + + // Returns the top K selected records, based on this dimension's order. + // Note: observes this dimension's filter, unlike group and groupAll. + function top(k) { + var array = [], + i = hi0, + j; + + while (--i >= lo0 && k > 0) { + if (!filters[j = index[i]]) { + array.push(data[j]); + --k; + } + } + + return array; + } + + // Adds a new group to this dimension, using the specified key function. + function group(key) { + var group = { + top: top, + all: all, + reduce: reduce, + reduceCount: reduceCount, + reduceSum: reduceSum, + order: order, + orderNatural: orderNatural, + size: size + }; + + var groups, // array of {key, value} + groupIndex, // object id ↦ group id + groupWidth = 8, + groupCapacity = crossfilter_capacity(groupWidth), + k = 0, // cardinality + select, + heap, + reduceAdd, + reduceRemove, + reduceInitial, + update = crossfilter_null, + reset = crossfilter_null, + resetNeeded = true; + + if (arguments.length < 1) key = crossfilter_identity; + + // The group listens to the crossfilter for when any dimension changes, so + // that it can update the associated reduce values. It must also listen to + // the parent dimension for when data is added, and compute new keys. + filterListeners.push(update); + indexListeners.push(add); + + // Incorporate any existing data into the grouping. + add(values, index, 0, n); + + // Incorporates the specified new values into this group. + // This function is responsible for updating groups and groupIndex. + function add(newValues, newIndex, n0, n1) { + var oldGroups = groups, + reIndex = crossfilter_index(k, groupCapacity), + add = reduceAdd, + initial = reduceInitial, + k0 = k, // old cardinality + i0 = 0, // index of old group + i1 = 0, // index of new record + j, // object id + g0, // old group + x0, // old key + x1, // new key + g, // group to add + x; // key of group to add + + // If a reset is needed, we don't need to update the reduce values. + if (resetNeeded) add = initial = crossfilter_null; + + // Reset the new groups (k is a lower bound). + // Also, make sure that groupIndex exists and is long enough. + groups = new Array(k), k = 0; + groupIndex = k0 > 1 ? crossfilter_arrayLengthen(groupIndex, n) : crossfilter_index(n, groupCapacity); + + // Get the first old key (x0 of g0), if it exists. + if (k0) x0 = (g0 = oldGroups[0]).key; + + // Find the first new key (x1), skipping NaN keys. + while (i1 < n1 && !((x1 = key(newValues[i1])) >= x1)) ++i1; + + // While new keys remain… + while (i1 < n1) { + + // Determine the lesser of the two current keys; new and old. + // If there are no old keys remaining, then always add the new key. + if (g0 && x0 <= x1) { + g = g0, x = x0; + + // Record the new index of the old group. + reIndex[i0] = k; + + // Retrieve the next old key. + if (g0 = oldGroups[++i0]) x0 = g0.key; + } else { + g = {key: x1, value: initial()}, x = x1; + } + + // Add the lesser group. + groups[k] = g; + + // Add any selected records belonging to the added group, while + // advancing the new key and populating the associated group index. + while (!(x1 > x)) { + groupIndex[j = newIndex[i1] + n0] = k; + if (!(filters[j] & zero)) g.value = add(g.value, data[j]); + if (++i1 >= n1) break; + x1 = key(newValues[i1]); + } + + groupIncrement(); + } + + // Add any remaining old groups that were greater than all new keys. + // No incremental reduce is needed; these groups have no new records. + // Also record the new index of the old group. + while (i0 < k0) { + groups[reIndex[i0] = k] = oldGroups[i0++]; + groupIncrement(); + } + + // If we added any new groups before any old groups, + // update the group index of all the old records. + if (k > i0) for (i0 = 0; i0 < n0; ++i0) { + groupIndex[i0] = reIndex[groupIndex[i0]]; + } + + // Modify the update and reset behavior based on the cardinality. + // If the cardinality is less than or equal to one, then the groupIndex + // is not needed. If the cardinality is zero, then there are no records + // and therefore no groups to update or reset. Note that we also must + // change the registered listener to point to the new method. + j = filterListeners.indexOf(update); + if (k > 1) { + update = updateMany; + reset = resetMany; + } else { + if (k === 1) { + update = updateOne; + reset = resetOne; + } else { + update = crossfilter_null; + reset = crossfilter_null; + } + groupIndex = null; + } + filterListeners[j] = update; + + // Count the number of added groups, + // and widen the group index as needed. + function groupIncrement() { + if (++k === groupCapacity) { + reIndex = crossfilter_arrayWiden(reIndex, groupWidth <<= 1); + groupIndex = crossfilter_arrayWiden(groupIndex, groupWidth); + groupCapacity = crossfilter_capacity(groupWidth); + } + } + } + + // Reduces the specified selected or deselected records. + // This function is only used when the cardinality is greater than 1. + function updateMany(filterOne, added, removed) { + if (filterOne === one || resetNeeded) return; + + var i, + k, + n, + g; + + // Add the added values. + for (i = 0, n = added.length; i < n; ++i) { + if (!(filters[k = added[i]] & zero)) { + g = groups[groupIndex[k]]; + g.value = reduceAdd(g.value, data[k]); + } + } + + // Remove the removed values. + for (i = 0, n = removed.length; i < n; ++i) { + if ((filters[k = removed[i]] & zero) === filterOne) { + g = groups[groupIndex[k]]; + g.value = reduceRemove(g.value, data[k]); + } + } + } + + // Reduces the specified selected or deselected records. + // This function is only used when the cardinality is 1. + function updateOne(filterOne, added, removed) { + if (filterOne === one || resetNeeded) return; + + var i, + k, + n, + g = groups[0]; + + // Add the added values. + for (i = 0, n = added.length; i < n; ++i) { + if (!(filters[k = added[i]] & zero)) { + g.value = reduceAdd(g.value, data[k]); + } + } + + // Remove the removed values. + for (i = 0, n = removed.length; i < n; ++i) { + if ((filters[k = removed[i]] & zero) === filterOne) { + g.value = reduceRemove(g.value, data[k]); + } + } + } + + // Recomputes the group reduce values from scratch. + // This function is only used when the cardinality is greater than 1. + function resetMany() { + var i, + g; + + // Reset all group values. + for (i = 0; i < k; ++i) { + groups[i].value = reduceInitial(); + } + + // Add any selected records. + for (i = 0; i < n; ++i) { + if (!(filters[i] & zero)) { + g = groups[groupIndex[i]]; + g.value = reduceAdd(g.value, data[i]); + } + } + } + + // Recomputes the group reduce values from scratch. + // This function is only used when the cardinality is 1. + function resetOne() { + var i, + g = groups[0]; + + // Reset the singleton group values. + g.value = reduceInitial(); + + // Add any selected records. + for (i = 0; i < n; ++i) { + if (!(filters[i] & zero)) { + g.value = reduceAdd(g.value, data[i]); + } + } + } + + // Returns the array of group values, in the dimension's natural order. + function all() { + if (resetNeeded) reset(), resetNeeded = false; + return groups; + } + + // Returns a new array containing the top K group values, in reduce order. + function top(k) { + var top = select(all(), 0, groups.length, k); + return heap.sort(top, 0, top.length); + } + + // Sets the reduce behavior for this group to use the specified functions. + // This method lazily recomputes the reduce values, waiting until needed. + function reduce(add, remove, initial) { + reduceAdd = add; + reduceRemove = remove; + reduceInitial = initial; + resetNeeded = true; + return group; + } + + // A convenience method for reducing by count. + function reduceCount() { + return reduce(crossfilter_reduceIncrement, crossfilter_reduceDecrement, crossfilter_zero); + } + + // A convenience method for reducing by sum(value). + function reduceSum(value) { + return reduce(crossfilter_reduceAdd(value), crossfilter_reduceSubtract(value), crossfilter_zero); + } + + // Sets the reduce order, using the specified accessor. + function order(value) { + select = heapselect_by(valueOf); + heap = heap_by(valueOf); + function valueOf(d) { return value(d.value); } + return group; + } + + // A convenience method for natural ordering by reduce value. + function orderNatural() { + return order(crossfilter_identity); + } + + // Returns the cardinality of this group, irrespective of any filters. + function size() { + return k; + } + + return reduceCount().orderNatural(); + } + + // A convenience function for generating a singleton group. + function groupAll() { + var g = group(crossfilter_null), all = g.all; + delete g.all; + delete g.top; + delete g.order; + delete g.orderNatural; + delete g.size; + g.value = function() { return all()[0].value; }; + return g; + } + + return dimension; + } + + // A convenience method for groupAll on a dummy dimension. + // This implementation can be optimized since it is always cardinality 1. + function groupAll() { + var group = { + reduce: reduce, + reduceCount: reduceCount, + reduceSum: reduceSum, + value: value + }; + + var reduceValue, + reduceAdd, + reduceRemove, + reduceInitial, + resetNeeded = true; + + // The group listens to the crossfilter for when any dimension changes, so + // that it can update the reduce value. It must also listen to the parent + // dimension for when data is added. + filterListeners.push(update); + dataListeners.push(add); + + // For consistency; actually a no-op since resetNeeded is true. + add(data, 0, n); + + // Incorporates the specified new values into this group. + function add(newData, n0, n1) { + var i; + + if (resetNeeded) return; + + // Add the added values. + for (i = n0; i < n; ++i) { + if (!filters[i]) { + reduceValue = reduceAdd(reduceValue, data[i]); + } + } + } + + // Reduces the specified selected or deselected records. + function update(filterOne, added, removed) { + var i, + k, + n; + + if (resetNeeded) return; + + // Add the added values. + for (i = 0, n = added.length; i < n; ++i) { + if (!filters[k = added[i]]) { + reduceValue = reduceAdd(reduceValue, data[k]); + } + } + + // Remove the removed values. + for (i = 0, n = removed.length; i < n; ++i) { + if (filters[k = removed[i]] === filterOne) { + reduceValue = reduceRemove(reduceValue, data[k]); + } + } + } + + // Recomputes the group reduce value from scratch. + function reset() { + var i; + + reduceValue = reduceInitial(); + + for (i = 0; i < n; ++i) { + if (!filters[i]) { + reduceValue = reduceAdd(reduceValue, data[i]); + } + } + } + + // Sets the reduce behavior for this group to use the specified functions. + // This method lazily recomputes the reduce value, waiting until needed. + function reduce(add, remove, initial) { + reduceAdd = add; + reduceRemove = remove; + reduceInitial = initial; + resetNeeded = true; + return group; + } + + // A convenience method for reducing by count. + function reduceCount() { + return reduce(crossfilter_reduceIncrement, crossfilter_reduceDecrement, crossfilter_zero); + } + + // A convenience method for reducing by sum(value). + function reduceSum(value) { + return reduce(crossfilter_reduceAdd(value), crossfilter_reduceSubtract(value), crossfilter_zero); + } + + // Returns the computed reduce value. + function value() { + if (resetNeeded) reset(), resetNeeded = false; + return reduceValue; + } + + return reduceCount(); + } + + // Returns the number of records in this crossfilter, irrespective of any filters. + function size() { + return n; + } + + return arguments.length + ? add(arguments[0]) + : crossfilter; +} + +// Returns an array of size n, big enough to store ids up to m. +function crossfilter_index(n, m) { + return (m < 0x101 + ? crossfilter_array8 : m < 0x10001 + ? crossfilter_array16 + : crossfilter_array32)(n); +} + +// Constructs a new array of size n, with sequential values from 0 to n - 1. +function crossfilter_range(n) { + var range = crossfilter_index(n, n); + for (var i = -1; ++i < n;) range[i] = i; + return range; +} + +function crossfilter_capacity(w) { + return w === 8 + ? 0x100 : w === 16 + ? 0x10000 + : 0x100000000; +} +})(this); diff --git a/src/errors/static/js/nvd3/lib/crossfilter.min.js b/src/errors/static/js/nvd3/lib/crossfilter.min.js new file mode 100644 index 00000000..981f0d64 --- /dev/null +++ b/src/errors/static/js/nvd3/lib/crossfilter.min.js @@ -0,0 +1 @@ +(function(a){function b(a){return a}function c(a,b){for(var c=0,d=b.length,e=new Array(d);c>1;a(b[f])>1;c>>1)+1;while(--f>0)d(a,f,e,b);return a}function c(a,b,c){var e=c-b,f;while(--e>0)f=a[b],a[b]=a[b+e],a[b+e]=f,d(a,1,e,b);return a}function d(b,c,d,e){var f=b[--e+c],g=a(f),h;while((h=c<<1)<=d){ha(b[e+h+1])&&h++;if(g<=a(b[e+h]))break;b[e+c]=b[e+h],c=h}b[e+c]=f}return b.sort=c,b}function i(a){function c(c,d,e,f){var g=new Array(f=Math.min(e-d,f)),h,i,j,k;for(i=0;ih)g[0]=k,h=a(b(g,0,f)[0]);while(++dc&&a(b[f-1])>h;--f)b[f]=b[f-1];b[f]=g}return b}return b}function m(a){function c(a,c,e){return(e-c>1,j=i-f,k=i+f,l=b[g],m=a(l),n=b[j],o=a(n),p=b[i],q=a(p),r=b[k],s=a(r),t=b[h],u=a(t),v;m>o&&(v=l,l=n,n=v,v=m,m=o,o=v),s>u&&(v=r,r=t,t=v,v=s,s=u,u=v),m>q&&(v=l,l=p,p=v,v=m,m=q,q=v),o>q&&(v=n,n=p,p=v,v=o,o=q,q=v),m>s&&(v=l,l=r,r=v,v=m,m=s,s=v),q>s&&(v=p,p=r,r=v,v=q,q=s,s=v),o>u&&(v=n,n=t,t=v,v=o,o=u,u=v),o>q&&(v=n,n=p,p=v,v=o,o=q,q=v),s>u&&(v=r,r=t,t=v,v=s,s=u,u=v);var w=n,x=o,y=r,z=s;b[g]=l,b[j]=b[d],b[i]=p,b[k]=b[e-1],b[h]=t;var A=d+1,B=e-2,C=x<=z&&x>=z;if(C)for(var D=A;D<=B;++D){var E=b[D],F=a(E);if(Fx)for(;;){var G=a(b[B]);if(G>x){B--;continue}if(Gz)for(;;){var G=a(b[B]);if(G>z){B--;if(Bh){var H,G;while((H=a(b[A]))<=x&&H>=x)++A;while((G=a(b[B]))<=z&&G>=z)--B;for(var D=A;D<=B;D++){var E=b[D],F=a(E);if(F<=x&&F>=x)D!==A&&(b[D]=b[A],b[A]=E),A++;else if(F<=z&&F>=z)for(;;){var G=a(b[B]);if(G<=z&&G>=z){B--;if(BN)for(b=N,c=Math.min(e,O);bO)for(b=Math.max(e,O),c=f;b=N&&a>0)k[d=D[c]]||(b.push(e[d]),--a);return b}function X(a){function K(b,c,g,i){function Q(){++n===m&&(p=s(p,j<<=1),h=s(h,j),m=G(j))}var o=d,p=E(n,m),t=v,u=F,w=n,y=0,z=0,A,B,C,D,K,L;J&&(t=u=x),d=new Array(n),n=0,h=w>1?r(h,f):E(f,m),w&&(C=(B=o[0]).key);while(z=D))++z;while(zL)){h[A=c[z]+g]=n,k[A]&q||(K.value=t(K.value,e[A]));if(++z>=i)break;D=a(b[z])}Q()}while(yy)for(y=0;y1?(H=M,I=O):(n===1?(H=N,I=P):(H=x,I=x),h=null),l[A]=H}function M(a,b,c){if(a===p||J)return;var f,g,i,j;for(f=0,i=b.length;fj&&(k=s(k,j<<=1)),P(e,0,f),Q(e,0,f),o}function t(){function i(a,d,g){var i;if(h)return;for(i=d;i= 0 ? value.substring(i) : (i = value.length, ""), t = []; + while (i > 0) t.push(value.substring(i -= 3, i + 3)); + return t.reverse().join(",") + f; + } + function d3_formatPrefix(d, i) { + var k = Math.pow(10, Math.abs(8 - i) * 3); + return { + scale: i > 8 ? function(d) { + return d / k; + } : function(d) { + return d * k; + }, + symbol: d + }; + } + function d3_ease_clamp(f) { + return function(t) { + return t <= 0 ? 0 : t >= 1 ? 1 : f(t); + }; + } + function d3_ease_reverse(f) { + return function(t) { + return 1 - f(1 - t); + }; + } + function d3_ease_reflect(f) { + return function(t) { + return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); + }; + } + function d3_ease_identity(t) { + return t; + } + function d3_ease_poly(e) { + return function(t) { + return Math.pow(t, e); + }; + } + function d3_ease_sin(t) { + return 1 - Math.cos(t * Math.PI / 2); + } + function d3_ease_exp(t) { + return Math.pow(2, 10 * (t - 1)); + } + function d3_ease_circle(t) { + return 1 - Math.sqrt(1 - t * t); + } + function d3_ease_elastic(a, p) { + var s; + if (arguments.length < 2) p = .45; + if (arguments.length < 1) { + a = 1; + s = p / 4; + } else s = p / (2 * Math.PI) * Math.asin(1 / a); + return function(t) { + return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p); + }; + } + function d3_ease_back(s) { + if (!s) s = 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; + } + function d3_ease_bounce(t) { + return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; + } + function d3_eventCancel() { + d3.event.stopPropagation(); + d3.event.preventDefault(); + } + function d3_eventSource() { + var e = d3.event, s; + while (s = e.sourceEvent) e = s; + return e; + } + function d3_eventDispatch(target) { + var dispatch = new d3_dispatch, i = 0, n = arguments.length; + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + dispatch.of = function(thiz, argumentz) { + return function(e1) { + try { + var e0 = e1.sourceEvent = d3.event; + e1.target = target; + d3.event = e1; + dispatch[e1.type].apply(thiz, argumentz); + } finally { + d3.event = e0; + } + }; + }; + return dispatch; + } + function d3_transform(m) { + var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; + if (r0[0] * r1[1] < r1[0] * r0[1]) { + r0[0] *= -1; + r0[1] *= -1; + kx *= -1; + kz *= -1; + } + this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_transformDegrees; + this.translate = [ m.e, m.f ]; + this.scale = [ kx, ky ]; + this.skew = ky ? Math.atan2(kz, ky) * d3_transformDegrees : 0; + } + function d3_transformDot(a, b) { + return a[0] * b[0] + a[1] * b[1]; + } + function d3_transformNormalize(a) { + var k = Math.sqrt(d3_transformDot(a, a)); + if (k) { + a[0] /= k; + a[1] /= k; + } + return k; + } + function d3_transformCombine(a, b, k) { + a[0] += k * b[0]; + a[1] += k * b[1]; + return a; + } + function d3_interpolateByName(name) { + return name == "transform" ? d3.interpolateTransform : d3.interpolate; + } + function d3_uninterpolateNumber(a, b) { + b = b - (a = +a) ? 1 / (b - a) : 0; + return function(x) { + return (x - a) * b; + }; + } + function d3_uninterpolateClamp(a, b) { + b = b - (a = +a) ? 1 / (b - a) : 0; + return function(x) { + return Math.max(0, Math.min(1, (x - a) * b)); + }; + } + function d3_rgb(r, g, b) { + return new d3_Rgb(r, g, b); + } + function d3_Rgb(r, g, b) { + this.r = r; + this.g = g; + this.b = b; + } + function d3_rgb_hex(v) { + return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); + } + function d3_rgb_parse(format, rgb, hsl) { + var r = 0, g = 0, b = 0, m1, m2, name; + m1 = /([a-z]+)\((.*)\)/i.exec(format); + if (m1) { + m2 = m1[2].split(","); + switch (m1[1]) { + case "hsl": + { + return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); + } + case "rgb": + { + return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); + } + } + } + if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b); + if (format != null && format.charAt(0) === "#") { + if (format.length === 4) { + r = format.charAt(1); + r += r; + g = format.charAt(2); + g += g; + b = format.charAt(3); + b += b; + } else if (format.length === 7) { + r = format.substring(1, 3); + g = format.substring(3, 5); + b = format.substring(5, 7); + } + r = parseInt(r, 16); + g = parseInt(g, 16); + b = parseInt(b, 16); + } + return rgb(r, g, b); + } + function d3_rgb_hsl(r, g, b) { + var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; + if (d) { + s = l < .5 ? d / (max + min) : d / (2 - max - min); + if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; + h *= 60; + } else { + s = h = 0; + } + return d3_hsl(h, s, l); + } + function d3_rgb_lab(r, g, b) { + r = d3_rgb_xyz(r); + g = d3_rgb_xyz(g); + b = d3_rgb_xyz(b); + var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z); + return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); + } + function d3_rgb_xyz(r) { + return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); + } + function d3_rgb_parseNumber(c) { + var f = parseFloat(c); + return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; + } + function d3_hsl(h, s, l) { + return new d3_Hsl(h, s, l); + } + function d3_Hsl(h, s, l) { + this.h = h; + this.s = s; + this.l = l; + } + function d3_hsl_rgb(h, s, l) { + function v(h) { + if (h > 360) h -= 360; else if (h < 0) h += 360; + if (h < 60) return m1 + (m2 - m1) * h / 60; + if (h < 180) return m2; + if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; + return m1; + } + function vv(h) { + return Math.round(v(h) * 255); + } + var m1, m2; + h = h % 360; + if (h < 0) h += 360; + s = s < 0 ? 0 : s > 1 ? 1 : s; + l = l < 0 ? 0 : l > 1 ? 1 : l; + m2 = l <= .5 ? l * (1 + s) : l + s - l * s; + m1 = 2 * l - m2; + return d3_rgb(vv(h + 120), vv(h), vv(h - 120)); + } + function d3_hcl(h, c, l) { + return new d3_Hcl(h, c, l); + } + function d3_Hcl(h, c, l) { + this.h = h; + this.c = c; + this.l = l; + } + function d3_hcl_lab(h, c, l) { + return d3_lab(l, Math.cos(h *= Math.PI / 180) * c, Math.sin(h) * c); + } + function d3_lab(l, a, b) { + return new d3_Lab(l, a, b); + } + function d3_Lab(l, a, b) { + this.l = l; + this.a = a; + this.b = b; + } + function d3_lab_rgb(l, a, b) { + var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; + x = d3_lab_xyz(x) * d3_lab_X; + y = d3_lab_xyz(y) * d3_lab_Y; + z = d3_lab_xyz(z) * d3_lab_Z; + return d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z)); + } + function d3_lab_hcl(l, a, b) { + return d3_hcl(Math.atan2(b, a) / Math.PI * 180, Math.sqrt(a * a + b * b), l); + } + function d3_lab_xyz(x) { + return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; + } + function d3_xyz_lab(x) { + return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; + } + function d3_xyz_rgb(r) { + return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); + } + function d3_selection(groups) { + d3_arraySubclass(groups, d3_selectionPrototype); + return groups; + } + function d3_selection_selector(selector) { + return function() { + return d3_select(selector, this); + }; + } + function d3_selection_selectorAll(selector) { + return function() { + return d3_selectAll(selector, this); + }; + } + function d3_selection_attr(name, value) { + function attrNull() { + this.removeAttribute(name); + } + function attrNullNS() { + this.removeAttributeNS(name.space, name.local); + } + function attrConstant() { + this.setAttribute(name, value); + } + function attrConstantNS() { + this.setAttributeNS(name.space, name.local, value); + } + function attrFunction() { + var x = value.apply(this, arguments); + if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); + } + function attrFunctionNS() { + var x = value.apply(this, arguments); + if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); + } + name = d3.ns.qualify(name); + return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; + } + function d3_selection_classedRe(name) { + return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); + } + function d3_selection_classed(name, value) { + function classedConstant() { + var i = -1; + while (++i < n) name[i](this, value); + } + function classedFunction() { + var i = -1, x = value.apply(this, arguments); + while (++i < n) name[i](this, x); + } + name = name.trim().split(/\s+/).map(d3_selection_classedName); + var n = name.length; + return typeof value === "function" ? classedFunction : classedConstant; + } + function d3_selection_classedName(name) { + var re = d3_selection_classedRe(name); + return function(node, value) { + if (c = node.classList) return value ? c.add(name) : c.remove(name); + var c = node.className, cb = c.baseVal != null, cv = cb ? c.baseVal : c; + if (value) { + re.lastIndex = 0; + if (!re.test(cv)) { + cv = d3_collapse(cv + " " + name); + if (cb) c.baseVal = cv; else node.className = cv; + } + } else if (cv) { + cv = d3_collapse(cv.replace(re, " ")); + if (cb) c.baseVal = cv; else node.className = cv; + } + }; + } + function d3_selection_style(name, value, priority) { + function styleNull() { + this.style.removeProperty(name); + } + function styleConstant() { + this.style.setProperty(name, value, priority); + } + function styleFunction() { + var x = value.apply(this, arguments); + if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); + } + return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; + } + function d3_selection_property(name, value) { + function propertyNull() { + delete this[name]; + } + function propertyConstant() { + this[name] = value; + } + function propertyFunction() { + var x = value.apply(this, arguments); + if (x == null) delete this[name]; else this[name] = x; + } + return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; + } + function d3_selection_dataNode(data) { + return { + __data__: data + }; + } + function d3_selection_filter(selector) { + return function() { + return d3_selectMatches(this, selector); + }; + } + function d3_selection_sortComparator(comparator) { + if (!arguments.length) comparator = d3.ascending; + return function(a, b) { + return comparator(a && a.__data__, b && b.__data__); + }; + } + function d3_selection_on(type, listener, capture) { + function onRemove() { + var wrapper = this[name]; + if (wrapper) { + this.removeEventListener(type, wrapper, wrapper.$); + delete this[name]; + } + } + function onAdd() { + function wrapper(e) { + var o = d3.event; + d3.event = e; + args[0] = node.__data__; + try { + listener.apply(node, args); + } finally { + d3.event = o; + } + } + var node = this, args = arguments; + onRemove.call(this); + this.addEventListener(type, this[name] = wrapper, wrapper.$ = capture); + wrapper._ = listener; + } + var name = "__on" + type, i = type.indexOf("."); + if (i > 0) type = type.substring(0, i); + return listener ? onAdd : onRemove; + } + function d3_selection_each(groups, callback) { + for (var j = 0, m = groups.length; j < m; j++) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { + if (node = group[i]) callback(node, i, j); + } + } + return groups; + } + function d3_selection_enter(selection) { + d3_arraySubclass(selection, d3_selection_enterPrototype); + return selection; + } + function d3_transition(groups, id, time) { + d3_arraySubclass(groups, d3_transitionPrototype); + var tweens = new d3_Map, event = d3.dispatch("start", "end"), ease = d3_transitionEase; + groups.id = id; + groups.time = time; + groups.tween = function(name, tween) { + if (arguments.length < 2) return tweens.get(name); + if (tween == null) tweens.remove(name); else tweens.set(name, tween); + return groups; + }; + groups.ease = function(value) { + if (!arguments.length) return ease; + ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments); + return groups; + }; + groups.each = function(type, listener) { + if (arguments.length < 2) return d3_transition_each.call(groups, type); + event.on(type, listener); + return groups; + }; + d3.timer(function(elapsed) { + return d3_selection_each(groups, function(node, i, j) { + function start(elapsed) { + if (lock.active > id) return stop(); + lock.active = id; + tweens.forEach(function(key, value) { + if (value = value.call(node, d, i)) { + tweened.push(value); + } + }); + event.start.call(node, d, i); + if (!tick(elapsed)) d3.timer(tick, 0, time); + return 1; + } + function tick(elapsed) { + if (lock.active !== id) return stop(); + var t = (elapsed - delay) / duration, e = ease(t), n = tweened.length; + while (n > 0) { + tweened[--n].call(node, e); + } + if (t >= 1) { + stop(); + d3_transitionId = id; + event.end.call(node, d, i); + d3_transitionId = 0; + return 1; + } + } + function stop() { + if (!--lock.count) delete node.__transition__; + return 1; + } + var tweened = [], delay = node.delay, duration = node.duration, lock = (node = node.node).__transition__ || (node.__transition__ = { + active: 0, + count: 0 + }), d = node.__data__; + ++lock.count; + delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time); + }); + }, 0, time); + return groups; + } + function d3_transition_each(callback) { + var id = d3_transitionId, ease = d3_transitionEase, delay = d3_transitionDelay, duration = d3_transitionDuration; + d3_transitionId = this.id; + d3_transitionEase = this.ease(); + d3_selection_each(this, function(node, i, j) { + d3_transitionDelay = node.delay; + d3_transitionDuration = node.duration; + callback.call(node = node.node, node.__data__, i, j); + }); + d3_transitionId = id; + d3_transitionEase = ease; + d3_transitionDelay = delay; + d3_transitionDuration = duration; + return this; + } + function d3_tweenNull(d, i, a) { + return a != "" && d3_tweenRemove; + } + function d3_tweenByName(b, name) { + return d3.tween(b, d3_interpolateByName(name)); + } + function d3_timer_step() { + var elapsed, now = Date.now(), t1 = d3_timer_queue; + while (t1) { + elapsed = now - t1.then; + if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed); + t1 = t1.next; + } + var delay = d3_timer_flush() - now; + if (delay > 24) { + if (isFinite(delay)) { + clearTimeout(d3_timer_timeout); + d3_timer_timeout = setTimeout(d3_timer_step, delay); + } + d3_timer_interval = 0; + } else { + d3_timer_interval = 1; + d3_timer_frame(d3_timer_step); + } + } + function d3_timer_flush() { + var t0 = null, t1 = d3_timer_queue, then = Infinity; + while (t1) { + if (t1.flush) { + t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next; + } else { + then = Math.min(then, t1.then + t1.delay); + t1 = (t0 = t1).next; + } + } + return then; + } + function d3_mousePoint(container, e) { + var svg = container.ownerSVGElement || container; + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + if (d3_mouse_bug44083 < 0 && (window.scrollX || window.scrollY)) { + svg = d3.select(document.body).append("svg").style("position", "absolute").style("top", 0).style("left", 0); + var ctm = svg[0][0].getScreenCTM(); + d3_mouse_bug44083 = !(ctm.f || ctm.e); + svg.remove(); + } + if (d3_mouse_bug44083) { + point.x = e.pageX; + point.y = e.pageY; + } else { + point.x = e.clientX; + point.y = e.clientY; + } + point = point.matrixTransform(container.getScreenCTM().inverse()); + return [ point.x, point.y ]; + } + var rect = container.getBoundingClientRect(); + return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; + } + function d3_noop() {} + function d3_scaleExtent(domain) { + var start = domain[0], stop = domain[domain.length - 1]; + return start < stop ? [ start, stop ] : [ stop, start ]; + } + function d3_scaleRange(scale) { + return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); + } + function d3_scale_nice(domain, nice) { + var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; + if (x1 < x0) { + dx = i0, i0 = i1, i1 = dx; + dx = x0, x0 = x1, x1 = dx; + } + if (nice = nice(x1 - x0)) { + domain[i0] = nice.floor(x0); + domain[i1] = nice.ceil(x1); + } + return domain; + } + function d3_scale_niceDefault() { + return Math; + } + function d3_scale_linear(domain, range, interpolate, clamp) { + function rescale() { + var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; + output = linear(domain, range, uninterpolate, interpolate); + input = linear(range, domain, uninterpolate, d3.interpolate); + return scale; + } + function scale(x) { + return output(x); + } + var output, input; + scale.invert = function(y) { + return input(y); + }; + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = x.map(Number); + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.rangeRound = function(x) { + return scale.range(x).interpolate(d3.interpolateRound); + }; + scale.clamp = function(x) { + if (!arguments.length) return clamp; + clamp = x; + return rescale(); + }; + scale.interpolate = function(x) { + if (!arguments.length) return interpolate; + interpolate = x; + return rescale(); + }; + scale.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + scale.tickFormat = function(m) { + return d3_scale_linearTickFormat(domain, m); + }; + scale.nice = function() { + d3_scale_nice(domain, d3_scale_linearNice); + return rescale(); + }; + scale.copy = function() { + return d3_scale_linear(domain, range, interpolate, clamp); + }; + return rescale(); + } + function d3_scale_linearRebind(scale, linear) { + return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); + } + function d3_scale_linearNice(dx) { + dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1); + return dx && { + floor: function(x) { + return Math.floor(x / dx) * dx; + }, + ceil: function(x) { + return Math.ceil(x / dx) * dx; + } + }; + } + function d3_scale_linearTickRange(domain, m) { + var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step; + if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; + extent[0] = Math.ceil(extent[0] / step) * step; + extent[1] = Math.floor(extent[1] / step) * step + step * .5; + extent[2] = step; + return extent; + } + function d3_scale_linearTicks(domain, m) { + return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); + } + function d3_scale_linearTickFormat(domain, m) { + return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f"); + } + function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { + var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); + return function(x) { + return i(u(x)); + }; + } + function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { + var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; + if (domain[k] < domain[0]) { + domain = domain.slice().reverse(); + range = range.slice().reverse(); + } + while (++j <= k) { + u.push(uninterpolate(domain[j - 1], domain[j])); + i.push(interpolate(range[j - 1], range[j])); + } + return function(x) { + var j = d3.bisect(domain, x, 1, k) - 1; + return i[j](u[j](x)); + }; + } + function d3_scale_log(linear, log) { + function scale(x) { + return linear(log(x)); + } + var pow = log.pow; + scale.invert = function(x) { + return pow(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return linear.domain().map(pow); + log = x[0] < 0 ? d3_scale_logn : d3_scale_logp; + pow = log.pow; + linear.domain(x.map(log)); + return scale; + }; + scale.nice = function() { + linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault)); + return scale; + }; + scale.ticks = function() { + var extent = d3_scaleExtent(linear.domain()), ticks = []; + if (extent.every(isFinite)) { + var i = Math.floor(extent[0]), j = Math.ceil(extent[1]), u = pow(extent[0]), v = pow(extent[1]); + if (log === d3_scale_logn) { + ticks.push(pow(i)); + for (; i++ < j; ) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k); + } else { + for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k); + ticks.push(pow(i)); + } + for (i = 0; ticks[i] < u; i++) {} + for (j = ticks.length; ticks[j - 1] > v; j--) {} + ticks = ticks.slice(i, j); + } + return ticks; + }; + scale.tickFormat = function(n, format) { + if (arguments.length < 2) format = d3_scale_logFormat; + if (arguments.length < 1) return format; + var k = Math.max(.1, n / scale.ticks().length), f = log === d3_scale_logn ? (e = -1e-12, Math.floor) : (e = 1e-12, Math.ceil), e; + return function(d) { + return d / pow(f(log(d) + e)) <= k ? format(d) : ""; + }; + }; + scale.copy = function() { + return d3_scale_log(linear.copy(), log); + }; + return d3_scale_linearRebind(scale, linear); + } + function d3_scale_logp(x) { + return Math.log(x < 0 ? 0 : x) / Math.LN10; + } + function d3_scale_logn(x) { + return -Math.log(x > 0 ? 0 : -x) / Math.LN10; + } + function d3_scale_pow(linear, exponent) { + function scale(x) { + return linear(powp(x)); + } + var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); + scale.invert = function(x) { + return powb(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return linear.domain().map(powb); + linear.domain(x.map(powp)); + return scale; + }; + scale.ticks = function(m) { + return d3_scale_linearTicks(scale.domain(), m); + }; + scale.tickFormat = function(m) { + return d3_scale_linearTickFormat(scale.domain(), m); + }; + scale.nice = function() { + return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice)); + }; + scale.exponent = function(x) { + if (!arguments.length) return exponent; + var domain = scale.domain(); + powp = d3_scale_powPow(exponent = x); + powb = d3_scale_powPow(1 / exponent); + return scale.domain(domain); + }; + scale.copy = function() { + return d3_scale_pow(linear.copy(), exponent); + }; + return d3_scale_linearRebind(scale, linear); + } + function d3_scale_powPow(e) { + return function(x) { + return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); + }; + } + function d3_scale_ordinal(domain, ranger) { + function scale(x) { + return range[((index.get(x) || index.set(x, domain.push(x))) - 1) % range.length]; + } + function steps(start, step) { + return d3.range(domain.length).map(function(i) { + return start + step * i; + }); + } + var index, range, rangeBand; + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = []; + index = new d3_Map; + var i = -1, n = x.length, xi; + while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); + return scale[ranger.t].apply(scale, ranger.a); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + rangeBand = 0; + ranger = { + t: "range", + a: arguments + }; + return scale; + }; + scale.rangePoints = function(x, padding) { + if (arguments.length < 2) padding = 0; + var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding); + range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step); + rangeBand = 0; + ranger = { + t: "rangePoints", + a: arguments + }; + return scale; + }; + scale.rangeBands = function(x, padding, outerPadding) { + if (arguments.length < 2) padding = 0; + if (arguments.length < 3) outerPadding = padding; + var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); + range = steps(start + step * outerPadding, step); + if (reverse) range.reverse(); + rangeBand = step * (1 - padding); + ranger = { + t: "rangeBands", + a: arguments + }; + return scale; + }; + scale.rangeRoundBands = function(x, padding, outerPadding) { + if (arguments.length < 2) padding = 0; + if (arguments.length < 3) outerPadding = padding; + var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step; + range = steps(start + Math.round(error / 2), step); + if (reverse) range.reverse(); + rangeBand = Math.round(step * (1 - padding)); + ranger = { + t: "rangeRoundBands", + a: arguments + }; + return scale; + }; + scale.rangeBand = function() { + return rangeBand; + }; + scale.rangeExtent = function() { + return d3_scaleExtent(ranger.a[0]); + }; + scale.copy = function() { + return d3_scale_ordinal(domain, ranger); + }; + return scale.domain(domain); + } + function d3_scale_quantile(domain, range) { + function rescale() { + var k = 0, n = domain.length, q = range.length; + thresholds = []; + while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); + return scale; + } + function scale(x) { + if (isNaN(x = +x)) return NaN; + return range[d3.bisect(thresholds, x)]; + } + var thresholds; + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = x.filter(function(d) { + return !isNaN(d); + }).sort(d3.ascending); + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.quantiles = function() { + return thresholds; + }; + scale.copy = function() { + return d3_scale_quantile(domain, range); + }; + return rescale(); + } + function d3_scale_quantize(x0, x1, range) { + function scale(x) { + return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; + } + function rescale() { + kx = range.length / (x1 - x0); + i = range.length - 1; + return scale; + } + var kx, i; + scale.domain = function(x) { + if (!arguments.length) return [ x0, x1 ]; + x0 = +x[0]; + x1 = +x[x.length - 1]; + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.copy = function() { + return d3_scale_quantize(x0, x1, range); + }; + return rescale(); + } + function d3_scale_threshold(domain, range) { + function scale(x) { + return range[d3.bisect(domain, x)]; + } + scale.domain = function(_) { + if (!arguments.length) return domain; + domain = _; + return scale; + }; + scale.range = function(_) { + if (!arguments.length) return range; + range = _; + return scale; + }; + scale.copy = function() { + return d3_scale_threshold(domain, range); + }; + return scale; + } + function d3_scale_identity(domain) { + function identity(x) { + return +x; + } + identity.invert = identity; + identity.domain = identity.range = function(x) { + if (!arguments.length) return domain; + domain = x.map(identity); + return identity; + }; + identity.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + identity.tickFormat = function(m) { + return d3_scale_linearTickFormat(domain, m); + }; + identity.copy = function() { + return d3_scale_identity(domain); + }; + return identity; + } + function d3_svg_arcInnerRadius(d) { + return d.innerRadius; + } + function d3_svg_arcOuterRadius(d) { + return d.outerRadius; + } + function d3_svg_arcStartAngle(d) { + return d.startAngle; + } + function d3_svg_arcEndAngle(d) { + return d.endAngle; + } + function d3_svg_line(projection) { + function line(data) { + function segment() { + segments.push("M", interpolate(projection(points), tension)); + } + var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); + while (++i < n) { + if (defined.call(this, d = data[i], i)) { + points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); + } else if (points.length) { + segment(); + points = []; + } + } + if (points.length) segment(); + return segments.length ? segments.join("") : null; + } + var x = d3_svg_lineX, y = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; + line.x = function(_) { + if (!arguments.length) return x; + x = _; + return line; + }; + line.y = function(_) { + if (!arguments.length) return y; + y = _; + return line; + }; + line.defined = function(_) { + if (!arguments.length) return defined; + defined = _; + return line; + }; + line.interpolate = function(_) { + if (!arguments.length) return interpolateKey; + if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; + return line; + }; + line.tension = function(_) { + if (!arguments.length) return tension; + tension = _; + return line; + }; + return line; + } + function d3_svg_lineX(d) { + return d[0]; + } + function d3_svg_lineY(d) { + return d[1]; + } + function d3_svg_lineLinear(points) { + return points.join("L"); + } + function d3_svg_lineLinearClosed(points) { + return d3_svg_lineLinear(points) + "Z"; + } + function d3_svg_lineStepBefore(points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; + while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); + return path.join(""); + } + function d3_svg_lineStepAfter(points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; + while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); + return path.join(""); + } + function d3_svg_lineCardinalOpen(points, tension) { + return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension)); + } + function d3_svg_lineCardinalClosed(points, tension) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); + } + function d3_svg_lineCardinal(points, tension, closed) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); + } + function d3_svg_lineHermite(points, tangents) { + if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { + return d3_svg_lineLinear(points); + } + var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; + if (quad) { + path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; + p0 = points[1]; + pi = 2; + } + if (tangents.length > 1) { + t = tangents[1]; + p = points[pi]; + pi++; + path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; + for (var i = 2; i < tangents.length; i++, pi++) { + p = points[pi]; + t = tangents[i]; + path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; + } + } + if (quad) { + var lp = points[pi]; + path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; + } + return path; + } + function d3_svg_lineCardinalTangents(points, tension) { + var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; + while (++i < n) { + p0 = p1; + p1 = p2; + p2 = points[i]; + tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); + } + return tangents; + } + function d3_svg_lineBasis(points) { + if (points.length < 3) return d3_svg_lineLinear(points); + var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0 ]; + d3_svg_lineBasisBezier(path, px, py); + while (++i < n) { + pi = points[i]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + i = -1; + while (++i < 2) { + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); + } + function d3_svg_lineBasisOpen(points) { + if (points.length < 4) return d3_svg_lineLinear(points); + var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; + while (++i < 3) { + pi = points[i]; + px.push(pi[0]); + py.push(pi[1]); + } + path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); + --i; + while (++i < n) { + pi = points[i]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); + } + function d3_svg_lineBasisClosed(points) { + var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; + while (++i < 4) { + pi = points[i % n]; + px.push(pi[0]); + py.push(pi[1]); + } + path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; + --i; + while (++i < m) { + pi = points[i % n]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); + } + function d3_svg_lineBundle(points, tension) { + var n = points.length - 1; + if (n) { + var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; + while (++i <= n) { + p = points[i]; + t = i / n; + p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); + p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); + } + } + return d3_svg_lineBasis(points); + } + function d3_svg_lineDot4(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; + } + function d3_svg_lineBasisBezier(path, x, y) { + path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); + } + function d3_svg_lineSlope(p0, p1) { + return (p1[1] - p0[1]) / (p1[0] - p0[0]); + } + function d3_svg_lineFiniteDifferences(points) { + var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); + while (++i < j) { + m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; + } + m[i] = d; + return m; + } + function d3_svg_lineMonotoneTangents(points) { + var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; + while (++i < j) { + d = d3_svg_lineSlope(points[i], points[i + 1]); + if (Math.abs(d) < 1e-6) { + m[i] = m[i + 1] = 0; + } else { + a = m[i] / d; + b = m[i + 1] / d; + s = a * a + b * b; + if (s > 9) { + s = d * 3 / Math.sqrt(s); + m[i] = s * a; + m[i + 1] = s * b; + } + } + } + i = -1; + while (++i <= j) { + s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); + tangents.push([ s || 0, m[i] * s || 0 ]); + } + return tangents; + } + function d3_svg_lineMonotone(points) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); + } + function d3_svg_lineRadial(points) { + var point, i = -1, n = points.length, r, a; + while (++i < n) { + point = points[i]; + r = point[0]; + a = point[1] + d3_svg_arcOffset; + point[0] = r * Math.cos(a); + point[1] = r * Math.sin(a); + } + return points; + } + function d3_svg_area(projection) { + function area(data) { + function segment() { + segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); + } + var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { + return x; + } : d3_functor(x1), fy1 = y0 === y1 ? function() { + return y; + } : d3_functor(y1), x, y; + while (++i < n) { + if (defined.call(this, d = data[i], i)) { + points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); + points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); + } else if (points0.length) { + segment(); + points0 = []; + points1 = []; + } + } + if (points0.length) segment(); + return segments.length ? segments.join("") : null; + } + var x0 = d3_svg_lineX, x1 = d3_svg_lineX, y0 = 0, y1 = d3_svg_lineY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7; + area.x = function(_) { + if (!arguments.length) return x1; + x0 = x1 = _; + return area; + }; + area.x0 = function(_) { + if (!arguments.length) return x0; + x0 = _; + return area; + }; + area.x1 = function(_) { + if (!arguments.length) return x1; + x1 = _; + return area; + }; + area.y = function(_) { + if (!arguments.length) return y1; + y0 = y1 = _; + return area; + }; + area.y0 = function(_) { + if (!arguments.length) return y0; + y0 = _; + return area; + }; + area.y1 = function(_) { + if (!arguments.length) return y1; + y1 = _; + return area; + }; + area.defined = function(_) { + if (!arguments.length) return defined; + defined = _; + return area; + }; + area.interpolate = function(_) { + if (!arguments.length) return interpolateKey; + if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; + interpolateReverse = interpolate.reverse || interpolate; + L = interpolate.closed ? "M" : "L"; + return area; + }; + area.tension = function(_) { + if (!arguments.length) return tension; + tension = _; + return area; + }; + return area; + } + function d3_svg_chordSource(d) { + return d.source; + } + function d3_svg_chordTarget(d) { + return d.target; + } + function d3_svg_chordRadius(d) { + return d.radius; + } + function d3_svg_chordStartAngle(d) { + return d.startAngle; + } + function d3_svg_chordEndAngle(d) { + return d.endAngle; + } + function d3_svg_diagonalProjection(d) { + return [ d.x, d.y ]; + } + function d3_svg_diagonalRadialProjection(projection) { + return function() { + var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset; + return [ r * Math.cos(a), r * Math.sin(a) ]; + }; + } + function d3_svg_symbolSize() { + return 64; + } + function d3_svg_symbolType() { + return "circle"; + } + function d3_svg_symbolCircle(size) { + var r = Math.sqrt(size / Math.PI); + return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; + } + function d3_svg_axisX(selection, x) { + selection.attr("transform", function(d) { + return "translate(" + x(d) + ",0)"; + }); + } + function d3_svg_axisY(selection, y) { + selection.attr("transform", function(d) { + return "translate(0," + y(d) + ")"; + }); + } + function d3_svg_axisSubdivide(scale, ticks, m) { + subticks = []; + if (m && ticks.length > 1) { + var extent = d3_scaleExtent(scale.domain()), subticks, i = -1, n = ticks.length, d = (ticks[1] - ticks[0]) / ++m, j, v; + while (++i < n) { + for (j = m; --j > 0; ) { + if ((v = +ticks[i] - j * d) >= extent[0]) { + subticks.push(v); + } + } + } + for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1]; ) { + subticks.push(v); + } + } + return subticks; + } + function d3_behavior_zoomDelta() { + if (!d3_behavior_zoomDiv) { + d3_behavior_zoomDiv = d3.select("body").append("div").style("visibility", "hidden").style("top", 0).style("height", 0).style("width", 0).style("overflow-y", "scroll").append("div").style("height", "2000px").node().parentNode; + } + var e = d3.event, delta; + try { + d3_behavior_zoomDiv.scrollTop = 1e3; + d3_behavior_zoomDiv.dispatchEvent(e); + delta = 1e3 - d3_behavior_zoomDiv.scrollTop; + } catch (error) { + delta = e.wheelDelta || -e.detail * 5; + } + return delta; + } + function d3_layout_bundlePath(link) { + var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; + while (start !== lca) { + start = start.parent; + points.push(start); + } + var k = points.length; + while (end !== lca) { + points.splice(k, 0, end); + end = end.parent; + } + return points; + } + function d3_layout_bundleAncestors(node) { + var ancestors = [], parent = node.parent; + while (parent != null) { + ancestors.push(node); + node = parent; + parent = parent.parent; + } + ancestors.push(node); + return ancestors; + } + function d3_layout_bundleLeastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; + while (aNode === bNode) { + sharedNode = aNode; + aNode = aNodes.pop(); + bNode = bNodes.pop(); + } + return sharedNode; + } + function d3_layout_forceDragstart(d) { + d.fixed |= 2; + } + function d3_layout_forceDragend(d) { + d.fixed &= 1; + } + function d3_layout_forceMouseover(d) { + d.fixed |= 4; + } + function d3_layout_forceMouseout(d) { + d.fixed &= 3; + } + function d3_layout_forceAccumulate(quad, alpha, charges) { + var cx = 0, cy = 0; + quad.charge = 0; + if (!quad.leaf) { + var nodes = quad.nodes, n = nodes.length, i = -1, c; + while (++i < n) { + c = nodes[i]; + if (c == null) continue; + d3_layout_forceAccumulate(c, alpha, charges); + quad.charge += c.charge; + cx += c.charge * c.cx; + cy += c.charge * c.cy; + } + } + if (quad.point) { + if (!quad.leaf) { + quad.point.x += Math.random() - .5; + quad.point.y += Math.random() - .5; + } + var k = alpha * charges[quad.point.index]; + quad.charge += quad.pointCharge = k; + cx += k * quad.point.x; + cy += k * quad.point.y; + } + quad.cx = cx / quad.charge; + quad.cy = cy / quad.charge; + } + function d3_layout_forceLinkDistance(link) { + return 20; + } + function d3_layout_forceLinkStrength(link) { + return 1; + } + function d3_layout_stackX(d) { + return d.x; + } + function d3_layout_stackY(d) { + return d.y; + } + function d3_layout_stackOut(d, y0, y) { + d.y0 = y0; + d.y = y; + } + function d3_layout_stackOrderDefault(data) { + return d3.range(data.length); + } + function d3_layout_stackOffsetZero(data) { + var j = -1, m = data[0].length, y0 = []; + while (++j < m) y0[j] = 0; + return y0; + } + function d3_layout_stackMaxIndex(array) { + var i = 1, j = 0, v = array[0][1], k, n = array.length; + for (; i < n; ++i) { + if ((k = array[i][1]) > v) { + j = i; + v = k; + } + } + return j; + } + function d3_layout_stackReduceSum(d) { + return d.reduce(d3_layout_stackSum, 0); + } + function d3_layout_stackSum(p, d) { + return p + d[1]; + } + function d3_layout_histogramBinSturges(range, values) { + return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); + } + function d3_layout_histogramBinFixed(range, n) { + var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; + while (++x <= n) f[x] = m * x + b; + return f; + } + function d3_layout_histogramRange(values) { + return [ d3.min(values), d3.max(values) ]; + } + function d3_layout_hierarchyRebind(object, hierarchy) { + d3.rebind(object, hierarchy, "sort", "children", "value"); + object.links = d3_layout_hierarchyLinks; + object.nodes = function(d) { + d3_layout_hierarchyInline = true; + return (object.nodes = object)(d); + }; + return object; + } + function d3_layout_hierarchyChildren(d) { + return d.children; + } + function d3_layout_hierarchyValue(d) { + return d.value; + } + function d3_layout_hierarchySort(a, b) { + return b.value - a.value; + } + function d3_layout_hierarchyLinks(nodes) { + return d3.merge(nodes.map(function(parent) { + return (parent.children || []).map(function(child) { + return { + source: parent, + target: child + }; + }); + })); + } + function d3_layout_packSort(a, b) { + return a.value - b.value; + } + function d3_layout_packInsert(a, b) { + var c = a._pack_next; + a._pack_next = b; + b._pack_prev = a; + b._pack_next = c; + c._pack_prev = b; + } + function d3_layout_packSplice(a, b) { + a._pack_next = b; + b._pack_prev = a; + } + function d3_layout_packIntersects(a, b) { + var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; + return dr * dr - dx * dx - dy * dy > .001; + } + function d3_layout_packSiblings(node) { + function bound(node) { + xMin = Math.min(node.x - node.r, xMin); + xMax = Math.max(node.x + node.r, xMax); + yMin = Math.min(node.y - node.r, yMin); + yMax = Math.max(node.y + node.r, yMax); + } + if (!(nodes = node.children) || !(n = nodes.length)) return; + var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; + nodes.forEach(d3_layout_packLink); + a = nodes[0]; + a.x = -a.r; + a.y = 0; + bound(a); + if (n > 1) { + b = nodes[1]; + b.x = b.r; + b.y = 0; + bound(b); + if (n > 2) { + c = nodes[2]; + d3_layout_packPlace(a, b, c); + bound(c); + d3_layout_packInsert(a, c); + a._pack_prev = c; + d3_layout_packInsert(c, b); + b = a._pack_next; + for (i = 3; i < n; i++) { + d3_layout_packPlace(a, b, c = nodes[i]); + var isect = 0, s1 = 1, s2 = 1; + for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { + if (d3_layout_packIntersects(j, c)) { + isect = 1; + break; + } + } + if (isect == 1) { + for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { + if (d3_layout_packIntersects(k, c)) { + break; + } + } + } + if (isect) { + if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); + i--; + } else { + d3_layout_packInsert(a, c); + b = c; + bound(c); + } + } + } + } + var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; + for (i = 0; i < n; i++) { + c = nodes[i]; + c.x -= cx; + c.y -= cy; + cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); + } + node.r = cr; + nodes.forEach(d3_layout_packUnlink); + } + function d3_layout_packLink(node) { + node._pack_next = node._pack_prev = node; + } + function d3_layout_packUnlink(node) { + delete node._pack_next; + delete node._pack_prev; + } + function d3_layout_packTransform(node, x, y, k) { + var children = node.children; + node.x = x += k * node.x; + node.y = y += k * node.y; + node.r *= k; + if (children) { + var i = -1, n = children.length; + while (++i < n) d3_layout_packTransform(children[i], x, y, k); + } + } + function d3_layout_packPlace(a, b, c) { + var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; + if (db && (dx || dy)) { + var da = b.r + c.r, dc = dx * dx + dy * dy; + da *= da; + db *= db; + var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); + c.x = a.x + x * dx + y * dy; + c.y = a.y + x * dy - y * dx; + } else { + c.x = a.x + db; + c.y = a.y; + } + } + function d3_layout_clusterY(children) { + return 1 + d3.max(children, function(child) { + return child.y; + }); + } + function d3_layout_clusterX(children) { + return children.reduce(function(x, child) { + return x + child.x; + }, 0) / children.length; + } + function d3_layout_clusterLeft(node) { + var children = node.children; + return children && children.length ? d3_layout_clusterLeft(children[0]) : node; + } + function d3_layout_clusterRight(node) { + var children = node.children, n; + return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; + } + function d3_layout_treeSeparation(a, b) { + return a.parent == b.parent ? 1 : 2; + } + function d3_layout_treeLeft(node) { + var children = node.children; + return children && children.length ? children[0] : node._tree.thread; + } + function d3_layout_treeRight(node) { + var children = node.children, n; + return children && (n = children.length) ? children[n - 1] : node._tree.thread; + } + function d3_layout_treeSearch(node, compare) { + var children = node.children; + if (children && (n = children.length)) { + var child, n, i = -1; + while (++i < n) { + if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) { + node = child; + } + } + } + return node; + } + function d3_layout_treeRightmost(a, b) { + return a.x - b.x; + } + function d3_layout_treeLeftmost(a, b) { + return b.x - a.x; + } + function d3_layout_treeDeepest(a, b) { + return a.depth - b.depth; + } + function d3_layout_treeVisitAfter(node, callback) { + function visit(node, previousSibling) { + var children = node.children; + if (children && (n = children.length)) { + var child, previousChild = null, i = -1, n; + while (++i < n) { + child = children[i]; + visit(child, previousChild); + previousChild = child; + } + } + callback(node, previousSibling); + } + visit(node, null); + } + function d3_layout_treeShift(node) { + var shift = 0, change = 0, children = node.children, i = children.length, child; + while (--i >= 0) { + child = children[i]._tree; + child.prelim += shift; + child.mod += shift; + shift += child.shift + (change += child.change); + } + } + function d3_layout_treeMove(ancestor, node, shift) { + ancestor = ancestor._tree; + node = node._tree; + var change = shift / (node.number - ancestor.number); + ancestor.change += change; + node.change -= change; + node.shift += shift; + node.prelim += shift; + node.mod += shift; + } + function d3_layout_treeAncestor(vim, node, ancestor) { + return vim._tree.ancestor.parent == node.parent ? vim._tree.ancestor : ancestor; + } + function d3_layout_treemapPadNull(node) { + return { + x: node.x, + y: node.y, + dx: node.dx, + dy: node.dy + }; + } + function d3_layout_treemapPad(node, padding) { + var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; + if (dx < 0) { + x += dx / 2; + dx = 0; + } + if (dy < 0) { + y += dy / 2; + dy = 0; + } + return { + x: x, + y: y, + dx: dx, + dy: dy + }; + } + function d3_dsv(delimiter, mimeType) { + function dsv(url, callback) { + d3.text(url, mimeType, function(text) { + callback(text && dsv.parse(text)); + }); + } + function formatRow(row) { + return row.map(formatValue).join(delimiter); + } + function formatValue(text) { + return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; + } + var reParse = new RegExp("\r\n|[" + delimiter + "\r\n]", "g"), reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); + dsv.parse = function(text) { + var header; + return dsv.parseRows(text, function(row, i) { + if (i) { + var o = {}, j = -1, m = header.length; + while (++j < m) o[header[j]] = row[j]; + return o; + } else { + header = row; + return null; + } + }); + }; + dsv.parseRows = function(text, f) { + function token() { + if (reParse.lastIndex >= text.length) return EOF; + if (eol) { + eol = false; + return EOL; + } + var j = reParse.lastIndex; + if (text.charCodeAt(j) === 34) { + var i = j; + while (i++ < text.length) { + if (text.charCodeAt(i) === 34) { + if (text.charCodeAt(i + 1) !== 34) break; + i++; + } + } + reParse.lastIndex = i + 2; + var c = text.charCodeAt(i + 1); + if (c === 13) { + eol = true; + if (text.charCodeAt(i + 2) === 10) reParse.lastIndex++; + } else if (c === 10) { + eol = true; + } + return text.substring(j + 1, i).replace(/""/g, '"'); + } + var m = reParse.exec(text); + if (m) { + eol = m[0].charCodeAt(0) !== delimiterCode; + return text.substring(j, m.index); + } + reParse.lastIndex = text.length; + return text.substring(j); + } + var EOL = {}, EOF = {}, rows = [], n = 0, t, eol; + reParse.lastIndex = 0; + while ((t = token()) !== EOF) { + var a = []; + while (t !== EOL && t !== EOF) { + a.push(t); + t = token(); + } + if (f && !(a = f(a, n++))) continue; + rows.push(a); + } + return rows; + }; + dsv.format = function(rows) { + return rows.map(formatRow).join("\n"); + }; + return dsv; + } + function d3_geo_type(types, defaultValue) { + return function(object) { + return object && types.hasOwnProperty(object.type) ? types[object.type](object) : defaultValue; + }; + } + function d3_path_circle(radius) { + return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + +2 * radius + "z"; + } + function d3_geo_bounds(o, f) { + if (d3_geo_boundsTypes.hasOwnProperty(o.type)) d3_geo_boundsTypes[o.type](o, f); + } + function d3_geo_boundsFeature(o, f) { + d3_geo_bounds(o.geometry, f); + } + function d3_geo_boundsFeatureCollection(o, f) { + for (var a = o.features, i = 0, n = a.length; i < n; i++) { + d3_geo_bounds(a[i].geometry, f); + } + } + function d3_geo_boundsGeometryCollection(o, f) { + for (var a = o.geometries, i = 0, n = a.length; i < n; i++) { + d3_geo_bounds(a[i], f); + } + } + function d3_geo_boundsLineString(o, f) { + for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { + f.apply(null, a[i]); + } + } + function d3_geo_boundsMultiLineString(o, f) { + for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { + for (var b = a[i], j = 0, m = b.length; j < m; j++) { + f.apply(null, b[j]); + } + } + } + function d3_geo_boundsMultiPolygon(o, f) { + for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { + for (var b = a[i][0], j = 0, m = b.length; j < m; j++) { + f.apply(null, b[j]); + } + } + } + function d3_geo_boundsPoint(o, f) { + f.apply(null, o.coordinates); + } + function d3_geo_boundsPolygon(o, f) { + for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) { + f.apply(null, a[i]); + } + } + function d3_geo_greatArcSource(d) { + return d.source; + } + function d3_geo_greatArcTarget(d) { + return d.target; + } + function d3_geo_greatArcInterpolator() { + function interpolate(t) { + var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; + return [ Math.atan2(y, x) / d3_geo_radians, Math.atan2(z, Math.sqrt(x * x + y * y)) / d3_geo_radians ]; + } + var x0, y0, cy0, sy0, kx0, ky0, x1, y1, cy1, sy1, kx1, ky1, d, k; + interpolate.distance = function() { + if (d == null) k = 1 / Math.sin(d = Math.acos(Math.max(-1, Math.min(1, sy0 * sy1 + cy0 * cy1 * Math.cos(x1 - x0))))); + return d; + }; + interpolate.source = function(_) { + var cx0 = Math.cos(x0 = _[0] * d3_geo_radians), sx0 = Math.sin(x0); + cy0 = Math.cos(y0 = _[1] * d3_geo_radians); + sy0 = Math.sin(y0); + kx0 = cy0 * cx0; + ky0 = cy0 * sx0; + d = null; + return interpolate; + }; + interpolate.target = function(_) { + var cx1 = Math.cos(x1 = _[0] * d3_geo_radians), sx1 = Math.sin(x1); + cy1 = Math.cos(y1 = _[1] * d3_geo_radians); + sy1 = Math.sin(y1); + kx1 = cy1 * cx1; + ky1 = cy1 * sx1; + d = null; + return interpolate; + }; + return interpolate; + } + function d3_geo_greatArcInterpolate(a, b) { + var i = d3_geo_greatArcInterpolator().source(a).target(b); + i.distance(); + return i; + } + function d3_geom_contourStart(grid) { + var x = 0, y = 0; + while (true) { + if (grid(x, y)) { + return [ x, y ]; + } + if (x === 0) { + x = y + 1; + y = 0; + } else { + x = x - 1; + y = y + 1; + } + } + } + function d3_geom_hullCCW(i1, i2, i3, v) { + var t, a, b, c, d, e, f; + t = v[i1]; + a = t[0]; + b = t[1]; + t = v[i2]; + c = t[0]; + d = t[1]; + t = v[i3]; + e = t[0]; + f = t[1]; + return (f - b) * (c - a) - (d - b) * (e - a) > 0; + } + function d3_geom_polygonInside(p, a, b) { + return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); + } + function d3_geom_polygonIntersect(c, d, a, b) { + var x1 = c[0], x2 = d[0], x3 = a[0], x4 = b[0], y1 = c[1], y2 = d[1], y3 = a[1], y4 = b[1], x13 = x1 - x3, x21 = x2 - x1, x43 = x4 - x3, y13 = y1 - y3, y21 = y2 - y1, y43 = y4 - y3, ua = (x43 * y13 - y43 * x13) / (y43 * x21 - x43 * y21); + return [ x1 + ua * x21, y1 + ua * y21 ]; + } + function d3_voronoi_tessellate(vertices, callback) { + var Sites = { + list: vertices.map(function(v, i) { + return { + index: i, + x: v[0], + y: v[1] + }; + }).sort(function(a, b) { + return a.y < b.y ? -1 : a.y > b.y ? 1 : a.x < b.x ? -1 : a.x > b.x ? 1 : 0; + }), + bottomSite: null + }; + var EdgeList = { + list: [], + leftEnd: null, + rightEnd: null, + init: function() { + EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l"); + EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l"); + EdgeList.leftEnd.r = EdgeList.rightEnd; + EdgeList.rightEnd.l = EdgeList.leftEnd; + EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd); + }, + createHalfEdge: function(edge, side) { + return { + edge: edge, + side: side, + vertex: null, + l: null, + r: null + }; + }, + insert: function(lb, he) { + he.l = lb; + he.r = lb.r; + lb.r.l = he; + lb.r = he; + }, + leftBound: function(p) { + var he = EdgeList.leftEnd; + do { + he = he.r; + } while (he != EdgeList.rightEnd && Geom.rightOf(he, p)); + he = he.l; + return he; + }, + del: function(he) { + he.l.r = he.r; + he.r.l = he.l; + he.edge = null; + }, + right: function(he) { + return he.r; + }, + left: function(he) { + return he.l; + }, + leftRegion: function(he) { + return he.edge == null ? Sites.bottomSite : he.edge.region[he.side]; + }, + rightRegion: function(he) { + return he.edge == null ? Sites.bottomSite : he.edge.region[d3_voronoi_opposite[he.side]]; + } + }; + var Geom = { + bisect: function(s1, s2) { + var newEdge = { + region: { + l: s1, + r: s2 + }, + ep: { + l: null, + r: null + } + }; + var dx = s2.x - s1.x, dy = s2.y - s1.y, adx = dx > 0 ? dx : -dx, ady = dy > 0 ? dy : -dy; + newEdge.c = s1.x * dx + s1.y * dy + (dx * dx + dy * dy) * .5; + if (adx > ady) { + newEdge.a = 1; + newEdge.b = dy / dx; + newEdge.c /= dx; + } else { + newEdge.b = 1; + newEdge.a = dx / dy; + newEdge.c /= dy; + } + return newEdge; + }, + intersect: function(el1, el2) { + var e1 = el1.edge, e2 = el2.edge; + if (!e1 || !e2 || e1.region.r == e2.region.r) { + return null; + } + var d = e1.a * e2.b - e1.b * e2.a; + if (Math.abs(d) < 1e-10) { + return null; + } + var xint = (e1.c * e2.b - e2.c * e1.b) / d, yint = (e2.c * e1.a - e1.c * e2.a) / d, e1r = e1.region.r, e2r = e2.region.r, el, e; + if (e1r.y < e2r.y || e1r.y == e2r.y && e1r.x < e2r.x) { + el = el1; + e = e1; + } else { + el = el2; + e = e2; + } + var rightOfSite = xint >= e.region.r.x; + if (rightOfSite && el.side === "l" || !rightOfSite && el.side === "r") { + return null; + } + return { + x: xint, + y: yint + }; + }, + rightOf: function(he, p) { + var e = he.edge, topsite = e.region.r, rightOfSite = p.x > topsite.x; + if (rightOfSite && he.side === "l") { + return 1; + } + if (!rightOfSite && he.side === "r") { + return 0; + } + if (e.a === 1) { + var dyp = p.y - topsite.y, dxp = p.x - topsite.x, fast = 0, above = 0; + if (!rightOfSite && e.b < 0 || rightOfSite && e.b >= 0) { + above = fast = dyp >= e.b * dxp; + } else { + above = p.x + p.y * e.b > e.c; + if (e.b < 0) { + above = !above; + } + if (!above) { + fast = 1; + } + } + if (!fast) { + var dxs = topsite.x - e.region.l.x; + above = e.b * (dxp * dxp - dyp * dyp) < dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b); + if (e.b < 0) { + above = !above; + } + } + } else { + var yl = e.c - e.a * p.x, t1 = p.y - yl, t2 = p.x - topsite.x, t3 = yl - topsite.y; + above = t1 * t1 > t2 * t2 + t3 * t3; + } + return he.side === "l" ? above : !above; + }, + endPoint: function(edge, side, site) { + edge.ep[side] = site; + if (!edge.ep[d3_voronoi_opposite[side]]) return; + callback(edge); + }, + distance: function(s, t) { + var dx = s.x - t.x, dy = s.y - t.y; + return Math.sqrt(dx * dx + dy * dy); + } + }; + var EventQueue = { + list: [], + insert: function(he, site, offset) { + he.vertex = site; + he.ystar = site.y + offset; + for (var i = 0, list = EventQueue.list, l = list.length; i < l; i++) { + var next = list[i]; + if (he.ystar > next.ystar || he.ystar == next.ystar && site.x > next.vertex.x) { + continue; + } else { + break; + } + } + list.splice(i, 0, he); + }, + del: function(he) { + for (var i = 0, ls = EventQueue.list, l = ls.length; i < l && ls[i] != he; ++i) {} + ls.splice(i, 1); + }, + empty: function() { + return EventQueue.list.length === 0; + }, + nextEvent: function(he) { + for (var i = 0, ls = EventQueue.list, l = ls.length; i < l; ++i) { + if (ls[i] == he) return ls[i + 1]; + } + return null; + }, + min: function() { + var elem = EventQueue.list[0]; + return { + x: elem.vertex.x, + y: elem.ystar + }; + }, + extractMin: function() { + return EventQueue.list.shift(); + } + }; + EdgeList.init(); + Sites.bottomSite = Sites.list.shift(); + var newSite = Sites.list.shift(), newIntStar; + var lbnd, rbnd, llbnd, rrbnd, bisector; + var bot, top, temp, p, v; + var e, pm; + while (true) { + if (!EventQueue.empty()) { + newIntStar = EventQueue.min(); + } + if (newSite && (EventQueue.empty() || newSite.y < newIntStar.y || newSite.y == newIntStar.y && newSite.x < newIntStar.x)) { + lbnd = EdgeList.leftBound(newSite); + rbnd = EdgeList.right(lbnd); + bot = EdgeList.rightRegion(lbnd); + e = Geom.bisect(bot, newSite); + bisector = EdgeList.createHalfEdge(e, "l"); + EdgeList.insert(lbnd, bisector); + p = Geom.intersect(lbnd, bisector); + if (p) { + EventQueue.del(lbnd); + EventQueue.insert(lbnd, p, Geom.distance(p, newSite)); + } + lbnd = bisector; + bisector = EdgeList.createHalfEdge(e, "r"); + EdgeList.insert(lbnd, bisector); + p = Geom.intersect(bisector, rbnd); + if (p) { + EventQueue.insert(bisector, p, Geom.distance(p, newSite)); + } + newSite = Sites.list.shift(); + } else if (!EventQueue.empty()) { + lbnd = EventQueue.extractMin(); + llbnd = EdgeList.left(lbnd); + rbnd = EdgeList.right(lbnd); + rrbnd = EdgeList.right(rbnd); + bot = EdgeList.leftRegion(lbnd); + top = EdgeList.rightRegion(rbnd); + v = lbnd.vertex; + Geom.endPoint(lbnd.edge, lbnd.side, v); + Geom.endPoint(rbnd.edge, rbnd.side, v); + EdgeList.del(lbnd); + EventQueue.del(rbnd); + EdgeList.del(rbnd); + pm = "l"; + if (bot.y > top.y) { + temp = bot; + bot = top; + top = temp; + pm = "r"; + } + e = Geom.bisect(bot, top); + bisector = EdgeList.createHalfEdge(e, pm); + EdgeList.insert(llbnd, bisector); + Geom.endPoint(e, d3_voronoi_opposite[pm], v); + p = Geom.intersect(llbnd, bisector); + if (p) { + EventQueue.del(llbnd); + EventQueue.insert(llbnd, p, Geom.distance(p, bot)); + } + p = Geom.intersect(bisector, rrbnd); + if (p) { + EventQueue.insert(bisector, p, Geom.distance(p, bot)); + } + } else { + break; + } + } + for (lbnd = EdgeList.right(EdgeList.leftEnd); lbnd != EdgeList.rightEnd; lbnd = EdgeList.right(lbnd)) { + callback(lbnd.edge); + } + } + function d3_geom_quadtreeNode() { + return { + leaf: true, + nodes: [], + point: null + }; + } + function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { + if (!f(node, x1, y1, x2, y2)) { + var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; + if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); + if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); + if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); + if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); + } + } + function d3_geom_quadtreePoint(p) { + return { + x: p[0], + y: p[1] + }; + } + function d3_time_utc() { + this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); + } + function d3_time_formatAbbreviate(name) { + return name.substring(0, 3); + } + function d3_time_parse(date, template, string, j) { + var c, p, i = 0, n = template.length, m = string.length; + while (i < n) { + if (j >= m) return -1; + c = template.charCodeAt(i++); + if (c == 37) { + p = d3_time_parsers[template.charAt(i++)]; + if (!p || (j = p(date, string, j)) < 0) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + return j; + } + function d3_time_formatRe(names) { + return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); + } + function d3_time_formatLookup(names) { + var map = new d3_Map, i = -1, n = names.length; + while (++i < n) map.set(names[i].toLowerCase(), i); + return map; + } + function d3_time_parseWeekdayAbbrev(date, string, i) { + d3_time_dayAbbrevRe.lastIndex = 0; + var n = d3_time_dayAbbrevRe.exec(string.substring(i)); + return n ? i += n[0].length : -1; + } + function d3_time_parseWeekday(date, string, i) { + d3_time_dayRe.lastIndex = 0; + var n = d3_time_dayRe.exec(string.substring(i)); + return n ? i += n[0].length : -1; + } + function d3_time_parseMonthAbbrev(date, string, i) { + d3_time_monthAbbrevRe.lastIndex = 0; + var n = d3_time_monthAbbrevRe.exec(string.substring(i)); + return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i += n[0].length) : -1; + } + function d3_time_parseMonth(date, string, i) { + d3_time_monthRe.lastIndex = 0; + var n = d3_time_monthRe.exec(string.substring(i)); + return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i += n[0].length) : -1; + } + function d3_time_parseLocaleFull(date, string, i) { + return d3_time_parse(date, d3_time_formats.c.toString(), string, i); + } + function d3_time_parseLocaleDate(date, string, i) { + return d3_time_parse(date, d3_time_formats.x.toString(), string, i); + } + function d3_time_parseLocaleTime(date, string, i) { + return d3_time_parse(date, d3_time_formats.X.toString(), string, i); + } + function d3_time_parseFullYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 4)); + return n ? (date.y = +n[0], i += n[0].length) : -1; + } + function d3_time_parseYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.y = d3_time_expandYear(+n[0]), i += n[0].length) : -1; + } + function d3_time_expandYear(d) { + return d + (d > 68 ? 1900 : 2e3); + } + function d3_time_parseMonthNumber(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.m = n[0] - 1, i += n[0].length) : -1; + } + function d3_time_parseDay(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.d = +n[0], i += n[0].length) : -1; + } + function d3_time_parseHour24(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.H = +n[0], i += n[0].length) : -1; + } + function d3_time_parseMinutes(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.M = +n[0], i += n[0].length) : -1; + } + function d3_time_parseSeconds(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.S = +n[0], i += n[0].length) : -1; + } + function d3_time_parseMilliseconds(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 3)); + return n ? (date.L = +n[0], i += n[0].length) : -1; + } + function d3_time_parseAmPm(date, string, i) { + var n = d3_time_amPmLookup.get(string.substring(i, i += 2).toLowerCase()); + return n == null ? -1 : (date.p = n, i); + } + function d3_time_zone(d) { + var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(Math.abs(z) / 60), zm = Math.abs(z) % 60; + return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm); + } + function d3_time_formatIsoNative(date) { + return date.toISOString(); + } + function d3_time_interval(local, step, number) { + function round(date) { + var d0 = local(date), d1 = offset(d0, 1); + return date - d0 < d1 - date ? d0 : d1; + } + function ceil(date) { + step(date = local(new d3_time(date - 1)), 1); + return date; + } + function offset(date, k) { + step(date = new d3_time(+date), k); + return date; + } + function range(t0, t1, dt) { + var time = ceil(t0), times = []; + if (dt > 1) { + while (time < t1) { + if (!(number(time) % dt)) times.push(new Date(+time)); + step(time, 1); + } + } else { + while (time < t1) times.push(new Date(+time)), step(time, 1); + } + return times; + } + function range_utc(t0, t1, dt) { + try { + d3_time = d3_time_utc; + var utc = new d3_time_utc; + utc._ = t0; + return range(utc, t1, dt); + } finally { + d3_time = Date; + } + } + local.floor = local; + local.round = round; + local.ceil = ceil; + local.offset = offset; + local.range = range; + var utc = local.utc = d3_time_interval_utc(local); + utc.floor = utc; + utc.round = d3_time_interval_utc(round); + utc.ceil = d3_time_interval_utc(ceil); + utc.offset = d3_time_interval_utc(offset); + utc.range = range_utc; + return local; + } + function d3_time_interval_utc(method) { + return function(date, k) { + try { + d3_time = d3_time_utc; + var utc = new d3_time_utc; + utc._ = date; + return method(utc, k)._; + } finally { + d3_time = Date; + } + }; + } + function d3_time_scale(linear, methods, format) { + function scale(x) { + return linear(x); + } + scale.invert = function(x) { + return d3_time_scaleDate(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return linear.domain().map(d3_time_scaleDate); + linear.domain(x); + return scale; + }; + scale.nice = function(m) { + return scale.domain(d3_scale_nice(scale.domain(), function() { + return m; + })); + }; + scale.ticks = function(m, k) { + var extent = d3_time_scaleExtent(scale.domain()); + if (typeof m !== "function") { + var span = extent[1] - extent[0], target = span / m, i = d3.bisect(d3_time_scaleSteps, target); + if (i == d3_time_scaleSteps.length) return methods.year(extent, m); + if (!i) return linear.ticks(m).map(d3_time_scaleDate); + if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i; + m = methods[i]; + k = m[1]; + m = m[0].range; + } + return m(extent[0], new Date(+extent[1] + 1), k); + }; + scale.tickFormat = function() { + return format; + }; + scale.copy = function() { + return d3_time_scale(linear.copy(), methods, format); + }; + return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); + } + function d3_time_scaleExtent(domain) { + var start = domain[0], stop = domain[domain.length - 1]; + return start < stop ? [ start, stop ] : [ stop, start ]; + } + function d3_time_scaleDate(t) { + return new Date(t); + } + function d3_time_scaleFormat(formats) { + return function(date) { + var i = formats.length - 1, f = formats[i]; + while (!f[1](date)) f = formats[--i]; + return f[0](date); + }; + } + function d3_time_scaleSetYear(y) { + var d = new Date(y, 0, 1); + d.setFullYear(y); + return d; + } + function d3_time_scaleGetYear(d) { + var y = d.getFullYear(), d0 = d3_time_scaleSetYear(y), d1 = d3_time_scaleSetYear(y + 1); + return y + (d - d0) / (d1 - d0); + } + function d3_time_scaleUTCSetYear(y) { + var d = new Date(Date.UTC(y, 0, 1)); + d.setUTCFullYear(y); + return d; + } + function d3_time_scaleUTCGetYear(d) { + var y = d.getUTCFullYear(), d0 = d3_time_scaleUTCSetYear(y), d1 = d3_time_scaleUTCSetYear(y + 1); + return y + (d - d0) / (d1 - d0); + } + if (!Date.now) Date.now = function() { + return +(new Date); + }; + try { + document.createElement("div").style.setProperty("opacity", 0, ""); + } catch (error) { + var d3_style_prototype = CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; + d3_style_prototype.setProperty = function(name, value, priority) { + d3_style_setProperty.call(this, name, value + "", priority); + }; + } + d3 = { + version: "2.10.2" + }; + var d3_array = d3_arraySlice; + try { + d3_array(document.documentElement.childNodes)[0].nodeType; + } catch (e) { + d3_array = d3_arrayCopy; + } + var d3_arraySubclass = [].__proto__ ? function(array, prototype) { + array.__proto__ = prototype; + } : function(array, prototype) { + for (var property in prototype) array[property] = prototype[property]; + }; + d3.map = function(object) { + var map = new d3_Map; + for (var key in object) map.set(key, object[key]); + return map; + }; + d3_class(d3_Map, { + has: function(key) { + return d3_map_prefix + key in this; + }, + get: function(key) { + return this[d3_map_prefix + key]; + }, + set: function(key, value) { + return this[d3_map_prefix + key] = value; + }, + remove: function(key) { + key = d3_map_prefix + key; + return key in this && delete this[key]; + }, + keys: function() { + var keys = []; + this.forEach(function(key) { + keys.push(key); + }); + return keys; + }, + values: function() { + var values = []; + this.forEach(function(key, value) { + values.push(value); + }); + return values; + }, + entries: function() { + var entries = []; + this.forEach(function(key, value) { + entries.push({ + key: key, + value: value + }); + }); + return entries; + }, + forEach: function(f) { + for (var key in this) { + if (key.charCodeAt(0) === d3_map_prefixCode) { + f.call(this, key.substring(1), this[key]); + } + } + } + }); + var d3_map_prefix = "\0", d3_map_prefixCode = d3_map_prefix.charCodeAt(0); + d3.functor = d3_functor; + d3.rebind = function(target, source) { + var i = 1, n = arguments.length, method; + while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); + return target; + }; + d3.ascending = function(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; + }; + d3.descending = function(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; + }; + d3.mean = function(array, f) { + var n = array.length, a, m = 0, i = -1, j = 0; + if (arguments.length === 1) { + while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; + } else { + while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; + } + return j ? m : undefined; + }; + d3.median = function(array, f) { + if (arguments.length > 1) array = array.map(f); + array = array.filter(d3_number); + return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined; + }; + d3.min = function(array, f) { + var i = -1, n = array.length, a, b; + if (arguments.length === 1) { + while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; + while (++i < n) if ((b = array[i]) != null && a > b) a = b; + } else { + while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; + } + return a; + }; + d3.max = function(array, f) { + var i = -1, n = array.length, a, b; + if (arguments.length === 1) { + while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; + while (++i < n) if ((b = array[i]) != null && b > a) a = b; + } else { + while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; + } + return a; + }; + d3.extent = function(array, f) { + var i = -1, n = array.length, a, b, c; + if (arguments.length === 1) { + while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined; + while (++i < n) if ((b = array[i]) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } else { + while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } + return [ a, c ]; + }; + d3.random = { + normal: function(µ, σ) { + var n = arguments.length; + if (n < 2) σ = 1; + if (n < 1) µ = 0; + return function() { + var x, y, r; + do { + x = Math.random() * 2 - 1; + y = Math.random() * 2 - 1; + r = x * x + y * y; + } while (!r || r > 1); + return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); + }; + }, + logNormal: function(µ, σ) { + var n = arguments.length; + if (n < 2) σ = 1; + if (n < 1) µ = 0; + var random = d3.random.normal(); + return function() { + return Math.exp(µ + σ * random()); + }; + }, + irwinHall: function(m) { + return function() { + for (var s = 0, j = 0; j < m; j++) s += Math.random(); + return s / m; + }; + } + }; + d3.sum = function(array, f) { + var s = 0, n = array.length, a, i = -1; + if (arguments.length === 1) { + while (++i < n) if (!isNaN(a = +array[i])) s += a; + } else { + while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; + } + return s; + }; + d3.quantile = function(values, p) { + var H = (values.length - 1) * p + 1, h = Math.floor(H), v = values[h - 1], e = H - h; + return e ? v + e * (values[h] - v) : v; + }; + d3.transpose = function(matrix) { + return d3.zip.apply(d3, matrix); + }; + d3.zip = function() { + if (!(n = arguments.length)) return []; + for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { + for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { + zip[j] = arguments[j][i]; + } + } + return zips; + }; + d3.bisector = function(f) { + return { + left: function(a, x, lo, hi) { + if (arguments.length < 3) lo = 0; + if (arguments.length < 4) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (f.call(a, a[mid], mid) < x) lo = mid + 1; else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (arguments.length < 3) lo = 0; + if (arguments.length < 4) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (x < f.call(a, a[mid], mid)) hi = mid; else lo = mid + 1; + } + return lo; + } + }; + }; + var d3_bisector = d3.bisector(function(d) { + return d; + }); + d3.bisectLeft = d3_bisector.left; + d3.bisect = d3.bisectRight = d3_bisector.right; + d3.first = function(array, f) { + var i = 0, n = array.length, a = array[0], b; + if (arguments.length === 1) f = d3.ascending; + while (++i < n) { + if (f.call(array, a, b = array[i]) > 0) { + a = b; + } + } + return a; + }; + d3.last = function(array, f) { + var i = 0, n = array.length, a = array[0], b; + if (arguments.length === 1) f = d3.ascending; + while (++i < n) { + if (f.call(array, a, b = array[i]) <= 0) { + a = b; + } + } + return a; + }; + d3.nest = function() { + function map(array, depth) { + if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; + var i = -1, n = array.length, key = keys[depth++], keyValue, object, valuesByKey = new d3_Map, values, o = {}; + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(object = array[i]))) { + values.push(object); + } else { + valuesByKey.set(keyValue, [ object ]); + } + } + valuesByKey.forEach(function(keyValue, values) { + o[keyValue] = map(values, depth); + }); + return o; + } + function entries(map, depth) { + if (depth >= keys.length) return map; + var a = [], sortKey = sortKeys[depth++], key; + for (key in map) { + a.push({ + key: key, + values: entries(map[key], depth) + }); + } + if (sortKey) a.sort(function(a, b) { + return sortKey(a.key, b.key); + }); + return a; + } + var nest = {}, keys = [], sortKeys = [], sortValues, rollup; + nest.map = function(array) { + return map(array, 0); + }; + nest.entries = function(array) { + return entries(map(array, 0), 0); + }; + nest.key = function(d) { + keys.push(d); + return nest; + }; + nest.sortKeys = function(order) { + sortKeys[keys.length - 1] = order; + return nest; + }; + nest.sortValues = function(order) { + sortValues = order; + return nest; + }; + nest.rollup = function(f) { + rollup = f; + return nest; + }; + return nest; + }; + d3.keys = function(map) { + var keys = []; + for (var key in map) keys.push(key); + return keys; + }; + d3.values = function(map) { + var values = []; + for (var key in map) values.push(map[key]); + return values; + }; + d3.entries = function(map) { + var entries = []; + for (var key in map) entries.push({ + key: key, + value: map[key] + }); + return entries; + }; + d3.permute = function(array, indexes) { + var permutes = [], i = -1, n = indexes.length; + while (++i < n) permutes[i] = array[indexes[i]]; + return permutes; + }; + d3.merge = function(arrays) { + return Array.prototype.concat.apply([], arrays); + }; + d3.split = function(array, f) { + var arrays = [], values = [], value, i = -1, n = array.length; + if (arguments.length < 2) f = d3_splitter; + while (++i < n) { + if (f.call(values, value = array[i], i)) { + values = []; + } else { + if (!values.length) arrays.push(values); + values.push(value); + } + } + return arrays; + }; + d3.range = function(start, stop, step) { + if (arguments.length < 3) { + step = 1; + if (arguments.length < 2) { + stop = start; + start = 0; + } + } + if ((stop - start) / step === Infinity) throw new Error("infinite range"); + var range = [], k = d3_range_integerScale(Math.abs(step)), i = -1, j; + start *= k, stop *= k, step *= k; + if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); + return range; + }; + d3.requote = function(s) { + return s.replace(d3_requote_re, "\\$&"); + }; + var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; + d3.round = function(x, n) { + return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); + }; + d3.xhr = function(url, mime, callback) { + var req = new XMLHttpRequest; + if (arguments.length < 3) callback = mime, mime = null; else if (mime && req.overrideMimeType) req.overrideMimeType(mime); + req.open("GET", url, true); + if (mime) req.setRequestHeader("Accept", mime); + req.onreadystatechange = function() { + if (req.readyState === 4) { + var s = req.status; + callback(!s && req.response || s >= 200 && s < 300 || s === 304 ? req : null); + } + }; + req.send(null); + }; + d3.text = function(url, mime, callback) { + function ready(req) { + callback(req && req.responseText); + } + if (arguments.length < 3) { + callback = mime; + mime = null; + } + d3.xhr(url, mime, ready); + }; + d3.json = function(url, callback) { + d3.text(url, "application/json", function(text) { + callback(text ? JSON.parse(text) : null); + }); + }; + d3.html = function(url, callback) { + d3.text(url, "text/html", function(text) { + if (text != null) { + var range = document.createRange(); + range.selectNode(document.body); + text = range.createContextualFragment(text); + } + callback(text); + }); + }; + d3.xml = function(url, mime, callback) { + function ready(req) { + callback(req && req.responseXML); + } + if (arguments.length < 3) { + callback = mime; + mime = null; + } + d3.xhr(url, mime, ready); + }; + var d3_nsPrefix = { + svg: "http://www.w3.org/2000/svg", + xhtml: "http://www.w3.org/1999/xhtml", + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" + }; + d3.ns = { + prefix: d3_nsPrefix, + qualify: function(name) { + var i = name.indexOf(":"), prefix = name; + if (i >= 0) { + prefix = name.substring(0, i); + name = name.substring(i + 1); + } + return d3_nsPrefix.hasOwnProperty(prefix) ? { + space: d3_nsPrefix[prefix], + local: name + } : name; + } + }; + d3.dispatch = function() { + var dispatch = new d3_dispatch, i = -1, n = arguments.length; + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + return dispatch; + }; + d3_dispatch.prototype.on = function(type, listener) { + var i = type.indexOf("."), name = ""; + if (i > 0) { + name = type.substring(i + 1); + type = type.substring(0, i); + } + return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); + }; + d3.format = function(specifier) { + var match = d3_format_re.exec(specifier), fill = match[1] || " ", sign = match[3] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, suffix = "", integer = false; + if (precision) precision = +precision.substring(1); + if (zfill) { + fill = "0"; + if (comma) width -= Math.floor((width - 1) / 4); + } + switch (type) { + case "n": + comma = true; + type = "g"; + break; + case "%": + scale = 100; + suffix = "%"; + type = "f"; + break; + case "p": + scale = 100; + suffix = "%"; + type = "r"; + break; + case "d": + integer = true; + precision = 0; + break; + case "s": + scale = -1; + type = "r"; + break; + } + if (type == "r" && !precision) type = "g"; + type = d3_format_types.get(type) || d3_format_typeDefault; + return function(value) { + if (integer && value % 1) return ""; + var negative = value < 0 && (value = -value) ? "-" : sign; + if (scale < 0) { + var prefix = d3.formatPrefix(value, precision); + value = prefix.scale(value); + suffix = prefix.symbol; + } else { + value *= scale; + } + value = type(value, precision); + if (zfill) { + var length = value.length + negative.length; + if (length < width) value = (new Array(width - length + 1)).join(fill) + value; + if (comma) value = d3_format_group(value); + value = negative + value; + } else { + if (comma) value = d3_format_group(value); + value = negative + value; + var length = value.length; + if (length < width) value = (new Array(width - length + 1)).join(fill) + value; + } + return value + suffix; + }; + }; + var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/; + var d3_format_types = d3.map({ + g: function(x, p) { + return x.toPrecision(p); + }, + e: function(x, p) { + return x.toExponential(p); + }, + f: function(x, p) { + return x.toFixed(p); + }, + r: function(x, p) { + return d3.round(x, p = d3_format_precision(x, p)).toFixed(Math.max(0, Math.min(20, p))); + } + }); + var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "μ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); + d3.formatPrefix = function(value, precision) { + var i = 0; + if (value) { + if (value < 0) value *= -1; + if (precision) value = d3.round(value, d3_format_precision(value, precision)); + i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); + i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3)); + } + return d3_formatPrefixes[8 + i / 3]; + }; + var d3_ease_quad = d3_ease_poly(2), d3_ease_cubic = d3_ease_poly(3), d3_ease_default = function() { + return d3_ease_identity; + }; + var d3_ease = d3.map({ + linear: d3_ease_default, + poly: d3_ease_poly, + quad: function() { + return d3_ease_quad; + }, + cubic: function() { + return d3_ease_cubic; + }, + sin: function() { + return d3_ease_sin; + }, + exp: function() { + return d3_ease_exp; + }, + circle: function() { + return d3_ease_circle; + }, + elastic: d3_ease_elastic, + back: d3_ease_back, + bounce: function() { + return d3_ease_bounce; + } + }); + var d3_ease_mode = d3.map({ + "in": d3_ease_identity, + out: d3_ease_reverse, + "in-out": d3_ease_reflect, + "out-in": function(f) { + return d3_ease_reflect(d3_ease_reverse(f)); + } + }); + d3.ease = function(name) { + var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in"; + t = d3_ease.get(t) || d3_ease_default; + m = d3_ease_mode.get(m) || d3_ease_identity; + return d3_ease_clamp(m(t.apply(null, Array.prototype.slice.call(arguments, 1)))); + }; + d3.event = null; + d3.transform = function(string) { + var g = document.createElementNS(d3.ns.prefix.svg, "g"); + return (d3.transform = function(string) { + g.setAttribute("transform", string); + var t = g.transform.baseVal.consolidate(); + return new d3_transform(t ? t.matrix : d3_transformIdentity); + })(string); + }; + d3_transform.prototype.toString = function() { + return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; + }; + var d3_transformDegrees = 180 / Math.PI, d3_transformIdentity = { + a: 1, + b: 0, + c: 0, + d: 1, + e: 0, + f: 0 + }; + d3.interpolate = function(a, b) { + var i = d3.interpolators.length, f; + while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; + return f; + }; + d3.interpolateNumber = function(a, b) { + b -= a; + return function(t) { + return a + b * t; + }; + }; + d3.interpolateRound = function(a, b) { + b -= a; + return function(t) { + return Math.round(a + b * t); + }; + }; + d3.interpolateString = function(a, b) { + var m, i, j, s0 = 0, s1 = 0, s = [], q = [], n, o; + d3_interpolate_number.lastIndex = 0; + for (i = 0; m = d3_interpolate_number.exec(b); ++i) { + if (m.index) s.push(b.substring(s0, s1 = m.index)); + q.push({ + i: s.length, + x: m[0] + }); + s.push(null); + s0 = d3_interpolate_number.lastIndex; + } + if (s0 < b.length) s.push(b.substring(s0)); + for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) { + o = q[i]; + if (o.x == m[0]) { + if (o.i) { + if (s[o.i + 1] == null) { + s[o.i - 1] += o.x; + s.splice(o.i, 1); + for (j = i + 1; j < n; ++j) q[j].i--; + } else { + s[o.i - 1] += o.x + s[o.i + 1]; + s.splice(o.i, 2); + for (j = i + 1; j < n; ++j) q[j].i -= 2; + } + } else { + if (s[o.i + 1] == null) { + s[o.i] = o.x; + } else { + s[o.i] = o.x + s[o.i + 1]; + s.splice(o.i + 1, 1); + for (j = i + 1; j < n; ++j) q[j].i--; + } + } + q.splice(i, 1); + n--; + i--; + } else { + o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x)); + } + } + while (i < n) { + o = q.pop(); + if (s[o.i + 1] == null) { + s[o.i] = o.x; + } else { + s[o.i] = o.x + s[o.i + 1]; + s.splice(o.i + 1, 1); + } + n--; + } + if (s.length === 1) { + return s[0] == null ? q[0].x : function() { + return b; + }; + } + return function(t) { + for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + }; + d3.interpolateTransform = function(a, b) { + var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale; + if (ta[0] != tb[0] || ta[1] != tb[1]) { + s.push("translate(", null, ",", null, ")"); + q.push({ + i: 1, + x: d3.interpolateNumber(ta[0], tb[0]) + }, { + i: 3, + x: d3.interpolateNumber(ta[1], tb[1]) + }); + } else if (tb[0] || tb[1]) { + s.push("translate(" + tb + ")"); + } else { + s.push(""); + } + if (ra != rb) { + if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; + q.push({ + i: s.push(s.pop() + "rotate(", null, ")") - 2, + x: d3.interpolateNumber(ra, rb) + }); + } else if (rb) { + s.push(s.pop() + "rotate(" + rb + ")"); + } + if (wa != wb) { + q.push({ + i: s.push(s.pop() + "skewX(", null, ")") - 2, + x: d3.interpolateNumber(wa, wb) + }); + } else if (wb) { + s.push(s.pop() + "skewX(" + wb + ")"); + } + if (ka[0] != kb[0] || ka[1] != kb[1]) { + n = s.push(s.pop() + "scale(", null, ",", null, ")"); + q.push({ + i: n - 4, + x: d3.interpolateNumber(ka[0], kb[0]) + }, { + i: n - 2, + x: d3.interpolateNumber(ka[1], kb[1]) + }); + } else if (kb[0] != 1 || kb[1] != 1) { + s.push(s.pop() + "scale(" + kb + ")"); + } + n = q.length; + return function(t) { + var i = -1, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + }; + d3.interpolateRgb = function(a, b) { + a = d3.rgb(a); + b = d3.rgb(b); + var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; + return function(t) { + return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); + }; + }; + d3.interpolateHsl = function(a, b) { + a = d3.hsl(a); + b = d3.hsl(b); + var h0 = a.h, s0 = a.s, l0 = a.l, h1 = b.h - h0, s1 = b.s - s0, l1 = b.l - l0; + if (h1 > 180) h1 -= 360; else if (h1 < -180) h1 += 360; + return function(t) { + return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t) + ""; + }; + }; + d3.interpolateLab = function(a, b) { + a = d3.lab(a); + b = d3.lab(b); + var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; + return function(t) { + return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; + }; + }; + d3.interpolateHcl = function(a, b) { + a = d3.hcl(a); + b = d3.hcl(b); + var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; + if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; + return function(t) { + return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; + }; + }; + d3.interpolateArray = function(a, b) { + var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; + for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i])); + for (; i < na; ++i) c[i] = a[i]; + for (; i < nb; ++i) c[i] = b[i]; + return function(t) { + for (i = 0; i < n0; ++i) c[i] = x[i](t); + return c; + }; + }; + d3.interpolateObject = function(a, b) { + var i = {}, c = {}, k; + for (k in a) { + if (k in b) { + i[k] = d3_interpolateByName(k)(a[k], b[k]); + } else { + c[k] = a[k]; + } + } + for (k in b) { + if (!(k in a)) { + c[k] = b[k]; + } + } + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; + }; + var d3_interpolate_number = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g; + d3.interpolators = [ d3.interpolateObject, function(a, b) { + return b instanceof Array && d3.interpolateArray(a, b); + }, function(a, b) { + return (typeof a === "string" || typeof b === "string") && d3.interpolateString(a + "", b + ""); + }, function(a, b) { + return (typeof b === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(a, b); + }, function(a, b) { + return !isNaN(a = +a) && !isNaN(b = +b) && d3.interpolateNumber(a, b); + } ]; + d3.rgb = function(r, g, b) { + return arguments.length === 1 ? r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : d3_rgb(~~r, ~~g, ~~b); + }; + d3_Rgb.prototype.brighter = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + var r = this.r, g = this.g, b = this.b, i = 30; + if (!r && !g && !b) return d3_rgb(i, i, i); + if (r && r < i) r = i; + if (g && g < i) g = i; + if (b && b < i) b = i; + return d3_rgb(Math.min(255, Math.floor(r / k)), Math.min(255, Math.floor(g / k)), Math.min(255, Math.floor(b / k))); + }; + d3_Rgb.prototype.darker = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return d3_rgb(Math.floor(k * this.r), Math.floor(k * this.g), Math.floor(k * this.b)); + }; + d3_Rgb.prototype.hsl = function() { + return d3_rgb_hsl(this.r, this.g, this.b); + }; + d3_Rgb.prototype.toString = function() { + return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); + }; + var d3_rgb_names = d3.map({ + aliceblue: "#f0f8ff", + antiquewhite: "#faebd7", + aqua: "#00ffff", + aquamarine: "#7fffd4", + azure: "#f0ffff", + beige: "#f5f5dc", + bisque: "#ffe4c4", + black: "#000000", + blanchedalmond: "#ffebcd", + blue: "#0000ff", + blueviolet: "#8a2be2", + brown: "#a52a2a", + burlywood: "#deb887", + cadetblue: "#5f9ea0", + chartreuse: "#7fff00", + chocolate: "#d2691e", + coral: "#ff7f50", + cornflowerblue: "#6495ed", + cornsilk: "#fff8dc", + crimson: "#dc143c", + cyan: "#00ffff", + darkblue: "#00008b", + darkcyan: "#008b8b", + darkgoldenrod: "#b8860b", + darkgray: "#a9a9a9", + darkgreen: "#006400", + darkgrey: "#a9a9a9", + darkkhaki: "#bdb76b", + darkmagenta: "#8b008b", + darkolivegreen: "#556b2f", + darkorange: "#ff8c00", + darkorchid: "#9932cc", + darkred: "#8b0000", + darksalmon: "#e9967a", + darkseagreen: "#8fbc8f", + darkslateblue: "#483d8b", + darkslategray: "#2f4f4f", + darkslategrey: "#2f4f4f", + darkturquoise: "#00ced1", + darkviolet: "#9400d3", + deeppink: "#ff1493", + deepskyblue: "#00bfff", + dimgray: "#696969", + dimgrey: "#696969", + dodgerblue: "#1e90ff", + firebrick: "#b22222", + floralwhite: "#fffaf0", + forestgreen: "#228b22", + fuchsia: "#ff00ff", + gainsboro: "#dcdcdc", + ghostwhite: "#f8f8ff", + gold: "#ffd700", + goldenrod: "#daa520", + gray: "#808080", + green: "#008000", + greenyellow: "#adff2f", + grey: "#808080", + honeydew: "#f0fff0", + hotpink: "#ff69b4", + indianred: "#cd5c5c", + indigo: "#4b0082", + ivory: "#fffff0", + khaki: "#f0e68c", + lavender: "#e6e6fa", + lavenderblush: "#fff0f5", + lawngreen: "#7cfc00", + lemonchiffon: "#fffacd", + lightblue: "#add8e6", + lightcoral: "#f08080", + lightcyan: "#e0ffff", + lightgoldenrodyellow: "#fafad2", + lightgray: "#d3d3d3", + lightgreen: "#90ee90", + lightgrey: "#d3d3d3", + lightpink: "#ffb6c1", + lightsalmon: "#ffa07a", + lightseagreen: "#20b2aa", + lightskyblue: "#87cefa", + lightslategray: "#778899", + lightslategrey: "#778899", + lightsteelblue: "#b0c4de", + lightyellow: "#ffffe0", + lime: "#00ff00", + limegreen: "#32cd32", + linen: "#faf0e6", + magenta: "#ff00ff", + maroon: "#800000", + mediumaquamarine: "#66cdaa", + mediumblue: "#0000cd", + mediumorchid: "#ba55d3", + mediumpurple: "#9370db", + mediumseagreen: "#3cb371", + mediumslateblue: "#7b68ee", + mediumspringgreen: "#00fa9a", + mediumturquoise: "#48d1cc", + mediumvioletred: "#c71585", + midnightblue: "#191970", + mintcream: "#f5fffa", + mistyrose: "#ffe4e1", + moccasin: "#ffe4b5", + navajowhite: "#ffdead", + navy: "#000080", + oldlace: "#fdf5e6", + olive: "#808000", + olivedrab: "#6b8e23", + orange: "#ffa500", + orangered: "#ff4500", + orchid: "#da70d6", + palegoldenrod: "#eee8aa", + palegreen: "#98fb98", + paleturquoise: "#afeeee", + palevioletred: "#db7093", + papayawhip: "#ffefd5", + peachpuff: "#ffdab9", + peru: "#cd853f", + pink: "#ffc0cb", + plum: "#dda0dd", + powderblue: "#b0e0e6", + purple: "#800080", + red: "#ff0000", + rosybrown: "#bc8f8f", + royalblue: "#4169e1", + saddlebrown: "#8b4513", + salmon: "#fa8072", + sandybrown: "#f4a460", + seagreen: "#2e8b57", + seashell: "#fff5ee", + sienna: "#a0522d", + silver: "#c0c0c0", + skyblue: "#87ceeb", + slateblue: "#6a5acd", + slategray: "#708090", + slategrey: "#708090", + snow: "#fffafa", + springgreen: "#00ff7f", + steelblue: "#4682b4", + tan: "#d2b48c", + teal: "#008080", + thistle: "#d8bfd8", + tomato: "#ff6347", + turquoise: "#40e0d0", + violet: "#ee82ee", + wheat: "#f5deb3", + white: "#ffffff", + whitesmoke: "#f5f5f5", + yellow: "#ffff00", + yellowgreen: "#9acd32" + }); + d3_rgb_names.forEach(function(key, value) { + d3_rgb_names.set(key, d3_rgb_parse(value, d3_rgb, d3_hsl_rgb)); + }); + d3.hsl = function(h, s, l) { + return arguments.length === 1 ? h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : d3_hsl(+h, +s, +l); + }; + d3_Hsl.prototype.brighter = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return d3_hsl(this.h, this.s, this.l / k); + }; + d3_Hsl.prototype.darker = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return d3_hsl(this.h, this.s, k * this.l); + }; + d3_Hsl.prototype.rgb = function() { + return d3_hsl_rgb(this.h, this.s, this.l); + }; + d3_Hsl.prototype.toString = function() { + return this.rgb().toString(); + }; + d3.hcl = function(h, c, l) { + return arguments.length === 1 ? h instanceof d3_Hcl ? d3_hcl(h.h, h.c, h.l) : h instanceof d3_Lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : d3_hcl(+h, +c, +l); + }; + d3_Hcl.prototype.brighter = function(k) { + return d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); + }; + d3_Hcl.prototype.darker = function(k) { + return d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); + }; + d3_Hcl.prototype.rgb = function() { + return d3_hcl_lab(this.h, this.c, this.l).rgb(); + }; + d3_Hcl.prototype.toString = function() { + return this.rgb() + ""; + }; + d3.lab = function(l, a, b) { + return arguments.length === 1 ? l instanceof d3_Lab ? d3_lab(l.l, l.a, l.b) : l instanceof d3_Hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3.rgb(l)).r, l.g, l.b) : d3_lab(+l, +a, +b); + }; + var d3_lab_K = 18; + var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; + d3_Lab.prototype.brighter = function(k) { + return d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); + }; + d3_Lab.prototype.darker = function(k) { + return d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); + }; + d3_Lab.prototype.rgb = function() { + return d3_lab_rgb(this.l, this.a, this.b); + }; + d3_Lab.prototype.toString = function() { + return this.rgb() + ""; + }; + var d3_select = function(s, n) { + return n.querySelector(s); + }, d3_selectAll = function(s, n) { + return n.querySelectorAll(s); + }, d3_selectRoot = document.documentElement, d3_selectMatcher = d3_selectRoot.matchesSelector || d3_selectRoot.webkitMatchesSelector || d3_selectRoot.mozMatchesSelector || d3_selectRoot.msMatchesSelector || d3_selectRoot.oMatchesSelector, d3_selectMatches = function(n, s) { + return d3_selectMatcher.call(n, s); + }; + if (typeof Sizzle === "function") { + d3_select = function(s, n) { + return Sizzle(s, n)[0] || null; + }; + d3_selectAll = function(s, n) { + return Sizzle.uniqueSort(Sizzle(s, n)); + }; + d3_selectMatches = Sizzle.matchesSelector; + } + var d3_selectionPrototype = []; + d3.selection = function() { + return d3_selectionRoot; + }; + d3.selection.prototype = d3_selectionPrototype; + d3_selectionPrototype.select = function(selector) { + var subgroups = [], subgroup, subnode, group, node; + if (typeof selector !== "function") selector = d3_selection_selector(selector); + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + subgroup.parentNode = (group = this[j]).parentNode; + for (var i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroup.push(subnode = selector.call(node, node.__data__, i)); + if (subnode && "__data__" in node) subnode.__data__ = node.__data__; + } else { + subgroup.push(null); + } + } + } + return d3_selection(subgroups); + }; + d3_selectionPrototype.selectAll = function(selector) { + var subgroups = [], subgroup, node; + if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i))); + subgroup.parentNode = node; + } + } + } + return d3_selection(subgroups); + }; + d3_selectionPrototype.attr = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") { + var node = this.node(); + name = d3.ns.qualify(name); + return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); + } + for (value in name) this.each(d3_selection_attr(value, name[value])); + return this; + } + return this.each(d3_selection_attr(name, value)); + }; + d3_selectionPrototype.classed = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") { + var node = this.node(), n = (name = name.trim().split(/^|\s+/g)).length, i = -1; + if (value = node.classList) { + while (++i < n) if (!value.contains(name[i])) return false; + } else { + value = node.className; + if (value.baseVal != null) value = value.baseVal; + while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; + } + return true; + } + for (value in name) this.each(d3_selection_classed(value, name[value])); + return this; + } + return this.each(d3_selection_classed(name, value)); + }; + d3_selectionPrototype.style = function(name, value, priority) { + var n = arguments.length; + if (n < 3) { + if (typeof name !== "string") { + if (n < 2) value = ""; + for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); + return this; + } + if (n < 2) return window.getComputedStyle(this.node(), null).getPropertyValue(name); + priority = ""; + } + return this.each(d3_selection_style(name, value, priority)); + }; + d3_selectionPrototype.property = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") return this.node()[name]; + for (value in name) this.each(d3_selection_property(value, name[value])); + return this; + } + return this.each(d3_selection_property(name, value)); + }; + d3_selectionPrototype.text = function(value) { + return arguments.length < 1 ? this.node().textContent : this.each(typeof value === "function" ? function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + } : value == null ? function() { + this.textContent = ""; + } : function() { + this.textContent = value; + }); + }; + d3_selectionPrototype.html = function(value) { + return arguments.length < 1 ? this.node().innerHTML : this.each(typeof value === "function" ? function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + } : value == null ? function() { + this.innerHTML = ""; + } : function() { + this.innerHTML = value; + }); + }; + d3_selectionPrototype.append = function(name) { + function append() { + return this.appendChild(document.createElementNS(this.namespaceURI, name)); + } + function appendNS() { + return this.appendChild(document.createElementNS(name.space, name.local)); + } + name = d3.ns.qualify(name); + return this.select(name.local ? appendNS : append); + }; + d3_selectionPrototype.insert = function(name, before) { + function insert() { + return this.insertBefore(document.createElementNS(this.namespaceURI, name), d3_select(before, this)); + } + function insertNS() { + return this.insertBefore(document.createElementNS(name.space, name.local), d3_select(before, this)); + } + name = d3.ns.qualify(name); + return this.select(name.local ? insertNS : insert); + }; + d3_selectionPrototype.remove = function() { + return this.each(function() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); + }); + }; + d3_selectionPrototype.data = function(value, key) { + function bind(group, groupData) { + var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), n1 = Math.max(n, m), updateNodes = [], enterNodes = [], exitNodes = [], node, nodeData; + if (key) { + var nodeByKeyValue = new d3_Map, keyValues = [], keyValue, j = groupData.length; + for (i = -1; ++i < n; ) { + keyValue = key.call(node = group[i], node.__data__, i); + if (nodeByKeyValue.has(keyValue)) { + exitNodes[j++] = node; + } else { + nodeByKeyValue.set(keyValue, node); + } + keyValues.push(keyValue); + } + for (i = -1; ++i < m; ) { + keyValue = key.call(groupData, nodeData = groupData[i], i); + if (nodeByKeyValue.has(keyValue)) { + updateNodes[i] = node = nodeByKeyValue.get(keyValue); + node.__data__ = nodeData; + enterNodes[i] = exitNodes[i] = null; + } else { + enterNodes[i] = d3_selection_dataNode(nodeData); + updateNodes[i] = exitNodes[i] = null; + } + nodeByKeyValue.remove(keyValue); + } + for (i = -1; ++i < n; ) { + if (nodeByKeyValue.has(keyValues[i])) { + exitNodes[i] = group[i]; + } + } + } else { + for (i = -1; ++i < n0; ) { + node = group[i]; + nodeData = groupData[i]; + if (node) { + node.__data__ = nodeData; + updateNodes[i] = node; + enterNodes[i] = exitNodes[i] = null; + } else { + enterNodes[i] = d3_selection_dataNode(nodeData); + updateNodes[i] = exitNodes[i] = null; + } + } + for (; i < m; ++i) { + enterNodes[i] = d3_selection_dataNode(groupData[i]); + updateNodes[i] = exitNodes[i] = null; + } + for (; i < n1; ++i) { + exitNodes[i] = group[i]; + enterNodes[i] = updateNodes[i] = null; + } + } + enterNodes.update = updateNodes; + enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; + enter.push(enterNodes); + update.push(updateNodes); + exit.push(exitNodes); + } + var i = -1, n = this.length, group, node; + if (!arguments.length) { + value = new Array(n = (group = this[0]).length); + while (++i < n) { + if (node = group[i]) { + value[i] = node.__data__; + } + } + return value; + } + var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); + if (typeof value === "function") { + while (++i < n) { + bind(group = this[i], value.call(group, group.parentNode.__data__, i)); + } + } else { + while (++i < n) { + bind(group = this[i], value); + } + } + update.enter = function() { + return enter; + }; + update.exit = function() { + return exit; + }; + return update; + }; + d3_selectionPrototype.datum = d3_selectionPrototype.map = function(value) { + return arguments.length < 1 ? this.property("__data__") : this.property("__data__", value); + }; + d3_selectionPrototype.filter = function(filter) { + var subgroups = [], subgroup, group, node; + if (typeof filter !== "function") filter = d3_selection_filter(filter); + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + subgroup.parentNode = (group = this[j]).parentNode; + for (var i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node, node.__data__, i)) { + subgroup.push(node); + } + } + } + return d3_selection(subgroups); + }; + d3_selectionPrototype.order = function() { + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { + if (node = group[i]) { + if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + return this; + }; + d3_selectionPrototype.sort = function(comparator) { + comparator = d3_selection_sortComparator.apply(this, arguments); + for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); + return this.order(); + }; + d3_selectionPrototype.on = function(type, listener, capture) { + var n = arguments.length; + if (n < 3) { + if (typeof type !== "string") { + if (n < 2) listener = false; + for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); + return this; + } + if (n < 2) return (n = this.node()["__on" + type]) && n._; + capture = false; + } + return this.each(d3_selection_on(type, listener, capture)); + }; + d3_selectionPrototype.each = function(callback) { + return d3_selection_each(this, function(node, i, j) { + callback.call(node, node.__data__, i, j); + }); + }; + d3_selectionPrototype.call = function(callback) { + callback.apply(this, (arguments[0] = this, arguments)); + return this; + }; + d3_selectionPrototype.empty = function() { + return !this.node(); + }; + d3_selectionPrototype.node = function(callback) { + for (var j = 0, m = this.length; j < m; j++) { + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + var node = group[i]; + if (node) return node; + } + } + return null; + }; + d3_selectionPrototype.transition = function() { + var subgroups = [], subgroup, node; + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + subgroup.push((node = group[i]) ? { + node: node, + delay: d3_transitionDelay, + duration: d3_transitionDuration + } : null); + } + } + return d3_transition(subgroups, d3_transitionId || ++d3_transitionNextId, Date.now()); + }; + var d3_selectionRoot = d3_selection([ [ document ] ]); + d3_selectionRoot[0].parentNode = d3_selectRoot; + d3.select = function(selector) { + return typeof selector === "string" ? d3_selectionRoot.select(selector) : d3_selection([ [ selector ] ]); + }; + d3.selectAll = function(selector) { + return typeof selector === "string" ? d3_selectionRoot.selectAll(selector) : d3_selection([ d3_array(selector) ]); + }; + var d3_selection_enterPrototype = []; + d3.selection.enter = d3_selection_enter; + d3.selection.enter.prototype = d3_selection_enterPrototype; + d3_selection_enterPrototype.append = d3_selectionPrototype.append; + d3_selection_enterPrototype.insert = d3_selectionPrototype.insert; + d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; + d3_selection_enterPrototype.node = d3_selectionPrototype.node; + d3_selection_enterPrototype.select = function(selector) { + var subgroups = [], subgroup, subnode, upgroup, group, node; + for (var j = -1, m = this.length; ++j < m; ) { + upgroup = (group = this[j]).update; + subgroups.push(subgroup = []); + subgroup.parentNode = group.parentNode; + for (var i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i)); + subnode.__data__ = node.__data__; + } else { + subgroup.push(null); + } + } + } + return d3_selection(subgroups); + }; + var d3_transitionPrototype = [], d3_transitionNextId = 0, d3_transitionId = 0, d3_transitionDefaultDelay = 0, d3_transitionDefaultDuration = 250, d3_transitionDefaultEase = d3.ease("cubic-in-out"), d3_transitionDelay = d3_transitionDefaultDelay, d3_transitionDuration = d3_transitionDefaultDuration, d3_transitionEase = d3_transitionDefaultEase; + d3_transitionPrototype.call = d3_selectionPrototype.call; + d3.transition = function(selection) { + return arguments.length ? d3_transitionId ? selection.transition() : selection : d3_selectionRoot.transition(); + }; + d3.transition.prototype = d3_transitionPrototype; + d3_transitionPrototype.select = function(selector) { + var subgroups = [], subgroup, subnode, node; + if (typeof selector !== "function") selector = d3_selection_selector(selector); + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) { + if ("__data__" in node.node) subnode.__data__ = node.node.__data__; + subgroup.push({ + node: subnode, + delay: node.delay, + duration: node.duration + }); + } else { + subgroup.push(null); + } + } + } + return d3_transition(subgroups, this.id, this.time).ease(this.ease()); + }; + d3_transitionPrototype.selectAll = function(selector) { + var subgroups = [], subgroup, subnodes, node; + if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subnodes = selector.call(node.node, node.node.__data__, i); + subgroups.push(subgroup = []); + for (var k = -1, o = subnodes.length; ++k < o; ) { + subgroup.push({ + node: subnodes[k], + delay: node.delay, + duration: node.duration + }); + } + } + } + } + return d3_transition(subgroups, this.id, this.time).ease(this.ease()); + }; + d3_transitionPrototype.filter = function(filter) { + var subgroups = [], subgroup, group, node; + if (typeof filter !== "function") filter = d3_selection_filter(filter); + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node.node, node.node.__data__, i)) { + subgroup.push(node); + } + } + } + return d3_transition(subgroups, this.id, this.time).ease(this.ease()); + }; + d3_transitionPrototype.attr = function(name, value) { + if (arguments.length < 2) { + for (value in name) this.attrTween(value, d3_tweenByName(name[value], value)); + return this; + } + return this.attrTween(name, d3_tweenByName(value, name)); + }; + d3_transitionPrototype.attrTween = function(nameNS, tween) { + function attrTween(d, i) { + var f = tween.call(this, d, i, this.getAttribute(name)); + return f === d3_tweenRemove ? (this.removeAttribute(name), null) : f && function(t) { + this.setAttribute(name, f(t)); + }; + } + function attrTweenNS(d, i) { + var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); + return f === d3_tweenRemove ? (this.removeAttributeNS(name.space, name.local), null) : f && function(t) { + this.setAttributeNS(name.space, name.local, f(t)); + }; + } + var name = d3.ns.qualify(nameNS); + return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); + }; + d3_transitionPrototype.style = function(name, value, priority) { + var n = arguments.length; + if (n < 3) { + if (typeof name !== "string") { + if (n < 2) value = ""; + for (priority in name) this.styleTween(priority, d3_tweenByName(name[priority], priority), value); + return this; + } + priority = ""; + } + return this.styleTween(name, d3_tweenByName(value, name), priority); + }; + d3_transitionPrototype.styleTween = function(name, tween, priority) { + if (arguments.length < 3) priority = ""; + return this.tween("style." + name, function(d, i) { + var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name)); + return f === d3_tweenRemove ? (this.style.removeProperty(name), null) : f && function(t) { + this.style.setProperty(name, f(t), priority); + }; + }); + }; + d3_transitionPrototype.text = function(value) { + return this.tween("text", function(d, i) { + this.textContent = typeof value === "function" ? value.call(this, d, i) : value; + }); + }; + d3_transitionPrototype.remove = function() { + return this.each("end.transition", function() { + var p; + if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this); + }); + }; + d3_transitionPrototype.delay = function(value) { + return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { + node.delay = value.call(node = node.node, node.__data__, i, j) | 0; + } : (value = value | 0, function(node) { + node.delay = value; + })); + }; + d3_transitionPrototype.duration = function(value) { + return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { + node.duration = Math.max(1, value.call(node = node.node, node.__data__, i, j) | 0); + } : (value = Math.max(1, value | 0), function(node) { + node.duration = value; + })); + }; + d3_transitionPrototype.transition = function() { + return this.select(d3_this); + }; + d3.tween = function(b, interpolate) { + function tweenFunction(d, i, a) { + var v = b.call(this, d, i); + return v == null ? a != "" && d3_tweenRemove : a != v && interpolate(a, v); + } + function tweenString(d, i, a) { + return a != b && interpolate(a, b); + } + return typeof b === "function" ? tweenFunction : b == null ? d3_tweenNull : (b += "", tweenString); + }; + var d3_tweenRemove = {}; + var d3_timer_queue = null, d3_timer_interval, d3_timer_timeout; + d3.timer = function(callback, delay, then) { + var found = false, t0, t1 = d3_timer_queue; + if (arguments.length < 3) { + if (arguments.length < 2) delay = 0; else if (!isFinite(delay)) return; + then = Date.now(); + } + while (t1) { + if (t1.callback === callback) { + t1.then = then; + t1.delay = delay; + found = true; + break; + } + t0 = t1; + t1 = t1.next; + } + if (!found) d3_timer_queue = { + callback: callback, + then: then, + delay: delay, + next: d3_timer_queue + }; + if (!d3_timer_interval) { + d3_timer_timeout = clearTimeout(d3_timer_timeout); + d3_timer_interval = 1; + d3_timer_frame(d3_timer_step); + } + }; + d3.timer.flush = function() { + var elapsed, now = Date.now(), t1 = d3_timer_queue; + while (t1) { + elapsed = now - t1.then; + if (!t1.delay) t1.flush = t1.callback(elapsed); + t1 = t1.next; + } + d3_timer_flush(); + }; + var d3_timer_frame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { + setTimeout(callback, 17); + }; + d3.mouse = function(container) { + return d3_mousePoint(container, d3_eventSource()); + }; + var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0; + d3.touches = function(container, touches) { + if (arguments.length < 2) touches = d3_eventSource().touches; + return touches ? d3_array(touches).map(function(touch) { + var point = d3_mousePoint(container, touch); + point.identifier = touch.identifier; + return point; + }) : []; + }; + d3.scale = {}; + d3.scale.linear = function() { + return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3.interpolate, false); + }; + d3.scale.log = function() { + return d3_scale_log(d3.scale.linear(), d3_scale_logp); + }; + var d3_scale_logFormat = d3.format(".0e"); + d3_scale_logp.pow = function(x) { + return Math.pow(10, x); + }; + d3_scale_logn.pow = function(x) { + return -Math.pow(10, -x); + }; + d3.scale.pow = function() { + return d3_scale_pow(d3.scale.linear(), 1); + }; + d3.scale.sqrt = function() { + return d3.scale.pow().exponent(.5); + }; + d3.scale.ordinal = function() { + return d3_scale_ordinal([], { + t: "range", + a: [ [] ] + }); + }; + d3.scale.category10 = function() { + return d3.scale.ordinal().range(d3_category10); + }; + d3.scale.category20 = function() { + return d3.scale.ordinal().range(d3_category20); + }; + d3.scale.category20b = function() { + return d3.scale.ordinal().range(d3_category20b); + }; + d3.scale.category20c = function() { + return d3.scale.ordinal().range(d3_category20c); + }; + var d3_category10 = [ "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf" ]; + var d3_category20 = [ "#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c", "#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" ]; + var d3_category20b = [ "#393b79", "#5254a3", "#6b6ecf", "#9c9ede", "#637939", "#8ca252", "#b5cf6b", "#cedb9c", "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94", "#843c39", "#ad494a", "#d6616b", "#e7969c", "#7b4173", "#a55194", "#ce6dbd", "#de9ed6" ]; + var d3_category20c = [ "#3182bd", "#6baed6", "#9ecae1", "#c6dbef", "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2", "#31a354", "#74c476", "#a1d99b", "#c7e9c0", "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb", "#636363", "#969696", "#bdbdbd", "#d9d9d9" ]; + d3.scale.quantile = function() { + return d3_scale_quantile([], []); + }; + d3.scale.quantize = function() { + return d3_scale_quantize(0, 1, [ 0, 1 ]); + }; + d3.scale.threshold = function() { + return d3_scale_threshold([ .5 ], [ 0, 1 ]); + }; + d3.scale.identity = function() { + return d3_scale_identity([ 0, 1 ]); + }; + d3.svg = {}; + d3.svg.arc = function() { + function arc() { + var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0), df = da < Math.PI ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1); + return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z"; + } + var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; + arc.innerRadius = function(v) { + if (!arguments.length) return innerRadius; + innerRadius = d3_functor(v); + return arc; + }; + arc.outerRadius = function(v) { + if (!arguments.length) return outerRadius; + outerRadius = d3_functor(v); + return arc; + }; + arc.startAngle = function(v) { + if (!arguments.length) return startAngle; + startAngle = d3_functor(v); + return arc; + }; + arc.endAngle = function(v) { + if (!arguments.length) return endAngle; + endAngle = d3_functor(v); + return arc; + }; + arc.centroid = function() { + var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset; + return [ Math.cos(a) * r, Math.sin(a) * r ]; + }; + return arc; + }; + var d3_svg_arcOffset = -Math.PI / 2, d3_svg_arcMax = 2 * Math.PI - 1e-6; + d3.svg.line = function() { + return d3_svg_line(d3_identity); + }; + var d3_svg_lineInterpolators = d3.map({ + linear: d3_svg_lineLinear, + "linear-closed": d3_svg_lineLinearClosed, + "step-before": d3_svg_lineStepBefore, + "step-after": d3_svg_lineStepAfter, + basis: d3_svg_lineBasis, + "basis-open": d3_svg_lineBasisOpen, + "basis-closed": d3_svg_lineBasisClosed, + bundle: d3_svg_lineBundle, + cardinal: d3_svg_lineCardinal, + "cardinal-open": d3_svg_lineCardinalOpen, + "cardinal-closed": d3_svg_lineCardinalClosed, + monotone: d3_svg_lineMonotone + }); + d3_svg_lineInterpolators.forEach(function(key, value) { + value.key = key; + value.closed = /-closed$/.test(key); + }); + var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ]; + d3.svg.line.radial = function() { + var line = d3_svg_line(d3_svg_lineRadial); + line.radius = line.x, delete line.x; + line.angle = line.y, delete line.y; + return line; + }; + d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; + d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; + d3.svg.area = function() { + return d3_svg_area(d3_identity); + }; + d3.svg.area.radial = function() { + var area = d3_svg_area(d3_svg_lineRadial); + area.radius = area.x, delete area.x; + area.innerRadius = area.x0, delete area.x0; + area.outerRadius = area.x1, delete area.x1; + area.angle = area.y, delete area.y; + area.startAngle = area.y0, delete area.y0; + area.endAngle = area.y1, delete area.y1; + return area; + }; + d3.svg.chord = function() { + function chord(d, i) { + var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); + return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z"; + } + function subgroup(self, f, d, i) { + var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset; + return { + r: r, + a0: a0, + a1: a1, + p0: [ r * Math.cos(a0), r * Math.sin(a0) ], + p1: [ r * Math.cos(a1), r * Math.sin(a1) ] + }; + } + function equals(a, b) { + return a.a0 == b.a0 && a.a1 == b.a1; + } + function arc(r, p, a) { + return "A" + r + "," + r + " 0 " + +(a > Math.PI) + ",1 " + p; + } + function curve(r0, p0, r1, p1) { + return "Q 0,0 " + p1; + } + var source = d3_svg_chordSource, target = d3_svg_chordTarget, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; + chord.radius = function(v) { + if (!arguments.length) return radius; + radius = d3_functor(v); + return chord; + }; + chord.source = function(v) { + if (!arguments.length) return source; + source = d3_functor(v); + return chord; + }; + chord.target = function(v) { + if (!arguments.length) return target; + target = d3_functor(v); + return chord; + }; + chord.startAngle = function(v) { + if (!arguments.length) return startAngle; + startAngle = d3_functor(v); + return chord; + }; + chord.endAngle = function(v) { + if (!arguments.length) return endAngle; + endAngle = d3_functor(v); + return chord; + }; + return chord; + }; + d3.svg.diagonal = function() { + function diagonal(d, i) { + var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { + x: p0.x, + y: m + }, { + x: p3.x, + y: m + }, p3 ]; + p = p.map(projection); + return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; + } + var source = d3_svg_chordSource, target = d3_svg_chordTarget, projection = d3_svg_diagonalProjection; + diagonal.source = function(x) { + if (!arguments.length) return source; + source = d3_functor(x); + return diagonal; + }; + diagonal.target = function(x) { + if (!arguments.length) return target; + target = d3_functor(x); + return diagonal; + }; + diagonal.projection = function(x) { + if (!arguments.length) return projection; + projection = x; + return diagonal; + }; + return diagonal; + }; + d3.svg.diagonal.radial = function() { + var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; + diagonal.projection = function(x) { + return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; + }; + return diagonal; + }; + d3.svg.mouse = d3.mouse; + d3.svg.touches = d3.touches; + d3.svg.symbol = function() { + function symbol(d, i) { + return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); + } + var type = d3_svg_symbolType, size = d3_svg_symbolSize; + symbol.type = function(x) { + if (!arguments.length) return type; + type = d3_functor(x); + return symbol; + }; + symbol.size = function(x) { + if (!arguments.length) return size; + size = d3_functor(x); + return symbol; + }; + return symbol; + }; + var d3_svg_symbols = d3.map({ + circle: d3_svg_symbolCircle, + cross: function(size) { + var r = Math.sqrt(size / 5) / 2; + return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; + }, + diamond: function(size) { + var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; + return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; + }, + square: function(size) { + var r = Math.sqrt(size) / 2; + return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; + }, + "triangle-down": function(size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; + return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; + }, + "triangle-up": function(size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; + return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; + } + }); + d3.svg.symbolTypes = d3_svg_symbols.keys(); + var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180); + d3.svg.axis = function() { + function axis(g) { + g.each(function() { + var g = d3.select(this); + var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain() : tickValues, tickFormat = tickFormat_ == null ? scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String : tickFormat_; + var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide), subtick = g.selectAll(".minor").data(subticks, String), subtickEnter = subtick.enter().insert("line", "g").attr("class", "tick minor").style("opacity", 1e-6), subtickExit = d3.transition(subtick.exit()).style("opacity", 1e-6).remove(), subtickUpdate = d3.transition(subtick).style("opacity", 1); + var tick = g.selectAll("g").data(ticks, String), tickEnter = tick.enter().insert("g", "path").style("opacity", 1e-6), tickExit = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform; + var range = d3_scaleRange(scale), path = g.selectAll(".domain").data([ 0 ]), pathEnter = path.enter().append("path").attr("class", "domain"), pathUpdate = d3.transition(path); + var scale1 = scale.copy(), scale0 = this.__chart__ || scale1; + this.__chart__ = scale1; + tickEnter.append("line").attr("class", "tick"); + tickEnter.append("text"); + var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"); + switch (orient) { + case "bottom": + { + tickTransform = d3_svg_axisX; + subtickEnter.attr("y2", tickMinorSize); + subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize); + lineEnter.attr("y2", tickMajorSize); + textEnter.attr("y", Math.max(tickMajorSize, 0) + tickPadding); + lineUpdate.attr("x2", 0).attr("y2", tickMajorSize); + textUpdate.attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding); + text.attr("dy", ".71em").attr("text-anchor", "middle"); + pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize); + break; + } + case "top": + { + tickTransform = d3_svg_axisX; + subtickEnter.attr("y2", -tickMinorSize); + subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize); + lineEnter.attr("y2", -tickMajorSize); + textEnter.attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)); + lineUpdate.attr("x2", 0).attr("y2", -tickMajorSize); + textUpdate.attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)); + text.attr("dy", "0em").attr("text-anchor", "middle"); + pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize); + break; + } + case "left": + { + tickTransform = d3_svg_axisY; + subtickEnter.attr("x2", -tickMinorSize); + subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0); + lineEnter.attr("x2", -tickMajorSize); + textEnter.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)); + lineUpdate.attr("x2", -tickMajorSize).attr("y2", 0); + textUpdate.attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0); + text.attr("dy", ".32em").attr("text-anchor", "end"); + pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize); + break; + } + case "right": + { + tickTransform = d3_svg_axisY; + subtickEnter.attr("x2", tickMinorSize); + subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0); + lineEnter.attr("x2", tickMajorSize); + textEnter.attr("x", Math.max(tickMajorSize, 0) + tickPadding); + lineUpdate.attr("x2", tickMajorSize).attr("y2", 0); + textUpdate.attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0); + text.attr("dy", ".32em").attr("text-anchor", "start"); + pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize); + break; + } + } + if (scale.ticks) { + tickEnter.call(tickTransform, scale0); + tickUpdate.call(tickTransform, scale1); + tickExit.call(tickTransform, scale1); + subtickEnter.call(tickTransform, scale0); + subtickUpdate.call(tickTransform, scale1); + subtickExit.call(tickTransform, scale1); + } else { + var dx = scale1.rangeBand() / 2, x = function(d) { + return scale1(d) + dx; + }; + tickEnter.call(tickTransform, x); + tickUpdate.call(tickTransform, x); + } + }); + } + var scale = d3.scale.linear(), orient = "bottom", tickMajorSize = 6, tickMinorSize = 6, tickEndSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_, tickSubdivide = 0; + axis.scale = function(x) { + if (!arguments.length) return scale; + scale = x; + return axis; + }; + axis.orient = function(x) { + if (!arguments.length) return orient; + orient = x; + return axis; + }; + axis.ticks = function() { + if (!arguments.length) return tickArguments_; + tickArguments_ = arguments; + return axis; + }; + axis.tickValues = function(x) { + if (!arguments.length) return tickValues; + tickValues = x; + return axis; + }; + axis.tickFormat = function(x) { + if (!arguments.length) return tickFormat_; + tickFormat_ = x; + return axis; + }; + axis.tickSize = function(x, y, z) { + if (!arguments.length) return tickMajorSize; + var n = arguments.length - 1; + tickMajorSize = +x; + tickMinorSize = n > 1 ? +y : tickMajorSize; + tickEndSize = n > 0 ? +arguments[n] : tickMajorSize; + return axis; + }; + axis.tickPadding = function(x) { + if (!arguments.length) return tickPadding; + tickPadding = +x; + return axis; + }; + axis.tickSubdivide = function(x) { + if (!arguments.length) return tickSubdivide; + tickSubdivide = +x; + return axis; + }; + return axis; + }; + d3.svg.brush = function() { + function brush(g) { + g.each(function() { + var g = d3.select(this), bg = g.selectAll(".background").data([ 0 ]), fg = g.selectAll(".extent").data([ 0 ]), tz = g.selectAll(".resize").data(resizes, String), e; + g.style("pointer-events", "all").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart); + bg.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); + fg.enter().append("rect").attr("class", "extent").style("cursor", "move"); + tz.enter().append("g").attr("class", function(d) { + return "resize " + d; + }).style("cursor", function(d) { + return d3_svg_brushCursor[d]; + }).append("rect").attr("x", function(d) { + return /[ew]$/.test(d) ? -3 : null; + }).attr("y", function(d) { + return /^[ns]/.test(d) ? -3 : null; + }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); + tz.style("display", brush.empty() ? "none" : null); + tz.exit().remove(); + if (x) { + e = d3_scaleRange(x); + bg.attr("x", e[0]).attr("width", e[1] - e[0]); + redrawX(g); + } + if (y) { + e = d3_scaleRange(y); + bg.attr("y", e[0]).attr("height", e[1] - e[0]); + redrawY(g); + } + redraw(g); + }); + } + function redraw(g) { + g.selectAll(".resize").attr("transform", function(d) { + return "translate(" + extent[+/e$/.test(d)][0] + "," + extent[+/^s/.test(d)][1] + ")"; + }); + } + function redrawX(g) { + g.select(".extent").attr("x", extent[0][0]); + g.selectAll(".extent,.n>rect,.s>rect").attr("width", extent[1][0] - extent[0][0]); + } + function redrawY(g) { + g.select(".extent").attr("y", extent[0][1]); + g.selectAll(".extent,.e>rect,.w>rect").attr("height", extent[1][1] - extent[0][1]); + } + function brushstart() { + function mouse() { + var touches = d3.event.changedTouches; + return touches ? d3.touches(target, touches)[0] : d3.mouse(target); + } + function keydown() { + if (d3.event.keyCode == 32) { + if (!dragging) { + center = null; + origin[0] -= extent[1][0]; + origin[1] -= extent[1][1]; + dragging = 2; + } + d3_eventCancel(); + } + } + function keyup() { + if (d3.event.keyCode == 32 && dragging == 2) { + origin[0] += extent[1][0]; + origin[1] += extent[1][1]; + dragging = 0; + d3_eventCancel(); + } + } + function brushmove() { + var point = mouse(), moved = false; + if (offset) { + point[0] += offset[0]; + point[1] += offset[1]; + } + if (!dragging) { + if (d3.event.altKey) { + if (!center) center = [ (extent[0][0] + extent[1][0]) / 2, (extent[0][1] + extent[1][1]) / 2 ]; + origin[0] = extent[+(point[0] < center[0])][0]; + origin[1] = extent[+(point[1] < center[1])][1]; + } else center = null; + } + if (resizingX && move1(point, x, 0)) { + redrawX(g); + moved = true; + } + if (resizingY && move1(point, y, 1)) { + redrawY(g); + moved = true; + } + if (moved) { + redraw(g); + event_({ + type: "brush", + mode: dragging ? "move" : "resize" + }); + } + } + function move1(point, scale, i) { + var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], size = extent[1][i] - extent[0][i], min, max; + if (dragging) { + r0 -= position; + r1 -= size + position; + } + min = Math.max(r0, Math.min(r1, point[i])); + if (dragging) { + max = (min += position) + size; + } else { + if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); + if (position < min) { + max = min; + min = position; + } else { + max = position; + } + } + if (extent[0][i] !== min || extent[1][i] !== max) { + extentDomain = null; + extent[0][i] = min; + extent[1][i] = max; + return true; + } + } + function brushend() { + brushmove(); + g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); + d3.select("body").style("cursor", null); + w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null); + event_({ + type: "brushend" + }); + d3_eventCancel(); + } + var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), center, origin = mouse(), offset; + var w = d3.select(window).on("mousemove.brush", brushmove).on("mouseup.brush", brushend).on("touchmove.brush", brushmove).on("touchend.brush", brushend).on("keydown.brush", keydown).on("keyup.brush", keyup); + if (dragging) { + origin[0] = extent[0][0] - origin[0]; + origin[1] = extent[0][1] - origin[1]; + } else if (resizing) { + var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); + offset = [ extent[1 - ex][0] - origin[0], extent[1 - ey][1] - origin[1] ]; + origin[0] = extent[ex][0]; + origin[1] = extent[ey][1]; + } else if (d3.event.altKey) center = origin.slice(); + g.style("pointer-events", "none").selectAll(".resize").style("display", null); + d3.select("body").style("cursor", eventTarget.style("cursor")); + event_({ + type: "brushstart" + }); + brushmove(); + d3_eventCancel(); + } + var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, resizes = d3_svg_brushResizes[0], extent = [ [ 0, 0 ], [ 0, 0 ] ], extentDomain; + brush.x = function(z) { + if (!arguments.length) return x; + x = z; + resizes = d3_svg_brushResizes[!x << 1 | !y]; + return brush; + }; + brush.y = function(z) { + if (!arguments.length) return y; + y = z; + resizes = d3_svg_brushResizes[!x << 1 | !y]; + return brush; + }; + brush.extent = function(z) { + var x0, x1, y0, y1, t; + if (!arguments.length) { + z = extentDomain || extent; + if (x) { + x0 = z[0][0], x1 = z[1][0]; + if (!extentDomain) { + x0 = extent[0][0], x1 = extent[1][0]; + if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + } + } + if (y) { + y0 = z[0][1], y1 = z[1][1]; + if (!extentDomain) { + y0 = extent[0][1], y1 = extent[1][1]; + if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + } + } + return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; + } + extentDomain = [ [ 0, 0 ], [ 0, 0 ] ]; + if (x) { + x0 = z[0], x1 = z[1]; + if (y) x0 = x0[0], x1 = x1[0]; + extentDomain[0][0] = x0, extentDomain[1][0] = x1; + if (x.invert) x0 = x(x0), x1 = x(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + extent[0][0] = x0 | 0, extent[1][0] = x1 | 0; + } + if (y) { + y0 = z[0], y1 = z[1]; + if (x) y0 = y0[1], y1 = y1[1]; + extentDomain[0][1] = y0, extentDomain[1][1] = y1; + if (y.invert) y0 = y(y0), y1 = y(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + extent[0][1] = y0 | 0, extent[1][1] = y1 | 0; + } + return brush; + }; + brush.clear = function() { + extentDomain = null; + extent[0][0] = extent[0][1] = extent[1][0] = extent[1][1] = 0; + return brush; + }; + brush.empty = function() { + return x && extent[0][0] === extent[1][0] || y && extent[0][1] === extent[1][1]; + }; + return d3.rebind(brush, event, "on"); + }; + var d3_svg_brushCursor = { + n: "ns-resize", + e: "ew-resize", + s: "ns-resize", + w: "ew-resize", + nw: "nwse-resize", + ne: "nesw-resize", + se: "nwse-resize", + sw: "nesw-resize" + }; + var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; + d3.behavior = {}; + d3.behavior.drag = function() { + function drag() { + this.on("mousedown.drag", mousedown).on("touchstart.drag", mousedown); + } + function mousedown() { + function point() { + var p = target.parentNode; + return touchId ? d3.touches(p).filter(function(p) { + return p.identifier === touchId; + })[0] : d3.mouse(p); + } + function dragmove() { + if (!target.parentNode) return dragend(); + var p = point(), dx = p[0] - origin_[0], dy = p[1] - origin_[1]; + moved |= dx | dy; + origin_ = p; + d3_eventCancel(); + event_({ + type: "drag", + x: p[0] + offset[0], + y: p[1] + offset[1], + dx: dx, + dy: dy + }); + } + function dragend() { + event_({ + type: "dragend" + }); + if (moved) { + d3_eventCancel(); + if (d3.event.target === eventTarget) w.on("click.drag", click, true); + } + w.on(touchId ? "touchmove.drag-" + touchId : "mousemove.drag", null).on(touchId ? "touchend.drag-" + touchId : "mouseup.drag", null); + } + function click() { + d3_eventCancel(); + w.on("click.drag", null); + } + var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, touchId = d3.event.touches && d3.event.changedTouches[0].identifier, offset, origin_ = point(), moved = 0; + var w = d3.select(window).on(touchId ? "touchmove.drag-" + touchId : "mousemove.drag", dragmove).on(touchId ? "touchend.drag-" + touchId : "mouseup.drag", dragend, true); + if (origin) { + offset = origin.apply(target, arguments); + offset = [ offset.x - origin_[0], offset.y - origin_[1] ]; + } else { + offset = [ 0, 0 ]; + } + if (!touchId) d3_eventCancel(); + event_({ + type: "dragstart" + }); + } + var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null; + drag.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + return drag; + }; + return d3.rebind(drag, event, "on"); + }; + d3.behavior.zoom = function() { + function zoom() { + this.on("mousedown.zoom", mousedown).on("mousewheel.zoom", mousewheel).on("mousemove.zoom", mousemove).on("DOMMouseScroll.zoom", mousewheel).on("dblclick.zoom", dblclick).on("touchstart.zoom", touchstart).on("touchmove.zoom", touchmove).on("touchend.zoom", touchstart); + } + function location(p) { + return [ (p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale ]; + } + function point(l) { + return [ l[0] * scale + translate[0], l[1] * scale + translate[1] ]; + } + function scaleTo(s) { + scale = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); + } + function translateTo(p, l) { + l = point(l); + translate[0] += p[0] - l[0]; + translate[1] += p[1] - l[1]; + } + function dispatch(event) { + if (x1) x1.domain(x0.range().map(function(x) { + return (x - translate[0]) / scale; + }).map(x0.invert)); + if (y1) y1.domain(y0.range().map(function(y) { + return (y - translate[1]) / scale; + }).map(y0.invert)); + d3.event.preventDefault(); + event({ + type: "zoom", + scale: scale, + translate: translate + }); + } + function mousedown() { + function mousemove() { + moved = 1; + translateTo(d3.mouse(target), l); + dispatch(event_); + } + function mouseup() { + if (moved) d3_eventCancel(); + w.on("mousemove.zoom", null).on("mouseup.zoom", null); + if (moved && d3.event.target === eventTarget) w.on("click.zoom", click, true); + } + function click() { + d3_eventCancel(); + w.on("click.zoom", null); + } + var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, moved = 0, w = d3.select(window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup), l = location(d3.mouse(target)); + window.focus(); + d3_eventCancel(); + } + function mousewheel() { + if (!translate0) translate0 = location(d3.mouse(this)); + scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale); + translateTo(d3.mouse(this), translate0); + dispatch(event.of(this, arguments)); + } + function mousemove() { + translate0 = null; + } + function dblclick() { + var p = d3.mouse(this), l = location(p); + scaleTo(d3.event.shiftKey ? scale / 2 : scale * 2); + translateTo(p, l); + dispatch(event.of(this, arguments)); + } + function touchstart() { + var touches = d3.touches(this), now = Date.now(); + scale0 = scale; + translate0 = {}; + touches.forEach(function(t) { + translate0[t.identifier] = location(t); + }); + d3_eventCancel(); + if (touches.length === 1) { + if (now - touchtime < 500) { + var p = touches[0], l = location(touches[0]); + scaleTo(scale * 2); + translateTo(p, l); + dispatch(event.of(this, arguments)); + } + touchtime = now; + } + } + function touchmove() { + var touches = d3.touches(this), p0 = touches[0], l0 = translate0[p0.identifier]; + if (p1 = touches[1]) { + var p1, l1 = translate0[p1.identifier]; + p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; + l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; + scaleTo(d3.event.scale * scale0); + } + translateTo(p0, l0); + touchtime = null; + dispatch(event.of(this, arguments)); + } + var translate = [ 0, 0 ], translate0, scale = 1, scale0, scaleExtent = d3_behavior_zoomInfinity, event = d3_eventDispatch(zoom, "zoom"), x0, x1, y0, y1, touchtime; + zoom.translate = function(x) { + if (!arguments.length) return translate; + translate = x.map(Number); + return zoom; + }; + zoom.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return zoom; + }; + zoom.scaleExtent = function(x) { + if (!arguments.length) return scaleExtent; + scaleExtent = x == null ? d3_behavior_zoomInfinity : x.map(Number); + return zoom; + }; + zoom.x = function(z) { + if (!arguments.length) return x1; + x1 = z; + x0 = z.copy(); + return zoom; + }; + zoom.y = function(z) { + if (!arguments.length) return y1; + y1 = z; + y0 = z.copy(); + return zoom; + }; + return d3.rebind(zoom, event, "on"); + }; + var d3_behavior_zoomDiv, d3_behavior_zoomInfinity = [ 0, Infinity ]; + d3.layout = {}; + d3.layout.bundle = function() { + return function(links) { + var paths = [], i = -1, n = links.length; + while (++i < n) paths.push(d3_layout_bundlePath(links[i])); + return paths; + }; + }; + d3.layout.chord = function() { + function relayout() { + var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; + chords = []; + groups = []; + k = 0, i = -1; + while (++i < n) { + x = 0, j = -1; + while (++j < n) { + x += matrix[i][j]; + } + groupSums.push(x); + subgroupIndex.push(d3.range(n)); + k += x; + } + if (sortGroups) { + groupIndex.sort(function(a, b) { + return sortGroups(groupSums[a], groupSums[b]); + }); + } + if (sortSubgroups) { + subgroupIndex.forEach(function(d, i) { + d.sort(function(a, b) { + return sortSubgroups(matrix[i][a], matrix[i][b]); + }); + }); + } + k = (2 * Math.PI - padding * n) / k; + x = 0, i = -1; + while (++i < n) { + x0 = x, j = -1; + while (++j < n) { + var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; + subgroups[di + "-" + dj] = { + index: di, + subindex: dj, + startAngle: a0, + endAngle: a1, + value: v + }; + } + groups[di] = { + index: di, + startAngle: x0, + endAngle: x, + value: (x - x0) / k + }; + x += padding; + } + i = -1; + while (++i < n) { + j = i - 1; + while (++j < n) { + var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; + if (source.value || target.value) { + chords.push(source.value < target.value ? { + source: target, + target: source + } : { + source: source, + target: target + }); + } + } + } + if (sortChords) resort(); + } + function resort() { + chords.sort(function(a, b) { + return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); + }); + } + var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; + chord.matrix = function(x) { + if (!arguments.length) return matrix; + n = (matrix = x) && matrix.length; + chords = groups = null; + return chord; + }; + chord.padding = function(x) { + if (!arguments.length) return padding; + padding = x; + chords = groups = null; + return chord; + }; + chord.sortGroups = function(x) { + if (!arguments.length) return sortGroups; + sortGroups = x; + chords = groups = null; + return chord; + }; + chord.sortSubgroups = function(x) { + if (!arguments.length) return sortSubgroups; + sortSubgroups = x; + chords = null; + return chord; + }; + chord.sortChords = function(x) { + if (!arguments.length) return sortChords; + sortChords = x; + if (chords) resort(); + return chord; + }; + chord.chords = function() { + if (!chords) relayout(); + return chords; + }; + chord.groups = function() { + if (!groups) relayout(); + return groups; + }; + return chord; + }; + d3.layout.force = function() { + function repulse(node) { + return function(quad, x1, y1, x2, y2) { + if (quad.point !== node) { + var dx = quad.cx - node.x, dy = quad.cy - node.y, dn = 1 / Math.sqrt(dx * dx + dy * dy); + if ((x2 - x1) * dn < theta) { + var k = quad.charge * dn * dn; + node.px -= dx * k; + node.py -= dy * k; + return true; + } + if (quad.point && isFinite(dn)) { + var k = quad.pointCharge * dn * dn; + node.px -= dx * k; + node.py -= dy * k; + } + } + return !quad.charge; + }; + } + function dragmove(d) { + d.px = d3.event.x; + d.py = d3.event.y; + force.resume(); + } + var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, gravity = .1, theta = .8, interval, nodes = [], links = [], distances, strengths, charges; + force.tick = function() { + if ((alpha *= .99) < .005) { + event.end({ + type: "end", + alpha: alpha = 0 + }); + return true; + } + var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; + for (i = 0; i < m; ++i) { + o = links[i]; + s = o.source; + t = o.target; + x = t.x - s.x; + y = t.y - s.y; + if (l = x * x + y * y) { + l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; + x *= l; + y *= l; + t.x -= x * (k = s.weight / (t.weight + s.weight)); + t.y -= y * k; + s.x += x * (k = 1 - k); + s.y += y * k; + } + } + if (k = alpha * gravity) { + x = size[0] / 2; + y = size[1] / 2; + i = -1; + if (k) while (++i < n) { + o = nodes[i]; + o.x += (x - o.x) * k; + o.y += (y - o.y) * k; + } + } + if (charge) { + d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); + i = -1; + while (++i < n) { + if (!(o = nodes[i]).fixed) { + q.visit(repulse(o)); + } + } + } + i = -1; + while (++i < n) { + o = nodes[i]; + if (o.fixed) { + o.x = o.px; + o.y = o.py; + } else { + o.x -= (o.px - (o.px = o.x)) * friction; + o.y -= (o.py - (o.py = o.y)) * friction; + } + } + event.tick({ + type: "tick", + alpha: alpha + }); + }; + force.nodes = function(x) { + if (!arguments.length) return nodes; + nodes = x; + return force; + }; + force.links = function(x) { + if (!arguments.length) return links; + links = x; + return force; + }; + force.size = function(x) { + if (!arguments.length) return size; + size = x; + return force; + }; + force.linkDistance = function(x) { + if (!arguments.length) return linkDistance; + linkDistance = d3_functor(x); + return force; + }; + force.distance = force.linkDistance; + force.linkStrength = function(x) { + if (!arguments.length) return linkStrength; + linkStrength = d3_functor(x); + return force; + }; + force.friction = function(x) { + if (!arguments.length) return friction; + friction = x; + return force; + }; + force.charge = function(x) { + if (!arguments.length) return charge; + charge = typeof x === "function" ? x : +x; + return force; + }; + force.gravity = function(x) { + if (!arguments.length) return gravity; + gravity = x; + return force; + }; + force.theta = function(x) { + if (!arguments.length) return theta; + theta = x; + return force; + }; + force.alpha = function(x) { + if (!arguments.length) return alpha; + if (alpha) { + if (x > 0) alpha = x; else alpha = 0; + } else if (x > 0) { + event.start({ + type: "start", + alpha: alpha = x + }); + d3.timer(force.tick); + } + return force; + }; + force.start = function() { + function position(dimension, size) { + var neighbors = neighbor(i), j = -1, m = neighbors.length, x; + while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x; + return Math.random() * size; + } + function neighbor() { + if (!neighbors) { + neighbors = []; + for (j = 0; j < n; ++j) { + neighbors[j] = []; + } + for (j = 0; j < m; ++j) { + var o = links[j]; + neighbors[o.source.index].push(o.target); + neighbors[o.target.index].push(o.source); + } + } + return neighbors[i]; + } + var i, j, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; + for (i = 0; i < n; ++i) { + (o = nodes[i]).index = i; + o.weight = 0; + } + distances = []; + strengths = []; + for (i = 0; i < m; ++i) { + o = links[i]; + if (typeof o.source == "number") o.source = nodes[o.source]; + if (typeof o.target == "number") o.target = nodes[o.target]; + distances[i] = linkDistance.call(this, o, i); + strengths[i] = linkStrength.call(this, o, i); + ++o.source.weight; + ++o.target.weight; + } + for (i = 0; i < n; ++i) { + o = nodes[i]; + if (isNaN(o.x)) o.x = position("x", w); + if (isNaN(o.y)) o.y = position("y", h); + if (isNaN(o.px)) o.px = o.x; + if (isNaN(o.py)) o.py = o.y; + } + charges = []; + if (typeof charge === "function") { + for (i = 0; i < n; ++i) { + charges[i] = +charge.call(this, nodes[i], i); + } + } else { + for (i = 0; i < n; ++i) { + charges[i] = charge; + } + } + return force.resume(); + }; + force.resume = function() { + return force.alpha(.1); + }; + force.stop = function() { + return force.alpha(0); + }; + force.drag = function() { + if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart", d3_layout_forceDragstart).on("drag", dragmove).on("dragend", d3_layout_forceDragend); + this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); + }; + return d3.rebind(force, event, "on"); + }; + d3.layout.partition = function() { + function position(node, x, dx, dy) { + var children = node.children; + node.x = x; + node.y = node.depth * dy; + node.dx = dx; + node.dy = dy; + if (children && (n = children.length)) { + var i = -1, n, c, d; + dx = node.value ? dx / node.value : 0; + while (++i < n) { + position(c = children[i], x, d = c.value * dx, dy); + x += d; + } + } + } + function depth(node) { + var children = node.children, d = 0; + if (children && (n = children.length)) { + var i = -1, n; + while (++i < n) d = Math.max(d, depth(children[i])); + } + return 1 + d; + } + function partition(d, i) { + var nodes = hierarchy.call(this, d, i); + position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); + return nodes; + } + var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; + partition.size = function(x) { + if (!arguments.length) return size; + size = x; + return partition; + }; + return d3_layout_hierarchyRebind(partition, hierarchy); + }; + d3.layout.pie = function() { + function pie(data, i) { + var values = data.map(function(d, i) { + return +value.call(pie, d, i); + }); + var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle); + var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - startAngle) / d3.sum(values); + var index = d3.range(data.length); + if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { + return values[j] - values[i]; + } : function(i, j) { + return sort(data[i], data[j]); + }); + var arcs = []; + index.forEach(function(i) { + var d; + arcs[i] = { + data: data[i], + value: d = values[i], + startAngle: a, + endAngle: a += d * k + }; + }); + return arcs; + } + var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = 2 * Math.PI; + pie.value = function(x) { + if (!arguments.length) return value; + value = x; + return pie; + }; + pie.sort = function(x) { + if (!arguments.length) return sort; + sort = x; + return pie; + }; + pie.startAngle = function(x) { + if (!arguments.length) return startAngle; + startAngle = x; + return pie; + }; + pie.endAngle = function(x) { + if (!arguments.length) return endAngle; + endAngle = x; + return pie; + }; + return pie; + }; + var d3_layout_pieSortByValue = {}; + d3.layout.stack = function() { + function stack(data, index) { + var series = data.map(function(d, i) { + return values.call(stack, d, i); + }); + var points = series.map(function(d, i) { + return d.map(function(v, i) { + return [ x.call(stack, v, i), y.call(stack, v, i) ]; + }); + }); + var orders = order.call(stack, points, index); + series = d3.permute(series, orders); + points = d3.permute(points, orders); + var offsets = offset.call(stack, points, index); + var n = series.length, m = series[0].length, i, j, o; + for (j = 0; j < m; ++j) { + out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); + for (i = 1; i < n; ++i) { + out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); + } + } + return data; + } + var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; + stack.values = function(x) { + if (!arguments.length) return values; + values = x; + return stack; + }; + stack.order = function(x) { + if (!arguments.length) return order; + order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; + return stack; + }; + stack.offset = function(x) { + if (!arguments.length) return offset; + offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; + return stack; + }; + stack.x = function(z) { + if (!arguments.length) return x; + x = z; + return stack; + }; + stack.y = function(z) { + if (!arguments.length) return y; + y = z; + return stack; + }; + stack.out = function(z) { + if (!arguments.length) return out; + out = z; + return stack; + }; + return stack; + }; + var d3_layout_stackOrders = d3.map({ + "inside-out": function(data) { + var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { + return max[a] - max[b]; + }), top = 0, bottom = 0, tops = [], bottoms = []; + for (i = 0; i < n; ++i) { + j = index[i]; + if (top < bottom) { + top += sums[j]; + tops.push(j); + } else { + bottom += sums[j]; + bottoms.push(j); + } + } + return bottoms.reverse().concat(tops); + }, + reverse: function(data) { + return d3.range(data.length).reverse(); + }, + "default": d3_layout_stackOrderDefault + }); + var d3_layout_stackOffsets = d3.map({ + silhouette: function(data) { + var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; + if (o > max) max = o; + sums.push(o); + } + for (j = 0; j < m; ++j) { + y0[j] = (max - sums[j]) / 2; + } + return y0; + }, + wiggle: function(data) { + var n = data.length, x = data[0], m = x.length, max = 0, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; + y0[0] = o = o0 = 0; + for (j = 1; j < m; ++j) { + for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; + for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { + for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { + s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; + } + s2 += s3 * data[i][j][1]; + } + y0[j] = o -= s1 ? s2 / s1 * dx : 0; + if (o < o0) o0 = o; + } + for (j = 0; j < m; ++j) y0[j] -= o0; + return y0; + }, + expand: function(data) { + var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; + if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; + } + for (j = 0; j < m; ++j) y0[j] = 0; + return y0; + }, + zero: d3_layout_stackOffsetZero + }); + d3.layout.histogram = function() { + function histogram(data, i) { + var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; + while (++i < m) { + bin = bins[i] = []; + bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); + bin.y = 0; + } + if (m > 0) { + i = -1; + while (++i < n) { + x = values[i]; + if (x >= range[0] && x <= range[1]) { + bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; + bin.y += k; + bin.push(data[i]); + } + } + } + return bins; + } + var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; + histogram.value = function(x) { + if (!arguments.length) return valuer; + valuer = x; + return histogram; + }; + histogram.range = function(x) { + if (!arguments.length) return ranger; + ranger = d3_functor(x); + return histogram; + }; + histogram.bins = function(x) { + if (!arguments.length) return binner; + binner = typeof x === "number" ? function(range) { + return d3_layout_histogramBinFixed(range, x); + } : d3_functor(x); + return histogram; + }; + histogram.frequency = function(x) { + if (!arguments.length) return frequency; + frequency = !!x; + return histogram; + }; + return histogram; + }; + d3.layout.hierarchy = function() { + function recurse(data, depth, nodes) { + var childs = children.call(hierarchy, data, depth), node = d3_layout_hierarchyInline ? data : { + data: data + }; + node.depth = depth; + nodes.push(node); + if (childs && (n = childs.length)) { + var i = -1, n, c = node.children = [], v = 0, j = depth + 1, d; + while (++i < n) { + d = recurse(childs[i], j, nodes); + d.parent = node; + c.push(d); + v += d.value; + } + if (sort) c.sort(sort); + if (value) node.value = v; + } else if (value) { + node.value = +value.call(hierarchy, data, depth) || 0; + } + return node; + } + function revalue(node, depth) { + var children = node.children, v = 0; + if (children && (n = children.length)) { + var i = -1, n, j = depth + 1; + while (++i < n) v += revalue(children[i], j); + } else if (value) { + v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0; + } + if (value) node.value = v; + return v; + } + function hierarchy(d) { + var nodes = []; + recurse(d, 0, nodes); + return nodes; + } + var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; + hierarchy.sort = function(x) { + if (!arguments.length) return sort; + sort = x; + return hierarchy; + }; + hierarchy.children = function(x) { + if (!arguments.length) return children; + children = x; + return hierarchy; + }; + hierarchy.value = function(x) { + if (!arguments.length) return value; + value = x; + return hierarchy; + }; + hierarchy.revalue = function(root) { + revalue(root, 0); + return root; + }; + return hierarchy; + }; + var d3_layout_hierarchyInline = false; + d3.layout.pack = function() { + function pack(d, i) { + var nodes = hierarchy.call(this, d, i), root = nodes[0]; + root.x = 0; + root.y = 0; + d3_layout_treeVisitAfter(root, function(d) { + d.r = Math.sqrt(d.value); + }); + d3_layout_treeVisitAfter(root, d3_layout_packSiblings); + var w = size[0], h = size[1], k = Math.max(2 * root.r / w, 2 * root.r / h); + if (padding > 0) { + var dr = padding * k / 2; + d3_layout_treeVisitAfter(root, function(d) { + d.r += dr; + }); + d3_layout_treeVisitAfter(root, d3_layout_packSiblings); + d3_layout_treeVisitAfter(root, function(d) { + d.r -= dr; + }); + k = Math.max(2 * root.r / w, 2 * root.r / h); + } + d3_layout_packTransform(root, w / 2, h / 2, 1 / k); + return nodes; + } + var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ]; + pack.size = function(x) { + if (!arguments.length) return size; + size = x; + return pack; + }; + pack.padding = function(_) { + if (!arguments.length) return padding; + padding = +_; + return pack; + }; + return d3_layout_hierarchyRebind(pack, hierarchy); + }; + d3.layout.cluster = function() { + function cluster(d, i) { + var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0, kx, ky; + d3_layout_treeVisitAfter(root, function(node) { + var children = node.children; + if (children && children.length) { + node.x = d3_layout_clusterX(children); + node.y = d3_layout_clusterY(children); + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0; + node.y = 0; + previousNode = node; + } + }); + var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; + d3_layout_treeVisitAfter(root, function(node) { + node.x = (node.x - x0) / (x1 - x0) * size[0]; + node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; + }); + return nodes; + } + var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ]; + cluster.separation = function(x) { + if (!arguments.length) return separation; + separation = x; + return cluster; + }; + cluster.size = function(x) { + if (!arguments.length) return size; + size = x; + return cluster; + }; + return d3_layout_hierarchyRebind(cluster, hierarchy); + }; + d3.layout.tree = function() { + function tree(d, i) { + function firstWalk(node, previousSibling) { + var children = node.children, layout = node._tree; + if (children && (n = children.length)) { + var n, firstChild = children[0], previousChild, ancestor = firstChild, child, i = -1; + while (++i < n) { + child = children[i]; + firstWalk(child, previousChild); + ancestor = apportion(child, previousChild, ancestor); + previousChild = child; + } + d3_layout_treeShift(node); + var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim); + if (previousSibling) { + layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling); + layout.mod = layout.prelim - midpoint; + } else { + layout.prelim = midpoint; + } + } else { + if (previousSibling) { + layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling); + } + } + } + function secondWalk(node, x) { + node.x = node._tree.prelim + x; + var children = node.children; + if (children && (n = children.length)) { + var i = -1, n; + x += node._tree.mod; + while (++i < n) { + secondWalk(children[i], x); + } + } + } + function apportion(node, previousSibling, ancestor) { + if (previousSibling) { + var vip = node, vop = node, vim = previousSibling, vom = node.parent.children[0], sip = vip._tree.mod, sop = vop._tree.mod, sim = vim._tree.mod, som = vom._tree.mod, shift; + while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { + vom = d3_layout_treeLeft(vom); + vop = d3_layout_treeRight(vop); + vop._tree.ancestor = node; + shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip); + if (shift > 0) { + d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift); + sip += shift; + sop += shift; + } + sim += vim._tree.mod; + sip += vip._tree.mod; + som += vom._tree.mod; + sop += vop._tree.mod; + } + if (vim && !d3_layout_treeRight(vop)) { + vop._tree.thread = vim; + vop._tree.mod += sim - sop; + } + if (vip && !d3_layout_treeLeft(vom)) { + vom._tree.thread = vip; + vom._tree.mod += sip - som; + ancestor = node; + } + } + return ancestor; + } + var nodes = hierarchy.call(this, d, i), root = nodes[0]; + d3_layout_treeVisitAfter(root, function(node, previousSibling) { + node._tree = { + ancestor: node, + prelim: 0, + mod: 0, + change: 0, + shift: 0, + number: previousSibling ? previousSibling._tree.number + 1 : 0 + }; + }); + firstWalk(root); + secondWalk(root, -root._tree.prelim); + var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost), right = d3_layout_treeSearch(root, d3_layout_treeRightmost), deep = d3_layout_treeSearch(root, d3_layout_treeDeepest), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2, y1 = deep.depth || 1; + d3_layout_treeVisitAfter(root, function(node) { + node.x = (node.x - x0) / (x1 - x0) * size[0]; + node.y = node.depth / y1 * size[1]; + delete node._tree; + }); + return nodes; + } + var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ]; + tree.separation = function(x) { + if (!arguments.length) return separation; + separation = x; + return tree; + }; + tree.size = function(x) { + if (!arguments.length) return size; + size = x; + return tree; + }; + return d3_layout_hierarchyRebind(tree, hierarchy); + }; + d3.layout.treemap = function() { + function scale(children, k) { + var i = -1, n = children.length, child, area; + while (++i < n) { + area = (child = children[i]).value * (k < 0 ? 0 : k); + child.area = isNaN(area) || area <= 0 ? 0 : area; + } + } + function squarify(node) { + var children = node.children; + if (children && children.length) { + var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = Math.min(rect.dx, rect.dy), n; + scale(remaining, rect.dx * rect.dy / node.value); + row.area = 0; + while ((n = remaining.length) > 0) { + row.push(child = remaining[n - 1]); + row.area += child.area; + if ((score = worst(row, u)) <= best) { + remaining.pop(); + best = score; + } else { + row.area -= row.pop().area; + position(row, u, rect, false); + u = Math.min(rect.dx, rect.dy); + row.length = row.area = 0; + best = Infinity; + } + } + if (row.length) { + position(row, u, rect, true); + row.length = row.area = 0; + } + children.forEach(squarify); + } + } + function stickify(node) { + var children = node.children; + if (children && children.length) { + var rect = pad(node), remaining = children.slice(), child, row = []; + scale(remaining, rect.dx * rect.dy / node.value); + row.area = 0; + while (child = remaining.pop()) { + row.push(child); + row.area += child.area; + if (child.z != null) { + position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); + row.length = row.area = 0; + } + } + children.forEach(stickify); + } + } + function worst(row, u) { + var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; + while (++i < n) { + if (!(r = row[i].area)) continue; + if (r < rmin) rmin = r; + if (r > rmax) rmax = r; + } + s *= s; + u *= u; + return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; + } + function position(row, u, rect, flush) { + var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; + if (u == rect.dx) { + if (flush || v > rect.dy) v = rect.dy; + while (++i < n) { + o = row[i]; + o.x = x; + o.y = y; + o.dy = v; + x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); + } + o.z = true; + o.dx += rect.x + rect.dx - x; + rect.y += v; + rect.dy -= v; + } else { + if (flush || v > rect.dx) v = rect.dx; + while (++i < n) { + o = row[i]; + o.x = x; + o.y = y; + o.dx = v; + y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); + } + o.z = false; + o.dy += rect.y + rect.dy - y; + rect.x += v; + rect.dx -= v; + } + } + function treemap(d) { + var nodes = stickies || hierarchy(d), root = nodes[0]; + root.x = 0; + root.y = 0; + root.dx = size[0]; + root.dy = size[1]; + if (stickies) hierarchy.revalue(root); + scale([ root ], root.dx * root.dy / root.value); + (stickies ? stickify : squarify)(root); + if (sticky) stickies = nodes; + return nodes; + } + var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, ratio = .5 * (1 + Math.sqrt(5)); + treemap.size = function(x) { + if (!arguments.length) return size; + size = x; + return treemap; + }; + treemap.padding = function(x) { + function padFunction(node) { + var p = x.call(treemap, node, node.depth); + return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); + } + function padConstant(node) { + return d3_layout_treemapPad(node, x); + } + if (!arguments.length) return padding; + var type; + pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], padConstant) : padConstant; + return treemap; + }; + treemap.round = function(x) { + if (!arguments.length) return round != Number; + round = x ? Math.round : Number; + return treemap; + }; + treemap.sticky = function(x) { + if (!arguments.length) return sticky; + sticky = x; + stickies = null; + return treemap; + }; + treemap.ratio = function(x) { + if (!arguments.length) return ratio; + ratio = x; + return treemap; + }; + return d3_layout_hierarchyRebind(treemap, hierarchy); + }; + d3.csv = d3_dsv(",", "text/csv"); + d3.tsv = d3_dsv(" ", "text/tab-separated-values"); + d3.geo = {}; + var d3_geo_radians = Math.PI / 180; + d3.geo.azimuthal = function() { + function azimuthal(coordinates) { + var x1 = coordinates[0] * d3_geo_radians - x0, y1 = coordinates[1] * d3_geo_radians, cx1 = Math.cos(x1), sx1 = Math.sin(x1), cy1 = Math.cos(y1), sy1 = Math.sin(y1), cc = mode !== "orthographic" ? sy0 * sy1 + cy0 * cy1 * cx1 : null, c, k = mode === "stereographic" ? 1 / (1 + cc) : mode === "gnomonic" ? 1 / cc : mode === "equidistant" ? (c = Math.acos(cc), c ? c / Math.sin(c) : 0) : mode === "equalarea" ? Math.sqrt(2 / (1 + cc)) : 1, x = k * cy1 * sx1, y = k * (sy0 * cy1 * cx1 - cy0 * sy1); + return [ scale * x + translate[0], scale * y + translate[1] ]; + } + var mode = "orthographic", origin, scale = 200, translate = [ 480, 250 ], x0, y0, cy0, sy0; + azimuthal.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale, p = Math.sqrt(x * x + y * y), c = mode === "stereographic" ? 2 * Math.atan(p) : mode === "gnomonic" ? Math.atan(p) : mode === "equidistant" ? p : mode === "equalarea" ? 2 * Math.asin(.5 * p) : Math.asin(p), sc = Math.sin(c), cc = Math.cos(c); + return [ (x0 + Math.atan2(x * sc, p * cy0 * cc + y * sy0 * sc)) / d3_geo_radians, Math.asin(cc * sy0 - (p ? y * sc * cy0 / p : 0)) / d3_geo_radians ]; + }; + azimuthal.mode = function(x) { + if (!arguments.length) return mode; + mode = x + ""; + return azimuthal; + }; + azimuthal.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + x0 = origin[0] * d3_geo_radians; + y0 = origin[1] * d3_geo_radians; + cy0 = Math.cos(y0); + sy0 = Math.sin(y0); + return azimuthal; + }; + azimuthal.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return azimuthal; + }; + azimuthal.translate = function(x) { + if (!arguments.length) return translate; + translate = [ +x[0], +x[1] ]; + return azimuthal; + }; + return azimuthal.origin([ 0, 0 ]); + }; + d3.geo.albers = function() { + function albers(coordinates) { + var t = n * (d3_geo_radians * coordinates[0] - lng0), p = Math.sqrt(C - 2 * n * Math.sin(d3_geo_radians * coordinates[1])) / n; + return [ scale * p * Math.sin(t) + translate[0], scale * (p * Math.cos(t) - p0) + translate[1] ]; + } + function reload() { + var phi1 = d3_geo_radians * parallels[0], phi2 = d3_geo_radians * parallels[1], lat0 = d3_geo_radians * origin[1], s = Math.sin(phi1), c = Math.cos(phi1); + lng0 = d3_geo_radians * origin[0]; + n = .5 * (s + Math.sin(phi2)); + C = c * c + 2 * n * s; + p0 = Math.sqrt(C - 2 * n * Math.sin(lat0)) / n; + return albers; + } + var origin = [ -98, 38 ], parallels = [ 29.5, 45.5 ], scale = 1e3, translate = [ 480, 250 ], lng0, n, C, p0; + albers.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale, p0y = p0 + y, t = Math.atan2(x, p0y), p = Math.sqrt(x * x + p0y * p0y); + return [ (lng0 + t / n) / d3_geo_radians, Math.asin((C - p * p * n * n) / (2 * n)) / d3_geo_radians ]; + }; + albers.origin = function(x) { + if (!arguments.length) return origin; + origin = [ +x[0], +x[1] ]; + return reload(); + }; + albers.parallels = function(x) { + if (!arguments.length) return parallels; + parallels = [ +x[0], +x[1] ]; + return reload(); + }; + albers.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return albers; + }; + albers.translate = function(x) { + if (!arguments.length) return translate; + translate = [ +x[0], +x[1] ]; + return albers; + }; + return reload(); + }; + d3.geo.albersUsa = function() { + function albersUsa(coordinates) { + var lon = coordinates[0], lat = coordinates[1]; + return (lat > 50 ? alaska : lon < -140 ? hawaii : lat < 21 ? puertoRico : lower48)(coordinates); + } + var lower48 = d3.geo.albers(); + var alaska = d3.geo.albers().origin([ -160, 60 ]).parallels([ 55, 65 ]); + var hawaii = d3.geo.albers().origin([ -160, 20 ]).parallels([ 8, 18 ]); + var puertoRico = d3.geo.albers().origin([ -60, 10 ]).parallels([ 8, 18 ]); + albersUsa.scale = function(x) { + if (!arguments.length) return lower48.scale(); + lower48.scale(x); + alaska.scale(x * .6); + hawaii.scale(x); + puertoRico.scale(x * 1.5); + return albersUsa.translate(lower48.translate()); + }; + albersUsa.translate = function(x) { + if (!arguments.length) return lower48.translate(); + var dz = lower48.scale() / 1e3, dx = x[0], dy = x[1]; + lower48.translate(x); + alaska.translate([ dx - 400 * dz, dy + 170 * dz ]); + hawaii.translate([ dx - 190 * dz, dy + 200 * dz ]); + puertoRico.translate([ dx + 580 * dz, dy + 430 * dz ]); + return albersUsa; + }; + return albersUsa.scale(lower48.scale()); + }; + d3.geo.bonne = function() { + function bonne(coordinates) { + var x = coordinates[0] * d3_geo_radians - x0, y = coordinates[1] * d3_geo_radians - y0; + if (y1) { + var p = c1 + y1 - y, E = x * Math.cos(y) / p; + x = p * Math.sin(E); + y = p * Math.cos(E) - c1; + } else { + x *= Math.cos(y); + y *= -1; + } + return [ scale * x + translate[0], scale * y + translate[1] ]; + } + var scale = 200, translate = [ 480, 250 ], x0, y0, y1, c1; + bonne.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; + if (y1) { + var c = c1 + y, p = Math.sqrt(x * x + c * c); + y = c1 + y1 - p; + x = x0 + p * Math.atan2(x, c) / Math.cos(y); + } else { + y *= -1; + x /= Math.cos(y); + } + return [ x / d3_geo_radians, y / d3_geo_radians ]; + }; + bonne.parallel = function(x) { + if (!arguments.length) return y1 / d3_geo_radians; + c1 = 1 / Math.tan(y1 = x * d3_geo_radians); + return bonne; + }; + bonne.origin = function(x) { + if (!arguments.length) return [ x0 / d3_geo_radians, y0 / d3_geo_radians ]; + x0 = x[0] * d3_geo_radians; + y0 = x[1] * d3_geo_radians; + return bonne; + }; + bonne.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return bonne; + }; + bonne.translate = function(x) { + if (!arguments.length) return translate; + translate = [ +x[0], +x[1] ]; + return bonne; + }; + return bonne.origin([ 0, 0 ]).parallel(45); + }; + d3.geo.equirectangular = function() { + function equirectangular(coordinates) { + var x = coordinates[0] / 360, y = -coordinates[1] / 360; + return [ scale * x + translate[0], scale * y + translate[1] ]; + } + var scale = 500, translate = [ 480, 250 ]; + equirectangular.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; + return [ 360 * x, -360 * y ]; + }; + equirectangular.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return equirectangular; + }; + equirectangular.translate = function(x) { + if (!arguments.length) return translate; + translate = [ +x[0], +x[1] ]; + return equirectangular; + }; + return equirectangular; + }; + d3.geo.mercator = function() { + function mercator(coordinates) { + var x = coordinates[0] / 360, y = -(Math.log(Math.tan(Math.PI / 4 + coordinates[1] * d3_geo_radians / 2)) / d3_geo_radians) / 360; + return [ scale * x + translate[0], scale * Math.max(-.5, Math.min(.5, y)) + translate[1] ]; + } + var scale = 500, translate = [ 480, 250 ]; + mercator.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale; + return [ 360 * x, 2 * Math.atan(Math.exp(-360 * y * d3_geo_radians)) / d3_geo_radians - 90 ]; + }; + mercator.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return mercator; + }; + mercator.translate = function(x) { + if (!arguments.length) return translate; + translate = [ +x[0], +x[1] ]; + return mercator; + }; + return mercator; + }; + d3.geo.path = function() { + function path(d, i) { + if (typeof pointRadius === "function") pointCircle = d3_path_circle(pointRadius.apply(this, arguments)); + pathType(d); + var result = buffer.length ? buffer.join("") : null; + buffer = []; + return result; + } + function project(coordinates) { + return projection(coordinates).join(","); + } + function polygonArea(coordinates) { + var sum = area(coordinates[0]), i = 0, n = coordinates.length; + while (++i < n) sum -= area(coordinates[i]); + return sum; + } + function polygonCentroid(coordinates) { + var polygon = d3.geom.polygon(coordinates[0].map(projection)), area = polygon.area(), centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1), x = centroid[0], y = centroid[1], z = area, i = 0, n = coordinates.length; + while (++i < n) { + polygon = d3.geom.polygon(coordinates[i].map(projection)); + area = polygon.area(); + centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1); + x -= centroid[0]; + y -= centroid[1]; + z -= area; + } + return [ x, y, 6 * z ]; + } + function area(coordinates) { + return Math.abs(d3.geom.polygon(coordinates.map(projection)).area()); + } + var pointRadius = 4.5, pointCircle = d3_path_circle(pointRadius), projection = d3.geo.albersUsa(), buffer = []; + var pathType = d3_geo_type({ + FeatureCollection: function(o) { + var features = o.features, i = -1, n = features.length; + while (++i < n) buffer.push(pathType(features[i].geometry)); + }, + Feature: function(o) { + pathType(o.geometry); + }, + Point: function(o) { + buffer.push("M", project(o.coordinates), pointCircle); + }, + MultiPoint: function(o) { + var coordinates = o.coordinates, i = -1, n = coordinates.length; + while (++i < n) buffer.push("M", project(coordinates[i]), pointCircle); + }, + LineString: function(o) { + var coordinates = o.coordinates, i = -1, n = coordinates.length; + buffer.push("M"); + while (++i < n) buffer.push(project(coordinates[i]), "L"); + buffer.pop(); + }, + MultiLineString: function(o) { + var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m; + while (++i < n) { + subcoordinates = coordinates[i]; + j = -1; + m = subcoordinates.length; + buffer.push("M"); + while (++j < m) buffer.push(project(subcoordinates[j]), "L"); + buffer.pop(); + } + }, + Polygon: function(o) { + var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m; + while (++i < n) { + subcoordinates = coordinates[i]; + j = -1; + if ((m = subcoordinates.length - 1) > 0) { + buffer.push("M"); + while (++j < m) buffer.push(project(subcoordinates[j]), "L"); + buffer[buffer.length - 1] = "Z"; + } + } + }, + MultiPolygon: function(o) { + var coordinates = o.coordinates, i = -1, n = coordinates.length, subcoordinates, j, m, subsubcoordinates, k, p; + while (++i < n) { + subcoordinates = coordinates[i]; + j = -1; + m = subcoordinates.length; + while (++j < m) { + subsubcoordinates = subcoordinates[j]; + k = -1; + if ((p = subsubcoordinates.length - 1) > 0) { + buffer.push("M"); + while (++k < p) buffer.push(project(subsubcoordinates[k]), "L"); + buffer[buffer.length - 1] = "Z"; + } + } + } + }, + GeometryCollection: function(o) { + var geometries = o.geometries, i = -1, n = geometries.length; + while (++i < n) buffer.push(pathType(geometries[i])); + } + }); + var areaType = path.area = d3_geo_type({ + FeatureCollection: function(o) { + var area = 0, features = o.features, i = -1, n = features.length; + while (++i < n) area += areaType(features[i]); + return area; + }, + Feature: function(o) { + return areaType(o.geometry); + }, + Polygon: function(o) { + return polygonArea(o.coordinates); + }, + MultiPolygon: function(o) { + var sum = 0, coordinates = o.coordinates, i = -1, n = coordinates.length; + while (++i < n) sum += polygonArea(coordinates[i]); + return sum; + }, + GeometryCollection: function(o) { + var sum = 0, geometries = o.geometries, i = -1, n = geometries.length; + while (++i < n) sum += areaType(geometries[i]); + return sum; + } + }, 0); + var centroidType = path.centroid = d3_geo_type({ + Feature: function(o) { + return centroidType(o.geometry); + }, + Polygon: function(o) { + var centroid = polygonCentroid(o.coordinates); + return [ centroid[0] / centroid[2], centroid[1] / centroid[2] ]; + }, + MultiPolygon: function(o) { + var area = 0, coordinates = o.coordinates, centroid, x = 0, y = 0, z = 0, i = -1, n = coordinates.length; + while (++i < n) { + centroid = polygonCentroid(coordinates[i]); + x += centroid[0]; + y += centroid[1]; + z += centroid[2]; + } + return [ x / z, y / z ]; + } + }); + path.projection = function(x) { + projection = x; + return path; + }; + path.pointRadius = function(x) { + if (typeof x === "function") pointRadius = x; else { + pointRadius = +x; + pointCircle = d3_path_circle(pointRadius); + } + return path; + }; + return path; + }; + d3.geo.bounds = function(feature) { + var left = Infinity, bottom = Infinity, right = -Infinity, top = -Infinity; + d3_geo_bounds(feature, function(x, y) { + if (x < left) left = x; + if (x > right) right = x; + if (y < bottom) bottom = y; + if (y > top) top = y; + }); + return [ [ left, bottom ], [ right, top ] ]; + }; + var d3_geo_boundsTypes = { + Feature: d3_geo_boundsFeature, + FeatureCollection: d3_geo_boundsFeatureCollection, + GeometryCollection: d3_geo_boundsGeometryCollection, + LineString: d3_geo_boundsLineString, + MultiLineString: d3_geo_boundsMultiLineString, + MultiPoint: d3_geo_boundsLineString, + MultiPolygon: d3_geo_boundsMultiPolygon, + Point: d3_geo_boundsPoint, + Polygon: d3_geo_boundsPolygon + }; + d3.geo.circle = function() { + function circle() {} + function visible(point) { + return arc.distance(point) < radians; + } + function clip(coordinates) { + var i = -1, n = coordinates.length, clipped = [], p0, p1, p2, d0, d1; + while (++i < n) { + d1 = arc.distance(p2 = coordinates[i]); + if (d1 < radians) { + if (p1) clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1))); + clipped.push(p2); + p0 = p1 = null; + } else { + p1 = p2; + if (!p0 && clipped.length) { + clipped.push(d3_geo_greatArcInterpolate(clipped[clipped.length - 1], p1)((radians - d0) / (d1 - d0))); + p0 = p1; + } + } + d0 = d1; + } + p0 = coordinates[0]; + p1 = clipped[0]; + if (p1 && p2[0] === p0[0] && p2[1] === p0[1] && !(p2[0] === p1[0] && p2[1] === p1[1])) { + clipped.push(p1); + } + return resample(clipped); + } + function resample(coordinates) { + var i = 0, n = coordinates.length, j, m, resampled = n ? [ coordinates[0] ] : coordinates, resamples, origin = arc.source(); + while (++i < n) { + resamples = arc.source(coordinates[i - 1])(coordinates[i]).coordinates; + for (j = 0, m = resamples.length; ++j < m; ) resampled.push(resamples[j]); + } + arc.source(origin); + return resampled; + } + var origin = [ 0, 0 ], degrees = 90 - .01, radians = degrees * d3_geo_radians, arc = d3.geo.greatArc().source(origin).target(d3_identity); + circle.clip = function(d) { + if (typeof origin === "function") arc.source(origin.apply(this, arguments)); + return clipType(d) || null; + }; + var clipType = d3_geo_type({ + FeatureCollection: function(o) { + var features = o.features.map(clipType).filter(d3_identity); + return features && (o = Object.create(o), o.features = features, o); + }, + Feature: function(o) { + var geometry = clipType(o.geometry); + return geometry && (o = Object.create(o), o.geometry = geometry, o); + }, + Point: function(o) { + return visible(o.coordinates) && o; + }, + MultiPoint: function(o) { + var coordinates = o.coordinates.filter(visible); + return coordinates.length && { + type: o.type, + coordinates: coordinates + }; + }, + LineString: function(o) { + var coordinates = clip(o.coordinates); + return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); + }, + MultiLineString: function(o) { + var coordinates = o.coordinates.map(clip).filter(function(d) { + return d.length; + }); + return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); + }, + Polygon: function(o) { + var coordinates = o.coordinates.map(clip); + return coordinates[0].length && (o = Object.create(o), o.coordinates = coordinates, o); + }, + MultiPolygon: function(o) { + var coordinates = o.coordinates.map(function(d) { + return d.map(clip); + }).filter(function(d) { + return d[0].length; + }); + return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); + }, + GeometryCollection: function(o) { + var geometries = o.geometries.map(clipType).filter(d3_identity); + return geometries.length && (o = Object.create(o), o.geometries = geometries, o); + } + }); + circle.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + if (typeof origin !== "function") arc.source(origin); + return circle; + }; + circle.angle = function(x) { + if (!arguments.length) return degrees; + radians = (degrees = +x) * d3_geo_radians; + return circle; + }; + return d3.rebind(circle, arc, "precision"); + }; + d3.geo.greatArc = function() { + function greatArc() { + var d = greatArc.distance.apply(this, arguments), t = 0, dt = precision / d, coordinates = [ p0 ]; + while ((t += dt) < 1) coordinates.push(interpolate(t)); + coordinates.push(p1); + return { + type: "LineString", + coordinates: coordinates + }; + } + var source = d3_geo_greatArcSource, p0, target = d3_geo_greatArcTarget, p1, precision = 6 * d3_geo_radians, interpolate = d3_geo_greatArcInterpolator(); + greatArc.distance = function() { + if (typeof source === "function") interpolate.source(p0 = source.apply(this, arguments)); + if (typeof target === "function") interpolate.target(p1 = target.apply(this, arguments)); + return interpolate.distance(); + }; + greatArc.source = function(_) { + if (!arguments.length) return source; + source = _; + if (typeof source !== "function") interpolate.source(p0 = source); + return greatArc; + }; + greatArc.target = function(_) { + if (!arguments.length) return target; + target = _; + if (typeof target !== "function") interpolate.target(p1 = target); + return greatArc; + }; + greatArc.precision = function(_) { + if (!arguments.length) return precision / d3_geo_radians; + precision = _ * d3_geo_radians; + return greatArc; + }; + return greatArc; + }; + d3.geo.greatCircle = d3.geo.circle; + d3.geom = {}; + d3.geom.contour = function(grid, start) { + var s = start || d3_geom_contourStart(grid), c = [], x = s[0], y = s[1], dx = 0, dy = 0, pdx = NaN, pdy = NaN, i = 0; + do { + i = 0; + if (grid(x - 1, y - 1)) i += 1; + if (grid(x, y - 1)) i += 2; + if (grid(x - 1, y)) i += 4; + if (grid(x, y)) i += 8; + if (i === 6) { + dx = pdy === -1 ? -1 : 1; + dy = 0; + } else if (i === 9) { + dx = 0; + dy = pdx === 1 ? -1 : 1; + } else { + dx = d3_geom_contourDx[i]; + dy = d3_geom_contourDy[i]; + } + if (dx != pdx && dy != pdy) { + c.push([ x, y ]); + pdx = dx; + pdy = dy; + } + x += dx; + y += dy; + } while (s[0] != x || s[1] != y); + return c; + }; + var d3_geom_contourDx = [ 1, 0, 1, 1, -1, 0, -1, 1, 0, 0, 0, 0, -1, 0, -1, NaN ], d3_geom_contourDy = [ 0, -1, 0, 0, 0, -1, 0, 0, 1, -1, 1, 1, 0, -1, 0, NaN ]; + d3.geom.hull = function(vertices) { + if (vertices.length < 3) return []; + var len = vertices.length, plen = len - 1, points = [], stack = [], i, j, h = 0, x1, y1, x2, y2, u, v, a, sp; + for (i = 1; i < len; ++i) { + if (vertices[i][1] < vertices[h][1]) { + h = i; + } else if (vertices[i][1] == vertices[h][1]) { + h = vertices[i][0] < vertices[h][0] ? i : h; + } + } + for (i = 0; i < len; ++i) { + if (i === h) continue; + y1 = vertices[i][1] - vertices[h][1]; + x1 = vertices[i][0] - vertices[h][0]; + points.push({ + angle: Math.atan2(y1, x1), + index: i + }); + } + points.sort(function(a, b) { + return a.angle - b.angle; + }); + a = points[0].angle; + v = points[0].index; + u = 0; + for (i = 1; i < plen; ++i) { + j = points[i].index; + if (a == points[i].angle) { + x1 = vertices[v][0] - vertices[h][0]; + y1 = vertices[v][1] - vertices[h][1]; + x2 = vertices[j][0] - vertices[h][0]; + y2 = vertices[j][1] - vertices[h][1]; + if (x1 * x1 + y1 * y1 >= x2 * x2 + y2 * y2) { + points[i].index = -1; + } else { + points[u].index = -1; + a = points[i].angle; + u = i; + v = j; + } + } else { + a = points[i].angle; + u = i; + v = j; + } + } + stack.push(h); + for (i = 0, j = 0; i < 2; ++j) { + if (points[j].index !== -1) { + stack.push(points[j].index); + i++; + } + } + sp = stack.length; + for (; j < plen; ++j) { + if (points[j].index === -1) continue; + while (!d3_geom_hullCCW(stack[sp - 2], stack[sp - 1], points[j].index, vertices)) { + --sp; + } + stack[sp++] = points[j].index; + } + var poly = []; + for (i = 0; i < sp; ++i) { + poly.push(vertices[stack[i]]); + } + return poly; + }; + d3.geom.polygon = function(coordinates) { + coordinates.area = function() { + var i = 0, n = coordinates.length, a = coordinates[n - 1][0] * coordinates[0][1], b = coordinates[n - 1][1] * coordinates[0][0]; + while (++i < n) { + a += coordinates[i - 1][0] * coordinates[i][1]; + b += coordinates[i - 1][1] * coordinates[i][0]; + } + return (b - a) * .5; + }; + coordinates.centroid = function(k) { + var i = -1, n = coordinates.length, x = 0, y = 0, a, b = coordinates[n - 1], c; + if (!arguments.length) k = -1 / (6 * coordinates.area()); + while (++i < n) { + a = b; + b = coordinates[i]; + c = a[0] * b[1] - b[0] * a[1]; + x += (a[0] + b[0]) * c; + y += (a[1] + b[1]) * c; + } + return [ x * k, y * k ]; + }; + coordinates.clip = function(subject) { + var input, i = -1, n = coordinates.length, j, m, a = coordinates[n - 1], b, c, d; + while (++i < n) { + input = subject.slice(); + subject.length = 0; + b = coordinates[i]; + c = input[(m = input.length) - 1]; + j = -1; + while (++j < m) { + d = input[j]; + if (d3_geom_polygonInside(d, a, b)) { + if (!d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)); + } + subject.push(d); + } else if (d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)); + } + c = d; + } + a = b; + } + return subject; + }; + return coordinates; + }; + d3.geom.voronoi = function(vertices) { + var polygons = vertices.map(function() { + return []; + }); + d3_voronoi_tessellate(vertices, function(e) { + var s1, s2, x1, x2, y1, y2; + if (e.a === 1 && e.b >= 0) { + s1 = e.ep.r; + s2 = e.ep.l; + } else { + s1 = e.ep.l; + s2 = e.ep.r; + } + if (e.a === 1) { + y1 = s1 ? s1.y : -1e6; + x1 = e.c - e.b * y1; + y2 = s2 ? s2.y : 1e6; + x2 = e.c - e.b * y2; + } else { + x1 = s1 ? s1.x : -1e6; + y1 = e.c - e.a * x1; + x2 = s2 ? s2.x : 1e6; + y2 = e.c - e.a * x2; + } + var v1 = [ x1, y1 ], v2 = [ x2, y2 ]; + polygons[e.region.l.index].push(v1, v2); + polygons[e.region.r.index].push(v1, v2); + }); + return polygons.map(function(polygon, i) { + var cx = vertices[i][0], cy = vertices[i][1]; + polygon.forEach(function(v) { + v.angle = Math.atan2(v[0] - cx, v[1] - cy); + }); + return polygon.sort(function(a, b) { + return a.angle - b.angle; + }).filter(function(d, i) { + return !i || d.angle - polygon[i - 1].angle > 1e-10; + }); + }); + }; + var d3_voronoi_opposite = { + l: "r", + r: "l" + }; + d3.geom.delaunay = function(vertices) { + var edges = vertices.map(function() { + return []; + }), triangles = []; + d3_voronoi_tessellate(vertices, function(e) { + edges[e.region.l.index].push(vertices[e.region.r.index]); + }); + edges.forEach(function(edge, i) { + var v = vertices[i], cx = v[0], cy = v[1]; + edge.forEach(function(v) { + v.angle = Math.atan2(v[0] - cx, v[1] - cy); + }); + edge.sort(function(a, b) { + return a.angle - b.angle; + }); + for (var j = 0, m = edge.length - 1; j < m; j++) { + triangles.push([ v, edge[j], edge[j + 1] ]); + } + }); + return triangles; + }; + d3.geom.quadtree = function(points, x1, y1, x2, y2) { + function insert(n, p, x1, y1, x2, y2) { + if (isNaN(p.x) || isNaN(p.y)) return; + if (n.leaf) { + var v = n.point; + if (v) { + if (Math.abs(v.x - p.x) + Math.abs(v.y - p.y) < .01) { + insertChild(n, p, x1, y1, x2, y2); + } else { + n.point = null; + insertChild(n, v, x1, y1, x2, y2); + insertChild(n, p, x1, y1, x2, y2); + } + } else { + n.point = p; + } + } else { + insertChild(n, p, x1, y1, x2, y2); + } + } + function insertChild(n, p, x1, y1, x2, y2) { + var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = p.x >= sx, bottom = p.y >= sy, i = (bottom << 1) + right; + n.leaf = false; + n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); + if (right) x1 = sx; else x2 = sx; + if (bottom) y1 = sy; else y2 = sy; + insert(n, p, x1, y1, x2, y2); + } + var p, i = -1, n = points.length; + if (n && isNaN(points[0].x)) points = points.map(d3_geom_quadtreePoint); + if (arguments.length < 5) { + if (arguments.length === 3) { + y2 = x2 = y1; + y1 = x1; + } else { + x1 = y1 = Infinity; + x2 = y2 = -Infinity; + while (++i < n) { + p = points[i]; + if (p.x < x1) x1 = p.x; + if (p.y < y1) y1 = p.y; + if (p.x > x2) x2 = p.x; + if (p.y > y2) y2 = p.y; + } + var dx = x2 - x1, dy = y2 - y1; + if (dx > dy) y2 = y1 + dx; else x2 = x1 + dy; + } + } + var root = d3_geom_quadtreeNode(); + root.add = function(p) { + insert(root, p, x1, y1, x2, y2); + }; + root.visit = function(f) { + d3_geom_quadtreeVisit(f, root, x1, y1, x2, y2); + }; + points.forEach(root.add); + return root; + }; + d3.time = {}; + var d3_time = Date, d3_time_daySymbols = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]; + d3_time_utc.prototype = { + getDate: function() { + return this._.getUTCDate(); + }, + getDay: function() { + return this._.getUTCDay(); + }, + getFullYear: function() { + return this._.getUTCFullYear(); + }, + getHours: function() { + return this._.getUTCHours(); + }, + getMilliseconds: function() { + return this._.getUTCMilliseconds(); + }, + getMinutes: function() { + return this._.getUTCMinutes(); + }, + getMonth: function() { + return this._.getUTCMonth(); + }, + getSeconds: function() { + return this._.getUTCSeconds(); + }, + getTime: function() { + return this._.getTime(); + }, + getTimezoneOffset: function() { + return 0; + }, + valueOf: function() { + return this._.valueOf(); + }, + setDate: function() { + d3_time_prototype.setUTCDate.apply(this._, arguments); + }, + setDay: function() { + d3_time_prototype.setUTCDay.apply(this._, arguments); + }, + setFullYear: function() { + d3_time_prototype.setUTCFullYear.apply(this._, arguments); + }, + setHours: function() { + d3_time_prototype.setUTCHours.apply(this._, arguments); + }, + setMilliseconds: function() { + d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); + }, + setMinutes: function() { + d3_time_prototype.setUTCMinutes.apply(this._, arguments); + }, + setMonth: function() { + d3_time_prototype.setUTCMonth.apply(this._, arguments); + }, + setSeconds: function() { + d3_time_prototype.setUTCSeconds.apply(this._, arguments); + }, + setTime: function() { + d3_time_prototype.setTime.apply(this._, arguments); + } + }; + var d3_time_prototype = Date.prototype; + var d3_time_formatDateTime = "%a %b %e %H:%M:%S %Y", d3_time_formatDate = "%m/%d/%y", d3_time_formatTime = "%H:%M:%S"; + var d3_time_days = d3_time_daySymbols, d3_time_dayAbbreviations = d3_time_days.map(d3_time_formatAbbreviate), d3_time_months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], d3_time_monthAbbreviations = d3_time_months.map(d3_time_formatAbbreviate); + d3.time.format = function(template) { + function format(date) { + var string = [], i = -1, j = 0, c, f; + while (++i < n) { + if (template.charCodeAt(i) == 37) { + string.push(template.substring(j, i), (f = d3_time_formats[c = template.charAt(++i)]) ? f(date) : c); + j = i + 1; + } + } + string.push(template.substring(j, i)); + return string.join(""); + } + var n = template.length; + format.parse = function(string) { + var d = { + y: 1900, + m: 0, + d: 1, + H: 0, + M: 0, + S: 0, + L: 0 + }, i = d3_time_parse(d, template, string, 0); + if (i != string.length) return null; + if ("p" in d) d.H = d.H % 12 + d.p * 12; + var date = new d3_time; + date.setFullYear(d.y, d.m, d.d); + date.setHours(d.H, d.M, d.S, d.L); + return date; + }; + format.toString = function() { + return template; + }; + return format; + }; + var d3_time_zfill2 = d3.format("02d"), d3_time_zfill3 = d3.format("03d"), d3_time_zfill4 = d3.format("04d"), d3_time_sfill2 = d3.format("2d"); + var d3_time_dayRe = d3_time_formatRe(d3_time_days), d3_time_dayAbbrevRe = d3_time_formatRe(d3_time_dayAbbreviations), d3_time_monthRe = d3_time_formatRe(d3_time_months), d3_time_monthLookup = d3_time_formatLookup(d3_time_months), d3_time_monthAbbrevRe = d3_time_formatRe(d3_time_monthAbbreviations), d3_time_monthAbbrevLookup = d3_time_formatLookup(d3_time_monthAbbreviations); + var d3_time_formats = { + a: function(d) { + return d3_time_dayAbbreviations[d.getDay()]; + }, + A: function(d) { + return d3_time_days[d.getDay()]; + }, + b: function(d) { + return d3_time_monthAbbreviations[d.getMonth()]; + }, + B: function(d) { + return d3_time_months[d.getMonth()]; + }, + c: d3.time.format(d3_time_formatDateTime), + d: function(d) { + return d3_time_zfill2(d.getDate()); + }, + e: function(d) { + return d3_time_sfill2(d.getDate()); + }, + H: function(d) { + return d3_time_zfill2(d.getHours()); + }, + I: function(d) { + return d3_time_zfill2(d.getHours() % 12 || 12); + }, + j: function(d) { + return d3_time_zfill3(1 + d3.time.dayOfYear(d)); + }, + L: function(d) { + return d3_time_zfill3(d.getMilliseconds()); + }, + m: function(d) { + return d3_time_zfill2(d.getMonth() + 1); + }, + M: function(d) { + return d3_time_zfill2(d.getMinutes()); + }, + p: function(d) { + return d.getHours() >= 12 ? "PM" : "AM"; + }, + S: function(d) { + return d3_time_zfill2(d.getSeconds()); + }, + U: function(d) { + return d3_time_zfill2(d3.time.sundayOfYear(d)); + }, + w: function(d) { + return d.getDay(); + }, + W: function(d) { + return d3_time_zfill2(d3.time.mondayOfYear(d)); + }, + x: d3.time.format(d3_time_formatDate), + X: d3.time.format(d3_time_formatTime), + y: function(d) { + return d3_time_zfill2(d.getFullYear() % 100); + }, + Y: function(d) { + return d3_time_zfill4(d.getFullYear() % 1e4); + }, + Z: d3_time_zone, + "%": function(d) { + return "%"; + } + }; + var d3_time_parsers = { + a: d3_time_parseWeekdayAbbrev, + A: d3_time_parseWeekday, + b: d3_time_parseMonthAbbrev, + B: d3_time_parseMonth, + c: d3_time_parseLocaleFull, + d: d3_time_parseDay, + e: d3_time_parseDay, + H: d3_time_parseHour24, + I: d3_time_parseHour24, + L: d3_time_parseMilliseconds, + m: d3_time_parseMonthNumber, + M: d3_time_parseMinutes, + p: d3_time_parseAmPm, + S: d3_time_parseSeconds, + x: d3_time_parseLocaleDate, + X: d3_time_parseLocaleTime, + y: d3_time_parseYear, + Y: d3_time_parseFullYear + }; + var d3_time_numberRe = /^\s*\d+/; + var d3_time_amPmLookup = d3.map({ + am: 0, + pm: 1 + }); + d3.time.format.utc = function(template) { + function format(date) { + try { + d3_time = d3_time_utc; + var utc = new d3_time; + utc._ = date; + return local(utc); + } finally { + d3_time = Date; + } + } + var local = d3.time.format(template); + format.parse = function(string) { + try { + d3_time = d3_time_utc; + var date = local.parse(string); + return date && date._; + } finally { + d3_time = Date; + } + }; + format.toString = local.toString; + return format; + }; + var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ"); + d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso; + d3_time_formatIsoNative.parse = function(string) { + var date = new Date(string); + return isNaN(date) ? null : date; + }; + d3_time_formatIsoNative.toString = d3_time_formatIso.toString; + d3.time.second = d3_time_interval(function(date) { + return new d3_time(Math.floor(date / 1e3) * 1e3); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 1e3); + }, function(date) { + return date.getSeconds(); + }); + d3.time.seconds = d3.time.second.range; + d3.time.seconds.utc = d3.time.second.utc.range; + d3.time.minute = d3_time_interval(function(date) { + return new d3_time(Math.floor(date / 6e4) * 6e4); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 6e4); + }, function(date) { + return date.getMinutes(); + }); + d3.time.minutes = d3.time.minute.range; + d3.time.minutes.utc = d3.time.minute.utc.range; + d3.time.hour = d3_time_interval(function(date) { + var timezone = date.getTimezoneOffset() / 60; + return new d3_time((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 36e5); + }, function(date) { + return date.getHours(); + }); + d3.time.hours = d3.time.hour.range; + d3.time.hours.utc = d3.time.hour.utc.range; + d3.time.day = d3_time_interval(function(date) { + var day = new d3_time(1970, 0); + day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); + return day; + }, function(date, offset) { + date.setDate(date.getDate() + offset); + }, function(date) { + return date.getDate() - 1; + }); + d3.time.days = d3.time.day.range; + d3.time.days.utc = d3.time.day.utc.range; + d3.time.dayOfYear = function(date) { + var year = d3.time.year(date); + return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); + }; + d3_time_daySymbols.forEach(function(day, i) { + day = day.toLowerCase(); + i = 7 - i; + var interval = d3.time[day] = d3_time_interval(function(date) { + (date = d3.time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); + return date; + }, function(date, offset) { + date.setDate(date.getDate() + Math.floor(offset) * 7); + }, function(date) { + var day = d3.time.year(date).getDay(); + return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); + }); + d3.time[day + "s"] = interval.range; + d3.time[day + "s"].utc = interval.utc.range; + d3.time[day + "OfYear"] = function(date) { + var day = d3.time.year(date).getDay(); + return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7); + }; + }); + d3.time.week = d3.time.sunday; + d3.time.weeks = d3.time.sunday.range; + d3.time.weeks.utc = d3.time.sunday.utc.range; + d3.time.weekOfYear = d3.time.sundayOfYear; + d3.time.month = d3_time_interval(function(date) { + date = d3.time.day(date); + date.setDate(1); + return date; + }, function(date, offset) { + date.setMonth(date.getMonth() + offset); + }, function(date) { + return date.getMonth(); + }); + d3.time.months = d3.time.month.range; + d3.time.months.utc = d3.time.month.utc.range; + d3.time.year = d3_time_interval(function(date) { + date = d3.time.day(date); + date.setMonth(0, 1); + return date; + }, function(date, offset) { + date.setFullYear(date.getFullYear() + offset); + }, function(date) { + return date.getFullYear(); + }); + d3.time.years = d3.time.year.range; + d3.time.years.utc = d3.time.year.utc.range; + var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; + var d3_time_scaleLocalMethods = [ [ d3.time.second, 1 ], [ d3.time.second, 5 ], [ d3.time.second, 15 ], [ d3.time.second, 30 ], [ d3.time.minute, 1 ], [ d3.time.minute, 5 ], [ d3.time.minute, 15 ], [ d3.time.minute, 30 ], [ d3.time.hour, 1 ], [ d3.time.hour, 3 ], [ d3.time.hour, 6 ], [ d3.time.hour, 12 ], [ d3.time.day, 1 ], [ d3.time.day, 2 ], [ d3.time.week, 1 ], [ d3.time.month, 1 ], [ d3.time.month, 3 ], [ d3.time.year, 1 ] ]; + var d3_time_scaleLocalFormats = [ [ d3.time.format("%Y"), function(d) { + return true; + } ], [ d3.time.format("%B"), function(d) { + return d.getMonth(); + } ], [ d3.time.format("%b %d"), function(d) { + return d.getDate() != 1; + } ], [ d3.time.format("%a %d"), function(d) { + return d.getDay() && d.getDate() != 1; + } ], [ d3.time.format("%I %p"), function(d) { + return d.getHours(); + } ], [ d3.time.format("%I:%M"), function(d) { + return d.getMinutes(); + } ], [ d3.time.format(":%S"), function(d) { + return d.getSeconds(); + } ], [ d3.time.format(".%L"), function(d) { + return d.getMilliseconds(); + } ] ]; + var d3_time_scaleLinear = d3.scale.linear(), d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats); + d3_time_scaleLocalMethods.year = function(extent, m) { + return d3_time_scaleLinear.domain(extent.map(d3_time_scaleGetYear)).ticks(m).map(d3_time_scaleSetYear); + }; + d3.time.scale = function() { + return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); + }; + var d3_time_scaleUTCMethods = d3_time_scaleLocalMethods.map(function(m) { + return [ m[0].utc, m[1] ]; + }); + var d3_time_scaleUTCFormats = [ [ d3.time.format.utc("%Y"), function(d) { + return true; + } ], [ d3.time.format.utc("%B"), function(d) { + return d.getUTCMonth(); + } ], [ d3.time.format.utc("%b %d"), function(d) { + return d.getUTCDate() != 1; + } ], [ d3.time.format.utc("%a %d"), function(d) { + return d.getUTCDay() && d.getUTCDate() != 1; + } ], [ d3.time.format.utc("%I %p"), function(d) { + return d.getUTCHours(); + } ], [ d3.time.format.utc("%I:%M"), function(d) { + return d.getUTCMinutes(); + } ], [ d3.time.format.utc(":%S"), function(d) { + return d.getUTCSeconds(); + } ], [ d3.time.format.utc(".%L"), function(d) { + return d.getUTCMilliseconds(); + } ] ]; + var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats); + d3_time_scaleUTCMethods.year = function(extent, m) { + return d3_time_scaleLinear.domain(extent.map(d3_time_scaleUTCGetYear)).ticks(m).map(d3_time_scaleUTCSetYear); + }; + d3.time.scale.utc = function() { + return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat); + }; +})(); \ No newline at end of file diff --git a/src/errors/static/js/nvd3/lib/d3.v2.min.js b/src/errors/static/js/nvd3/lib/d3.v2.min.js new file mode 100644 index 00000000..cc47f1ea --- /dev/null +++ b/src/errors/static/js/nvd3/lib/d3.v2.min.js @@ -0,0 +1,4 @@ +(function(){function e(e,t){try{for(var n in t)Object.defineProperty(e.prototype,n,{value:t[n],enumerable:!1})}catch(r){e.prototype=t}}function t(e){var t=-1,n=e.length,r=[];while(++t=0?e.substring(t):(t=e.length,""),r=[];while(t>0)r.push(e.substring(t-=3,t+3));return r.reverse().join(",")+n}function b(e,t){var n=Math.pow(10,Math.abs(8-t)*3);return{scale:t>8?function(e){return e/n}:function(e){return e*n},symbol:e}}function w(e){return function(t){return t<=0?0:t>=1?1:e(t)}}function E(e){return function(t){return 1-e(1-t)}}function S(e){return function(t){return.5*(t<.5?e(2*t):2-e(2-2*t))}}function x(e){return e}function T(e){return function(t){return Math.pow(t,e)}}function N(e){return 1-Math.cos(e*Math.PI/2)}function C(e){return Math.pow(2,10*(e-1))}function k(e){return 1-Math.sqrt(1-e*e)}function L(e,t){var n;return arguments.length<2&&(t=.45),arguments.length<1?(e=1,n=t/4):n=t/(2*Math.PI)*Math.asin(1/e),function(r){return 1+e*Math.pow(2,10*-r)*Math.sin((r-n)*2*Math.PI/t)}}function A(e){return e||(e=1.70158),function(t){return t*t*((e+1)*t-e)}}function O(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}function M(){d3.event.stopPropagation(),d3.event.preventDefault()}function _(){var e=d3.event,t;while(t=e.sourceEvent)e=t;return e}function D(e){var t=new d,n=0,r=arguments.length;while(++n360?e-=360:e<0&&(e+=360),e<60?s+(o-s)*e/60:e<180?o:e<240?s+(o-s)*(240-e)/60:s}function i(e){return Math.round(r(e)*255)}var s,o;return e%=360,e<0&&(e+=360),t=t<0?0:t>1?1:t,n=n<0?0:n>1?1:n,o=n<=.5?n*(1+t):n+t-n*t,s=2*n-o,R(i(e+120),i(e),i(e-120))}function Y(e,t,n){return new Z(e,t,n)}function Z(e,t,n){this.h=e,this.c=t,this.l=n}function et(e,t,n){return tt(n,Math.cos(e*=Math.PI/180)*t,Math.sin(e)*t)}function tt(e,t,n){return new nt(e,t,n)}function nt(e,t,n){this.l=e,this.a=t,this.b=n}function rt(e,t,n){var r=(e+16)/116,i=r+t/500,s=r-n/200;return i=st(i)*ds,r=st(r)*vs,s=st(s)*ms,R(ut(3.2404542*i-1.5371385*r-.4985314*s),ut(-0.969266*i+1.8760108*r+.041556*s),ut(.0556434*i-.2040259*r+1.0572252*s))}function it(e,t,n){return Y(Math.atan2(n,t)/Math.PI*180,Math.sqrt(t*t+n*n),e)}function st(e){return e>.206893034?e*e*e:(e-4/29)/7.787037}function ot(e){return e>.008856?Math.pow(e,1/3):7.787037*e+4/29}function ut(e){return Math.round(255*(e<=.00304?12.92*e:1.055*Math.pow(e,1/2.4)-.055))}function at(e){return Ki(e,Ss),e}function ft(e){return function(){return gs(e,this)}}function lt(e){return function(){return ys(e,this)}}function ct(e,t){function n(){this.removeAttribute(e)}function r(){this.removeAttributeNS(e.space,e.local)}function i(){this.setAttribute(e,t)}function s(){this.setAttributeNS(e.space,e.local,t)}function o(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}function u(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}return e=d3.ns.qualify(e),t==null?e.local?r:n:typeof t=="function"?e.local?u:o:e.local?s:i}function ht(e){return new RegExp("(?:^|\\s+)"+d3.requote(e)+"(?:\\s+|$)","g")}function pt(e,t){function n(){var n=-1;while(++n0&&(e=e.substring(0,o)),t?i:r}function Et(e,t){for(var n=0,r=e.length;nt?c():(v.active=t,i.forEach(function(t,n){(n=n.call(e,m,u))&&h.push(n)}),s.start.call(e,m,u),l(r)||d3.timer(l,0,n),1)}function l(n){if(v.active!==t)return c();var r=(n-p)/d,i=o(r),a=h.length;while(a>0)h[--a].call(e,i);if(r>=1)return c(),ks=t,s.end.call(e,m,u),ks=0,1}function c(){return--v.count||delete e.__transition__,1}var h=[],p=e.delay,d=e.duration,v=(e=e.node).__transition__||(e.__transition__={active:0,count:0}),m=e.__data__;++v.count,p<=r?f(r):d3.timer(f,p,n)})},0,n),e}function Tt(e){var t=ks,n=Ds,r=Ms,i=_s;return ks=this.id,Ds=this.ease(),Et(this,function(t,n,r){Ms=t.delay,_s=t.duration,e.call(t=t.node,t.__data__,n,r)}),ks=t,Ds=n,Ms=r,_s=i,this}function Nt(e,t,n){return n!=""&&Ps}function Ct(e,t){return d3.tween(e,F(t))}function kt(){var e,t=Date.now(),n=Hs;while(n)e=t-n.then,e>=n.delay&&(n.flush=n.callback(e)),n=n.next;var r=Lt()-t;r>24?(isFinite(r)&&(clearTimeout(js),js=setTimeout(kt,r)),Bs=0):(Bs=1,Fs(kt))}function Lt(){var e=null,t=Hs,n=Infinity;while(t)t.flush?t=e?e.next=t.next:Hs=t.next:(n=Math.min(n,t.then+t.delay),t=(e=t).next);return n}function At(e,t){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();if(Is<0&&(window.scrollX||window.scrollY)){n=d3.select(document.body).append("svg").style("position","absolute").style("top",0).style("left",0);var i=n[0][0].getScreenCTM();Is=!i.f&&!i.e,n.remove()}return Is?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(e.getScreenCTM().inverse()),[r.x,r.y]}var s=e.getBoundingClientRect();return[t.clientX-s.left-e.clientLeft,t.clientY-s.top-e.clientTop]}function Ot(){}function Mt(e){var t=e[0],n=e[e.length-1];return t2?Ut:Rt,a=r?q:I;return o=i(e,t,a,n),u=i(t,e,a,d3.interpolate),s}function s(e){return o(e)}var o,u;return s.invert=function(e){return u(e)},s.domain=function(t){return arguments.length?(e=t.map(Number),i()):e},s.range=function(e){return arguments.length?(t=e,i()):t},s.rangeRound=function(e){return s.range(e).interpolate(d3.interpolateRound)},s.clamp=function(e){return arguments.length?(r=e,i()):r},s.interpolate=function(e){return arguments.length?(n=e,i()):n},s.ticks=function(t){return It(e,t)},s.tickFormat=function(t){return qt(e,t)},s.nice=function(){return Dt(e,jt),i()},s.copy=function(){return Ht(e,t,n,r)},i()}function Bt(e,t){return d3.rebind(e,t,"range","rangeRound","interpolate","clamp")}function jt(e){return e=Math.pow(10,Math.round(Math.log(e)/Math.LN10)-1),e&&{floor:function(t){return Math.floor(t/e)*e},ceil:function(t){return Math.ceil(t/e)*e}}}function Ft(e,t){var n=Mt(e),r=n[1]-n[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),s=t/r*i;return s<=.15?i*=10:s<=.35?i*=5:s<=.75&&(i*=2),n[0]=Math.ceil(n[0]/i)*i,n[1]=Math.floor(n[1]/i)*i+i*.5,n[2]=i,n}function It(e,t){return d3.range.apply(d3,Ft(e,t))}function qt(e,t){return d3.format(",."+Math.max(0,-Math.floor(Math.log(Ft(e,t)[2])/Math.LN10+.01))+"f")}function Rt(e,t,n,r){var i=n(e[0],e[1]),s=r(t[0],t[1]);return function(e){return s(i(e))}}function Ut(e,t,n,r){var i=[],s=[],o=0,u=Math.min(e.length,t.length)-1;e[u]0;f--)i.push(r(s)*f)}else{for(;sa;o--);i=i.slice(s,o)}return i},n.tickFormat=function(e,i){arguments.length<2&&(i=qs);if(arguments.length<1)return i;var s=Math.max(.1,e/n.ticks().length),o=t===Xt?(u=-1e-12,Math.floor):(u=1e-12,Math.ceil),u;return function(e){return e/r(o(t(e)+u))<=s?i(e):""}},n.copy=function(){return zt(e.copy(),t)},Bt(n,e)}function Wt(e){return Math.log(e<0?0:e)/Math.LN10}function Xt(e){return-Math.log(e>0?0:-e)/Math.LN10}function Vt(e,t){function n(t){return e(r(t))}var r=$t(t),i=$t(1/t);return n.invert=function(t){return i(e.invert(t))},n.domain=function(t){return arguments.length?(e.domain(t.map(r)),n):e.domain().map(i)},n.ticks=function(e){return It(n.domain(),e)},n.tickFormat=function(e){return qt(n.domain(),e)},n.nice=function(){return n.domain(Dt(n.domain(),jt))},n.exponent=function(e){if(!arguments.length)return t;var s=n.domain();return r=$t(t=e),i=$t(1/t),n.domain(s)},n.copy=function(){return Vt(e.copy(),t)},Bt(n,e)}function $t(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function Jt(e,t){function n(t){return o[((s.get(t)||s.set(t,e.push(t)))-1)%o.length]}function i(t,n){return d3.range(e.length).map(function(e){return t+n*e})}var s,o,u;return n.domain=function(i){if(!arguments.length)return e;e=[],s=new r;var o=-1,u=i.length,a;while(++o1){u=t[1],s=e[a],a++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(s[0]-u[0])+","+(s[1]-u[1])+","+s[0]+","+s[1];for(var f=2;f9&&(s=n*3/Math.sqrt(s),o[u]=s*r,o[u+1]=s*i));u=-1;while(++u<=a)s=(e[Math.min(a,u+1)][0]-e[Math.max(0,u-1)][0])/(6*(1+o[u]*o[u])),t.push([s||0,o[u]*s||0]);return t}function Nn(e){return e.length<3?un(e):e[0]+dn(e,Tn(e))}function Cn(e){var t,n=-1,r=e.length,i,s;while(++n1){var r=Mt(e.domain()),i,s=-1,o=t.length,u=(t[1]-t[0])/++n,a,f;while(++s0;)(f=+t[s]-a*u)>=r[0]&&i.push(f);for(--s,a=0;++ar&&(n=t,r=i);return n}function ir(e){return e.reduce(sr,0)}function sr(e,t){return e+t[1]}function or(e,t){return ur(e,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ur(e,t){var n=-1,r=+e[0],i=(e[1]-r)/t,s=[];while(++n<=t)s[n]=i*n+r;return s}function ar(e){return[d3.min(e),d3.max(e)]}function fr(e,t){return d3.rebind(e,t,"sort","children","value"),e.links=pr,e.nodes=function(t){return uo=!0,(e.nodes=e)(t)},e}function lr(e){return e.children}function cr(e){return e.value}function hr(e,t){return t.value-e.value}function pr(e){return d3.merge(e.map(function(e){return(e.children||[]).map(function(t){return{source:e,target:t}})}))}function dr(e,t){return e.value-t.value}function vr(e,t){var n=e._pack_next;e._pack_next=t,t._pack_prev=e,t._pack_next=n,n._pack_prev=t}function mr(e,t){e._pack_next=t,t._pack_prev=e}function gr(e,t){var n=t.x-e.x,r=t.y-e.y,i=e.r+t.r;return i*i-n*n-r*r>.001}function yr(e){function t(e){r=Math.min(e.x-e.r,r),i=Math.max(e.x+e.r,i),s=Math.min(e.y-e.r,s),o=Math.max(e.y+e.r,o)}if(!(n=e.children)||!(p=n.length))return;var n,r=Infinity,i=-Infinity,s=Infinity,o=-Infinity,u,a,f,l,c,h,p;n.forEach(br),u=n[0],u.x=-u.r,u.y=0,t(u);if(p>1){a=n[1],a.x=a.r,a.y=0,t(a);if(p>2){f=n[2],Sr(u,a,f),t(f),vr(u,f),u._pack_prev=f,vr(f,a),a=u._pack_next;for(l=3;l0&&(e=r)}return e}function Mr(e,t){return e.x-t.x}function _r(e,t){return t.x-e.x}function Dr(e,t){return e.depth-t.depth}function Pr(e,t){function n(e,r){var i=e.children;if(i&&(a=i.length)){var s,o=null,u=-1,a;while(++u=0)s=r[i]._tree,s.prelim+=t,s.mod+=t,t+=s.shift+(n+=s.change)}function Br(e,t,n){e=e._tree,t=t._tree;var r=n/(t.number-e.number);e.change+=r,t.change-=r,t.shift+=n,t.prelim+=n,t.mod+=n}function jr(e,t,n){return e._tree.ancestor.parent==t.parent?e._tree.ancestor:n}function Fr(e){return{x:e.x,y:e.y,dx:e.dx,dy:e.dy}}function Ir(e,t){var n=e.x+t[3],r=e.y+t[0],i=e.dx-t[1]-t[3],s=e.dy-t[0]-t[2];return i<0&&(n+=i/2,i=0),s<0&&(r+=s/2,s=0),{x:n,y:r,dx:i,dy:s}}function qr(e,t){function n(e,r){d3.text(e,t,function(e){r(e&&n.parse(e))})}function r(t){return t.map(i).join(e)}function i(e){return o.test(e)?'"'+e.replace(/\"/g,'""')+'"':e}var s=new RegExp("\r\n|["+e+"\r\n]","g"),o=new RegExp('["'+e+"\n]"),u=e.charCodeAt(0);return n.parse=function(e){var t;return n.parseRows(e,function(e,n){if(n){var r={},i=-1,s=t.length;while(++i=e.length)return i;if(l)return l=!1,r;var t=s.lastIndex;if(e.charCodeAt(t)===34){var n=t;while(n++0}function ii(e,t,n){return(n[0]-t[0])*(e[1]-t[1])<(n[1]-t[1])*(e[0]-t[0])}function si(e,t,n,r){var i=e[0],s=t[0],o=n[0],u=r[0],a=e[1],f=t[1],l=n[1],c=r[1],h=i-o,p=s-i,d=u-o,v=a-l,m=f-a,g=c-l,y=(d*v-g*h)/(g*p-d*m);return[i+y*p,a+y*m]}function oi(e,t){var n={list:e.map(function(e,t){return{index:t,x:e[0],y:e[1]}}).sort(function(e,t){return e.yt.y?1:e.xt.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,"l"),r.rightEnd=r.createHalfEdge(null,"l"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(e,t){return{edge:e,side:t,vertex:null,l:null,r:null}},insert:function(e,t){t.l=e,t.r=e.r,e.r.l=t,e.r=t},leftBound:function(e){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&i.rightOf(t,e));return t=t.l,t},del:function(e){e.l.r=e.r,e.r.l=e.l,e.edge=null},right:function(e){return e.r},left:function(e){return e.l},leftRegion:function(e){return e.edge==null?n.bottomSite:e.edge.region[e.side]},rightRegion:function(e){return e.edge==null?n.bottomSite:e.edge.region[ho[e.side]]}},i={bisect:function(e,t){var n={region:{l:e,r:t},ep:{l:null,r:null}},r=t.x-e.x,i=t.y-e.y,s=r>0?r:-r,o=i>0?i:-i;return n.c=e.x*r+e.y*i+(r*r+i*i)*.5,s>o?(n.a=1,n.b=i/r,n.c/=r):(n.b=1,n.a=r/i,n.c/=i),n},intersect:function(e,t){var n=e.edge,r=t.edge;if(!n||!r||n.region.r==r.region.r)return null;var i=n.a*r.b-n.b*r.a;if(Math.abs(i)<1e-10)return null;var s=(n.c*r.b-r.c*n.b)/i,o=(r.c*n.a-n.c*r.a)/i,u=n.region.r,a=r.region.r,f,l;u.y=l.region.r.x;return c&&f.side==="l"||!c&&f.side==="r"?null:{x:s,y:o}},rightOf:function(e,t){var n=e.edge,r=n.region.r,i=t.x>r.x;if(i&&e.side==="l")return 1;if(!i&&e.side==="r")return 0;if(n.a===1){var s=t.y-r.y,o=t.x-r.x,u=0,a=0;!i&&n.b<0||i&&n.b>=0?a=u=s>=n.b*o:(a=t.x+t.y*n.b>n.c,n.b<0&&(a=!a),a||(u=1));if(!u){var f=r.x-n.region.l.x;a=n.b*(o*o-s*s)h*h+p*p}return e.side==="l"?a:!a},endPoint:function(e,n,r){e.ep[n]=r;if(!e.ep[ho[n]])return;t(e)},distance:function(e,t){var n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)}},s={list:[],insert:function(e,t,n){e.vertex=t,e.ystar=t.y+n;for(var r=0,i=s.list,o=i.length;ru.ystar||e.ystar==u.ystar&&t.x>u.vertex.x)continue;break}i.splice(r,0,e)},del:function(e){for(var t=0,n=s.list,r=n.length;td.y&&(v=p,p=d,d=v,b="r"),y=i.bisect(p,d),h=r.createHalfEdge(y,b),r.insert(l,h),i.endPoint(y,ho[b],g),m=i.intersect(l,h),m&&(s.del(l),s.insert(l,m,i.distance(m,p))),m=i.intersect(h,c),m&&s.insert(h,m,i.distance(m,p))}}for(a=r.right(r.leftEnd);a!=r.rightEnd;a=r.right(a))t(a.edge)}function ui(){return{leaf:!0,nodes:[],point:null}}function ai(e,t,n,r,i,s){if(!e(t,n,r,i,s)){var o=(n+i)*.5,u=(r+s)*.5,a=t.nodes;a[0]&&ai(e,a[0],n,r,o,u),a[1]&&ai(e,a[1],o,r,i,u),a[2]&&ai(e,a[2],n,u,o,s),a[3]&&ai(e,a[3],o,u,i,s)}}function fi(e){return{x:e[0],y:e[1]}}function li(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function ci(e){return e.substring(0,3)}function hi(e,t,n,r){var i,s,o=0,u=t.length,a=n.length;while(o=a)return-1;i=t.charCodeAt(o++);if(i==37){s=Ho[t.charAt(o++)];if(!s||(r=s(e,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}function pi(e){return new RegExp("^(?:"+e.map(d3.requote).join("|")+")","i")}function di(e){var t=new r,n=-1,i=e.length;while(++n68?1900:2e3)}function Ni(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n,n+2));return r?(e.m=r[0]-1,n+=r[0].length):-1}function Ci(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n,n+2));return r?(e.d=+r[0],n+=r[0].length):-1}function ki(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n,n+2));return r?(e.H=+r[0],n+=r[0].length):-1}function Li(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n,n+2));return r?(e.M=+r[0],n+=r[0].length):-1}function Ai(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n,n+2));return r?(e.S=+r[0],n+=r[0].length):-1}function Oi(e,t,n){Bo.lastIndex=0;var r=Bo.exec(t.substring(n,n+3));return r?(e.L=+r[0],n+=r[0].length):-1}function Mi(e,t,n){var r=jo.get(t.substring(n,n+=2).toLowerCase());return r==null?-1:(e.p=r,n)}function _i(e){var t=e.getTimezoneOffset(),n=t>0?"-":"+",r=~~(Math.abs(t)/60),i=Math.abs(t)%60;return n+To(r)+To(i)}function Di(e){return e.toISOString()}function Pi(e,t,n){function r(t){var n=e(t),r=s(n,1);return t-n1)while(ot?1:e>=t?0:NaN},d3.descending=function(e,t){return te?1:t>=e?0:NaN},d3.mean=function(e,t){var n=e.length,r,i=0,s=-1,o=0;if(arguments.length===1)while(++s1&&(e=e.map(t)),e=e.filter(f),e.length?d3.quantile(e.sort(d3.ascending),.5):undefined},d3.min=function(e,t){var n=-1,r=e.length,i,s;if(arguments.length===1){while(++ns&&(i=s)}else{while(++ns&&(i=s)}return i},d3.max=function(e,t){var n=-1,r=e.length,i,s;if(arguments.length===1){while(++ni&&(i=s)}else{while(++ni&&(i=s)}return i},d3.extent=function(e,t){var n=-1,r=e.length,i,s,o;if(arguments.length===1){while(++ns&&(i=s),os&&(i=s),o1);return e+t*n*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(e,t){var n=arguments.length;n<2&&(t=1),n<1&&(e=0);var r=d3.random.normal();return function(){return Math.exp(e+t*r())}},irwinHall:function(e){return function(){for(var t=0,n=0;n>>1;e.call(t,t[s],s)>>1;n0&&(i=s);return i},d3.last=function(e,t){var n=0,r=e.length,i=e[0],s;arguments.length===1&&(t=d3.ascending);while(++n=i.length)return u?u.call(n,t):o?t.sort(o):t;var a=-1,f=t.length,l=i[s++],c,h,p=new r,d,v={};while(++a=i.length)return e;var r=[],o=s[n++],u;for(u in e)r.push({key:u,values:t(e[u],n)});return o&&r.sort(function(e,t){return o(e.key,t.key)}),r}var n={},i=[],s=[],o,u;return n.map=function(t){return e(t,0)},n.entries=function(n){return t(e(n,0),0)},n.key=function(e){return i.push(e),n},n.sortKeys=function(e){return s[i.length-1]=e,n},n.sortValues=function(e){return o=e,n},n.rollup=function(e){return u=e,n},n},d3.keys=function(e){var t=[];for(var n in e)t.push(n);return t},d3.values=function(e){var t=[];for(var n in e)t.push(e[n]);return t},d3.entries=function(e){var t=[];for(var n in e)t.push({key:n,value:e[n]});return t},d3.permute=function(e,t){var n=[],r=-1,i=t.length;while(++rt)r.push(o/i);else while((o=e+n*++s)=200&&e<300||e===304?r:null)}},r.send(null)},d3.text=function(e,t,n){function r(e){n(e&&e.responseText)}arguments.length<3&&(n=t,t=null),d3.xhr(e,t,r)},d3.json=function(e,t){d3.text(e,"application/json",function(e){t(e?JSON.parse(e):null)})},d3.html=function(e,t){d3.text(e,"text/html",function(e){if(e!=null){var n=document.createRange();n.selectNode(document.body),e=n.createContextualFragment(e)}t(e)})},d3.xml=function(e,t,n){function r(e){n(e&&e.responseXML)}arguments.length<3&&(n=t,t=null),d3.xhr(e,t,r)};var es={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};d3.ns={prefix:es,qualify:function(e){var t=e.indexOf(":"),n=e;return t>=0&&(n=e.substring(0,t),e=e.substring(t+1)),es.hasOwnProperty(n)?{space:es[n],local:e}:e}},d3.dispatch=function(){var e=new d,t=-1,n=arguments.length;while(++t0&&(r=e.substring(n+1),e=e.substring(0,n)),arguments.length<2?this[e].on(r):this[e].on(r,t)},d3.format=function(e){var t=ts.exec(e),n=t[1]||" ",r=t[3]||"",i=t[5],s=+t[6],o=t[7],u=t[8],a=t[9],f=1,l="",c=!1;u&&(u=+u.substring(1)),i&&(n="0",o&&(s-=Math.floor((s-1)/4)));switch(a){case"n":o=!0,a="g";break;case"%":f=100,l="%",a="f";break;case"p":f=100,l="%",a="r";break;case"d":c=!0,u=0;break;case"s":f=-1,a="r"}return a=="r"&&!u&&(a="g"),a=ns.get(a)||g,function(e){if(c&&e%1)return"";var t=e<0&&(e=-e)?"-":r;if(f<0){var h=d3.formatPrefix(e,u);e=h.scale(e),l=h.symbol}else e*=f;e=a(e,u);if(i){var p=e.length+t.length;p=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,ns=d3.map({g:function(e,t){return e.toPrecision(t)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},r:function(e,t){return d3.round(e,t=m(e,t)).toFixed(Math.max(0,Math.min(20,t)))}}),rs=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(b);d3.formatPrefix=function(e,t){var n=0;return e&&(e<0&&(e*=-1),t&&(e=d3.round(e,m(e,t))),n=1+Math.floor(1e-12+Math.log(e)/Math.LN10),n=Math.max(-24,Math.min(24,Math.floor((n<=0?n+1:n-1)/3)*3))),rs[8+n/3]};var is=T(2),ss=T(3),os=function(){return x},us=d3.map({linear:os,poly:T,quad:function(){return is},cubic:function(){return ss},sin:function(){return N},exp:function(){return C},circle:function(){return k},elastic:L,back:A,bounce:function(){return O}}),as=d3.map({"in":x,out:E,"in-out":S,"out-in":function(e){return S(E(e))}});d3.ease=function(e){var t=e.indexOf("-"),n=t>=0?e.substring(0,t):e,r=t>=0?e.substring(t+1):"in";return n=us.get(n)||os,r=as.get(r)||x,w(r(n.apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.transform=function(e){var t=document.createElementNS(d3.ns.prefix.svg,"g");return(d3.transform=function(e){t.setAttribute("transform",e);var n=t.transform.baseVal.consolidate();return new P(n?n.matrix:ls)})(e)},P.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var fs=180/Math.PI,ls={a:1,b:0,c:0,d:1,e:0,f:0};d3.interpolate=function(e,t){var n=d3.interpolators.length,r;while(--n>=0&&!(r=d3.interpolators[n](e,t)));return r},d3.interpolateNumber=function(e,t){return t-=e,function(n){return e+t*n}},d3.interpolateRound=function(e,t){return t-=e,function(n){return Math.round(e+t*n)}},d3.interpolateString=function(e,t){var n,r,i,s=0,o=0,u=[],a=[],f,l;cs.lastIndex=0;for(r=0;n=cs.exec(t);++r)n.index&&u.push(t.substring(s,o=n.index)),a.push({i:u.length,x:n[0]}),u.push(null),s=cs.lastIndex;s180?l+=360:l-f>180&&(f+=360),r.push({i:n.push(n.pop()+"rotate(",null,")")-2,x:d3.interpolateNumber(f,l)})):l&&n.push(n.pop()+"rotate("+l+")"),c!=h?r.push({i:n.push(n.pop()+"skewX(",null,")")-2,x:d3.interpolateNumber(c,h)}):h&&n.push(n.pop()+"skewX("+h+")"),p[0]!=d[0]||p[1]!=d[1]?(i=n.push(n.pop()+"scale(",null,",",null,")"),r.push({i:i-4,x:d3.interpolateNumber(p[0],d[0])},{i:i-2,x:d3.interpolateNumber(p[1],d[1])})):(d[0]!=1||d[1]!=1)&&n.push(n.pop()+"scale("+d+")"),i=r.length,function(e){var t=-1,s;while(++t180?s-=360:s<-180&&(s+=360),function(e){return G(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateLab=function(e,t){e=d3.lab(e),t=d3.lab(t);var n=e.l,r=e.a,i=e.b,s=t.l-n,o=t.a-r,u=t.b-i;return function(e){return rt(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateHcl=function(e,t){e=d3.hcl(e),t=d3.hcl(t);var n=e.h,r=e.c,i=e.l,s=t.h-n,o=t.c-r,u=t.l-i;return s>180?s-=360:s<-180&&(s+=360),function(e){return et(n+s*e,r+o*e,i+u*e)+""}},d3.interpolateArray=function(e,t){var n=[],r=[],i=e.length,s=t.length,o=Math.min(e.length,t.length),u;for(u=0;u=0;)if(s=n[r])i&&i!==s.nextSibling&&i.parentNode.insertBefore(s,i),i=s;return this},Ss.sort=function(e){e=bt.apply(this,arguments);for(var t=-1,n=this.length;++t=Vs?e?"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+ -s+"A"+s+","+s+" 0 1,1 0,"+s+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+ -s+"A"+s+","+s+" 0 1,1 0,"+s+"Z":e?"M"+s*l+","+s*c+"A"+s+","+s+" 0 "+f+",1 "+s*h+","+s*p+"L"+e*h+","+e*p+"A"+e+","+e+" 0 "+f+",0 "+e*l+","+e*c+"Z":"M"+s*l+","+s*c+"A"+s+","+s+" 0 "+f+",1 "+s*h+","+s*p+"L0,0"+"Z"}var t=Zt,n=en,r=tn,i=nn;return e.innerRadius=function(n){return arguments.length?(t=u(n),e):t},e.outerRadius=function(t){return arguments.length?(n=u(t),e):n},e.startAngle=function(t){return arguments.length?(r=u(t),e):r},e.endAngle=function(t){return arguments.length?(i=u(t),e):i},e.centroid=function(){var e=(t.apply(this,arguments)+n.apply(this,arguments))/2,s=(r.apply(this,arguments)+i.apply(this,arguments))/2+Xs;return[Math.cos(s)*e,Math.sin(s)*e]},e};var Xs=-Math.PI/2,Vs=2*Math.PI-1e-6;d3.svg.line=function(){return rn(i)};var $s=d3.map({linear:un,"linear-closed":an,"step-before":fn,"step-after":ln,basis:mn,"basis-open":gn,"basis-closed":yn,bundle:bn,cardinal:pn,"cardinal-open":cn,"cardinal-closed":hn,monotone:Nn});$s.forEach(function(e,t){t.key=e,t.closed=/-closed$/.test(e)});var Js=[0,2/3,1/3,0],Ks=[0,1/3,2/3,0],Qs=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var e=rn(Cn);return e.radius=e.x,delete e.x,e.angle=e.y,delete e.y,e},fn.reverse=ln,ln.reverse=fn,d3.svg.area=function(){return kn(i)},d3.svg.area.radial=function(){var e=kn(Cn);return e.radius=e.x,delete e.x,e.innerRadius=e.x0,delete e.x0,e.outerRadius=e.x1,delete e.x1,e.angle=e.y,delete e.y,e.startAngle=e.y0,delete e.y0,e.endAngle=e.y1,delete e.y1,e},d3.svg.chord=function(){function e(e,u){var a=t(this,s,e,u),f=t(this,o,e,u);return"M"+a.p0+r(a.r,a.p1,a.a1-a.a0)+(n(a,f)?i(a.r,a.p1,a.r,a.p0):i(a.r,a.p1,f.r,f.p0)+r(f.r,f.p1,f.a1-f.a0)+i(f.r,f.p1,a.r,a.p0))+"Z"}function t(e,t,n,r){var i=t.call(e,n,r),s=a.call(e,i,r),o=f.call(e,i,r)+Xs,u=l.call(e,i,r)+Xs;return{r:s,a0:o,a1:u,p0:[s*Math.cos(o),s*Math.sin(o)],p1:[s*Math.cos(u),s*Math.sin(u)]}}function n(e,t){return e.a0==t.a0&&e.a1==t.a1}function r(e,t,n){return"A"+e+","+e+" 0 "+ +(n>Math.PI)+",1 "+t}function i(e,t,n,r){return"Q 0,0 "+r}var s=Ln,o=An,a=On,f=tn,l=nn;return e.radius=function(t){return arguments.length?(a=u(t),e):a},e.source=function(t){return arguments.length?(s=u(t),e):s},e.target=function(t){return arguments.length?(o=u(t),e):o},e.startAngle=function(t){return arguments.length?(f=u(t),e):f},e.endAngle=function(t){return arguments.length?(l=u(t),e):l},e},d3.svg.diagonal=function(){function e(e,i){var s=t.call(this,e,i),o=n.call(this,e,i),u=(s.y+o.y)/2,a=[s,{x:s.x,y:u},{x:o.x,y:u},o];return a=a.map(r),"M"+a[0]+"C"+a[1]+" "+a[2]+" "+a[3]}var t=Ln,n=An,r=Dn;return e.source=function(n){return arguments.length?(t=u(n),e):t},e.target=function(t){return arguments.length?(n=u(t),e):n},e.projection=function(t){return arguments.length?(r=t,e):r},e},d3.svg.diagonal.radial=function(){var e=d3.svg.diagonal(),t=Dn,n=e.projection;return e.projection=function(e){return arguments.length?n(Pn(t=e)):t},e},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function e(e,r){return(Gs.get(t.call(this,e,r))||jn)(n.call(this,e,r))}var t=Bn,n=Hn;return e.type=function(n){return arguments.length?(t=u(n),e):t},e.size=function(t){return arguments.length?(n=u(t),e):n},e};var Gs=d3.map({circle:jn,cross:function(e){var t=Math.sqrt(e/5)/2;return"M"+ -3*t+","+ -t+"H"+ -t+"V"+ -3*t+"H"+t+"V"+ -t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+ -t+"V"+t+"H"+ -3*t+"Z"},diamond:function(e){var t=Math.sqrt(e/(2*Zs)),n=t*Zs;return"M0,"+ -t+"L"+n+",0"+" 0,"+t+" "+ -n+",0"+"Z"},square:function(e){var t=Math.sqrt(e)/2;return"M"+ -t+","+ -t+"L"+t+","+ -t+" "+t+","+t+" "+ -t+","+t+"Z"},"triangle-down":function(e){var t=Math.sqrt(e/Ys),n=t*Ys/2;return"M0,"+n+"L"+t+","+ -n+" "+ -t+","+ -n+"Z"},"triangle-up":function(e){var t=Math.sqrt(e/Ys),n=t*Ys/2;return"M0,"+ -n+"L"+t+","+n+" "+ -t+","+n+"Z"}});d3.svg.symbolTypes=Gs.keys();var Ys=Math.sqrt(3),Zs=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function e(e){e.each(function(){var e=d3.select(this),c=a==null?t.ticks?t.ticks.apply(t,u):t.domain():a,h=f==null?t.tickFormat?t.tickFormat.apply(t,u):String:f,p=qn(t,c,l),d=e.selectAll(".minor").data(p,String),v=d.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),m=d3.transition(d.exit()).style("opacity",1e-6).remove(),g=d3.transition(d).style("opacity",1),y=e.selectAll("g").data(c,String),b=y.enter().insert("g","path").style("opacity",1e-6),w=d3.transition(y.exit()).style("opacity",1e-6).remove(),E=d3.transition(y).style("opacity",1),S,x=_t(t),T=e.selectAll(".domain").data([0]),N=T.enter().append("path").attr("class","domain"),C=d3.transition(T),k=t.copy(),L=this.__chart__||k;this.__chart__=k,b.append("line").attr("class","tick"),b.append("text");var A=b.select("line"),O=E.select("line"),M=y.select("text").text(h),_=b.select("text"),D=E.select("text");switch(n){case"bottom":S=Fn,v.attr("y2",i),g.attr("x2",0).attr("y2",i),A.attr("y2",r),_.attr("y",Math.max(r,0)+o),O.attr("x2",0).attr("y2",r),D.attr("x",0).attr("y",Math.max(r,0)+o),M.attr("dy",".71em").attr("text-anchor","middle"),C.attr("d","M"+x[0]+","+s+"V0H"+x[1]+"V"+s);break;case"top":S=Fn,v.attr("y2",-i),g.attr("x2",0).attr("y2",-i),A.attr("y2",-r),_.attr("y",-(Math.max(r,0)+o)),O.attr("x2",0).attr("y2",-r),D.attr("x",0).attr("y",-(Math.max(r,0)+o)),M.attr("dy","0em").attr("text-anchor","middle"),C.attr("d","M"+x[0]+","+ -s+"V0H"+x[1]+"V"+ -s);break;case"left":S=In,v.attr("x2",-i),g.attr("x2",-i).attr("y2",0),A.attr("x2",-r),_.attr("x",-(Math.max(r,0)+o)),O.attr("x2",-r).attr("y2",0),D.attr("x",-(Math.max(r,0)+o)).attr("y",0),M.attr("dy",".32em").attr("text-anchor","end"),C.attr("d","M"+ -s+","+x[0]+"H0V"+x[1]+"H"+ -s);break;case"right":S=In,v.attr("x2",i),g.attr("x2",i).attr("y2",0),A.attr("x2",r),_.attr("x",Math.max(r,0)+o),O.attr("x2",r).attr("y2",0),D.attr("x",Math.max(r,0)+o).attr("y",0),M.attr("dy",".32em").attr("text-anchor","start"),C.attr("d","M"+s+","+x[0]+"H0V"+x[1]+"H"+s)}if(t.ticks)b.call(S,L),E.call(S,k),w.call(S,k),v.call(S,L),g.call(S,k),m.call(S,k);else{var P=k.rangeBand()/2,H=function(e){return k(e)+P};b.call(S,H),E.call(S,H)}})}var t=d3.scale.linear(),n="bottom",r=6,i=6,s=6,o=3,u=[10],a=null,f,l=0;return e.scale=function(n){return arguments.length?(t=n,e):t},e.orient=function(t){return arguments.length?(n=t,e):n},e.ticks=function(){return arguments.length?(u=arguments,e):u},e.tickValues=function(t){return arguments.length?(a=t,e):a},e.tickFormat=function(t){return arguments.length?(f=t,e):f},e.tickSize=function(t,n,o){if(!arguments.length)return r;var u=arguments.length-1;return r=+t,i=u>1?+n:r,s=u>0?+arguments[u]:r,e},e.tickPadding=function(t){return arguments.length?(o=+t,e):o},e.tickSubdivide=function(t){return arguments.length?(l=+t,e):l},e},d3.svg.brush=function(){function e(s){s.each(function(){var s=d3.select(this),f=s.selectAll(".background").data([0]),l=s.selectAll(".extent").data([0]),c=s.selectAll(".resize").data(a,String),h;s.style("pointer-events","all").on("mousedown.brush",i).on("touchstart.brush",i),f.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),l.enter().append("rect").attr("class","extent").style("cursor","move"),c.enter().append("g").attr("class",function(e){return"resize "+e}).style("cursor",function(e){return eo[e]}).append("rect").attr("x",function(e){return/[ew]$/.test(e)?-3:null}).attr("y",function(e){return/^[ns]/.test(e)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),c.style("display",e.empty()?"none":null),c.exit().remove(),o&&(h=_t(o),f.attr("x",h[0]).attr("width",h[1]-h[0]),n(s)),u&&(h=_t(u),f.attr("y",h[0]).attr("height",h[1]-h[0]),r(s)),t(s)})}function t(e){e.selectAll(".resize").attr("transform",function(e){return"translate("+f[+/e$/.test(e)][0]+","+f[+/^s/.test(e)][1]+")"})}function n(e){e.select(".extent").attr("x",f[0][0]),e.selectAll(".extent,.n>rect,.s>rect").attr("width",f[1][0]-f[0][0])}function r(e){e.select(".extent").attr("y",f[0][1]),e.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1][1]-f[0][1])}function i(){function i(){var e=d3.event.changedTouches;return e?d3.touches(v,e)[0]:d3.mouse(v)}function a(){d3.event.keyCode==32&&(S||(x=null,T[0]-=f[1][0],T[1]-=f[1][1],S=2),M())}function c(){d3.event.keyCode==32&&S==2&&(T[0]+=f[1][0],T[1]+=f[1][1],S=0,M())}function h(){var e=i(),s=!1;N&&(e[0]+=N[0],e[1]+=N[1]),S||(d3.event.altKey?(x||(x=[(f[0][0]+f[1][0])/2,(f[0][1]+f[1][1])/2]),T[0]=f[+(e[0]0?a=e:a=0:e>0&&(r.start({type:"start",alpha:a=e}),d3.timer(n.tick)),n):a},n.start=function(){function e(e,n){var i=t(r),s=-1,o=i.length,u;while(++si&&(i=u),r.push(u)}for(o=0;o0){s=-1;while(++s=a[0]&&d<=a[1]&&(l=o[d3.bisect(f,d,1,h)-1],l.y+=p,l.push(e[s]))}return o}var t=!0,n=Number,r=ar,i=or;return e.value=function(t){return arguments.length?(n=t,e):n},e.range=function(t){return arguments.length?(r=u(t),e):r},e.bins=function(t){return arguments.length?(i=typeof t=="number"?function(e){return ur(e,t)}:u(t),e):i},e.frequency=function(n){return arguments.length?(t=!!n,e):t},e},d3.layout.hierarchy=function(){function e(t,o,u){var a=i.call(n,t,o),f=uo?t:{data:t};f.depth=o,u.push(f);if(a&&(c=a.length)){var l=-1,c,h=f.children=[],p=0,d=o+1,v;while(++l0){var l=n*f/2;Pr(o,function(e){e.r+=l}),Pr(o,yr),Pr(o,function(e){e.r-=l}),f=Math.max(2*o.r/u,2*o.r/a)}return Er(o,u/2,a/2,1/f),s}var t=d3.layout.hierarchy().sort(dr),n=0,r=[1,1];return e.size=function(t){return arguments.length?(r=t,e):r},e.padding=function(t){return arguments.length?(n=+t,e):n},fr(e,t)},d3.layout.cluster=function(){function e(e,i){var s=t.call(this,e,i),o=s[0],u,a=0,f,l;Pr(o,function(e){var t=e.children;t&&t.length?(e.x=Tr(t),e.y=xr(t)):(e.x=u?a+=n(e,u):0,e.y=0,u=e)});var c=Nr(o),h=Cr(o),p=c.x-n(c,h)/2,d=h.x+n(h,c)/2;return Pr(o,function(e){e.x=(e.x-p)/(d-p)*r[0],e.y=(1-(o.y?e.y/o.y:1))*r[1]}),s}var t=d3.layout.hierarchy().sort(null).value(null),n=kr,r=[1,1];return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(r=t,e):r},fr(e,t)},d3.layout.tree=function(){function e(e,i){function s(e,t){var r=e.children,i=e._tree;if(r&&(o=r.length)){var o,a=r[0],f,l=a,c,h=-1;while(++h0&&(Br(jr(o,e,r),e,h),a+=h,f+=h),l+=o._tree.mod,a+=i._tree.mod,c+=u._tree.mod,f+=s._tree.mod;o&&!Ar(s)&&(s._tree.thread=o,s._tree.mod+=l-f),i&&!Lr(u)&&(u._tree.thread=i,u._tree.mod+=a-c,r=e)}return r}var a=t.call(this,e,i),f=a[0];Pr(f,function(e,t){e._tree={ancestor:e,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),s(f),o(f,-f._tree.prelim);var l=Or(f,_r),c=Or(f,Mr),h=Or(f,Dr),p=l.x-n(l,c)/2,d=c.x+n(c,l)/2,v=h.depth||1;return Pr(f,function(e){e.x=(e.x-p)/(d-p)*r[0],e.y=e.depth/v*r[1],delete e._tree}),a}var t=d3.layout.hierarchy().sort(null).value(null),n=kr,r=[1,1];return e.separation=function(t){return arguments.length?(n=t,e):n},e.size=function(t){return arguments.length?(r=t,e):r},fr(e,t)},d3.layout.treemap=function(){function e(e,t){var n=-1,r=e.length,i,s;while(++n0)u.push(f=a[d-1]),u.area+=f.area,(h=r(u,p))<=c?(a.pop(),c=h):(u.area-=u.pop().area,i(u,p,o,!1),p=Math.min(o.dx,o.dy),u.length=u.area=0,c=Infinity);u.length&&(i(u,p,o,!0),u.length=u.area=0),s.forEach(t)}}function n(t){var r=t.children;if(r&&r.length){var s=l(t),o=r.slice(),u,a=[];e(o,s.dx*s.dy/t.value),a.area=0;while(u=o.pop())a.push(u),a.area+=u.area,u.z!=null&&(i(a,u.z?s.dx:s.dy,s,!o.length),a.length=a.area=0);r.forEach(n)}}function r(e,t){var n=e.area,r,i=0,s=Infinity,o=-1,u=e.length;while(++oi&&(i=r)}return n*=n,t*=t,n?Math.max(t*i*p/n,n/(t*s*p)):Infinity}function i(e,t,n,r){var i=-1,s=e.length,o=n.x,a=n.y,f=t?u(e.area/t):0,l;if(t==n.dx){if(r||f>n.dy)f=n.dy;while(++in.dx)f=n.dx;while(++i50?n:s<-140?r:o<21?i:t)(e)}var t=d3.geo.albers(),n=d3.geo.albers().origin([-160,60]).parallels([55,65]),r=d3.geo.albers().origin([-160,20]).parallels([8,18]),i=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(s){return arguments.length?(t.scale(s),n.scale(s*.6),r.scale(s),i.scale(s*1.5),e.translate(t.translate())):t.scale()},e.translate=function(s){if(!arguments.length)return t.translate();var o=t.scale()/1e3,u=s[0],a=s[1];return t.translate(s),n.translate([u-400*o,a+170*o]),r.translate([u-190*o,a+200*o]),i.translate([u+580*o,a+430*o]),e},e.scale(t.scale())},d3.geo.bonne=function(){function e(e){var u=e[0]*ao-r,a=e[1]*ao-i;if(s){var f=o+s-a,l=u*Math.cos(a)/f;u=f*Math.sin(l),a=f*Math.cos(l)-o}else u*=Math.cos(a),a*=-1;return[t*u+n[0],t*a+n[1]]}var t=200,n=[480,250],r,i,s,o;return e.invert=function(e){var i=(e[0]-n[0])/t,u=(e[1]-n[1])/t;if(s){var a=o+u,f=Math.sqrt(i*i+a*a);u=o+s-f,i=r+f*Math.atan2(i,a)/Math.cos(u)}else u*=-1,i/=Math.cos(u);return[i/ao,u/ao]},e.parallel=function(t){return arguments.length?(o=1/Math.tan +(s=t*ao),e):s/ao},e.origin=function(t){return arguments.length?(r=t[0]*ao,i=t[1]*ao,e):[r/ao,i/ao]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function e(e){var r=e[0]/360,i=-e[1]/360;return[t*r+n[0],t*i+n[1]]}var t=500,n=[480,250];return e.invert=function(e){var r=(e[0]-n[0])/t,i=(e[1]-n[1])/t;return[360*r,-360*i]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e},d3.geo.mercator=function(){function e(e){var r=e[0]/360,i=-(Math.log(Math.tan(Math.PI/4+e[1]*ao/2))/ao)/360;return[t*r+n[0],t*Math.max(-0.5,Math.min(.5,i))+n[1]]}var t=500,n=[480,250];return e.invert=function(e){var r=(e[0]-n[0])/t,i=(e[1]-n[1])/t;return[360*r,2*Math.atan(Math.exp(-360*i*ao))/ao-90]},e.scale=function(n){return arguments.length?(t=+n,e):t},e.translate=function(t){return arguments.length?(n=[+t[0],+t[1]],e):n},e},d3.geo.path=function(){function e(e,t){typeof s=="function"&&(o=Ur(s.apply(this,arguments))),f(e);var n=a.length?a.join(""):null;return a=[],n}function t(e){return u(e).join(",")}function n(e){var t=i(e[0]),n=0,r=e.length;while(++n0){a.push("M");while(++o0){a.push("M");while(++lr&&(r=e),si&&(i=s)}),[[t,n],[r,i]]};var fo={Feature:Wr,FeatureCollection:Xr,GeometryCollection:Vr,LineString:$r,MultiLineString:Jr,MultiPoint:$r,MultiPolygon:Kr,Point:Qr,Polygon:Gr};d3.geo.circle=function(){function e(){}function t(e){return a.distance(e)=l*l+c*c?r[s].index=-1:(r[h].index=-1,d=r[s].angle,h=s,p=o)):(d=r[s].angle,h=s,p=o);i.push(u);for(s=0,o=0;s<2;++o)r[o].index!==-1&&(i.push(r[o].index),s++);v=i.length;for(;o=0?(n=e.ep.r,r=e.ep.l):(n=e.ep.l,r=e.ep.r),e.a===1?(o=n?n.y:-1e6,i=e.c-e.b*o,u=r?r.y:1e6,s=e.c-e.b*u):(i=n?n.x:-1e6,o=e.c-e.a*i,s=r?r.x:1e6,u=e.c-e.a*s);var a=[i,o],f=[s,u];t[e.region.l.index].push(a,f),t[e.region.r.index].push(a,f)}),t.map(function(t,n){var r=e[n][0],i=e[n][1];return t.forEach(function(e){e.angle=Math.atan2(e[0]-r,e[1]-i)}),t.sort(function(e,t){return e.angle-t.angle}).filter(function(e,n){return!n||e.angle-t[n-1].angle>1e-10})})};var ho={l:"r",r:"l"};d3.geom.delaunay=function(e){var t=e.map(function(){return[]}),n=[];return oi(e,function(n){t[n.region.l.index].push(e[n.region.r.index])}),t.forEach(function(t,r){var i=e[r],s=i[0],o=i[1];t.forEach(function(e){e.angle=Math.atan2(e[0]-s,e[1]-o)}),t.sort(function(e,t){return e.angle-t.angle});for(var u=0,a=t.length-1;u=u,l=t.y>=a,c=(l<<1)+f;e.leaf=!1,e=e.nodes[c]||(e.nodes[c]=ui()),f?n=u:i=u,l?r=a:o=a,s(e,t,n,r,i,o)}var u,a=-1,f=e.length;f&&isNaN(e[0].x)&&(e=e.map(fi));if(arguments.length<5)if(arguments.length===3)i=r=n,n=t;else{t=n=Infinity,r=i=-Infinity;while(++ar&&(r=u.x),u.y>i&&(i=u.y);var l=r-t,c=i-n;l>c?i=n+l:r=t+c}var h=ui();return h.add=function(e){s(h,e,t,n,r,i)},h.visit=function(e){ai(e,h,t,n,r,i)},e.forEach(h.add),h},d3.time={};var po=Date,vo=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];li.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){mo.setUTCDate.apply(this._,arguments)},setDay:function(){mo.setUTCDay.apply(this._,arguments)},setFullYear:function(){mo.setUTCFullYear.apply(this._,arguments)},setHours:function(){mo.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){mo.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){mo.setUTCMinutes.apply(this._,arguments)},setMonth:function(){mo.setUTCMonth.apply(this._,arguments)},setSeconds:function(){mo.setUTCSeconds.apply(this._,arguments)},setTime:function(){mo.setTime.apply(this._,arguments)}};var mo=Date.prototype,go="%a %b %e %H:%M:%S %Y",yo="%m/%d/%y",bo="%H:%M:%S",wo=vo,Eo=wo.map(ci),So=["January","February","March","April","May","June","July","August","September","October","November","December"],xo=So.map(ci);d3.time.format=function(e){function t(t){var r=[],i=-1,s=0,o,u;while(++i=12?"PM":"AM"},S:function(e){return To(e.getSeconds())},U:function(e){return To(d3.time.sundayOfYear(e))},w:function(e){return e.getDay()},W:function(e){return To(d3.time.mondayOfYear(e))},x:d3.time.format(yo),X:d3.time.format(bo),y:function(e){return To(e.getFullYear()%100)},Y:function(e){return Co(e.getFullYear()%1e4)},Z:_i,"%":function(e){return"%"}},Ho={a:vi,A:mi,b:gi,B:yi,c:bi,d:Ci,e:Ci,H:ki,I:ki,L:Oi,m:Ni,M:Li,p:Mi,S:Ai,x:wi,X:Ei,y:xi,Y:Si},Bo=/^\s*\d+/,jo=d3.map({am:0,pm:1});d3.time.format.utc=function(e){function t(e){try{po=li;var t=new po;return t._=e,n(t)}finally{po=Date}}var n=d3.time.format(e);return t.parse=function(e){try{po=li;var t=n.parse(e);return t&&t._}finally{po=Date}},t.toString=n.toString,t};var Fo=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?Di:Fo,Di.parse=function(e){var t=new Date(e);return isNaN(t)?null:t},Di.toString=Fo.toString,d3.time.second=Pi(function(e){return new po(Math.floor(e/1e3)*1e3)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*1e3)},function(e){return e.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=Pi(function(e){return new po(Math.floor(e/6e4)*6e4)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*6e4)},function(e){return e.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=Pi(function(e){var t=e.getTimezoneOffset()/60;return new po((Math.floor(e/36e5-t)+t)*36e5)},function(e,t){e.setTime(e.getTime()+Math.floor(t)*36e5)},function(e){return e.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=Pi(function(e){var t=new po(1970,0);return t.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),t},function(e,t){e.setDate(e.getDate()+t)},function(e){return e.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(e){var t=d3.time.year(e);return Math.floor((e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5)},vo.forEach(function(e,t){e=e.toLowerCase(),t=7-t;var n=d3.time[e]=Pi(function(e){return(e=d3.time.day(e)).setDate(e.getDate()-(e.getDay()+t)%7),e},function(e,t){e.setDate(e.getDate()+Math.floor(t)*7)},function(e){var n=d3.time.year(e).getDay();return Math.floor((d3.time.dayOfYear(e)+(n+t)%7)/7)-(n!==t)});d3.time[e+"s"]=n.range,d3.time[e+"s"].utc=n.utc.range,d3.time[e+"OfYear"]=function(e){var n=d3.time.year(e).getDay();return Math.floor((d3.time.dayOfYear(e)+(n+t)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=Pi(function(e){return e=d3.time.day(e),e.setDate(1),e},function(e,t){e.setMonth(e.getMonth()+t)},function(e){return e.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=Pi(function(e){return e=d3.time.day(e),e.setMonth(0,1),e},function(e,t){e.setFullYear(e.getFullYear()+t)},function(e){return e.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var Io=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],qo=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],Ro=[[d3.time.format("%Y"),function(e){return!0}],[d3.time.format("%B"),function(e){return e.getMonth()}],[d3.time.format("%b %d"),function(e){return e.getDate()!=1}],[d3.time.format("%a %d"),function(e){return e.getDay()&&e.getDate()!=1}],[d3.time.format("%I %p"),function(e){return e.getHours()}],[d3.time.format("%I:%M"),function(e){return e.getMinutes()}],[d3.time.format(":%S"),function(e){return e.getSeconds()}],[d3.time.format(".%L"),function(e){return e.getMilliseconds()}]],Uo=d3.scale.linear(),zo=Ii(Ro);qo.year=function(e,t){return Uo.domain(e.map(Ri)).ticks(t).map(qi)},d3.time.scale=function(){return Bi(d3.scale.linear(),qo,zo)};var Wo=qo.map(function(e){return[e[0].utc,e[1]]}),Xo=[[d3.time.format.utc("%Y"),function(e){return!0}],[d3.time.format.utc("%B"),function(e){return e.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(e){return e.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(e){return e.getUTCDay()&&e.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(e){return e.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(e){return e.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(e){return e.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(e){return e.getUTCMilliseconds()}]],Vo=Ii(Xo);Wo.year=function(e,t){return Uo.domain(e.map(zi)).ticks(t).map(Ui)},d3.time.scale.utc=function(){return Bi(d3.scale.linear(),Wo,Vo)}})(); \ No newline at end of file diff --git a/src/errors/static/js/nvd3/lib/fisheye.js b/src/errors/static/js/nvd3/lib/fisheye.js new file mode 100644 index 00000000..e1addd7b --- /dev/null +++ b/src/errors/static/js/nvd3/lib/fisheye.js @@ -0,0 +1,86 @@ +(function() { + d3.fisheye = { + scale: function(scaleType) { + return d3_fisheye_scale(scaleType(), 3, 0); + }, + circular: function() { + var radius = 200, + distortion = 2, + k0, + k1, + focus = [0, 0]; + + function fisheye(d) { + var dx = d.x - focus[0], + dy = d.y - focus[1], + dd = Math.sqrt(dx * dx + dy * dy); + if (!dd || dd >= radius) return {x: d.x, y: d.y, z: 1}; + var k = k0 * (1 - Math.exp(-dd * k1)) / dd * .75 + .25; + return {x: focus[0] + dx * k, y: focus[1] + dy * k, z: Math.min(k, 10)}; + } + + function rescale() { + k0 = Math.exp(distortion); + k0 = k0 / (k0 - 1) * radius; + k1 = distortion / radius; + return fisheye; + } + + fisheye.radius = function(_) { + if (!arguments.length) return radius; + radius = +_; + return rescale(); + }; + + fisheye.distortion = function(_) { + if (!arguments.length) return distortion; + distortion = +_; + return rescale(); + }; + + fisheye.focus = function(_) { + if (!arguments.length) return focus; + focus = _; + return fisheye; + }; + + return rescale(); + } + }; + + function d3_fisheye_scale(scale, d, a) { + + function fisheye(_) { + var x = scale(_), + left = x < a, + v, + range = d3.extent(scale.range()), + min = range[0], + max = range[1], + m = left ? a - min : max - a; + if (m == 0) m = max - min; + return (left ? -1 : 1) * m * (d + 1) / (d + (m / Math.abs(x - a))) + a; + } + + fisheye.distortion = function(_) { + if (!arguments.length) return d; + d = +_; + return fisheye; + }; + + fisheye.focus = function(_) { + if (!arguments.length) return a; + a = +_; + return fisheye; + }; + + fisheye.copy = function() { + return d3_fisheye_scale(scale.copy(), d, a); + }; + + fisheye.nice = scale.nice; + fisheye.ticks = scale.ticks; + fisheye.tickFormat = scale.tickFormat; + return d3.rebind(fisheye, scale, "domain", "range"); + } +})(); diff --git a/src/errors/static/js/nvd3/lib/hive.js b/src/errors/static/js/nvd3/lib/hive.js new file mode 100644 index 00000000..06e53aed --- /dev/null +++ b/src/errors/static/js/nvd3/lib/hive.js @@ -0,0 +1,80 @@ +d3.hive = {}; + +d3.hive.link = function() { + var source = function(d) { return d.source; }, + target = function(d) { return d.target; }, + angle = function(d) { return d.angle; }, + startRadius = function(d) { return d.radius; }, + endRadius = startRadius, + arcOffset = -Math.PI / 2; + + function link(d, i) { + var s = node(source, this, d, i), + t = node(target, this, d, i), + x; + if (t.a < s.a) x = t, t = s, s = x; + if (t.a - s.a > Math.PI) s.a += 2 * Math.PI; + var a1 = s.a + (t.a - s.a) / 3, + a2 = t.a - (t.a - s.a) / 3; + return s.r0 - s.r1 || t.r0 - t.r1 + ? "M" + Math.cos(s.a) * s.r0 + "," + Math.sin(s.a) * s.r0 + + "L" + Math.cos(s.a) * s.r1 + "," + Math.sin(s.a) * s.r1 + + "C" + Math.cos(a1) * s.r1 + "," + Math.sin(a1) * s.r1 + + " " + Math.cos(a2) * t.r1 + "," + Math.sin(a2) * t.r1 + + " " + Math.cos(t.a) * t.r1 + "," + Math.sin(t.a) * t.r1 + + "L" + Math.cos(t.a) * t.r0 + "," + Math.sin(t.a) * t.r0 + + "C" + Math.cos(a2) * t.r0 + "," + Math.sin(a2) * t.r0 + + " " + Math.cos(a1) * s.r0 + "," + Math.sin(a1) * s.r0 + + " " + Math.cos(s.a) * s.r0 + "," + Math.sin(s.a) * s.r0 + : "M" + Math.cos(s.a) * s.r0 + "," + Math.sin(s.a) * s.r0 + + "C" + Math.cos(a1) * s.r1 + "," + Math.sin(a1) * s.r1 + + " " + Math.cos(a2) * t.r1 + "," + Math.sin(a2) * t.r1 + + " " + Math.cos(t.a) * t.r1 + "," + Math.sin(t.a) * t.r1; + } + + function node(method, thiz, d, i) { + var node = method.call(thiz, d, i), + a = +(typeof angle === "function" ? angle.call(thiz, node, i) : angle) + arcOffset, + r0 = +(typeof startRadius === "function" ? startRadius.call(thiz, node, i) : startRadius), + r1 = (startRadius === endRadius ? r0 : +(typeof endRadius === "function" ? endRadius.call(thiz, node, i) : endRadius)); + return {r0: r0, r1: r1, a: a}; + } + + link.source = function(_) { + if (!arguments.length) return source; + source = _; + return link; + }; + + link.target = function(_) { + if (!arguments.length) return target; + target = _; + return link; + }; + + link.angle = function(_) { + if (!arguments.length) return angle; + angle = _; + return link; + }; + + link.radius = function(_) { + if (!arguments.length) return startRadius; + startRadius = endRadius = _; + return link; + }; + + link.startRadius = function(_) { + if (!arguments.length) return startRadius; + startRadius = _; + return link; + }; + + link.endRadius = function(_) { + if (!arguments.length) return endRadius; + endRadius = _; + return link; + }; + + return link; +}; diff --git a/src/errors/static/js/nvd3/lib/horizon.js b/src/errors/static/js/nvd3/lib/horizon.js new file mode 100644 index 00000000..d84c6567 --- /dev/null +++ b/src/errors/static/js/nvd3/lib/horizon.js @@ -0,0 +1,192 @@ +(function() { + d3.horizon = function() { + var bands = 1, // between 1 and 5, typically + mode = "offset", // or mirror + interpolate = "linear", // or basis, monotone, step-before, etc. + x = d3_horizonX, + y = d3_horizonY, + w = 960, + h = 40, + duration = 0; + + var color = d3.scale.linear() + .domain([-1, 0, 1]) + .range(["#d62728", "#fff", "#1f77b4"]); + + // For each small multiple… + function horizon(g) { + g.each(function(d, i) { + var g = d3.select(this), + n = 2 * bands + 1, + xMin = Infinity, + xMax = -Infinity, + yMax = -Infinity, + x0, // old x-scale + y0, // old y-scale + id; // unique id for paths + + // Compute x- and y-values along with extents. + var data = d.map(function(d, i) { + var xv = x.call(this, d, i), + yv = y.call(this, d, i); + if (xv < xMin) xMin = xv; + if (xv > xMax) xMax = xv; + if (-yv > yMax) yMax = -yv; + if (yv > yMax) yMax = yv; + return [xv, yv]; + }); + + // Compute the new x- and y-scales, and transform. + var x1 = d3.scale.linear().domain([xMin, xMax]).range([0, w]), + y1 = d3.scale.linear().domain([0, yMax]).range([0, h * bands]), + t1 = d3_horizonTransform(bands, h, mode); + + // Retrieve the old scales, if this is an update. + if (this.__chart__) { + x0 = this.__chart__.x; + y0 = this.__chart__.y; + t0 = this.__chart__.t; + id = this.__chart__.id; + } else { + x0 = x1.copy(); + y0 = y1.copy(); + t0 = t1; + id = ++d3_horizonId; + } + + // We'll use a defs to store the area path and the clip path. + var defs = g.selectAll("defs") + .data([null]); + + // The clip path is a simple rect. + defs.enter().append("defs").append("clipPath") + .attr("id", "d3_horizon_clip" + id) + .append("rect") + .attr("width", w) + .attr("height", h); + + defs.select("rect").transition() + .duration(duration) + .attr("width", w) + .attr("height", h); + + // We'll use a container to clip all horizon layers at once. + g.selectAll("g") + .data([null]) + .enter().append("g") + .attr("clip-path", "url(#d3_horizon_clip" + id + ")"); + + // Instantiate each copy of the path with different transforms. + var path = g.select("g").selectAll("path") + .data(d3.range(-1, -bands - 1, -1).concat(d3.range(1, bands + 1)), Number); + + var d0 = d3_horizonArea + .interpolate(interpolate) + .x(function(d) { return x0(d[0]); }) + .y0(h * bands) + .y1(function(d) { return h * bands - y0(d[1]); }) + (data); + + var d1 = d3_horizonArea + .x(function(d) { return x1(d[0]); }) + .y1(function(d) { return h * bands - y1(d[1]); }) + (data); + + path.enter().append("path") + .style("fill", color) + .attr("transform", t0) + .attr("d", d0); + + path.transition() + .duration(duration) + .style("fill", color) + .attr("transform", t1) + .attr("d", d1); + + path.exit().transition() + .duration(duration) + .attr("transform", t1) + .attr("d", d1) + .remove(); + + // Stash the new scales. + this.__chart__ = {x: x1, y: y1, t: t1, id: id}; + }); + d3.timer.flush(); + } + + horizon.duration = function(x) { + if (!arguments.length) return duration; + duration = +x; + return horizon; + }; + + horizon.bands = function(x) { + if (!arguments.length) return bands; + bands = +x; + color.domain([-bands, 0, bands]); + return horizon; + }; + + horizon.mode = function(x) { + if (!arguments.length) return mode; + mode = x + ""; + return horizon; + }; + + horizon.colors = function(x) { + if (!arguments.length) return color.range(); + color.range(x); + return horizon; + }; + + horizon.interpolate = function(x) { + if (!arguments.length) return interpolate; + interpolate = x + ""; + return horizon; + }; + + horizon.x = function(z) { + if (!arguments.length) return x; + x = z; + return horizon; + }; + + horizon.y = function(z) { + if (!arguments.length) return y; + y = z; + return horizon; + }; + + horizon.width = function(x) { + if (!arguments.length) return w; + w = +x; + return horizon; + }; + + horizon.height = function(x) { + if (!arguments.length) return h; + h = +x; + return horizon; + }; + + return horizon; + }; + + var d3_horizonArea = d3.svg.area(), + d3_horizonId = 0; + + function d3_horizonX(d) { + return d[0]; + } + + function d3_horizonY(d) { + return d[1]; + } + + function d3_horizonTransform(bands, h, mode) { + return mode == "offset" + ? function(d) { return "translate(0," + (d + (d < 0) - bands) * h + ")"; } + : function(d) { return (d < 0 ? "scale(1,-1)" : "") + "translate(0," + (d - bands) * h + ")"; }; + } +})(); diff --git a/src/errors/static/js/nvd3/lib/sankey.js b/src/errors/static/js/nvd3/lib/sankey.js new file mode 100644 index 00000000..c3bc59fb --- /dev/null +++ b/src/errors/static/js/nvd3/lib/sankey.js @@ -0,0 +1,292 @@ +d3.sankey = function() { + var sankey = {}, + nodeWidth = 24, + nodePadding = 8, + size = [1, 1], + nodes = [], + links = []; + + sankey.nodeWidth = function(_) { + if (!arguments.length) return nodeWidth; + nodeWidth = +_; + return sankey; + }; + + sankey.nodePadding = function(_) { + if (!arguments.length) return nodePadding; + nodePadding = +_; + return sankey; + }; + + sankey.nodes = function(_) { + if (!arguments.length) return nodes; + nodes = _; + return sankey; + }; + + sankey.links = function(_) { + if (!arguments.length) return links; + links = _; + return sankey; + }; + + sankey.size = function(_) { + if (!arguments.length) return size; + size = _; + return sankey; + }; + + sankey.layout = function(iterations) { + computeNodeLinks(); + computeNodeValues(); + computeNodeBreadths(); + computeNodeDepths(iterations); + computeLinkDepths(); + return sankey; + }; + + sankey.relayout = function() { + computeLinkDepths(); + return sankey; + }; + + sankey.link = function() { + var curvature = .5; + + function link(d) { + var x0 = d.source.x + d.source.dx, + x1 = d.target.x, + xi = d3.interpolateNumber(x0, x1), + x2 = xi(curvature), + x3 = xi(1 - curvature), + y0 = d.source.y + d.sy + d.dy / 2, + y1 = d.target.y + d.ty + d.dy / 2; + return "M" + x0 + "," + y0 + + "C" + x2 + "," + y0 + + " " + x3 + "," + y1 + + " " + x1 + "," + y1; + } + + link.curvature = function(_) { + if (!arguments.length) return curvature; + curvature = +_; + return link; + }; + + return link; + }; + + // Populate the sourceLinks and targetLinks for each node. + // Also, if the source and target are not objects, assume they are indices. + function computeNodeLinks() { + nodes.forEach(function(node) { + node.sourceLinks = []; + node.targetLinks = []; + }); + links.forEach(function(link) { + var source = link.source, + target = link.target; + if (typeof source === "number") source = link.source = nodes[link.source]; + if (typeof target === "number") target = link.target = nodes[link.target]; + source.sourceLinks.push(link); + target.targetLinks.push(link); + }); + } + + // Compute the value (size) of each node by summing the associated links. + function computeNodeValues() { + nodes.forEach(function(node) { + node.value = Math.max( + d3.sum(node.sourceLinks, value), + d3.sum(node.targetLinks, value) + ); + }); + } + + // Iteratively assign the breadth (x-position) for each node. + // Nodes are assigned the maximum breadth of incoming neighbors plus one; + // nodes with no incoming links are assigned breadth zero, while + // nodes with no outgoing links are assigned the maximum breadth. + function computeNodeBreadths() { + var remainingNodes = nodes, + nextNodes, + x = 0; + + while (remainingNodes.length) { + nextNodes = []; + remainingNodes.forEach(function(node) { + node.x = x; + node.dx = nodeWidth; + node.sourceLinks.forEach(function(link) { + nextNodes.push(link.target); + }); + }); + remainingNodes = nextNodes; + ++x; + } + + // + moveSinksRight(x); + scaleNodeBreadths((size[0] - nodeWidth) / (x - 1)); + } + + function moveSourcesRight() { + nodes.forEach(function(node) { + if (!node.targetLinks.length) { + node.x = d3.min(node.sourceLinks, function(d) { return d.target.x; }) - 1; + } + }); + } + + function moveSinksRight(x) { + nodes.forEach(function(node) { + if (!node.sourceLinks.length) { + node.x = x - 1; + } + }); + } + + function scaleNodeBreadths(kx) { + nodes.forEach(function(node) { + node.x *= kx; + }); + } + + function computeNodeDepths(iterations) { + var nodesByBreadth = d3.nest() + .key(function(d) { return d.x; }) + .sortKeys(d3.ascending) + .entries(nodes) + .map(function(d) { return d.values; }); + + // + initializeNodeDepth(); + resolveCollisions(); + for (var alpha = 1; iterations > 0; --iterations) { + relaxRightToLeft(alpha *= .99); + resolveCollisions(); + relaxLeftToRight(alpha); + resolveCollisions(); + } + + function initializeNodeDepth() { + var ky = d3.min(nodesByBreadth, function(nodes) { + return (size[1] - (nodes.length - 1) * nodePadding) / d3.sum(nodes, value); + }); + + nodesByBreadth.forEach(function(nodes) { + nodes.forEach(function(node, i) { + node.y = i; + node.dy = node.value * ky; + }); + }); + + links.forEach(function(link) { + link.dy = link.value * ky; + }); + } + + function relaxLeftToRight(alpha) { + nodesByBreadth.forEach(function(nodes, breadth) { + nodes.forEach(function(node) { + if (node.targetLinks.length) { + var y = d3.sum(node.targetLinks, weightedSource) / d3.sum(node.targetLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + + function weightedSource(link) { + return center(link.source) * link.value; + } + } + + function relaxRightToLeft(alpha) { + nodesByBreadth.slice().reverse().forEach(function(nodes) { + nodes.forEach(function(node) { + if (node.sourceLinks.length) { + var y = d3.sum(node.sourceLinks, weightedTarget) / d3.sum(node.sourceLinks, value); + node.y += (y - center(node)) * alpha; + } + }); + }); + + function weightedTarget(link) { + return center(link.target) * link.value; + } + } + + function resolveCollisions() { + nodesByBreadth.forEach(function(nodes) { + var node, + dy, + y0 = 0, + n = nodes.length, + i; + + // Push any overlapping nodes down. + nodes.sort(ascendingDepth); + for (i = 0; i < n; ++i) { + node = nodes[i]; + dy = y0 - node.y; + if (dy > 0) node.y += dy; + y0 = node.y + node.dy + nodePadding; + } + + // If the bottommost node goes outside the bounds, push it back up. + dy = y0 - nodePadding - size[1]; + if (dy > 0) { + y0 = node.y -= dy; + + // Push any overlapping nodes back up. + for (i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.y + node.dy + nodePadding - y0; + if (dy > 0) node.y -= dy; + y0 = node.y; + } + } + }); + } + + function ascendingDepth(a, b) { + return a.y - b.y; + } + } + + function computeLinkDepths() { + nodes.forEach(function(node) { + node.sourceLinks.sort(ascendingTargetDepth); + node.targetLinks.sort(ascendingSourceDepth); + }); + nodes.forEach(function(node) { + var sy = 0, ty = 0; + node.sourceLinks.forEach(function(link) { + link.sy = sy; + sy += link.dy; + }); + node.targetLinks.forEach(function(link) { + link.ty = ty; + ty += link.dy; + }); + }); + + function ascendingSourceDepth(a, b) { + return a.source.y - b.source.y; + } + + function ascendingTargetDepth(a, b) { + return a.target.y - b.target.y; + } + } + + function center(node) { + return node.y + node.dy / 2; + } + + function value(link) { + return link.value; + } + + return sankey; +}; diff --git a/src/errors/static/js/yui/build/align-plugin/align-plugin-coverage.js b/src/errors/static/js/yui/build/align-plugin/align-plugin-coverage.js new file mode 100644 index 00000000..96139b73 --- /dev/null +++ b/src/errors/static/js/yui/build/align-plugin/align-plugin-coverage.js @@ -0,0 +1,295 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/align-plugin/align-plugin.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/align-plugin/align-plugin.js", + code: [] +}; +_yuitest_coverage["build/align-plugin/align-plugin.js"].code=["YUI.add('align-plugin', function (Y, NAME) {",""," /**"," * Provides advanced positioning support for Node via a Plugin"," * for centering and alignment. "," * @module align-plugin"," */",""," var OFFSET_WIDTH = 'offsetWidth',"," OFFSET_HEIGHT = 'offsetHeight',"," undefined = undefined;",""," /**"," * Node plugin which can be used to align a node with another node,"," * region, or the viewport."," *"," * @class Plugin.Align"," * @param {Object} User configuration object"," */"," function Align(config) {"," if (config.host) {"," this._host = config.host;"," }"," }"," "," Align.prototype = {"," /**"," * Aligns node with a point on another node or region."," * Possible alignment points are:"," *
"," *
tl
"," *
top left
"," *
tr
"," *
top right
"," *
bl
"," *
bottom left
"," *
br
"," *
bottom right
"," *
tc
"," *
top center
"," *
bc
"," *
bottom center
"," *
rc
"," *
right center
"," *
lc
"," *
left center
"," *
cc
"," *
center center
"," *
"," * @method to "," * @param region {String || Node || HTMLElement || Object} The node or"," * region to align with. Defaults to the viewport region."," * @param regionPoint {String} The point of the region to align with."," * @param point {String} The point of the node aligned to the region. "," * @param resize {Boolean} Whether or not the node should re-align when"," * the window is resized. Defaults to false."," */"," to: function(region, regionPoint, point, syncOnResize) {"," // cache original args for syncing"," this._syncArgs = Y.Array(arguments);",""," if (region.top === undefined) {"," region = Y.one(region).get('region');"," }",""," if (region) {"," var xy = [region.left, region.top],"," offxy = [region.width, region.height],"," points = Align.points,"," node = this._host,"," NULL = null,"," size = node.getAttrs([OFFSET_HEIGHT, OFFSET_WIDTH]),"," nodeoff = [0 - size[OFFSET_WIDTH], 0 - size[OFFSET_HEIGHT]], // reverse offsets"," regionFn0 = regionPoint ? points[regionPoint.charAt(0)]: NULL,"," regionFn1 = (regionPoint && regionPoint !== 'cc') ? points[regionPoint.charAt(1)] : NULL,"," nodeFn0 = point ? points[point.charAt(0)] : NULL,"," nodeFn1 = (point && point !== 'cc') ? points[point.charAt(1)] : NULL;",""," if (regionFn0) {"," xy = regionFn0(xy, offxy, regionPoint);"," }"," if (regionFn1) {"," xy = regionFn1(xy, offxy, regionPoint);"," }",""," if (nodeFn0) {"," xy = nodeFn0(xy, nodeoff, point);"," }"," if (nodeFn1) {"," xy = nodeFn1(xy, nodeoff, point);"," }",""," if (xy && node) {"," node.setXY(xy);"," }"," "," this._resize(syncOnResize);",""," }"," return this;"," },",""," sync: function() {"," this.to.apply(this, this._syncArgs);"," return this;"," },",""," _resize: function(add) {"," var handle = this._handle;"," if (add && !handle) {"," this._handle = Y.on('resize', this._onresize, window, this);"," } else if (!add && handle) {"," handle.detach();"," }",""," },",""," _onresize: function() {"," var self = this;"," setTimeout(function() { // for performance"," self.sync();"," });"," },"," "," /**"," * Aligns the center of a node to the center of another node or region."," * @method center "," * @param region {Node || HTMLElement || Object} optional The node or"," * region to align with. Defaults to the viewport region."," * the window is resized. If centering to viewport, this defaults"," * to true, otherwise default is false."," */"," center: function(region, resize) {"," this.to(region, 'cc', 'cc', resize); "," return this;"," },",""," /**"," * Removes the resize handler, if any. This is called automatically"," * when unplugged from the host node."," * @method destroy "," */"," destroy: function() {"," var handle = this._handle;"," if (handle) {"," handle.detach();"," }"," }"," };",""," Align.points = {"," 't': function(xy, off) {"," return xy;"," },",""," 'r': function(xy, off) {"," return [xy[0] + off[0], xy[1]];"," },",""," 'b': function(xy, off) {"," return [xy[0], xy[1] + off[1]];"," },",""," 'l': function(xy, off) {"," return xy;"," },",""," 'c': function(xy, off, point) {"," var axis = (point[0] === 't' || point[0] === 'b') ? 0 : 1,"," ret, val;",""," if (point === 'cc') {"," ret = [xy[0] + off[0] / 2, xy[1] + off[1] / 2];"," } else {"," val = xy[axis] + off[axis] / 2;"," ret = (axis) ? [xy[0], val] : [val, xy[1]];"," }",""," return ret;"," }"," };",""," Align.NAME = 'Align';"," Align.NS = 'align';",""," Align.prototype.constructor = Align;",""," Y.namespace('Plugin');"," Y.Plugin.Align = Align;","","","","}, '3.9.0', {\"requires\": [\"node-screen\", \"node-pluginhost\"]});"]; +_yuitest_coverage["build/align-plugin/align-plugin.js"].lines = {"1":0,"9":0,"20":0,"21":0,"22":0,"26":0,"60":0,"62":0,"63":0,"66":0,"67":0,"79":0,"80":0,"82":0,"83":0,"86":0,"87":0,"89":0,"90":0,"93":0,"94":0,"97":0,"100":0,"104":0,"105":0,"109":0,"110":0,"111":0,"112":0,"113":0,"119":0,"120":0,"121":0,"134":0,"135":0,"144":0,"145":0,"146":0,"151":0,"153":0,"157":0,"161":0,"165":0,"169":0,"172":0,"173":0,"175":0,"176":0,"179":0,"183":0,"184":0,"186":0,"188":0,"189":0}; +_yuitest_coverage["build/align-plugin/align-plugin.js"].functions = {"Align:20":0,"to:58":0,"sync:103":0,"_resize:108":0,"(anonymous 2):120":0,"_onresize:118":0,"center:133":0,"destroy:143":0,"\'t\':152":0,"\'r\':156":0,"\'b\':160":0,"\'l\':164":0,"\'c\':168":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/align-plugin/align-plugin.js"].coveredLines = 54; +_yuitest_coverage["build/align-plugin/align-plugin.js"].coveredFunctions = 14; +_yuitest_coverline("build/align-plugin/align-plugin.js", 1); +YUI.add('align-plugin', function (Y, NAME) { + + /** + * Provides advanced positioning support for Node via a Plugin + * for centering and alignment. + * @module align-plugin + */ + + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "(anonymous 1)", 1); +_yuitest_coverline("build/align-plugin/align-plugin.js", 9); +var OFFSET_WIDTH = 'offsetWidth', + OFFSET_HEIGHT = 'offsetHeight', + undefined = undefined; + + /** + * Node plugin which can be used to align a node with another node, + * region, or the viewport. + * + * @class Plugin.Align + * @param {Object} User configuration object + */ + _yuitest_coverline("build/align-plugin/align-plugin.js", 20); +function Align(config) { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "Align", 20); +_yuitest_coverline("build/align-plugin/align-plugin.js", 21); +if (config.host) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 22); +this._host = config.host; + } + } + + _yuitest_coverline("build/align-plugin/align-plugin.js", 26); +Align.prototype = { + /** + * Aligns node with a point on another node or region. + * Possible alignment points are: + *
+ *
tl
+ *
top left
+ *
tr
+ *
top right
+ *
bl
+ *
bottom left
+ *
br
+ *
bottom right
+ *
tc
+ *
top center
+ *
bc
+ *
bottom center
+ *
rc
+ *
right center
+ *
lc
+ *
left center
+ *
cc
+ *
center center
+ *
+ * @method to + * @param region {String || Node || HTMLElement || Object} The node or + * region to align with. Defaults to the viewport region. + * @param regionPoint {String} The point of the region to align with. + * @param point {String} The point of the node aligned to the region. + * @param resize {Boolean} Whether or not the node should re-align when + * the window is resized. Defaults to false. + */ + to: function(region, regionPoint, point, syncOnResize) { + // cache original args for syncing + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "to", 58); +_yuitest_coverline("build/align-plugin/align-plugin.js", 60); +this._syncArgs = Y.Array(arguments); + + _yuitest_coverline("build/align-plugin/align-plugin.js", 62); +if (region.top === undefined) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 63); +region = Y.one(region).get('region'); + } + + _yuitest_coverline("build/align-plugin/align-plugin.js", 66); +if (region) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 67); +var xy = [region.left, region.top], + offxy = [region.width, region.height], + points = Align.points, + node = this._host, + NULL = null, + size = node.getAttrs([OFFSET_HEIGHT, OFFSET_WIDTH]), + nodeoff = [0 - size[OFFSET_WIDTH], 0 - size[OFFSET_HEIGHT]], // reverse offsets + regionFn0 = regionPoint ? points[regionPoint.charAt(0)]: NULL, + regionFn1 = (regionPoint && regionPoint !== 'cc') ? points[regionPoint.charAt(1)] : NULL, + nodeFn0 = point ? points[point.charAt(0)] : NULL, + nodeFn1 = (point && point !== 'cc') ? points[point.charAt(1)] : NULL; + + _yuitest_coverline("build/align-plugin/align-plugin.js", 79); +if (regionFn0) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 80); +xy = regionFn0(xy, offxy, regionPoint); + } + _yuitest_coverline("build/align-plugin/align-plugin.js", 82); +if (regionFn1) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 83); +xy = regionFn1(xy, offxy, regionPoint); + } + + _yuitest_coverline("build/align-plugin/align-plugin.js", 86); +if (nodeFn0) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 87); +xy = nodeFn0(xy, nodeoff, point); + } + _yuitest_coverline("build/align-plugin/align-plugin.js", 89); +if (nodeFn1) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 90); +xy = nodeFn1(xy, nodeoff, point); + } + + _yuitest_coverline("build/align-plugin/align-plugin.js", 93); +if (xy && node) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 94); +node.setXY(xy); + } + + _yuitest_coverline("build/align-plugin/align-plugin.js", 97); +this._resize(syncOnResize); + + } + _yuitest_coverline("build/align-plugin/align-plugin.js", 100); +return this; + }, + + sync: function() { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "sync", 103); +_yuitest_coverline("build/align-plugin/align-plugin.js", 104); +this.to.apply(this, this._syncArgs); + _yuitest_coverline("build/align-plugin/align-plugin.js", 105); +return this; + }, + + _resize: function(add) { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "_resize", 108); +_yuitest_coverline("build/align-plugin/align-plugin.js", 109); +var handle = this._handle; + _yuitest_coverline("build/align-plugin/align-plugin.js", 110); +if (add && !handle) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 111); +this._handle = Y.on('resize', this._onresize, window, this); + } else {_yuitest_coverline("build/align-plugin/align-plugin.js", 112); +if (!add && handle) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 113); +handle.detach(); + }} + + }, + + _onresize: function() { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "_onresize", 118); +_yuitest_coverline("build/align-plugin/align-plugin.js", 119); +var self = this; + _yuitest_coverline("build/align-plugin/align-plugin.js", 120); +setTimeout(function() { // for performance + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "(anonymous 2)", 120); +_yuitest_coverline("build/align-plugin/align-plugin.js", 121); +self.sync(); + }); + }, + + /** + * Aligns the center of a node to the center of another node or region. + * @method center + * @param region {Node || HTMLElement || Object} optional The node or + * region to align with. Defaults to the viewport region. + * the window is resized. If centering to viewport, this defaults + * to true, otherwise default is false. + */ + center: function(region, resize) { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "center", 133); +_yuitest_coverline("build/align-plugin/align-plugin.js", 134); +this.to(region, 'cc', 'cc', resize); + _yuitest_coverline("build/align-plugin/align-plugin.js", 135); +return this; + }, + + /** + * Removes the resize handler, if any. This is called automatically + * when unplugged from the host node. + * @method destroy + */ + destroy: function() { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "destroy", 143); +_yuitest_coverline("build/align-plugin/align-plugin.js", 144); +var handle = this._handle; + _yuitest_coverline("build/align-plugin/align-plugin.js", 145); +if (handle) { + _yuitest_coverline("build/align-plugin/align-plugin.js", 146); +handle.detach(); + } + } + }; + + _yuitest_coverline("build/align-plugin/align-plugin.js", 151); +Align.points = { + 't': function(xy, off) { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "\'t\'", 152); +_yuitest_coverline("build/align-plugin/align-plugin.js", 153); +return xy; + }, + + 'r': function(xy, off) { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "\'r\'", 156); +_yuitest_coverline("build/align-plugin/align-plugin.js", 157); +return [xy[0] + off[0], xy[1]]; + }, + + 'b': function(xy, off) { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "\'b\'", 160); +_yuitest_coverline("build/align-plugin/align-plugin.js", 161); +return [xy[0], xy[1] + off[1]]; + }, + + 'l': function(xy, off) { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "\'l\'", 164); +_yuitest_coverline("build/align-plugin/align-plugin.js", 165); +return xy; + }, + + 'c': function(xy, off, point) { + _yuitest_coverfunc("build/align-plugin/align-plugin.js", "\'c\'", 168); +_yuitest_coverline("build/align-plugin/align-plugin.js", 169); +var axis = (point[0] === 't' || point[0] === 'b') ? 0 : 1, + ret, val; + + _yuitest_coverline("build/align-plugin/align-plugin.js", 172); +if (point === 'cc') { + _yuitest_coverline("build/align-plugin/align-plugin.js", 173); +ret = [xy[0] + off[0] / 2, xy[1] + off[1] / 2]; + } else { + _yuitest_coverline("build/align-plugin/align-plugin.js", 175); +val = xy[axis] + off[axis] / 2; + _yuitest_coverline("build/align-plugin/align-plugin.js", 176); +ret = (axis) ? [xy[0], val] : [val, xy[1]]; + } + + _yuitest_coverline("build/align-plugin/align-plugin.js", 179); +return ret; + } + }; + + _yuitest_coverline("build/align-plugin/align-plugin.js", 183); +Align.NAME = 'Align'; + _yuitest_coverline("build/align-plugin/align-plugin.js", 184); +Align.NS = 'align'; + + _yuitest_coverline("build/align-plugin/align-plugin.js", 186); +Align.prototype.constructor = Align; + + _yuitest_coverline("build/align-plugin/align-plugin.js", 188); +Y.namespace('Plugin'); + _yuitest_coverline("build/align-plugin/align-plugin.js", 189); +Y.Plugin.Align = Align; + + + +}, '3.9.0', {"requires": ["node-screen", "node-pluginhost"]}); diff --git a/src/errors/static/js/yui/build/align-plugin/align-plugin-debug.js b/src/errors/static/js/yui/build/align-plugin/align-plugin-debug.js new file mode 100644 index 00000000..c07c9415 --- /dev/null +++ b/src/errors/static/js/yui/build/align-plugin/align-plugin-debug.js @@ -0,0 +1,194 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('align-plugin', function (Y, NAME) { + + /** + * Provides advanced positioning support for Node via a Plugin + * for centering and alignment. + * @module align-plugin + */ + + var OFFSET_WIDTH = 'offsetWidth', + OFFSET_HEIGHT = 'offsetHeight', + undefined = undefined; + + /** + * Node plugin which can be used to align a node with another node, + * region, or the viewport. + * + * @class Plugin.Align + * @param {Object} User configuration object + */ + function Align(config) { + if (config.host) { + this._host = config.host; + } + } + + Align.prototype = { + /** + * Aligns node with a point on another node or region. + * Possible alignment points are: + *
+ *
tl
+ *
top left
+ *
tr
+ *
top right
+ *
bl
+ *
bottom left
+ *
br
+ *
bottom right
+ *
tc
+ *
top center
+ *
bc
+ *
bottom center
+ *
rc
+ *
right center
+ *
lc
+ *
left center
+ *
cc
+ *
center center
+ *
+ * @method to + * @param region {String || Node || HTMLElement || Object} The node or + * region to align with. Defaults to the viewport region. + * @param regionPoint {String} The point of the region to align with. + * @param point {String} The point of the node aligned to the region. + * @param resize {Boolean} Whether or not the node should re-align when + * the window is resized. Defaults to false. + */ + to: function(region, regionPoint, point, syncOnResize) { + // cache original args for syncing + this._syncArgs = Y.Array(arguments); + + if (region.top === undefined) { + region = Y.one(region).get('region'); + } + + if (region) { + var xy = [region.left, region.top], + offxy = [region.width, region.height], + points = Align.points, + node = this._host, + NULL = null, + size = node.getAttrs([OFFSET_HEIGHT, OFFSET_WIDTH]), + nodeoff = [0 - size[OFFSET_WIDTH], 0 - size[OFFSET_HEIGHT]], // reverse offsets + regionFn0 = regionPoint ? points[regionPoint.charAt(0)]: NULL, + regionFn1 = (regionPoint && regionPoint !== 'cc') ? points[regionPoint.charAt(1)] : NULL, + nodeFn0 = point ? points[point.charAt(0)] : NULL, + nodeFn1 = (point && point !== 'cc') ? points[point.charAt(1)] : NULL; + + if (regionFn0) { + xy = regionFn0(xy, offxy, regionPoint); + } + if (regionFn1) { + xy = regionFn1(xy, offxy, regionPoint); + } + + if (nodeFn0) { + xy = nodeFn0(xy, nodeoff, point); + } + if (nodeFn1) { + xy = nodeFn1(xy, nodeoff, point); + } + + if (xy && node) { + node.setXY(xy); + } + + this._resize(syncOnResize); + + } + return this; + }, + + sync: function() { + this.to.apply(this, this._syncArgs); + return this; + }, + + _resize: function(add) { + var handle = this._handle; + if (add && !handle) { + this._handle = Y.on('resize', this._onresize, window, this); + } else if (!add && handle) { + handle.detach(); + } + + }, + + _onresize: function() { + var self = this; + setTimeout(function() { // for performance + self.sync(); + }); + }, + + /** + * Aligns the center of a node to the center of another node or region. + * @method center + * @param region {Node || HTMLElement || Object} optional The node or + * region to align with. Defaults to the viewport region. + * the window is resized. If centering to viewport, this defaults + * to true, otherwise default is false. + */ + center: function(region, resize) { + this.to(region, 'cc', 'cc', resize); + return this; + }, + + /** + * Removes the resize handler, if any. This is called automatically + * when unplugged from the host node. + * @method destroy + */ + destroy: function() { + var handle = this._handle; + if (handle) { + handle.detach(); + } + } + }; + + Align.points = { + 't': function(xy, off) { + return xy; + }, + + 'r': function(xy, off) { + return [xy[0] + off[0], xy[1]]; + }, + + 'b': function(xy, off) { + return [xy[0], xy[1] + off[1]]; + }, + + 'l': function(xy, off) { + return xy; + }, + + 'c': function(xy, off, point) { + var axis = (point[0] === 't' || point[0] === 'b') ? 0 : 1, + ret, val; + + if (point === 'cc') { + ret = [xy[0] + off[0] / 2, xy[1] + off[1] / 2]; + } else { + val = xy[axis] + off[axis] / 2; + ret = (axis) ? [xy[0], val] : [val, xy[1]]; + } + + return ret; + } + }; + + Align.NAME = 'Align'; + Align.NS = 'align'; + + Align.prototype.constructor = Align; + + Y.namespace('Plugin'); + Y.Plugin.Align = Align; + + + +}, '3.9.0', {"requires": ["node-screen", "node-pluginhost"]}); diff --git a/src/errors/static/js/yui/build/align-plugin/align-plugin-min.js b/src/errors/static/js/yui/build/align-plugin/align-plugin-min.js new file mode 100644 index 00000000..e8501263 --- /dev/null +++ b/src/errors/static/js/yui/build/align-plugin/align-plugin-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("align-plugin",function(e,t){function s(e){e.host&&(this._host=e.host)}var n="offsetWidth",r="offsetHeight",i=i;s.prototype={to:function(t,o,u,a){this._syncArgs=e.Array(arguments),t.top===i&&(t=e.one(t).get("region"));if(t){var f=[t.left,t.top],l=[t.width,t.height],c=s.points,h=this._host,p=null,d=h.getAttrs([r,n]),v=[0-d[n],0-d[r]],m=o?c[o.charAt(0)]:p,g=o&&o!=="cc"?c[o.charAt(1)]:p,y=u?c[u.charAt(0)]:p,b=u&&u!=="cc"?c[u.charAt(1)]:p;m&&(f=m(f,l,o)),g&&(f=g(f,l,o)),y&&(f=y(f,v,u)),b&&(f=b(f,v,u)),f&&h&&h.setXY(f),this._resize(a)}return this},sync:function(){return this.to.apply(this,this._syncArgs),this},_resize:function(t){var n=this._handle;t&&!n?this._handle=e.on("resize",this._onresize,window,this):!t&&n&&n.detach()},_onresize:function(){var e=this;setTimeout(function(){e.sync()})},center:function(e,t){return this.to(e,"cc","cc",t),this},destroy:function(){var e=this._handle;e&&e.detach()}},s.points={t:function(e,t){return e},r:function(e,t){return[e[0]+t[0],e[1]]},b:function(e,t){return[e[0],e[1]+t[1]]},l:function(e,t){return e},c:function(e,t,n){var r=n[0]==="t"||n[0]==="b"?0:1,i,s;return n==="cc"?i=[e[0]+t[0]/2,e[1]+t[1]/2]:(s=e[r]+t[r]/2,i=r?[e[0],s]:[s,e[1]]),i}},s.NAME="Align",s.NS="align",s.prototype.constructor=s,e.namespace("Plugin"),e.Plugin.Align=s},"3.9.0",{requires:["node-screen","node-pluginhost"]}); diff --git a/src/errors/static/js/yui/build/align-plugin/align-plugin.js b/src/errors/static/js/yui/build/align-plugin/align-plugin.js new file mode 100644 index 00000000..c07c9415 --- /dev/null +++ b/src/errors/static/js/yui/build/align-plugin/align-plugin.js @@ -0,0 +1,194 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('align-plugin', function (Y, NAME) { + + /** + * Provides advanced positioning support for Node via a Plugin + * for centering and alignment. + * @module align-plugin + */ + + var OFFSET_WIDTH = 'offsetWidth', + OFFSET_HEIGHT = 'offsetHeight', + undefined = undefined; + + /** + * Node plugin which can be used to align a node with another node, + * region, or the viewport. + * + * @class Plugin.Align + * @param {Object} User configuration object + */ + function Align(config) { + if (config.host) { + this._host = config.host; + } + } + + Align.prototype = { + /** + * Aligns node with a point on another node or region. + * Possible alignment points are: + *
+ *
tl
+ *
top left
+ *
tr
+ *
top right
+ *
bl
+ *
bottom left
+ *
br
+ *
bottom right
+ *
tc
+ *
top center
+ *
bc
+ *
bottom center
+ *
rc
+ *
right center
+ *
lc
+ *
left center
+ *
cc
+ *
center center
+ *
+ * @method to + * @param region {String || Node || HTMLElement || Object} The node or + * region to align with. Defaults to the viewport region. + * @param regionPoint {String} The point of the region to align with. + * @param point {String} The point of the node aligned to the region. + * @param resize {Boolean} Whether or not the node should re-align when + * the window is resized. Defaults to false. + */ + to: function(region, regionPoint, point, syncOnResize) { + // cache original args for syncing + this._syncArgs = Y.Array(arguments); + + if (region.top === undefined) { + region = Y.one(region).get('region'); + } + + if (region) { + var xy = [region.left, region.top], + offxy = [region.width, region.height], + points = Align.points, + node = this._host, + NULL = null, + size = node.getAttrs([OFFSET_HEIGHT, OFFSET_WIDTH]), + nodeoff = [0 - size[OFFSET_WIDTH], 0 - size[OFFSET_HEIGHT]], // reverse offsets + regionFn0 = regionPoint ? points[regionPoint.charAt(0)]: NULL, + regionFn1 = (regionPoint && regionPoint !== 'cc') ? points[regionPoint.charAt(1)] : NULL, + nodeFn0 = point ? points[point.charAt(0)] : NULL, + nodeFn1 = (point && point !== 'cc') ? points[point.charAt(1)] : NULL; + + if (regionFn0) { + xy = regionFn0(xy, offxy, regionPoint); + } + if (regionFn1) { + xy = regionFn1(xy, offxy, regionPoint); + } + + if (nodeFn0) { + xy = nodeFn0(xy, nodeoff, point); + } + if (nodeFn1) { + xy = nodeFn1(xy, nodeoff, point); + } + + if (xy && node) { + node.setXY(xy); + } + + this._resize(syncOnResize); + + } + return this; + }, + + sync: function() { + this.to.apply(this, this._syncArgs); + return this; + }, + + _resize: function(add) { + var handle = this._handle; + if (add && !handle) { + this._handle = Y.on('resize', this._onresize, window, this); + } else if (!add && handle) { + handle.detach(); + } + + }, + + _onresize: function() { + var self = this; + setTimeout(function() { // for performance + self.sync(); + }); + }, + + /** + * Aligns the center of a node to the center of another node or region. + * @method center + * @param region {Node || HTMLElement || Object} optional The node or + * region to align with. Defaults to the viewport region. + * the window is resized. If centering to viewport, this defaults + * to true, otherwise default is false. + */ + center: function(region, resize) { + this.to(region, 'cc', 'cc', resize); + return this; + }, + + /** + * Removes the resize handler, if any. This is called automatically + * when unplugged from the host node. + * @method destroy + */ + destroy: function() { + var handle = this._handle; + if (handle) { + handle.detach(); + } + } + }; + + Align.points = { + 't': function(xy, off) { + return xy; + }, + + 'r': function(xy, off) { + return [xy[0] + off[0], xy[1]]; + }, + + 'b': function(xy, off) { + return [xy[0], xy[1] + off[1]]; + }, + + 'l': function(xy, off) { + return xy; + }, + + 'c': function(xy, off, point) { + var axis = (point[0] === 't' || point[0] === 'b') ? 0 : 1, + ret, val; + + if (point === 'cc') { + ret = [xy[0] + off[0] / 2, xy[1] + off[1] / 2]; + } else { + val = xy[axis] + off[axis] / 2; + ret = (axis) ? [xy[0], val] : [val, xy[1]]; + } + + return ret; + } + }; + + Align.NAME = 'Align'; + Align.NS = 'align'; + + Align.prototype.constructor = Align; + + Y.namespace('Plugin'); + Y.Plugin.Align = Align; + + + +}, '3.9.0', {"requires": ["node-screen", "node-pluginhost"]}); diff --git a/src/errors/static/js/yui/build/anim-base/anim-base-coverage.js b/src/errors/static/js/yui/build/anim-base/anim-base-coverage.js new file mode 100644 index 00000000..91fe007b --- /dev/null +++ b/src/errors/static/js/yui/build/anim-base/anim-base-coverage.js @@ -0,0 +1,927 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/anim-base/anim-base.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/anim-base/anim-base.js", + code: [] +}; +_yuitest_coverage["build/anim-base/anim-base.js"].code=["YUI.add('anim-base', function (Y, NAME) {","","/**","* The Animation Utility provides an API for creating advanced transitions.","* @module anim","*/","","/**","* Provides the base Anim class, for animating numeric properties.","*","* @module anim","* @submodule anim-base","*/",""," /**"," * A class for constructing animation instances."," * @class Anim"," * @for Anim"," * @constructor"," * @extends Base"," */",""," var RUNNING = 'running',"," START_TIME = 'startTime',"," ELAPSED_TIME = 'elapsedTime',"," /**"," * @for Anim"," * @event start"," * @description fires when an animation begins."," * @param {Event} ev The start event."," * @type Event.Custom"," */"," START = 'start',",""," /**"," * @event tween"," * @description fires every frame of the animation."," * @param {Event} ev The tween event."," * @type Event.Custom"," */"," TWEEN = 'tween',",""," /**"," * @event end"," * @description fires after the animation completes."," * @param {Event} ev The end event."," * @type Event.Custom"," */"," END = 'end',"," NODE = 'node',"," PAUSED = 'paused',"," REVERSE = 'reverse', // TODO: cleanup"," ITERATION_COUNT = 'iterationCount',",""," NUM = Number;",""," var _running = {},"," _timer;",""," Y.Anim = function() {"," Y.Anim.superclass.constructor.apply(this, arguments);"," Y.Anim._instances[Y.stamp(this)] = this;"," };",""," Y.Anim.NAME = 'anim';",""," Y.Anim._instances = {};",""," /**"," * Regex of properties that should use the default unit."," *"," * @property RE_DEFAULT_UNIT"," * @static"," */"," Y.Anim.RE_DEFAULT_UNIT = /^width|height|top|right|bottom|left|margin.*|padding.*|border.*$/i;",""," /**"," * The default unit to use with properties that pass the RE_DEFAULT_UNIT test."," *"," * @property DEFAULT_UNIT"," * @static"," */"," Y.Anim.DEFAULT_UNIT = 'px';",""," Y.Anim.DEFAULT_EASING = function (t, b, c, d) {"," return c * t / d + b; // linear easing"," };",""," /**"," * Time in milliseconds passed to setInterval for frame processing"," *"," * @property intervalTime"," * @default 20"," * @static"," */"," Y.Anim._intervalTime = 20;",""," /**"," * Bucket for custom getters and setters"," *"," * @property behaviors"," * @static"," */"," Y.Anim.behaviors = {"," left: {"," get: function(anim, attr) {"," return anim._getOffset(attr);"," }"," }"," };",""," Y.Anim.behaviors.top = Y.Anim.behaviors.left;",""," /**"," * The default setter to use when setting object properties."," *"," * @property DEFAULT_SETTER"," * @static"," */"," Y.Anim.DEFAULT_SETTER = function(anim, att, from, to, elapsed, duration, fn, unit) {"," var node = anim._node,"," domNode = node._node,"," val = fn(elapsed, NUM(from), NUM(to) - NUM(from), duration);",""," if (domNode) {"," if ('style' in domNode && (att in domNode.style || att in Y.DOM.CUSTOM_STYLES)) {"," unit = unit || '';"," node.setStyle(att, val + unit);"," } else if ('attributes' in domNode && att in domNode.attributes) {"," node.setAttribute(att, val);"," } else if (att in domNode) {"," domNode[att] = val;"," }"," } else if (node.set) {"," node.set(att, val);"," } else if (att in node) {"," node[att] = val;"," }"," };",""," /**"," * The default getter to use when getting object properties."," *"," * @property DEFAULT_GETTER"," * @static"," */"," Y.Anim.DEFAULT_GETTER = function(anim, att) {"," var node = anim._node,"," domNode = node._node,"," val = '';",""," if (domNode) {"," if ('style' in domNode && (att in domNode.style || att in Y.DOM.CUSTOM_STYLES)) {"," val = node.getComputedStyle(att);"," } else if ('attributes' in domNode && att in domNode.attributes) {"," val = node.getAttribute(att);"," } else if (att in domNode) {"," val = domNode[att];"," }"," } else if (node.get) {"," val = node.get(att);"," } else if (att in node) {"," val = node[att];"," }",""," return val;"," };",""," Y.Anim.ATTRS = {"," /**"," * The object to be animated."," * @attribute node"," * @type Node"," */"," node: {"," setter: function(node) {"," if (node) {"," if (typeof node === 'string' || node.nodeType) {"," node = Y.one(node);"," }"," }",""," this._node = node;"," if (!node) {"," }"," return node;"," }"," },",""," /**"," * The length of the animation. Defaults to \"1\" (second)."," * @attribute duration"," * @type NUM"," */"," duration: {"," value: 1"," },",""," /**"," * The method that will provide values to the attribute(s) during the animation."," * Defaults to \"Easing.easeNone\"."," * @attribute easing"," * @type Function"," */"," easing: {"," value: Y.Anim.DEFAULT_EASING,",""," setter: function(val) {"," if (typeof val === 'string' && Y.Easing) {"," return Y.Easing[val];"," }"," }"," },",""," /**"," * The starting values for the animated properties."," *"," * Fields may be strings, numbers, or functions."," * If a function is used, the return value becomes the from value."," * If no from value is specified, the DEFAULT_GETTER will be used."," * Supports any unit, provided it matches the \"to\" (or default)"," * unit (e.g. `{width: '10em', color: 'rgb(0, 0, 0)', borderColor: '#ccc'}`)."," *"," * If using the default ('px' for length-based units), the unit may be omitted"," * (e.g. `{width: 100}, borderColor: 'ccc'}`, which defaults to pixels"," * and hex, respectively)."," *"," * @attribute from"," * @type Object"," */"," from: {},",""," /**"," * The ending values for the animated properties."," *"," * Fields may be strings, numbers, or functions."," * Supports any unit, provided it matches the \"from\" (or default)"," * unit (e.g. `{width: '50%', color: 'red', borderColor: '#ccc'}`)."," *"," * If using the default ('px' for length-based units), the unit may be omitted"," * (e.g. `{width: 100, borderColor: 'ccc'}`, which defaults to pixels"," * and hex, respectively)."," *"," * @attribute to"," * @type Object"," */"," to: {},",""," /**"," * Date stamp for the first frame of the animation."," * @attribute startTime"," * @type Int"," * @default 0"," * @readOnly"," */"," startTime: {"," value: 0,"," readOnly: true"," },",""," /**"," * Current time the animation has been running."," * @attribute elapsedTime"," * @type Int"," * @default 0"," * @readOnly"," */"," elapsedTime: {"," value: 0,"," readOnly: true"," },",""," /**"," * Whether or not the animation is currently running."," * @attribute running"," * @type Boolean"," * @default false"," * @readOnly"," */"," running: {"," getter: function() {"," return !!_running[Y.stamp(this)];"," },"," value: false,"," readOnly: true"," },",""," /**"," * The number of times the animation should run"," * @attribute iterations"," * @type Int"," * @default 1"," */"," iterations: {"," value: 1"," },",""," /**"," * The number of iterations that have occurred."," * Resets when an animation ends (reaches iteration count or stop() called)."," * @attribute iterationCount"," * @type Int"," * @default 0"," * @readOnly"," */"," iterationCount: {"," value: 0,"," readOnly: true"," },",""," /**"," * How iterations of the animation should behave."," * Possible values are \"normal\" and \"alternate\"."," * Normal will repeat the animation, alternate will reverse on every other pass."," *"," * @attribute direction"," * @type String"," * @default \"normal\""," */"," direction: {"," value: 'normal' // | alternate (fwd on odd, rev on even per spec)"," },",""," /**"," * Whether or not the animation is currently paused."," * @attribute paused"," * @type Boolean"," * @default false"," * @readOnly"," */"," paused: {"," readOnly: true,"," value: false"," },",""," /**"," * If true, animation begins from last frame"," * @attribute reverse"," * @type Boolean"," * @default false"," */"," reverse: {"," value: false"," }","",""," };",""," /**"," * Runs all animation instances."," * @method run"," * @static"," */"," Y.Anim.run = function() {"," var instances = Y.Anim._instances,"," i;"," for (i in instances) {"," if (instances[i].run) {"," instances[i].run();"," }"," }"," };",""," /**"," * Pauses all animation instances."," * @method pause"," * @static"," */"," Y.Anim.pause = function() {"," for (var i in _running) { // stop timer if nothing running"," if (_running[i].pause) {"," _running[i].pause();"," }"," }",""," Y.Anim._stopTimer();"," };",""," /**"," * Stops all animation instances."," * @method stop"," * @static"," */"," Y.Anim.stop = function() {"," for (var i in _running) { // stop timer if nothing running"," if (_running[i].stop) {"," _running[i].stop();"," }"," }"," Y.Anim._stopTimer();"," };",""," Y.Anim._startTimer = function() {"," if (!_timer) {"," _timer = setInterval(Y.Anim._runFrame, Y.Anim._intervalTime);"," }"," };",""," Y.Anim._stopTimer = function() {"," clearInterval(_timer);"," _timer = 0;"," };",""," /**"," * Called per Interval to handle each animation frame."," * @method _runFrame"," * @private"," * @static"," */"," Y.Anim._runFrame = function() {"," var done = true,"," anim;"," for (anim in _running) {"," if (_running[anim]._runFrame) {"," done = false;"," _running[anim]._runFrame();"," }"," }",""," if (done) {"," Y.Anim._stopTimer();"," }"," };",""," Y.Anim.RE_UNITS = /^(-?\\d*\\.?\\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/;",""," var proto = {"," /**"," * Starts or resumes an animation."," * @method run"," * @chainable"," */"," run: function() {"," if (this.get(PAUSED)) {"," this._resume();"," } else if (!this.get(RUNNING)) {"," this._start();"," }"," return this;"," },",""," /**"," * Pauses the animation and"," * freezes it in its current state and time."," * Calling run() will continue where it left off."," * @method pause"," * @chainable"," */"," pause: function() {"," if (this.get(RUNNING)) {"," this._pause();"," }"," return this;"," },",""," /**"," * Stops the animation and resets its time."," * @method stop"," * @param {Boolean} finish If true, the animation will move to the last frame"," * @chainable"," */"," stop: function(finish) {"," if (this.get(RUNNING) || this.get(PAUSED)) {"," this._end(finish);"," }"," return this;"," },",""," _added: false,",""," _start: function() {"," this._set(START_TIME, new Date() - this.get(ELAPSED_TIME));"," this._actualFrames = 0;"," if (!this.get(PAUSED)) {"," this._initAnimAttr();"," }"," _running[Y.stamp(this)] = this;"," Y.Anim._startTimer();",""," this.fire(START);"," },",""," _pause: function() {"," this._set(START_TIME, null);"," this._set(PAUSED, true);"," delete _running[Y.stamp(this)];",""," /**"," * @event pause"," * @description fires when an animation is paused."," * @param {Event} ev The pause event."," * @type Event.Custom"," */"," this.fire('pause');"," },",""," _resume: function() {"," this._set(PAUSED, false);"," _running[Y.stamp(this)] = this;"," this._set(START_TIME, new Date() - this.get(ELAPSED_TIME));"," Y.Anim._startTimer();",""," /**"," * @event resume"," * @description fires when an animation is resumed (run from pause)."," * @param {Event} ev The pause event."," * @type Event.Custom"," */"," this.fire('resume');"," },",""," _end: function(finish) {"," var duration = this.get('duration') * 1000;"," if (finish) { // jump to last frame"," this._runAttrs(duration, duration, this.get(REVERSE));"," }",""," this._set(START_TIME, null);"," this._set(ELAPSED_TIME, 0);"," this._set(PAUSED, false);",""," delete _running[Y.stamp(this)];"," this.fire(END, {elapsed: this.get(ELAPSED_TIME)});"," },",""," _runFrame: function() {"," var d = this._runtimeAttr.duration,"," t = new Date() - this.get(START_TIME),"," reverse = this.get(REVERSE),"," done = (t >= d);",""," this._runAttrs(t, d, reverse);"," this._actualFrames += 1;"," this._set(ELAPSED_TIME, t);",""," this.fire(TWEEN);"," if (done) {"," this._lastFrame();"," }"," },",""," _runAttrs: function(t, d, reverse) {"," var attr = this._runtimeAttr,"," customAttr = Y.Anim.behaviors,"," easing = attr.easing,"," lastFrame = d,"," done = false,"," attribute,"," setter,"," i;",""," if (t >= d) {"," done = true;"," }",""," if (reverse) {"," t = d - t;"," lastFrame = 0;"," }",""," for (i in attr) {"," if (attr[i].to) {"," attribute = attr[i];"," setter = (i in customAttr && 'set' in customAttr[i]) ?"," customAttr[i].set : Y.Anim.DEFAULT_SETTER;",""," if (!done) {"," setter(this, i, attribute.from, attribute.to, t, d, easing, attribute.unit);"," } else {"," setter(this, i, attribute.from, attribute.to, lastFrame, d, easing, attribute.unit);"," }"," }"," }","",""," },",""," _lastFrame: function() {"," var iter = this.get('iterations'),"," iterCount = this.get(ITERATION_COUNT);",""," iterCount += 1;"," if (iter === 'infinite' || iterCount < iter) {"," if (this.get('direction') === 'alternate') {"," this.set(REVERSE, !this.get(REVERSE)); // flip it"," }"," /**"," * @event iteration"," * @description fires when an animation begins an iteration."," * @param {Event} ev The iteration event."," * @type Event.Custom"," */"," this.fire('iteration');"," } else {"," iterCount = 0;"," this._end();"," }",""," this._set(START_TIME, new Date());"," this._set(ITERATION_COUNT, iterCount);"," },",""," _initAnimAttr: function() {"," var from = this.get('from') || {},"," to = this.get('to') || {},"," attr = {"," duration: this.get('duration') * 1000,"," easing: this.get('easing')"," },"," customAttr = Y.Anim.behaviors,"," node = this.get(NODE), // implicit attr init"," unit, begin, end;",""," Y.each(to, function(val, name) {"," if (typeof val === 'function') {"," val = val.call(this, node);"," }",""," begin = from[name];"," if (begin === undefined) {"," begin = (name in customAttr && 'get' in customAttr[name]) ?"," customAttr[name].get(this, name) : Y.Anim.DEFAULT_GETTER(this, name);"," } else if (typeof begin === 'function') {"," begin = begin.call(this, node);"," }",""," var mFrom = Y.Anim.RE_UNITS.exec(begin),"," mTo = Y.Anim.RE_UNITS.exec(val);",""," begin = mFrom ? mFrom[1] : begin;"," end = mTo ? mTo[1] : val;"," unit = mTo ? mTo[2] : mFrom ? mFrom[2] : ''; // one might be zero TODO: mixed units",""," if (!unit && Y.Anim.RE_DEFAULT_UNIT.test(name)) {"," unit = Y.Anim.DEFAULT_UNIT;"," }",""," if (!begin || !end) {"," Y.error('invalid \"from\" or \"to\" for \"' + name + '\"', 'Anim');"," return;"," }",""," attr[name] = {"," from: Y.Lang.isObject(begin) ? Y.clone(begin) : begin,"," to: end,"," unit: unit"," };",""," }, this);",""," this._runtimeAttr = attr;"," },","",""," // TODO: move to computedStyle? (browsers dont agree on default computed offsets)"," _getOffset: function(attr) {"," var node = this._node,"," val = node.getComputedStyle(attr),"," get = (attr === 'left') ? 'getX': 'getY',"," set = (attr === 'left') ? 'setX': 'setY',"," position;",""," if (val === 'auto') {"," position = node.getStyle('position');"," if (position === 'absolute' || position === 'fixed') {"," val = node[get]();"," node[set](val);"," } else {"," val = 0;"," }"," }",""," return val;"," },",""," destructor: function() {"," delete Y.Anim._instances[Y.stamp(this)];"," }"," };",""," Y.extend(Y.Anim, Y.Base, proto);","","","}, '3.9.0', {\"requires\": [\"base-base\", \"node-style\"]});"]; +_yuitest_coverage["build/anim-base/anim-base.js"].lines = {"1":0,"23":0,"57":0,"60":0,"61":0,"62":0,"65":0,"67":0,"75":0,"83":0,"85":0,"86":0,"96":0,"104":0,"107":0,"112":0,"120":0,"121":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"134":0,"135":0,"136":0,"137":0,"147":0,"148":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"160":0,"161":0,"162":0,"163":0,"166":0,"169":0,"177":0,"178":0,"179":0,"183":0,"184":0,"186":0,"209":0,"210":0,"282":0,"354":0,"355":0,"357":0,"358":0,"359":0,"369":0,"370":0,"371":0,"372":0,"376":0,"384":0,"385":0,"386":0,"387":0,"390":0,"393":0,"394":0,"395":0,"399":0,"400":0,"401":0,"410":0,"411":0,"413":0,"414":0,"415":0,"416":0,"420":0,"421":0,"425":0,"427":0,"434":0,"435":0,"436":0,"437":0,"439":0,"450":0,"451":0,"453":0,"463":0,"464":0,"466":0,"472":0,"473":0,"474":0,"475":0,"477":0,"478":0,"480":0,"484":0,"485":0,"486":0,"494":0,"498":0,"499":0,"500":0,"501":0,"509":0,"513":0,"514":0,"515":0,"518":0,"519":0,"520":0,"522":0,"523":0,"527":0,"532":0,"533":0,"534":0,"536":0,"537":0,"538":0,"543":0,"552":0,"553":0,"556":0,"557":0,"558":0,"561":0,"562":0,"563":0,"564":0,"567":0,"568":0,"570":0,"579":0,"582":0,"583":0,"584":0,"585":0,"593":0,"595":0,"596":0,"599":0,"600":0,"604":0,"614":0,"615":0,"616":0,"619":0,"620":0,"621":0,"623":0,"624":0,"627":0,"630":0,"631":0,"632":0,"634":0,"635":0,"638":0,"639":0,"640":0,"643":0,"651":0,"657":0,"663":0,"664":0,"665":0,"666":0,"667":0,"669":0,"673":0,"677":0,"681":0}; +_yuitest_coverage["build/anim-base/anim-base.js"].functions = {"Anim:60":0,"DEFAULT_EASING:85":0,"get:106":0,"DEFAULT_SETTER:120":0,"DEFAULT_GETTER:147":0,"setter:176":0,"setter:208":0,"getter:281":0,"run:354":0,"pause:369":0,"stop:384":0,"_startTimer:393":0,"_stopTimer:399":0,"_runFrame:410":0,"run:433":0,"pause:449":0,"stop:462":0,"_start:471":0,"_pause:483":0,"_resume:497":0,"_end:512":0,"_runFrame:526":0,"_runAttrs:542":0,"_lastFrame:578":0,"(anonymous 2):614":0,"_initAnimAttr:603":0,"_getOffset:656":0,"destructor:676":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/anim-base/anim-base.js"].coveredLines = 180; +_yuitest_coverage["build/anim-base/anim-base.js"].coveredFunctions = 29; +_yuitest_coverline("build/anim-base/anim-base.js", 1); +YUI.add('anim-base', function (Y, NAME) { + +/** +* The Animation Utility provides an API for creating advanced transitions. +* @module anim +*/ + +/** +* Provides the base Anim class, for animating numeric properties. +* +* @module anim +* @submodule anim-base +*/ + + /** + * A class for constructing animation instances. + * @class Anim + * @for Anim + * @constructor + * @extends Base + */ + + _yuitest_coverfunc("build/anim-base/anim-base.js", "(anonymous 1)", 1); +_yuitest_coverline("build/anim-base/anim-base.js", 23); +var RUNNING = 'running', + START_TIME = 'startTime', + ELAPSED_TIME = 'elapsedTime', + /** + * @for Anim + * @event start + * @description fires when an animation begins. + * @param {Event} ev The start event. + * @type Event.Custom + */ + START = 'start', + + /** + * @event tween + * @description fires every frame of the animation. + * @param {Event} ev The tween event. + * @type Event.Custom + */ + TWEEN = 'tween', + + /** + * @event end + * @description fires after the animation completes. + * @param {Event} ev The end event. + * @type Event.Custom + */ + END = 'end', + NODE = 'node', + PAUSED = 'paused', + REVERSE = 'reverse', // TODO: cleanup + ITERATION_COUNT = 'iterationCount', + + NUM = Number; + + _yuitest_coverline("build/anim-base/anim-base.js", 57); +var _running = {}, + _timer; + + _yuitest_coverline("build/anim-base/anim-base.js", 60); +Y.Anim = function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "Anim", 60); +_yuitest_coverline("build/anim-base/anim-base.js", 61); +Y.Anim.superclass.constructor.apply(this, arguments); + _yuitest_coverline("build/anim-base/anim-base.js", 62); +Y.Anim._instances[Y.stamp(this)] = this; + }; + + _yuitest_coverline("build/anim-base/anim-base.js", 65); +Y.Anim.NAME = 'anim'; + + _yuitest_coverline("build/anim-base/anim-base.js", 67); +Y.Anim._instances = {}; + + /** + * Regex of properties that should use the default unit. + * + * @property RE_DEFAULT_UNIT + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 75); +Y.Anim.RE_DEFAULT_UNIT = /^width|height|top|right|bottom|left|margin.*|padding.*|border.*$/i; + + /** + * The default unit to use with properties that pass the RE_DEFAULT_UNIT test. + * + * @property DEFAULT_UNIT + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 83); +Y.Anim.DEFAULT_UNIT = 'px'; + + _yuitest_coverline("build/anim-base/anim-base.js", 85); +Y.Anim.DEFAULT_EASING = function (t, b, c, d) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "DEFAULT_EASING", 85); +_yuitest_coverline("build/anim-base/anim-base.js", 86); +return c * t / d + b; // linear easing + }; + + /** + * Time in milliseconds passed to setInterval for frame processing + * + * @property intervalTime + * @default 20 + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 96); +Y.Anim._intervalTime = 20; + + /** + * Bucket for custom getters and setters + * + * @property behaviors + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 104); +Y.Anim.behaviors = { + left: { + get: function(anim, attr) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "get", 106); +_yuitest_coverline("build/anim-base/anim-base.js", 107); +return anim._getOffset(attr); + } + } + }; + + _yuitest_coverline("build/anim-base/anim-base.js", 112); +Y.Anim.behaviors.top = Y.Anim.behaviors.left; + + /** + * The default setter to use when setting object properties. + * + * @property DEFAULT_SETTER + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 120); +Y.Anim.DEFAULT_SETTER = function(anim, att, from, to, elapsed, duration, fn, unit) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "DEFAULT_SETTER", 120); +_yuitest_coverline("build/anim-base/anim-base.js", 121); +var node = anim._node, + domNode = node._node, + val = fn(elapsed, NUM(from), NUM(to) - NUM(from), duration); + + _yuitest_coverline("build/anim-base/anim-base.js", 125); +if (domNode) { + _yuitest_coverline("build/anim-base/anim-base.js", 126); +if ('style' in domNode && (att in domNode.style || att in Y.DOM.CUSTOM_STYLES)) { + _yuitest_coverline("build/anim-base/anim-base.js", 127); +unit = unit || ''; + _yuitest_coverline("build/anim-base/anim-base.js", 128); +node.setStyle(att, val + unit); + } else {_yuitest_coverline("build/anim-base/anim-base.js", 129); +if ('attributes' in domNode && att in domNode.attributes) { + _yuitest_coverline("build/anim-base/anim-base.js", 130); +node.setAttribute(att, val); + } else {_yuitest_coverline("build/anim-base/anim-base.js", 131); +if (att in domNode) { + _yuitest_coverline("build/anim-base/anim-base.js", 132); +domNode[att] = val; + }}} + } else {_yuitest_coverline("build/anim-base/anim-base.js", 134); +if (node.set) { + _yuitest_coverline("build/anim-base/anim-base.js", 135); +node.set(att, val); + } else {_yuitest_coverline("build/anim-base/anim-base.js", 136); +if (att in node) { + _yuitest_coverline("build/anim-base/anim-base.js", 137); +node[att] = val; + }}} + }; + + /** + * The default getter to use when getting object properties. + * + * @property DEFAULT_GETTER + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 147); +Y.Anim.DEFAULT_GETTER = function(anim, att) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "DEFAULT_GETTER", 147); +_yuitest_coverline("build/anim-base/anim-base.js", 148); +var node = anim._node, + domNode = node._node, + val = ''; + + _yuitest_coverline("build/anim-base/anim-base.js", 152); +if (domNode) { + _yuitest_coverline("build/anim-base/anim-base.js", 153); +if ('style' in domNode && (att in domNode.style || att in Y.DOM.CUSTOM_STYLES)) { + _yuitest_coverline("build/anim-base/anim-base.js", 154); +val = node.getComputedStyle(att); + } else {_yuitest_coverline("build/anim-base/anim-base.js", 155); +if ('attributes' in domNode && att in domNode.attributes) { + _yuitest_coverline("build/anim-base/anim-base.js", 156); +val = node.getAttribute(att); + } else {_yuitest_coverline("build/anim-base/anim-base.js", 157); +if (att in domNode) { + _yuitest_coverline("build/anim-base/anim-base.js", 158); +val = domNode[att]; + }}} + } else {_yuitest_coverline("build/anim-base/anim-base.js", 160); +if (node.get) { + _yuitest_coverline("build/anim-base/anim-base.js", 161); +val = node.get(att); + } else {_yuitest_coverline("build/anim-base/anim-base.js", 162); +if (att in node) { + _yuitest_coverline("build/anim-base/anim-base.js", 163); +val = node[att]; + }}} + + _yuitest_coverline("build/anim-base/anim-base.js", 166); +return val; + }; + + _yuitest_coverline("build/anim-base/anim-base.js", 169); +Y.Anim.ATTRS = { + /** + * The object to be animated. + * @attribute node + * @type Node + */ + node: { + setter: function(node) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "setter", 176); +_yuitest_coverline("build/anim-base/anim-base.js", 177); +if (node) { + _yuitest_coverline("build/anim-base/anim-base.js", 178); +if (typeof node === 'string' || node.nodeType) { + _yuitest_coverline("build/anim-base/anim-base.js", 179); +node = Y.one(node); + } + } + + _yuitest_coverline("build/anim-base/anim-base.js", 183); +this._node = node; + _yuitest_coverline("build/anim-base/anim-base.js", 184); +if (!node) { + } + _yuitest_coverline("build/anim-base/anim-base.js", 186); +return node; + } + }, + + /** + * The length of the animation. Defaults to "1" (second). + * @attribute duration + * @type NUM + */ + duration: { + value: 1 + }, + + /** + * The method that will provide values to the attribute(s) during the animation. + * Defaults to "Easing.easeNone". + * @attribute easing + * @type Function + */ + easing: { + value: Y.Anim.DEFAULT_EASING, + + setter: function(val) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "setter", 208); +_yuitest_coverline("build/anim-base/anim-base.js", 209); +if (typeof val === 'string' && Y.Easing) { + _yuitest_coverline("build/anim-base/anim-base.js", 210); +return Y.Easing[val]; + } + } + }, + + /** + * The starting values for the animated properties. + * + * Fields may be strings, numbers, or functions. + * If a function is used, the return value becomes the from value. + * If no from value is specified, the DEFAULT_GETTER will be used. + * Supports any unit, provided it matches the "to" (or default) + * unit (e.g. `{width: '10em', color: 'rgb(0, 0, 0)', borderColor: '#ccc'}`). + * + * If using the default ('px' for length-based units), the unit may be omitted + * (e.g. `{width: 100}, borderColor: 'ccc'}`, which defaults to pixels + * and hex, respectively). + * + * @attribute from + * @type Object + */ + from: {}, + + /** + * The ending values for the animated properties. + * + * Fields may be strings, numbers, or functions. + * Supports any unit, provided it matches the "from" (or default) + * unit (e.g. `{width: '50%', color: 'red', borderColor: '#ccc'}`). + * + * If using the default ('px' for length-based units), the unit may be omitted + * (e.g. `{width: 100, borderColor: 'ccc'}`, which defaults to pixels + * and hex, respectively). + * + * @attribute to + * @type Object + */ + to: {}, + + /** + * Date stamp for the first frame of the animation. + * @attribute startTime + * @type Int + * @default 0 + * @readOnly + */ + startTime: { + value: 0, + readOnly: true + }, + + /** + * Current time the animation has been running. + * @attribute elapsedTime + * @type Int + * @default 0 + * @readOnly + */ + elapsedTime: { + value: 0, + readOnly: true + }, + + /** + * Whether or not the animation is currently running. + * @attribute running + * @type Boolean + * @default false + * @readOnly + */ + running: { + getter: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "getter", 281); +_yuitest_coverline("build/anim-base/anim-base.js", 282); +return !!_running[Y.stamp(this)]; + }, + value: false, + readOnly: true + }, + + /** + * The number of times the animation should run + * @attribute iterations + * @type Int + * @default 1 + */ + iterations: { + value: 1 + }, + + /** + * The number of iterations that have occurred. + * Resets when an animation ends (reaches iteration count or stop() called). + * @attribute iterationCount + * @type Int + * @default 0 + * @readOnly + */ + iterationCount: { + value: 0, + readOnly: true + }, + + /** + * How iterations of the animation should behave. + * Possible values are "normal" and "alternate". + * Normal will repeat the animation, alternate will reverse on every other pass. + * + * @attribute direction + * @type String + * @default "normal" + */ + direction: { + value: 'normal' // | alternate (fwd on odd, rev on even per spec) + }, + + /** + * Whether or not the animation is currently paused. + * @attribute paused + * @type Boolean + * @default false + * @readOnly + */ + paused: { + readOnly: true, + value: false + }, + + /** + * If true, animation begins from last frame + * @attribute reverse + * @type Boolean + * @default false + */ + reverse: { + value: false + } + + + }; + + /** + * Runs all animation instances. + * @method run + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 354); +Y.Anim.run = function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "run", 354); +_yuitest_coverline("build/anim-base/anim-base.js", 355); +var instances = Y.Anim._instances, + i; + _yuitest_coverline("build/anim-base/anim-base.js", 357); +for (i in instances) { + _yuitest_coverline("build/anim-base/anim-base.js", 358); +if (instances[i].run) { + _yuitest_coverline("build/anim-base/anim-base.js", 359); +instances[i].run(); + } + } + }; + + /** + * Pauses all animation instances. + * @method pause + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 369); +Y.Anim.pause = function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "pause", 369); +_yuitest_coverline("build/anim-base/anim-base.js", 370); +for (var i in _running) { // stop timer if nothing running + _yuitest_coverline("build/anim-base/anim-base.js", 371); +if (_running[i].pause) { + _yuitest_coverline("build/anim-base/anim-base.js", 372); +_running[i].pause(); + } + } + + _yuitest_coverline("build/anim-base/anim-base.js", 376); +Y.Anim._stopTimer(); + }; + + /** + * Stops all animation instances. + * @method stop + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 384); +Y.Anim.stop = function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "stop", 384); +_yuitest_coverline("build/anim-base/anim-base.js", 385); +for (var i in _running) { // stop timer if nothing running + _yuitest_coverline("build/anim-base/anim-base.js", 386); +if (_running[i].stop) { + _yuitest_coverline("build/anim-base/anim-base.js", 387); +_running[i].stop(); + } + } + _yuitest_coverline("build/anim-base/anim-base.js", 390); +Y.Anim._stopTimer(); + }; + + _yuitest_coverline("build/anim-base/anim-base.js", 393); +Y.Anim._startTimer = function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_startTimer", 393); +_yuitest_coverline("build/anim-base/anim-base.js", 394); +if (!_timer) { + _yuitest_coverline("build/anim-base/anim-base.js", 395); +_timer = setInterval(Y.Anim._runFrame, Y.Anim._intervalTime); + } + }; + + _yuitest_coverline("build/anim-base/anim-base.js", 399); +Y.Anim._stopTimer = function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_stopTimer", 399); +_yuitest_coverline("build/anim-base/anim-base.js", 400); +clearInterval(_timer); + _yuitest_coverline("build/anim-base/anim-base.js", 401); +_timer = 0; + }; + + /** + * Called per Interval to handle each animation frame. + * @method _runFrame + * @private + * @static + */ + _yuitest_coverline("build/anim-base/anim-base.js", 410); +Y.Anim._runFrame = function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_runFrame", 410); +_yuitest_coverline("build/anim-base/anim-base.js", 411); +var done = true, + anim; + _yuitest_coverline("build/anim-base/anim-base.js", 413); +for (anim in _running) { + _yuitest_coverline("build/anim-base/anim-base.js", 414); +if (_running[anim]._runFrame) { + _yuitest_coverline("build/anim-base/anim-base.js", 415); +done = false; + _yuitest_coverline("build/anim-base/anim-base.js", 416); +_running[anim]._runFrame(); + } + } + + _yuitest_coverline("build/anim-base/anim-base.js", 420); +if (done) { + _yuitest_coverline("build/anim-base/anim-base.js", 421); +Y.Anim._stopTimer(); + } + }; + + _yuitest_coverline("build/anim-base/anim-base.js", 425); +Y.Anim.RE_UNITS = /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/; + + _yuitest_coverline("build/anim-base/anim-base.js", 427); +var proto = { + /** + * Starts or resumes an animation. + * @method run + * @chainable + */ + run: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "run", 433); +_yuitest_coverline("build/anim-base/anim-base.js", 434); +if (this.get(PAUSED)) { + _yuitest_coverline("build/anim-base/anim-base.js", 435); +this._resume(); + } else {_yuitest_coverline("build/anim-base/anim-base.js", 436); +if (!this.get(RUNNING)) { + _yuitest_coverline("build/anim-base/anim-base.js", 437); +this._start(); + }} + _yuitest_coverline("build/anim-base/anim-base.js", 439); +return this; + }, + + /** + * Pauses the animation and + * freezes it in its current state and time. + * Calling run() will continue where it left off. + * @method pause + * @chainable + */ + pause: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "pause", 449); +_yuitest_coverline("build/anim-base/anim-base.js", 450); +if (this.get(RUNNING)) { + _yuitest_coverline("build/anim-base/anim-base.js", 451); +this._pause(); + } + _yuitest_coverline("build/anim-base/anim-base.js", 453); +return this; + }, + + /** + * Stops the animation and resets its time. + * @method stop + * @param {Boolean} finish If true, the animation will move to the last frame + * @chainable + */ + stop: function(finish) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "stop", 462); +_yuitest_coverline("build/anim-base/anim-base.js", 463); +if (this.get(RUNNING) || this.get(PAUSED)) { + _yuitest_coverline("build/anim-base/anim-base.js", 464); +this._end(finish); + } + _yuitest_coverline("build/anim-base/anim-base.js", 466); +return this; + }, + + _added: false, + + _start: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_start", 471); +_yuitest_coverline("build/anim-base/anim-base.js", 472); +this._set(START_TIME, new Date() - this.get(ELAPSED_TIME)); + _yuitest_coverline("build/anim-base/anim-base.js", 473); +this._actualFrames = 0; + _yuitest_coverline("build/anim-base/anim-base.js", 474); +if (!this.get(PAUSED)) { + _yuitest_coverline("build/anim-base/anim-base.js", 475); +this._initAnimAttr(); + } + _yuitest_coverline("build/anim-base/anim-base.js", 477); +_running[Y.stamp(this)] = this; + _yuitest_coverline("build/anim-base/anim-base.js", 478); +Y.Anim._startTimer(); + + _yuitest_coverline("build/anim-base/anim-base.js", 480); +this.fire(START); + }, + + _pause: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_pause", 483); +_yuitest_coverline("build/anim-base/anim-base.js", 484); +this._set(START_TIME, null); + _yuitest_coverline("build/anim-base/anim-base.js", 485); +this._set(PAUSED, true); + _yuitest_coverline("build/anim-base/anim-base.js", 486); +delete _running[Y.stamp(this)]; + + /** + * @event pause + * @description fires when an animation is paused. + * @param {Event} ev The pause event. + * @type Event.Custom + */ + _yuitest_coverline("build/anim-base/anim-base.js", 494); +this.fire('pause'); + }, + + _resume: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_resume", 497); +_yuitest_coverline("build/anim-base/anim-base.js", 498); +this._set(PAUSED, false); + _yuitest_coverline("build/anim-base/anim-base.js", 499); +_running[Y.stamp(this)] = this; + _yuitest_coverline("build/anim-base/anim-base.js", 500); +this._set(START_TIME, new Date() - this.get(ELAPSED_TIME)); + _yuitest_coverline("build/anim-base/anim-base.js", 501); +Y.Anim._startTimer(); + + /** + * @event resume + * @description fires when an animation is resumed (run from pause). + * @param {Event} ev The pause event. + * @type Event.Custom + */ + _yuitest_coverline("build/anim-base/anim-base.js", 509); +this.fire('resume'); + }, + + _end: function(finish) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_end", 512); +_yuitest_coverline("build/anim-base/anim-base.js", 513); +var duration = this.get('duration') * 1000; + _yuitest_coverline("build/anim-base/anim-base.js", 514); +if (finish) { // jump to last frame + _yuitest_coverline("build/anim-base/anim-base.js", 515); +this._runAttrs(duration, duration, this.get(REVERSE)); + } + + _yuitest_coverline("build/anim-base/anim-base.js", 518); +this._set(START_TIME, null); + _yuitest_coverline("build/anim-base/anim-base.js", 519); +this._set(ELAPSED_TIME, 0); + _yuitest_coverline("build/anim-base/anim-base.js", 520); +this._set(PAUSED, false); + + _yuitest_coverline("build/anim-base/anim-base.js", 522); +delete _running[Y.stamp(this)]; + _yuitest_coverline("build/anim-base/anim-base.js", 523); +this.fire(END, {elapsed: this.get(ELAPSED_TIME)}); + }, + + _runFrame: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_runFrame", 526); +_yuitest_coverline("build/anim-base/anim-base.js", 527); +var d = this._runtimeAttr.duration, + t = new Date() - this.get(START_TIME), + reverse = this.get(REVERSE), + done = (t >= d); + + _yuitest_coverline("build/anim-base/anim-base.js", 532); +this._runAttrs(t, d, reverse); + _yuitest_coverline("build/anim-base/anim-base.js", 533); +this._actualFrames += 1; + _yuitest_coverline("build/anim-base/anim-base.js", 534); +this._set(ELAPSED_TIME, t); + + _yuitest_coverline("build/anim-base/anim-base.js", 536); +this.fire(TWEEN); + _yuitest_coverline("build/anim-base/anim-base.js", 537); +if (done) { + _yuitest_coverline("build/anim-base/anim-base.js", 538); +this._lastFrame(); + } + }, + + _runAttrs: function(t, d, reverse) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_runAttrs", 542); +_yuitest_coverline("build/anim-base/anim-base.js", 543); +var attr = this._runtimeAttr, + customAttr = Y.Anim.behaviors, + easing = attr.easing, + lastFrame = d, + done = false, + attribute, + setter, + i; + + _yuitest_coverline("build/anim-base/anim-base.js", 552); +if (t >= d) { + _yuitest_coverline("build/anim-base/anim-base.js", 553); +done = true; + } + + _yuitest_coverline("build/anim-base/anim-base.js", 556); +if (reverse) { + _yuitest_coverline("build/anim-base/anim-base.js", 557); +t = d - t; + _yuitest_coverline("build/anim-base/anim-base.js", 558); +lastFrame = 0; + } + + _yuitest_coverline("build/anim-base/anim-base.js", 561); +for (i in attr) { + _yuitest_coverline("build/anim-base/anim-base.js", 562); +if (attr[i].to) { + _yuitest_coverline("build/anim-base/anim-base.js", 563); +attribute = attr[i]; + _yuitest_coverline("build/anim-base/anim-base.js", 564); +setter = (i in customAttr && 'set' in customAttr[i]) ? + customAttr[i].set : Y.Anim.DEFAULT_SETTER; + + _yuitest_coverline("build/anim-base/anim-base.js", 567); +if (!done) { + _yuitest_coverline("build/anim-base/anim-base.js", 568); +setter(this, i, attribute.from, attribute.to, t, d, easing, attribute.unit); + } else { + _yuitest_coverline("build/anim-base/anim-base.js", 570); +setter(this, i, attribute.from, attribute.to, lastFrame, d, easing, attribute.unit); + } + } + } + + + }, + + _lastFrame: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_lastFrame", 578); +_yuitest_coverline("build/anim-base/anim-base.js", 579); +var iter = this.get('iterations'), + iterCount = this.get(ITERATION_COUNT); + + _yuitest_coverline("build/anim-base/anim-base.js", 582); +iterCount += 1; + _yuitest_coverline("build/anim-base/anim-base.js", 583); +if (iter === 'infinite' || iterCount < iter) { + _yuitest_coverline("build/anim-base/anim-base.js", 584); +if (this.get('direction') === 'alternate') { + _yuitest_coverline("build/anim-base/anim-base.js", 585); +this.set(REVERSE, !this.get(REVERSE)); // flip it + } + /** + * @event iteration + * @description fires when an animation begins an iteration. + * @param {Event} ev The iteration event. + * @type Event.Custom + */ + _yuitest_coverline("build/anim-base/anim-base.js", 593); +this.fire('iteration'); + } else { + _yuitest_coverline("build/anim-base/anim-base.js", 595); +iterCount = 0; + _yuitest_coverline("build/anim-base/anim-base.js", 596); +this._end(); + } + + _yuitest_coverline("build/anim-base/anim-base.js", 599); +this._set(START_TIME, new Date()); + _yuitest_coverline("build/anim-base/anim-base.js", 600); +this._set(ITERATION_COUNT, iterCount); + }, + + _initAnimAttr: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_initAnimAttr", 603); +_yuitest_coverline("build/anim-base/anim-base.js", 604); +var from = this.get('from') || {}, + to = this.get('to') || {}, + attr = { + duration: this.get('duration') * 1000, + easing: this.get('easing') + }, + customAttr = Y.Anim.behaviors, + node = this.get(NODE), // implicit attr init + unit, begin, end; + + _yuitest_coverline("build/anim-base/anim-base.js", 614); +Y.each(to, function(val, name) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "(anonymous 2)", 614); +_yuitest_coverline("build/anim-base/anim-base.js", 615); +if (typeof val === 'function') { + _yuitest_coverline("build/anim-base/anim-base.js", 616); +val = val.call(this, node); + } + + _yuitest_coverline("build/anim-base/anim-base.js", 619); +begin = from[name]; + _yuitest_coverline("build/anim-base/anim-base.js", 620); +if (begin === undefined) { + _yuitest_coverline("build/anim-base/anim-base.js", 621); +begin = (name in customAttr && 'get' in customAttr[name]) ? + customAttr[name].get(this, name) : Y.Anim.DEFAULT_GETTER(this, name); + } else {_yuitest_coverline("build/anim-base/anim-base.js", 623); +if (typeof begin === 'function') { + _yuitest_coverline("build/anim-base/anim-base.js", 624); +begin = begin.call(this, node); + }} + + _yuitest_coverline("build/anim-base/anim-base.js", 627); +var mFrom = Y.Anim.RE_UNITS.exec(begin), + mTo = Y.Anim.RE_UNITS.exec(val); + + _yuitest_coverline("build/anim-base/anim-base.js", 630); +begin = mFrom ? mFrom[1] : begin; + _yuitest_coverline("build/anim-base/anim-base.js", 631); +end = mTo ? mTo[1] : val; + _yuitest_coverline("build/anim-base/anim-base.js", 632); +unit = mTo ? mTo[2] : mFrom ? mFrom[2] : ''; // one might be zero TODO: mixed units + + _yuitest_coverline("build/anim-base/anim-base.js", 634); +if (!unit && Y.Anim.RE_DEFAULT_UNIT.test(name)) { + _yuitest_coverline("build/anim-base/anim-base.js", 635); +unit = Y.Anim.DEFAULT_UNIT; + } + + _yuitest_coverline("build/anim-base/anim-base.js", 638); +if (!begin || !end) { + _yuitest_coverline("build/anim-base/anim-base.js", 639); +Y.error('invalid "from" or "to" for "' + name + '"', 'Anim'); + _yuitest_coverline("build/anim-base/anim-base.js", 640); +return; + } + + _yuitest_coverline("build/anim-base/anim-base.js", 643); +attr[name] = { + from: Y.Lang.isObject(begin) ? Y.clone(begin) : begin, + to: end, + unit: unit + }; + + }, this); + + _yuitest_coverline("build/anim-base/anim-base.js", 651); +this._runtimeAttr = attr; + }, + + + // TODO: move to computedStyle? (browsers dont agree on default computed offsets) + _getOffset: function(attr) { + _yuitest_coverfunc("build/anim-base/anim-base.js", "_getOffset", 656); +_yuitest_coverline("build/anim-base/anim-base.js", 657); +var node = this._node, + val = node.getComputedStyle(attr), + get = (attr === 'left') ? 'getX': 'getY', + set = (attr === 'left') ? 'setX': 'setY', + position; + + _yuitest_coverline("build/anim-base/anim-base.js", 663); +if (val === 'auto') { + _yuitest_coverline("build/anim-base/anim-base.js", 664); +position = node.getStyle('position'); + _yuitest_coverline("build/anim-base/anim-base.js", 665); +if (position === 'absolute' || position === 'fixed') { + _yuitest_coverline("build/anim-base/anim-base.js", 666); +val = node[get](); + _yuitest_coverline("build/anim-base/anim-base.js", 667); +node[set](val); + } else { + _yuitest_coverline("build/anim-base/anim-base.js", 669); +val = 0; + } + } + + _yuitest_coverline("build/anim-base/anim-base.js", 673); +return val; + }, + + destructor: function() { + _yuitest_coverfunc("build/anim-base/anim-base.js", "destructor", 676); +_yuitest_coverline("build/anim-base/anim-base.js", 677); +delete Y.Anim._instances[Y.stamp(this)]; + } + }; + + _yuitest_coverline("build/anim-base/anim-base.js", 681); +Y.extend(Y.Anim, Y.Base, proto); + + +}, '3.9.0', {"requires": ["base-base", "node-style"]}); diff --git a/src/errors/static/js/yui/build/anim-base/anim-base-debug.js b/src/errors/static/js/yui/build/anim-base/anim-base-debug.js new file mode 100644 index 00000000..cc58fb82 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-base/anim-base-debug.js @@ -0,0 +1,686 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-base', function (Y, NAME) { + +/** +* The Animation Utility provides an API for creating advanced transitions. +* @module anim +*/ + +/** +* Provides the base Anim class, for animating numeric properties. +* +* @module anim +* @submodule anim-base +*/ + + /** + * A class for constructing animation instances. + * @class Anim + * @for Anim + * @constructor + * @extends Base + */ + + var RUNNING = 'running', + START_TIME = 'startTime', + ELAPSED_TIME = 'elapsedTime', + /** + * @for Anim + * @event start + * @description fires when an animation begins. + * @param {Event} ev The start event. + * @type Event.Custom + */ + START = 'start', + + /** + * @event tween + * @description fires every frame of the animation. + * @param {Event} ev The tween event. + * @type Event.Custom + */ + TWEEN = 'tween', + + /** + * @event end + * @description fires after the animation completes. + * @param {Event} ev The end event. + * @type Event.Custom + */ + END = 'end', + NODE = 'node', + PAUSED = 'paused', + REVERSE = 'reverse', // TODO: cleanup + ITERATION_COUNT = 'iterationCount', + + NUM = Number; + + var _running = {}, + _timer; + + Y.Anim = function() { + Y.Anim.superclass.constructor.apply(this, arguments); + Y.Anim._instances[Y.stamp(this)] = this; + }; + + Y.Anim.NAME = 'anim'; + + Y.Anim._instances = {}; + + /** + * Regex of properties that should use the default unit. + * + * @property RE_DEFAULT_UNIT + * @static + */ + Y.Anim.RE_DEFAULT_UNIT = /^width|height|top|right|bottom|left|margin.*|padding.*|border.*$/i; + + /** + * The default unit to use with properties that pass the RE_DEFAULT_UNIT test. + * + * @property DEFAULT_UNIT + * @static + */ + Y.Anim.DEFAULT_UNIT = 'px'; + + Y.Anim.DEFAULT_EASING = function (t, b, c, d) { + return c * t / d + b; // linear easing + }; + + /** + * Time in milliseconds passed to setInterval for frame processing + * + * @property intervalTime + * @default 20 + * @static + */ + Y.Anim._intervalTime = 20; + + /** + * Bucket for custom getters and setters + * + * @property behaviors + * @static + */ + Y.Anim.behaviors = { + left: { + get: function(anim, attr) { + return anim._getOffset(attr); + } + } + }; + + Y.Anim.behaviors.top = Y.Anim.behaviors.left; + + /** + * The default setter to use when setting object properties. + * + * @property DEFAULT_SETTER + * @static + */ + Y.Anim.DEFAULT_SETTER = function(anim, att, from, to, elapsed, duration, fn, unit) { + var node = anim._node, + domNode = node._node, + val = fn(elapsed, NUM(from), NUM(to) - NUM(from), duration); + + if (domNode) { + if ('style' in domNode && (att in domNode.style || att in Y.DOM.CUSTOM_STYLES)) { + unit = unit || ''; + node.setStyle(att, val + unit); + } else if ('attributes' in domNode && att in domNode.attributes) { + node.setAttribute(att, val); + } else if (att in domNode) { + domNode[att] = val; + } + } else if (node.set) { + node.set(att, val); + } else if (att in node) { + node[att] = val; + } + }; + + /** + * The default getter to use when getting object properties. + * + * @property DEFAULT_GETTER + * @static + */ + Y.Anim.DEFAULT_GETTER = function(anim, att) { + var node = anim._node, + domNode = node._node, + val = ''; + + if (domNode) { + if ('style' in domNode && (att in domNode.style || att in Y.DOM.CUSTOM_STYLES)) { + val = node.getComputedStyle(att); + } else if ('attributes' in domNode && att in domNode.attributes) { + val = node.getAttribute(att); + } else if (att in domNode) { + val = domNode[att]; + } + } else if (node.get) { + val = node.get(att); + } else if (att in node) { + val = node[att]; + } + + return val; + }; + + Y.Anim.ATTRS = { + /** + * The object to be animated. + * @attribute node + * @type Node + */ + node: { + setter: function(node) { + if (node) { + if (typeof node === 'string' || node.nodeType) { + node = Y.one(node); + } + } + + this._node = node; + if (!node) { + Y.log(node + ' is not a valid node', 'warn', 'Anim'); + } + return node; + } + }, + + /** + * The length of the animation. Defaults to "1" (second). + * @attribute duration + * @type NUM + */ + duration: { + value: 1 + }, + + /** + * The method that will provide values to the attribute(s) during the animation. + * Defaults to "Easing.easeNone". + * @attribute easing + * @type Function + */ + easing: { + value: Y.Anim.DEFAULT_EASING, + + setter: function(val) { + if (typeof val === 'string' && Y.Easing) { + return Y.Easing[val]; + } + } + }, + + /** + * The starting values for the animated properties. + * + * Fields may be strings, numbers, or functions. + * If a function is used, the return value becomes the from value. + * If no from value is specified, the DEFAULT_GETTER will be used. + * Supports any unit, provided it matches the "to" (or default) + * unit (e.g. `{width: '10em', color: 'rgb(0, 0, 0)', borderColor: '#ccc'}`). + * + * If using the default ('px' for length-based units), the unit may be omitted + * (e.g. `{width: 100}, borderColor: 'ccc'}`, which defaults to pixels + * and hex, respectively). + * + * @attribute from + * @type Object + */ + from: {}, + + /** + * The ending values for the animated properties. + * + * Fields may be strings, numbers, or functions. + * Supports any unit, provided it matches the "from" (or default) + * unit (e.g. `{width: '50%', color: 'red', borderColor: '#ccc'}`). + * + * If using the default ('px' for length-based units), the unit may be omitted + * (e.g. `{width: 100, borderColor: 'ccc'}`, which defaults to pixels + * and hex, respectively). + * + * @attribute to + * @type Object + */ + to: {}, + + /** + * Date stamp for the first frame of the animation. + * @attribute startTime + * @type Int + * @default 0 + * @readOnly + */ + startTime: { + value: 0, + readOnly: true + }, + + /** + * Current time the animation has been running. + * @attribute elapsedTime + * @type Int + * @default 0 + * @readOnly + */ + elapsedTime: { + value: 0, + readOnly: true + }, + + /** + * Whether or not the animation is currently running. + * @attribute running + * @type Boolean + * @default false + * @readOnly + */ + running: { + getter: function() { + return !!_running[Y.stamp(this)]; + }, + value: false, + readOnly: true + }, + + /** + * The number of times the animation should run + * @attribute iterations + * @type Int + * @default 1 + */ + iterations: { + value: 1 + }, + + /** + * The number of iterations that have occurred. + * Resets when an animation ends (reaches iteration count or stop() called). + * @attribute iterationCount + * @type Int + * @default 0 + * @readOnly + */ + iterationCount: { + value: 0, + readOnly: true + }, + + /** + * How iterations of the animation should behave. + * Possible values are "normal" and "alternate". + * Normal will repeat the animation, alternate will reverse on every other pass. + * + * @attribute direction + * @type String + * @default "normal" + */ + direction: { + value: 'normal' // | alternate (fwd on odd, rev on even per spec) + }, + + /** + * Whether or not the animation is currently paused. + * @attribute paused + * @type Boolean + * @default false + * @readOnly + */ + paused: { + readOnly: true, + value: false + }, + + /** + * If true, animation begins from last frame + * @attribute reverse + * @type Boolean + * @default false + */ + reverse: { + value: false + } + + + }; + + /** + * Runs all animation instances. + * @method run + * @static + */ + Y.Anim.run = function() { + var instances = Y.Anim._instances, + i; + for (i in instances) { + if (instances[i].run) { + instances[i].run(); + } + } + }; + + /** + * Pauses all animation instances. + * @method pause + * @static + */ + Y.Anim.pause = function() { + for (var i in _running) { // stop timer if nothing running + if (_running[i].pause) { + _running[i].pause(); + } + } + + Y.Anim._stopTimer(); + }; + + /** + * Stops all animation instances. + * @method stop + * @static + */ + Y.Anim.stop = function() { + for (var i in _running) { // stop timer if nothing running + if (_running[i].stop) { + _running[i].stop(); + } + } + Y.Anim._stopTimer(); + }; + + Y.Anim._startTimer = function() { + if (!_timer) { + _timer = setInterval(Y.Anim._runFrame, Y.Anim._intervalTime); + } + }; + + Y.Anim._stopTimer = function() { + clearInterval(_timer); + _timer = 0; + }; + + /** + * Called per Interval to handle each animation frame. + * @method _runFrame + * @private + * @static + */ + Y.Anim._runFrame = function() { + var done = true, + anim; + for (anim in _running) { + if (_running[anim]._runFrame) { + done = false; + _running[anim]._runFrame(); + } + } + + if (done) { + Y.Anim._stopTimer(); + } + }; + + Y.Anim.RE_UNITS = /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/; + + var proto = { + /** + * Starts or resumes an animation. + * @method run + * @chainable + */ + run: function() { + if (this.get(PAUSED)) { + this._resume(); + } else if (!this.get(RUNNING)) { + this._start(); + } + return this; + }, + + /** + * Pauses the animation and + * freezes it in its current state and time. + * Calling run() will continue where it left off. + * @method pause + * @chainable + */ + pause: function() { + if (this.get(RUNNING)) { + this._pause(); + } + return this; + }, + + /** + * Stops the animation and resets its time. + * @method stop + * @param {Boolean} finish If true, the animation will move to the last frame + * @chainable + */ + stop: function(finish) { + if (this.get(RUNNING) || this.get(PAUSED)) { + this._end(finish); + } + return this; + }, + + _added: false, + + _start: function() { + this._set(START_TIME, new Date() - this.get(ELAPSED_TIME)); + this._actualFrames = 0; + if (!this.get(PAUSED)) { + this._initAnimAttr(); + } + _running[Y.stamp(this)] = this; + Y.Anim._startTimer(); + + this.fire(START); + }, + + _pause: function() { + this._set(START_TIME, null); + this._set(PAUSED, true); + delete _running[Y.stamp(this)]; + + /** + * @event pause + * @description fires when an animation is paused. + * @param {Event} ev The pause event. + * @type Event.Custom + */ + this.fire('pause'); + }, + + _resume: function() { + this._set(PAUSED, false); + _running[Y.stamp(this)] = this; + this._set(START_TIME, new Date() - this.get(ELAPSED_TIME)); + Y.Anim._startTimer(); + + /** + * @event resume + * @description fires when an animation is resumed (run from pause). + * @param {Event} ev The pause event. + * @type Event.Custom + */ + this.fire('resume'); + }, + + _end: function(finish) { + var duration = this.get('duration') * 1000; + if (finish) { // jump to last frame + this._runAttrs(duration, duration, this.get(REVERSE)); + } + + this._set(START_TIME, null); + this._set(ELAPSED_TIME, 0); + this._set(PAUSED, false); + + delete _running[Y.stamp(this)]; + this.fire(END, {elapsed: this.get(ELAPSED_TIME)}); + }, + + _runFrame: function() { + var d = this._runtimeAttr.duration, + t = new Date() - this.get(START_TIME), + reverse = this.get(REVERSE), + done = (t >= d); + + this._runAttrs(t, d, reverse); + this._actualFrames += 1; + this._set(ELAPSED_TIME, t); + + this.fire(TWEEN); + if (done) { + this._lastFrame(); + } + }, + + _runAttrs: function(t, d, reverse) { + var attr = this._runtimeAttr, + customAttr = Y.Anim.behaviors, + easing = attr.easing, + lastFrame = d, + done = false, + attribute, + setter, + i; + + if (t >= d) { + done = true; + } + + if (reverse) { + t = d - t; + lastFrame = 0; + } + + for (i in attr) { + if (attr[i].to) { + attribute = attr[i]; + setter = (i in customAttr && 'set' in customAttr[i]) ? + customAttr[i].set : Y.Anim.DEFAULT_SETTER; + + if (!done) { + setter(this, i, attribute.from, attribute.to, t, d, easing, attribute.unit); + } else { + setter(this, i, attribute.from, attribute.to, lastFrame, d, easing, attribute.unit); + } + } + } + + + }, + + _lastFrame: function() { + var iter = this.get('iterations'), + iterCount = this.get(ITERATION_COUNT); + + iterCount += 1; + if (iter === 'infinite' || iterCount < iter) { + if (this.get('direction') === 'alternate') { + this.set(REVERSE, !this.get(REVERSE)); // flip it + } + /** + * @event iteration + * @description fires when an animation begins an iteration. + * @param {Event} ev The iteration event. + * @type Event.Custom + */ + this.fire('iteration'); + } else { + iterCount = 0; + this._end(); + } + + this._set(START_TIME, new Date()); + this._set(ITERATION_COUNT, iterCount); + }, + + _initAnimAttr: function() { + var from = this.get('from') || {}, + to = this.get('to') || {}, + attr = { + duration: this.get('duration') * 1000, + easing: this.get('easing') + }, + customAttr = Y.Anim.behaviors, + node = this.get(NODE), // implicit attr init + unit, begin, end; + + Y.each(to, function(val, name) { + if (typeof val === 'function') { + val = val.call(this, node); + } + + begin = from[name]; + if (begin === undefined) { + begin = (name in customAttr && 'get' in customAttr[name]) ? + customAttr[name].get(this, name) : Y.Anim.DEFAULT_GETTER(this, name); + } else if (typeof begin === 'function') { + begin = begin.call(this, node); + } + + var mFrom = Y.Anim.RE_UNITS.exec(begin), + mTo = Y.Anim.RE_UNITS.exec(val); + + begin = mFrom ? mFrom[1] : begin; + end = mTo ? mTo[1] : val; + unit = mTo ? mTo[2] : mFrom ? mFrom[2] : ''; // one might be zero TODO: mixed units + + if (!unit && Y.Anim.RE_DEFAULT_UNIT.test(name)) { + unit = Y.Anim.DEFAULT_UNIT; + } + + if (!begin || !end) { + Y.error('invalid "from" or "to" for "' + name + '"', 'Anim'); + return; + } + + attr[name] = { + from: Y.Lang.isObject(begin) ? Y.clone(begin) : begin, + to: end, + unit: unit + }; + + }, this); + + this._runtimeAttr = attr; + }, + + + // TODO: move to computedStyle? (browsers dont agree on default computed offsets) + _getOffset: function(attr) { + var node = this._node, + val = node.getComputedStyle(attr), + get = (attr === 'left') ? 'getX': 'getY', + set = (attr === 'left') ? 'setX': 'setY', + position; + + if (val === 'auto') { + position = node.getStyle('position'); + if (position === 'absolute' || position === 'fixed') { + val = node[get](); + node[set](val); + } else { + val = 0; + } + } + + return val; + }, + + destructor: function() { + delete Y.Anim._instances[Y.stamp(this)]; + } + }; + + Y.extend(Y.Anim, Y.Base, proto); + + +}, '3.9.0', {"requires": ["base-base", "node-style"]}); diff --git a/src/errors/static/js/yui/build/anim-base/anim-base-min.js b/src/errors/static/js/yui/build/anim-base/anim-base-min.js new file mode 100644 index 00000000..67365a21 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-base/anim-base-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("anim-base",function(e,t){var n="running",r="startTime",i="elapsedTime",s="start",o="tween",u="end",a="node",f="paused",l="reverse",c="iterationCount",h=Number,p={},d;e.Anim=function(){e.Anim.superclass.constructor.apply(this,arguments),e.Anim._instances[e.stamp(this)]=this},e.Anim.NAME="anim",e.Anim._instances={},e.Anim.RE_DEFAULT_UNIT=/^width|height|top|right|bottom|left|margin.*|padding.*|border.*$/i,e.Anim.DEFAULT_UNIT="px",e.Anim.DEFAULT_EASING=function(e,t,n,r){return n*e/r+t},e.Anim._intervalTime=20,e.Anim.behaviors={left:{get:function(e,t){return e._getOffset(t)}}},e.Anim.behaviors.top=e.Anim.behaviors.left,e.Anim.DEFAULT_SETTER=function(t,n,r,i,s,o,u,a){var f=t._node,l=f._node,c=u(s,h(r),h(i)-h(r),o);l?"style"in l&&(n in l.style||n in e.DOM.CUSTOM_STYLES)?(a=a||"",f.setStyle(n,c+a)):"attributes"in l&&n in l.attributes?f.setAttribute(n,c):n in l&&(l[n]=c):f.set?f.set(n,c):n in f&&(f[n]=c)},e.Anim.DEFAULT_GETTER=function(t,n){var r=t._node,i=r._node,s="";return i?"style"in i&&(n in i.style||n in e.DOM.CUSTOM_STYLES)?s=r.getComputedStyle(n):"attributes"in i&&n in i.attributes?s=r.getAttribute(n):n in i&&(s=i[n]):r.get?s=r.get(n):n in r&&(s=r[n]),s},e.Anim.ATTRS={node:{setter:function(t){return t&&(typeof t=="string"||t.nodeType)&&(t=e.one(t)),this._node=t,!t,t}},duration:{value:1},easing:{value:e.Anim.DEFAULT_EASING,setter:function(t){if(typeof t=="string"&&e.Easing)return e.Easing[t]}},from:{},to:{},startTime:{value:0,readOnly:!0},elapsedTime:{value:0,readOnly:!0},running:{getter:function(){return!!p[e.stamp(this)]},value:!1,readOnly:!0},iterations:{value:1},iterationCount:{value:0,readOnly:!0},direction:{value:"normal"},paused:{readOnly:!0,value:!1},reverse:{value:!1}},e.Anim.run=function(){var t=e.Anim._instances,n;for(n in t)t[n].run&&t[n].run()},e.Anim.pause=function(){for(var t in p)p[t].pause&&p[t].pause();e.Anim._stopTimer()},e.Anim.stop=function(){for(var t in p)p[t].stop&&p[t].stop();e.Anim._stopTimer()},e.Anim._startTimer=function(){d||(d=setInterval(e.Anim._runFrame,e.Anim._intervalTime))},e.Anim._stopTimer=function(){clearInterval(d),d=0},e.Anim._runFrame=function(){var t=!0,n;for(n in p)p[n]._runFrame&&(t=!1,p[n]._runFrame());t&&e.Anim._stopTimer()},e.Anim.RE_UNITS=/^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/;var v={run:function(){return this.get(f)?this._resume():this.get(n)||this._start(),this},pause:function(){return this.get(n)&&this._pause(),this},stop:function(e){return(this.get(n)||this.get(f))&&this._end(e),this},_added:!1,_start:function(){this._set(r,new Date-this.get(i)),this._actualFrames=0,this.get(f)||this._initAnimAttr(),p[e.stamp(this)]=this,e.Anim._startTimer(),this.fire(s)},_pause:function(){this._set(r,null),this._set(f,!0),delete p[e.stamp(this)],this.fire("pause")},_resume:function(){this._set(f,!1),p[e.stamp(this)]=this,this._set(r,new Date-this.get(i)),e.Anim._startTimer(),this.fire("resume")},_end:function(t){var n=this.get("duration")*1e3;t&&this._runAttrs(n,n,this.get(l)),this._set(r,null),this._set(i,0),this._set(f,!1),delete p[e.stamp(this)],this.fire(u,{elapsed:this.get(i)})},_runFrame:function(){var e=this._runtimeAttr.duration,t=new Date-this.get(r),n=this.get(l),s=t>=e;this._runAttrs(t,e,n),this._actualFrames+=1,this._set(i,t),this.fire(o),s&&this._lastFrame()},_runAttrs:function(t,n,r){var i=this._runtimeAttr,s=e.Anim.behaviors,o=i.easing,u=n,a=!1,f,l,c;t>=n&&(a=!0),r&&(t=n-t,u=0);for(c in i)i[c].to&&(f=i[c],l=c in s&&"set"in s[c]?s[c].set:e.Anim.DEFAULT_SETTER,a?l(this,c,f.from,f.to,u,n,o,f.unit):l(this,c,f.from,f.to,t,n,o,f.unit))},_lastFrame:function(){var e=this.get("iterations"),t=this.get(c);t+=1,e==="infinite"||t= d); + + this._runAttrs(t, d, reverse); + this._actualFrames += 1; + this._set(ELAPSED_TIME, t); + + this.fire(TWEEN); + if (done) { + this._lastFrame(); + } + }, + + _runAttrs: function(t, d, reverse) { + var attr = this._runtimeAttr, + customAttr = Y.Anim.behaviors, + easing = attr.easing, + lastFrame = d, + done = false, + attribute, + setter, + i; + + if (t >= d) { + done = true; + } + + if (reverse) { + t = d - t; + lastFrame = 0; + } + + for (i in attr) { + if (attr[i].to) { + attribute = attr[i]; + setter = (i in customAttr && 'set' in customAttr[i]) ? + customAttr[i].set : Y.Anim.DEFAULT_SETTER; + + if (!done) { + setter(this, i, attribute.from, attribute.to, t, d, easing, attribute.unit); + } else { + setter(this, i, attribute.from, attribute.to, lastFrame, d, easing, attribute.unit); + } + } + } + + + }, + + _lastFrame: function() { + var iter = this.get('iterations'), + iterCount = this.get(ITERATION_COUNT); + + iterCount += 1; + if (iter === 'infinite' || iterCount < iter) { + if (this.get('direction') === 'alternate') { + this.set(REVERSE, !this.get(REVERSE)); // flip it + } + /** + * @event iteration + * @description fires when an animation begins an iteration. + * @param {Event} ev The iteration event. + * @type Event.Custom + */ + this.fire('iteration'); + } else { + iterCount = 0; + this._end(); + } + + this._set(START_TIME, new Date()); + this._set(ITERATION_COUNT, iterCount); + }, + + _initAnimAttr: function() { + var from = this.get('from') || {}, + to = this.get('to') || {}, + attr = { + duration: this.get('duration') * 1000, + easing: this.get('easing') + }, + customAttr = Y.Anim.behaviors, + node = this.get(NODE), // implicit attr init + unit, begin, end; + + Y.each(to, function(val, name) { + if (typeof val === 'function') { + val = val.call(this, node); + } + + begin = from[name]; + if (begin === undefined) { + begin = (name in customAttr && 'get' in customAttr[name]) ? + customAttr[name].get(this, name) : Y.Anim.DEFAULT_GETTER(this, name); + } else if (typeof begin === 'function') { + begin = begin.call(this, node); + } + + var mFrom = Y.Anim.RE_UNITS.exec(begin), + mTo = Y.Anim.RE_UNITS.exec(val); + + begin = mFrom ? mFrom[1] : begin; + end = mTo ? mTo[1] : val; + unit = mTo ? mTo[2] : mFrom ? mFrom[2] : ''; // one might be zero TODO: mixed units + + if (!unit && Y.Anim.RE_DEFAULT_UNIT.test(name)) { + unit = Y.Anim.DEFAULT_UNIT; + } + + if (!begin || !end) { + Y.error('invalid "from" or "to" for "' + name + '"', 'Anim'); + return; + } + + attr[name] = { + from: Y.Lang.isObject(begin) ? Y.clone(begin) : begin, + to: end, + unit: unit + }; + + }, this); + + this._runtimeAttr = attr; + }, + + + // TODO: move to computedStyle? (browsers dont agree on default computed offsets) + _getOffset: function(attr) { + var node = this._node, + val = node.getComputedStyle(attr), + get = (attr === 'left') ? 'getX': 'getY', + set = (attr === 'left') ? 'setX': 'setY', + position; + + if (val === 'auto') { + position = node.getStyle('position'); + if (position === 'absolute' || position === 'fixed') { + val = node[get](); + node[set](val); + } else { + val = 0; + } + } + + return val; + }, + + destructor: function() { + delete Y.Anim._instances[Y.stamp(this)]; + } + }; + + Y.extend(Y.Anim, Y.Base, proto); + + +}, '3.9.0', {"requires": ["base-base", "node-style"]}); diff --git a/src/errors/static/js/yui/build/anim-color/anim-color-coverage.js b/src/errors/static/js/yui/build/anim-color/anim-color-coverage.js new file mode 100644 index 00000000..8dad0885 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-color/anim-color-coverage.js @@ -0,0 +1,107 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/anim-color/anim-color.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/anim-color/anim-color.js", + code: [] +}; +_yuitest_coverage["build/anim-color/anim-color.js"].code=["YUI.add('anim-color', function (Y, NAME) {","","/**"," * Adds support for color properties in to"," * and from attributes."," * @module anim"," * @submodule anim-color"," */","","var NUM = Number;","","Y.Anim.getUpdatedColorValue = function(fromColor, toColor, elapsed, duration, fn)","{"," fromColor = Y.Color.re_RGB.exec(Y.Color.toRGB(fromColor));"," toColor = Y.Color.re_RGB.exec(Y.Color.toRGB(toColor));",""," if (!fromColor || fromColor.length < 3 || !toColor || toColor.length < 3) {"," Y.error('invalid from or to passed to color behavior');"," }",""," return 'rgb(' + ["," Math.floor(fn(elapsed, NUM(fromColor[1]), NUM(toColor[1]) - NUM(fromColor[1]), duration)),"," Math.floor(fn(elapsed, NUM(fromColor[2]), NUM(toColor[2]) - NUM(fromColor[2]), duration)),"," Math.floor(fn(elapsed, NUM(fromColor[3]), NUM(toColor[3]) - NUM(fromColor[3]), duration))"," ].join(', ') + ')';","};","","Y.Anim.behaviors.color = {"," set: function(anim, att, from, to, elapsed, duration, fn) {"," anim._node.setStyle(att, Y.Anim.getUpdatedColorValue(from, to, elapsed, duration, fn));"," },",""," // TODO: default bgcolor const"," get: function(anim, att) {"," var val = anim._node.getComputedStyle(att);"," val = (val === 'transparent') ? 'rgb(255, 255, 255)' : val;"," return val;"," }","};","","Y.each(['backgroundColor',"," 'borderColor',"," 'borderTopColor',"," 'borderRightColor',"," 'borderBottomColor',"," 'borderLeftColor'],"," function(v) {"," Y.Anim.behaviors[v] = Y.Anim.behaviors.color;"," }",");","","","}, '3.9.0', {\"requires\": [\"anim-base\"]});"]; +_yuitest_coverage["build/anim-color/anim-color.js"].lines = {"1":0,"10":0,"12":0,"14":0,"15":0,"17":0,"18":0,"21":0,"28":0,"30":0,"35":0,"36":0,"37":0,"41":0,"48":0}; +_yuitest_coverage["build/anim-color/anim-color.js"].functions = {"getUpdatedColorValue:12":0,"set:29":0,"get:34":0,"(anonymous 2):47":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/anim-color/anim-color.js"].coveredLines = 15; +_yuitest_coverage["build/anim-color/anim-color.js"].coveredFunctions = 5; +_yuitest_coverline("build/anim-color/anim-color.js", 1); +YUI.add('anim-color', function (Y, NAME) { + +/** + * Adds support for color properties in to + * and from attributes. + * @module anim + * @submodule anim-color + */ + +_yuitest_coverfunc("build/anim-color/anim-color.js", "(anonymous 1)", 1); +_yuitest_coverline("build/anim-color/anim-color.js", 10); +var NUM = Number; + +_yuitest_coverline("build/anim-color/anim-color.js", 12); +Y.Anim.getUpdatedColorValue = function(fromColor, toColor, elapsed, duration, fn) +{ + _yuitest_coverfunc("build/anim-color/anim-color.js", "getUpdatedColorValue", 12); +_yuitest_coverline("build/anim-color/anim-color.js", 14); +fromColor = Y.Color.re_RGB.exec(Y.Color.toRGB(fromColor)); + _yuitest_coverline("build/anim-color/anim-color.js", 15); +toColor = Y.Color.re_RGB.exec(Y.Color.toRGB(toColor)); + + _yuitest_coverline("build/anim-color/anim-color.js", 17); +if (!fromColor || fromColor.length < 3 || !toColor || toColor.length < 3) { + _yuitest_coverline("build/anim-color/anim-color.js", 18); +Y.error('invalid from or to passed to color behavior'); + } + + _yuitest_coverline("build/anim-color/anim-color.js", 21); +return 'rgb(' + [ + Math.floor(fn(elapsed, NUM(fromColor[1]), NUM(toColor[1]) - NUM(fromColor[1]), duration)), + Math.floor(fn(elapsed, NUM(fromColor[2]), NUM(toColor[2]) - NUM(fromColor[2]), duration)), + Math.floor(fn(elapsed, NUM(fromColor[3]), NUM(toColor[3]) - NUM(fromColor[3]), duration)) + ].join(', ') + ')'; +}; + +_yuitest_coverline("build/anim-color/anim-color.js", 28); +Y.Anim.behaviors.color = { + set: function(anim, att, from, to, elapsed, duration, fn) { + _yuitest_coverfunc("build/anim-color/anim-color.js", "set", 29); +_yuitest_coverline("build/anim-color/anim-color.js", 30); +anim._node.setStyle(att, Y.Anim.getUpdatedColorValue(from, to, elapsed, duration, fn)); + }, + + // TODO: default bgcolor const + get: function(anim, att) { + _yuitest_coverfunc("build/anim-color/anim-color.js", "get", 34); +_yuitest_coverline("build/anim-color/anim-color.js", 35); +var val = anim._node.getComputedStyle(att); + _yuitest_coverline("build/anim-color/anim-color.js", 36); +val = (val === 'transparent') ? 'rgb(255, 255, 255)' : val; + _yuitest_coverline("build/anim-color/anim-color.js", 37); +return val; + } +}; + +_yuitest_coverline("build/anim-color/anim-color.js", 41); +Y.each(['backgroundColor', + 'borderColor', + 'borderTopColor', + 'borderRightColor', + 'borderBottomColor', + 'borderLeftColor'], + function(v) { + _yuitest_coverfunc("build/anim-color/anim-color.js", "(anonymous 2)", 47); +_yuitest_coverline("build/anim-color/anim-color.js", 48); +Y.Anim.behaviors[v] = Y.Anim.behaviors.color; + } +); + + +}, '3.9.0', {"requires": ["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-color/anim-color-debug.js b/src/errors/static/js/yui/build/anim-color/anim-color-debug.js new file mode 100644 index 00000000..d244c7d3 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-color/anim-color-debug.js @@ -0,0 +1,54 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-color', function (Y, NAME) { + +/** + * Adds support for color properties in to + * and from attributes. + * @module anim + * @submodule anim-color + */ + +var NUM = Number; + +Y.Anim.getUpdatedColorValue = function(fromColor, toColor, elapsed, duration, fn) +{ + fromColor = Y.Color.re_RGB.exec(Y.Color.toRGB(fromColor)); + toColor = Y.Color.re_RGB.exec(Y.Color.toRGB(toColor)); + + if (!fromColor || fromColor.length < 3 || !toColor || toColor.length < 3) { + Y.error('invalid from or to passed to color behavior'); + } + + return 'rgb(' + [ + Math.floor(fn(elapsed, NUM(fromColor[1]), NUM(toColor[1]) - NUM(fromColor[1]), duration)), + Math.floor(fn(elapsed, NUM(fromColor[2]), NUM(toColor[2]) - NUM(fromColor[2]), duration)), + Math.floor(fn(elapsed, NUM(fromColor[3]), NUM(toColor[3]) - NUM(fromColor[3]), duration)) + ].join(', ') + ')'; +}; + +Y.Anim.behaviors.color = { + set: function(anim, att, from, to, elapsed, duration, fn) { + anim._node.setStyle(att, Y.Anim.getUpdatedColorValue(from, to, elapsed, duration, fn)); + }, + + // TODO: default bgcolor const + get: function(anim, att) { + var val = anim._node.getComputedStyle(att); + val = (val === 'transparent') ? 'rgb(255, 255, 255)' : val; + return val; + } +}; + +Y.each(['backgroundColor', + 'borderColor', + 'borderTopColor', + 'borderRightColor', + 'borderBottomColor', + 'borderLeftColor'], + function(v) { + Y.Anim.behaviors[v] = Y.Anim.behaviors.color; + } +); + + +}, '3.9.0', {"requires": ["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-color/anim-color-min.js b/src/errors/static/js/yui/build/anim-color/anim-color-min.js new file mode 100644 index 00000000..a7be3d1b --- /dev/null +++ b/src/errors/static/js/yui/build/anim-color/anim-color-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("anim-color",function(e,t){var n=Number;e.Anim.getUpdatedColorValue=function(t,r,i,s,o){return t=e.Color.re_RGB.exec(e.Color.toRGB(t)),r=e.Color.re_RGB.exec(e.Color.toRGB(r)),(!t||t.length<3||!r||r.length<3)&&e.error("invalid from or to passed to color behavior"),"rgb("+[Math.floor(o(i,n(t[1]),n(r[1])-n(t[1]),s)),Math.floor(o(i,n(t[2]),n(r[2])-n(t[2]),s)),Math.floor(o(i,n(t[3]),n(r[3])-n(t[3]),s))].join(", ")+")"},e.Anim.behaviors.color={set:function(t,n,r,i,s,o,u){t._node.setStyle(n,e.Anim.getUpdatedColorValue(r,i,s,o,u))},get:function(e,t){var n=e._node.getComputedStyle(t);return n=n==="transparent"?"rgb(255, 255, 255)":n,n}},e.each(["backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],function(t){e.Anim.behaviors[t]=e.Anim.behaviors.color})},"3.9.0",{requires:["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-color/anim-color.js b/src/errors/static/js/yui/build/anim-color/anim-color.js new file mode 100644 index 00000000..d244c7d3 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-color/anim-color.js @@ -0,0 +1,54 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-color', function (Y, NAME) { + +/** + * Adds support for color properties in to + * and from attributes. + * @module anim + * @submodule anim-color + */ + +var NUM = Number; + +Y.Anim.getUpdatedColorValue = function(fromColor, toColor, elapsed, duration, fn) +{ + fromColor = Y.Color.re_RGB.exec(Y.Color.toRGB(fromColor)); + toColor = Y.Color.re_RGB.exec(Y.Color.toRGB(toColor)); + + if (!fromColor || fromColor.length < 3 || !toColor || toColor.length < 3) { + Y.error('invalid from or to passed to color behavior'); + } + + return 'rgb(' + [ + Math.floor(fn(elapsed, NUM(fromColor[1]), NUM(toColor[1]) - NUM(fromColor[1]), duration)), + Math.floor(fn(elapsed, NUM(fromColor[2]), NUM(toColor[2]) - NUM(fromColor[2]), duration)), + Math.floor(fn(elapsed, NUM(fromColor[3]), NUM(toColor[3]) - NUM(fromColor[3]), duration)) + ].join(', ') + ')'; +}; + +Y.Anim.behaviors.color = { + set: function(anim, att, from, to, elapsed, duration, fn) { + anim._node.setStyle(att, Y.Anim.getUpdatedColorValue(from, to, elapsed, duration, fn)); + }, + + // TODO: default bgcolor const + get: function(anim, att) { + var val = anim._node.getComputedStyle(att); + val = (val === 'transparent') ? 'rgb(255, 255, 255)' : val; + return val; + } +}; + +Y.each(['backgroundColor', + 'borderColor', + 'borderTopColor', + 'borderRightColor', + 'borderBottomColor', + 'borderLeftColor'], + function(v) { + Y.Anim.behaviors[v] = Y.Anim.behaviors.color; + } +); + + +}, '3.9.0', {"requires": ["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-curve/anim-curve-coverage.js b/src/errors/static/js/yui/build/anim-curve/anim-curve-coverage.js new file mode 100644 index 00000000..a5b95b42 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-curve/anim-curve-coverage.js @@ -0,0 +1,114 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/anim-curve/anim-curve.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/anim-curve/anim-curve.js", + code: [] +}; +_yuitest_coverage["build/anim-curve/anim-curve.js"].code=["YUI.add('anim-curve', function (Y, NAME) {","","/**"," * Adds support for the curve property for the to"," * attribute. A curve is zero or more control points and an end point."," * @module anim"," * @submodule anim-curve"," */","","Y.Anim.behaviors.curve = {"," set: function(anim, att, from, to, elapsed, duration, fn) {"," from = from.slice.call(from);"," to = to.slice.call(to);"," var t = fn(elapsed, 0, 100, duration) / 100;"," to.unshift(from);"," anim._node.setXY(Y.Anim.getBezier(to, t));"," },",""," get: function(anim) {"," return anim._node.getXY();"," }","};","","/**"," * Get the current position of the animated element based on t."," * Each point is an array of \"x\" and \"y\" values (0 = x, 1 = y)"," * At least 2 points are required (start and end)."," * First point is start. Last point is end."," * Additional control points are optional."," * @for Anim"," * @method getBezier"," * @static"," * @param {Array} points An array containing Bezier points"," * @param {Number} t A number between 0 and 1 which is the basis for determining current position"," * @return {Array} An array containing int x and y member data"," */","Y.Anim.getBezier = function(points, t) {"," var n = points.length,"," tmp = [],"," i,"," j;",""," for (i = 0; i < n; ++i){"," tmp[i] = [points[i][0], points[i][1]]; // save input"," }",""," for (j = 1; j < n; ++j) {"," for (i = 0; i < n - j; ++i) {"," tmp[i][0] = (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0];"," tmp[i][1] = (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1];"," }"," }",""," return [ tmp[0][0], tmp[0][1] ];","","};","","","}, '3.9.0', {\"requires\": [\"anim-xy\"]});"]; +_yuitest_coverage["build/anim-curve/anim-curve.js"].lines = {"1":0,"10":0,"12":0,"13":0,"14":0,"15":0,"16":0,"20":0,"37":0,"38":0,"43":0,"44":0,"47":0,"48":0,"49":0,"50":0,"54":0}; +_yuitest_coverage["build/anim-curve/anim-curve.js"].functions = {"set:11":0,"get:19":0,"getBezier:37":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/anim-curve/anim-curve.js"].coveredLines = 17; +_yuitest_coverage["build/anim-curve/anim-curve.js"].coveredFunctions = 4; +_yuitest_coverline("build/anim-curve/anim-curve.js", 1); +YUI.add('anim-curve', function (Y, NAME) { + +/** + * Adds support for the curve property for the to + * attribute. A curve is zero or more control points and an end point. + * @module anim + * @submodule anim-curve + */ + +_yuitest_coverfunc("build/anim-curve/anim-curve.js", "(anonymous 1)", 1); +_yuitest_coverline("build/anim-curve/anim-curve.js", 10); +Y.Anim.behaviors.curve = { + set: function(anim, att, from, to, elapsed, duration, fn) { + _yuitest_coverfunc("build/anim-curve/anim-curve.js", "set", 11); +_yuitest_coverline("build/anim-curve/anim-curve.js", 12); +from = from.slice.call(from); + _yuitest_coverline("build/anim-curve/anim-curve.js", 13); +to = to.slice.call(to); + _yuitest_coverline("build/anim-curve/anim-curve.js", 14); +var t = fn(elapsed, 0, 100, duration) / 100; + _yuitest_coverline("build/anim-curve/anim-curve.js", 15); +to.unshift(from); + _yuitest_coverline("build/anim-curve/anim-curve.js", 16); +anim._node.setXY(Y.Anim.getBezier(to, t)); + }, + + get: function(anim) { + _yuitest_coverfunc("build/anim-curve/anim-curve.js", "get", 19); +_yuitest_coverline("build/anim-curve/anim-curve.js", 20); +return anim._node.getXY(); + } +}; + +/** + * Get the current position of the animated element based on t. + * Each point is an array of "x" and "y" values (0 = x, 1 = y) + * At least 2 points are required (start and end). + * First point is start. Last point is end. + * Additional control points are optional. + * @for Anim + * @method getBezier + * @static + * @param {Array} points An array containing Bezier points + * @param {Number} t A number between 0 and 1 which is the basis for determining current position + * @return {Array} An array containing int x and y member data + */ +_yuitest_coverline("build/anim-curve/anim-curve.js", 37); +Y.Anim.getBezier = function(points, t) { + _yuitest_coverfunc("build/anim-curve/anim-curve.js", "getBezier", 37); +_yuitest_coverline("build/anim-curve/anim-curve.js", 38); +var n = points.length, + tmp = [], + i, + j; + + _yuitest_coverline("build/anim-curve/anim-curve.js", 43); +for (i = 0; i < n; ++i){ + _yuitest_coverline("build/anim-curve/anim-curve.js", 44); +tmp[i] = [points[i][0], points[i][1]]; // save input + } + + _yuitest_coverline("build/anim-curve/anim-curve.js", 47); +for (j = 1; j < n; ++j) { + _yuitest_coverline("build/anim-curve/anim-curve.js", 48); +for (i = 0; i < n - j; ++i) { + _yuitest_coverline("build/anim-curve/anim-curve.js", 49); +tmp[i][0] = (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0]; + _yuitest_coverline("build/anim-curve/anim-curve.js", 50); +tmp[i][1] = (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1]; + } + } + + _yuitest_coverline("build/anim-curve/anim-curve.js", 54); +return [ tmp[0][0], tmp[0][1] ]; + +}; + + +}, '3.9.0', {"requires": ["anim-xy"]}); diff --git a/src/errors/static/js/yui/build/anim-curve/anim-curve-debug.js b/src/errors/static/js/yui/build/anim-curve/anim-curve-debug.js new file mode 100644 index 00000000..0b75ee82 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-curve/anim-curve-debug.js @@ -0,0 +1,60 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-curve', function (Y, NAME) { + +/** + * Adds support for the curve property for the to + * attribute. A curve is zero or more control points and an end point. + * @module anim + * @submodule anim-curve + */ + +Y.Anim.behaviors.curve = { + set: function(anim, att, from, to, elapsed, duration, fn) { + from = from.slice.call(from); + to = to.slice.call(to); + var t = fn(elapsed, 0, 100, duration) / 100; + to.unshift(from); + anim._node.setXY(Y.Anim.getBezier(to, t)); + }, + + get: function(anim) { + return anim._node.getXY(); + } +}; + +/** + * Get the current position of the animated element based on t. + * Each point is an array of "x" and "y" values (0 = x, 1 = y) + * At least 2 points are required (start and end). + * First point is start. Last point is end. + * Additional control points are optional. + * @for Anim + * @method getBezier + * @static + * @param {Array} points An array containing Bezier points + * @param {Number} t A number between 0 and 1 which is the basis for determining current position + * @return {Array} An array containing int x and y member data + */ +Y.Anim.getBezier = function(points, t) { + var n = points.length, + tmp = [], + i, + j; + + for (i = 0; i < n; ++i){ + tmp[i] = [points[i][0], points[i][1]]; // save input + } + + for (j = 1; j < n; ++j) { + for (i = 0; i < n - j; ++i) { + tmp[i][0] = (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0]; + tmp[i][1] = (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1]; + } + } + + return [ tmp[0][0], tmp[0][1] ]; + +}; + + +}, '3.9.0', {"requires": ["anim-xy"]}); diff --git a/src/errors/static/js/yui/build/anim-curve/anim-curve-min.js b/src/errors/static/js/yui/build/anim-curve/anim-curve-min.js new file mode 100644 index 00000000..a0112ad9 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-curve/anim-curve-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("anim-curve",function(e,t){e.Anim.behaviors.curve={set:function(t,n,r,i,s,o,u){r=r.slice.call(r),i=i.slice.call(i);var a=u(s,0,100,o)/100;i.unshift(r),t._node.setXY(e.Anim.getBezier(i,a))},get:function(e){return e._node.getXY()}},e.Anim.getBezier=function(e,t){var n=e.length,r=[],i,s;for(i=0;icurve property for the to + * attribute. A curve is zero or more control points and an end point. + * @module anim + * @submodule anim-curve + */ + +Y.Anim.behaviors.curve = { + set: function(anim, att, from, to, elapsed, duration, fn) { + from = from.slice.call(from); + to = to.slice.call(to); + var t = fn(elapsed, 0, 100, duration) / 100; + to.unshift(from); + anim._node.setXY(Y.Anim.getBezier(to, t)); + }, + + get: function(anim) { + return anim._node.getXY(); + } +}; + +/** + * Get the current position of the animated element based on t. + * Each point is an array of "x" and "y" values (0 = x, 1 = y) + * At least 2 points are required (start and end). + * First point is start. Last point is end. + * Additional control points are optional. + * @for Anim + * @method getBezier + * @static + * @param {Array} points An array containing Bezier points + * @param {Number} t A number between 0 and 1 which is the basis for determining current position + * @return {Array} An array containing int x and y member data + */ +Y.Anim.getBezier = function(points, t) { + var n = points.length, + tmp = [], + i, + j; + + for (i = 0; i < n; ++i){ + tmp[i] = [points[i][0], points[i][1]]; // save input + } + + for (j = 1; j < n; ++j) { + for (i = 0; i < n - j; ++i) { + tmp[i][0] = (1 - t) * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0]; + tmp[i][1] = (1 - t) * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1]; + } + } + + return [ tmp[0][0], tmp[0][1] ]; + +}; + + +}, '3.9.0', {"requires": ["anim-xy"]}); diff --git a/src/errors/static/js/yui/build/anim-easing/anim-easing-coverage.js b/src/errors/static/js/yui/build/anim-easing/anim-easing-coverage.js new file mode 100644 index 00000000..d1143e16 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-easing/anim-easing-coverage.js @@ -0,0 +1,492 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/anim-easing/anim-easing.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/anim-easing/anim-easing.js", + code: [] +}; +_yuitest_coverage["build/anim-easing/anim-easing.js"].code=["YUI.add('anim-easing', function (Y, NAME) {","","/*","TERMS OF USE - EASING EQUATIONS","Open source under the BSD License.","Copyright 2001 Robert Penner All rights reserved.","","Redistribution and use in source and binary forms, with or without modification,","are permitted provided that the following conditions are met:",""," * Redistributions of source code must retain the above copyright notice, this"," list of conditions and the following disclaimer."," * Redistributions in binary form must reproduce the above copyright notice,"," this list of conditions and the following disclaimer in the documentation"," and/or other materials provided with the distribution."," * Neither the name of the author nor the names of contributors may be used to"," endorse or promote products derived from this software without specific prior"," written permission.","","THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND","ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED","WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.","IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,","INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,","BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,","DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY","OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE","OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED","OF THE POSSIBILITY OF SUCH DAMAGE.","*/","","/**"," * The easing module provides methods for customizing"," * how an animation behaves during each run."," * @class Easing"," * @module anim"," * @submodule anim-easing"," */","","var Easing = {",""," /**"," * Uniform speed between points."," * @for Easing"," * @method easeNone"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," easeNone: function (t, b, c, d) {"," return c*t/d + b;"," },",""," /**"," * Begins slowly and accelerates towards end. (quadratic)"," * @method easeIn"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," easeIn: function (t, b, c, d) {"," return c*(t/=d)*t + b;"," },",""," /**"," * Begins quickly and decelerates towards end. (quadratic)"," * @method easeOut"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," easeOut: function (t, b, c, d) {"," return -c *(t/=d)*(t-2) + b;"," },",""," /**"," * Begins slowly and decelerates towards end. (quadratic)"," * @method easeBoth"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," easeBoth: function (t, b, c, d) {"," if ((t /= d/2) < 1) {"," return c/2*t*t + b;"," }",""," return -c/2 * ((--t)*(t-2) - 1) + b;"," },",""," /**"," * Begins slowly and accelerates towards end. (quartic)"," * @method easeInStrong"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," easeInStrong: function (t, b, c, d) {"," return c*(t/=d)*t*t*t + b;"," },",""," /**"," * Begins quickly and decelerates towards end. (quartic)"," * @method easeOutStrong"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," easeOutStrong: function (t, b, c, d) {"," return -c * ((t=t/d-1)*t*t*t - 1) + b;"," },",""," /**"," * Begins slowly and decelerates towards end. (quartic)"," * @method easeBothStrong"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," easeBothStrong: function (t, b, c, d) {"," if ((t /= d/2) < 1) {"," return c/2*t*t*t*t + b;"," }",""," return -c/2 * ((t-=2)*t*t*t - 2) + b;"," },",""," /**"," * Snap in elastic effect."," * @method elasticIn"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @param {Number} a Amplitude (optional)"," * @param {Number} p Period (optional)"," * @return {Number} The computed value for the current animation frame"," */",""," elasticIn: function (t, b, c, d, a, p) {"," var s;"," if (t === 0) {"," return b;"," }"," if ( (t /= d) === 1 ) {"," return b+c;"," }"," if (!p) {"," p = d* 0.3;"," }",""," if (!a || a < Math.abs(c)) {"," a = c;"," s = p/4;"," }"," else {"," s = p/(2*Math.PI) * Math.asin (c/a);"," }",""," return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;"," },",""," /**"," * Snap out elastic effect."," * @method elasticOut"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @param {Number} a Amplitude (optional)"," * @param {Number} p Period (optional)"," * @return {Number} The computed value for the current animation frame"," */"," elasticOut: function (t, b, c, d, a, p) {"," var s;"," if (t === 0) {"," return b;"," }"," if ( (t /= d) === 1 ) {"," return b+c;"," }"," if (!p) {"," p=d * 0.3;"," }",""," if (!a || a < Math.abs(c)) {"," a = c;"," s = p / 4;"," }"," else {"," s = p/(2*Math.PI) * Math.asin (c/a);"," }",""," return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;"," },",""," /**"," * Snap both elastic effect."," * @method elasticBoth"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @param {Number} a Amplitude (optional)"," * @param {Number} p Period (optional)"," * @return {Number} The computed value for the current animation frame"," */"," elasticBoth: function (t, b, c, d, a, p) {"," var s;"," if (t === 0) {"," return b;"," }",""," if ( (t /= d/2) === 2 ) {"," return b+c;"," }",""," if (!p) {"," p = d*(0.3*1.5);"," }",""," if ( !a || a < Math.abs(c) ) {"," a = c;"," s = p/4;"," }"," else {"," s = p/(2*Math.PI) * Math.asin (c/a);"," }",""," if (t < 1) {"," return -0.5*(a*Math.pow(2,10*(t-=1)) *"," Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;"," }"," return a*Math.pow(2,-10*(t-=1)) *"," Math.sin( (t*d-s)*(2*Math.PI)/p )*0.5 + c + b;"," },","",""," /**"," * Backtracks slightly, then reverses direction and moves to end."," * @method backIn"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @param {Number} s Overshoot (optional)"," * @return {Number} The computed value for the current animation frame"," */"," backIn: function (t, b, c, d, s) {"," if (s === undefined) {"," s = 1.70158;"," }"," if (t === d) {"," t -= 0.001;"," }"," return c*(t/=d)*t*((s+1)*t - s) + b;"," },",""," /**"," * Overshoots end, then reverses and comes back to end."," * @method backOut"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @param {Number} s Overshoot (optional)"," * @return {Number} The computed value for the current animation frame"," */"," backOut: function (t, b, c, d, s) {"," if (typeof s === 'undefined') {"," s = 1.70158;"," }"," return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;"," },",""," /**"," * Backtracks slightly, then reverses direction, overshoots end,"," * then reverses and comes back to end."," * @method backBoth"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @param {Number} s Overshoot (optional)"," * @return {Number} The computed value for the current animation frame"," */"," backBoth: function (t, b, c, d, s) {"," if (typeof s === 'undefined') {"," s = 1.70158;"," }",""," if ((t /= d/2 ) < 1) {"," return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;"," }"," return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;"," },",""," /**"," * Bounce off of start."," * @method bounceIn"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," bounceIn: function (t, b, c, d) {"," return c - Y.Easing.bounceOut(d-t, 0, c, d) + b;"," },",""," /**"," * Bounces off end."," * @method bounceOut"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," bounceOut: function (t, b, c, d) {"," if ((t/=d) < (1/2.75)) {"," return c*(7.5625*t*t) + b;"," } else if (t < (2/2.75)) {"," return c*(7.5625*(t-=(1.5/2.75))*t + 0.75) + b;"," } else if (t < (2.5/2.75)) {"," return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b;"," }"," return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b;"," },",""," /**"," * Bounces off start and end."," * @method bounceBoth"," * @param {Number} t Time value used to compute current value"," * @param {Number} b Starting value"," * @param {Number} c Delta between start and end values"," * @param {Number} d Total length of animation"," * @return {Number} The computed value for the current animation frame"," */"," bounceBoth: function (t, b, c, d) {"," if (t < d/2) {"," return Y.Easing.bounceIn(t * 2, 0, c, d) * 0.5 + b;"," }"," return Y.Easing.bounceOut(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;"," }","};","","Y.Easing = Easing;","","","}, '3.9.0', {\"requires\": [\"anim-base\"]});"]; +_yuitest_coverage["build/anim-easing/anim-easing.js"].lines = {"1":0,"40":0,"53":0,"66":0,"79":0,"92":0,"93":0,"96":0,"109":0,"122":0,"135":0,"136":0,"139":0,"155":0,"156":0,"157":0,"159":0,"160":0,"162":0,"163":0,"166":0,"167":0,"168":0,"171":0,"174":0,"189":0,"190":0,"191":0,"193":0,"194":0,"196":0,"197":0,"200":0,"201":0,"202":0,"205":0,"208":0,"223":0,"224":0,"225":0,"228":0,"229":0,"232":0,"233":0,"236":0,"237":0,"238":0,"241":0,"244":0,"245":0,"248":0,"264":0,"265":0,"267":0,"268":0,"270":0,"284":0,"285":0,"287":0,"302":0,"303":0,"306":0,"307":0,"309":0,"322":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"342":0,"355":0,"356":0,"358":0,"362":0}; +_yuitest_coverage["build/anim-easing/anim-easing.js"].functions = {"easeNone:52":0,"easeIn:65":0,"easeOut:78":0,"easeBoth:91":0,"easeInStrong:108":0,"easeOutStrong:121":0,"easeBothStrong:134":0,"elasticIn:154":0,"elasticOut:188":0,"elasticBoth:222":0,"backIn:263":0,"backOut:283":0,"backBoth:301":0,"bounceIn:321":0,"bounceOut:334":0,"bounceBoth:354":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/anim-easing/anim-easing.js"].coveredLines = 76; +_yuitest_coverage["build/anim-easing/anim-easing.js"].coveredFunctions = 17; +_yuitest_coverline("build/anim-easing/anim-easing.js", 1); +YUI.add('anim-easing', function (Y, NAME) { + +/* +TERMS OF USE - EASING EQUATIONS +Open source under the BSD License. +Copyright 2001 Robert Penner All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** + * The easing module provides methods for customizing + * how an animation behaves during each run. + * @class Easing + * @module anim + * @submodule anim-easing + */ + +_yuitest_coverfunc("build/anim-easing/anim-easing.js", "(anonymous 1)", 1); +_yuitest_coverline("build/anim-easing/anim-easing.js", 40); +var Easing = { + + /** + * Uniform speed between points. + * @for Easing + * @method easeNone + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeNone: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "easeNone", 52); +_yuitest_coverline("build/anim-easing/anim-easing.js", 53); +return c*t/d + b; + }, + + /** + * Begins slowly and accelerates towards end. (quadratic) + * @method easeIn + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeIn: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "easeIn", 65); +_yuitest_coverline("build/anim-easing/anim-easing.js", 66); +return c*(t/=d)*t + b; + }, + + /** + * Begins quickly and decelerates towards end. (quadratic) + * @method easeOut + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeOut: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "easeOut", 78); +_yuitest_coverline("build/anim-easing/anim-easing.js", 79); +return -c *(t/=d)*(t-2) + b; + }, + + /** + * Begins slowly and decelerates towards end. (quadratic) + * @method easeBoth + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeBoth: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "easeBoth", 91); +_yuitest_coverline("build/anim-easing/anim-easing.js", 92); +if ((t /= d/2) < 1) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 93); +return c/2*t*t + b; + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 96); +return -c/2 * ((--t)*(t-2) - 1) + b; + }, + + /** + * Begins slowly and accelerates towards end. (quartic) + * @method easeInStrong + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeInStrong: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "easeInStrong", 108); +_yuitest_coverline("build/anim-easing/anim-easing.js", 109); +return c*(t/=d)*t*t*t + b; + }, + + /** + * Begins quickly and decelerates towards end. (quartic) + * @method easeOutStrong + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeOutStrong: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "easeOutStrong", 121); +_yuitest_coverline("build/anim-easing/anim-easing.js", 122); +return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + + /** + * Begins slowly and decelerates towards end. (quartic) + * @method easeBothStrong + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeBothStrong: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "easeBothStrong", 134); +_yuitest_coverline("build/anim-easing/anim-easing.js", 135); +if ((t /= d/2) < 1) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 136); +return c/2*t*t*t*t + b; + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 139); +return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + + /** + * Snap in elastic effect. + * @method elasticIn + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} a Amplitude (optional) + * @param {Number} p Period (optional) + * @return {Number} The computed value for the current animation frame + */ + + elasticIn: function (t, b, c, d, a, p) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "elasticIn", 154); +_yuitest_coverline("build/anim-easing/anim-easing.js", 155); +var s; + _yuitest_coverline("build/anim-easing/anim-easing.js", 156); +if (t === 0) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 157); +return b; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 159); +if ( (t /= d) === 1 ) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 160); +return b+c; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 162); +if (!p) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 163); +p = d* 0.3; + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 166); +if (!a || a < Math.abs(c)) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 167); +a = c; + _yuitest_coverline("build/anim-easing/anim-easing.js", 168); +s = p/4; + } + else { + _yuitest_coverline("build/anim-easing/anim-easing.js", 171); +s = p/(2*Math.PI) * Math.asin (c/a); + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 174); +return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + + /** + * Snap out elastic effect. + * @method elasticOut + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} a Amplitude (optional) + * @param {Number} p Period (optional) + * @return {Number} The computed value for the current animation frame + */ + elasticOut: function (t, b, c, d, a, p) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "elasticOut", 188); +_yuitest_coverline("build/anim-easing/anim-easing.js", 189); +var s; + _yuitest_coverline("build/anim-easing/anim-easing.js", 190); +if (t === 0) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 191); +return b; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 193); +if ( (t /= d) === 1 ) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 194); +return b+c; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 196); +if (!p) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 197); +p=d * 0.3; + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 200); +if (!a || a < Math.abs(c)) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 201); +a = c; + _yuitest_coverline("build/anim-easing/anim-easing.js", 202); +s = p / 4; + } + else { + _yuitest_coverline("build/anim-easing/anim-easing.js", 205); +s = p/(2*Math.PI) * Math.asin (c/a); + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 208); +return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + + /** + * Snap both elastic effect. + * @method elasticBoth + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} a Amplitude (optional) + * @param {Number} p Period (optional) + * @return {Number} The computed value for the current animation frame + */ + elasticBoth: function (t, b, c, d, a, p) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "elasticBoth", 222); +_yuitest_coverline("build/anim-easing/anim-easing.js", 223); +var s; + _yuitest_coverline("build/anim-easing/anim-easing.js", 224); +if (t === 0) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 225); +return b; + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 228); +if ( (t /= d/2) === 2 ) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 229); +return b+c; + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 232); +if (!p) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 233); +p = d*(0.3*1.5); + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 236); +if ( !a || a < Math.abs(c) ) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 237); +a = c; + _yuitest_coverline("build/anim-easing/anim-easing.js", 238); +s = p/4; + } + else { + _yuitest_coverline("build/anim-easing/anim-easing.js", 241); +s = p/(2*Math.PI) * Math.asin (c/a); + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 244); +if (t < 1) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 245); +return -0.5*(a*Math.pow(2,10*(t-=1)) * + Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 248); +return a*Math.pow(2,-10*(t-=1)) * + Math.sin( (t*d-s)*(2*Math.PI)/p )*0.5 + c + b; + }, + + + /** + * Backtracks slightly, then reverses direction and moves to end. + * @method backIn + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} s Overshoot (optional) + * @return {Number} The computed value for the current animation frame + */ + backIn: function (t, b, c, d, s) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "backIn", 263); +_yuitest_coverline("build/anim-easing/anim-easing.js", 264); +if (s === undefined) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 265); +s = 1.70158; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 267); +if (t === d) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 268); +t -= 0.001; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 270); +return c*(t/=d)*t*((s+1)*t - s) + b; + }, + + /** + * Overshoots end, then reverses and comes back to end. + * @method backOut + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} s Overshoot (optional) + * @return {Number} The computed value for the current animation frame + */ + backOut: function (t, b, c, d, s) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "backOut", 283); +_yuitest_coverline("build/anim-easing/anim-easing.js", 284); +if (typeof s === 'undefined') { + _yuitest_coverline("build/anim-easing/anim-easing.js", 285); +s = 1.70158; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 287); +return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + + /** + * Backtracks slightly, then reverses direction, overshoots end, + * then reverses and comes back to end. + * @method backBoth + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} s Overshoot (optional) + * @return {Number} The computed value for the current animation frame + */ + backBoth: function (t, b, c, d, s) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "backBoth", 301); +_yuitest_coverline("build/anim-easing/anim-easing.js", 302); +if (typeof s === 'undefined') { + _yuitest_coverline("build/anim-easing/anim-easing.js", 303); +s = 1.70158; + } + + _yuitest_coverline("build/anim-easing/anim-easing.js", 306); +if ((t /= d/2 ) < 1) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 307); +return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 309); +return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + + /** + * Bounce off of start. + * @method bounceIn + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + bounceIn: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "bounceIn", 321); +_yuitest_coverline("build/anim-easing/anim-easing.js", 322); +return c - Y.Easing.bounceOut(d-t, 0, c, d) + b; + }, + + /** + * Bounces off end. + * @method bounceOut + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + bounceOut: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "bounceOut", 334); +_yuitest_coverline("build/anim-easing/anim-easing.js", 335); +if ((t/=d) < (1/2.75)) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 336); +return c*(7.5625*t*t) + b; + } else {_yuitest_coverline("build/anim-easing/anim-easing.js", 337); +if (t < (2/2.75)) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 338); +return c*(7.5625*(t-=(1.5/2.75))*t + 0.75) + b; + } else {_yuitest_coverline("build/anim-easing/anim-easing.js", 339); +if (t < (2.5/2.75)) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 340); +return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b; + }}} + _yuitest_coverline("build/anim-easing/anim-easing.js", 342); +return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b; + }, + + /** + * Bounces off start and end. + * @method bounceBoth + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + bounceBoth: function (t, b, c, d) { + _yuitest_coverfunc("build/anim-easing/anim-easing.js", "bounceBoth", 354); +_yuitest_coverline("build/anim-easing/anim-easing.js", 355); +if (t < d/2) { + _yuitest_coverline("build/anim-easing/anim-easing.js", 356); +return Y.Easing.bounceIn(t * 2, 0, c, d) * 0.5 + b; + } + _yuitest_coverline("build/anim-easing/anim-easing.js", 358); +return Y.Easing.bounceOut(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; + } +}; + +_yuitest_coverline("build/anim-easing/anim-easing.js", 362); +Y.Easing = Easing; + + +}, '3.9.0', {"requires": ["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-easing/anim-easing-debug.js b/src/errors/static/js/yui/build/anim-easing/anim-easing-debug.js new file mode 100644 index 00000000..526581c9 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-easing/anim-easing-debug.js @@ -0,0 +1,366 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-easing', function (Y, NAME) { + +/* +TERMS OF USE - EASING EQUATIONS +Open source under the BSD License. +Copyright 2001 Robert Penner All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** + * The easing module provides methods for customizing + * how an animation behaves during each run. + * @class Easing + * @module anim + * @submodule anim-easing + */ + +var Easing = { + + /** + * Uniform speed between points. + * @for Easing + * @method easeNone + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeNone: function (t, b, c, d) { + return c*t/d + b; + }, + + /** + * Begins slowly and accelerates towards end. (quadratic) + * @method easeIn + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeIn: function (t, b, c, d) { + return c*(t/=d)*t + b; + }, + + /** + * Begins quickly and decelerates towards end. (quadratic) + * @method easeOut + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeOut: function (t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + + /** + * Begins slowly and decelerates towards end. (quadratic) + * @method easeBoth + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeBoth: function (t, b, c, d) { + if ((t /= d/2) < 1) { + return c/2*t*t + b; + } + + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + + /** + * Begins slowly and accelerates towards end. (quartic) + * @method easeInStrong + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeInStrong: function (t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + + /** + * Begins quickly and decelerates towards end. (quartic) + * @method easeOutStrong + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeOutStrong: function (t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + + /** + * Begins slowly and decelerates towards end. (quartic) + * @method easeBothStrong + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + easeBothStrong: function (t, b, c, d) { + if ((t /= d/2) < 1) { + return c/2*t*t*t*t + b; + } + + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + + /** + * Snap in elastic effect. + * @method elasticIn + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} a Amplitude (optional) + * @param {Number} p Period (optional) + * @return {Number} The computed value for the current animation frame + */ + + elasticIn: function (t, b, c, d, a, p) { + var s; + if (t === 0) { + return b; + } + if ( (t /= d) === 1 ) { + return b+c; + } + if (!p) { + p = d* 0.3; + } + + if (!a || a < Math.abs(c)) { + a = c; + s = p/4; + } + else { + s = p/(2*Math.PI) * Math.asin (c/a); + } + + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + + /** + * Snap out elastic effect. + * @method elasticOut + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} a Amplitude (optional) + * @param {Number} p Period (optional) + * @return {Number} The computed value for the current animation frame + */ + elasticOut: function (t, b, c, d, a, p) { + var s; + if (t === 0) { + return b; + } + if ( (t /= d) === 1 ) { + return b+c; + } + if (!p) { + p=d * 0.3; + } + + if (!a || a < Math.abs(c)) { + a = c; + s = p / 4; + } + else { + s = p/(2*Math.PI) * Math.asin (c/a); + } + + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + + /** + * Snap both elastic effect. + * @method elasticBoth + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} a Amplitude (optional) + * @param {Number} p Period (optional) + * @return {Number} The computed value for the current animation frame + */ + elasticBoth: function (t, b, c, d, a, p) { + var s; + if (t === 0) { + return b; + } + + if ( (t /= d/2) === 2 ) { + return b+c; + } + + if (!p) { + p = d*(0.3*1.5); + } + + if ( !a || a < Math.abs(c) ) { + a = c; + s = p/4; + } + else { + s = p/(2*Math.PI) * Math.asin (c/a); + } + + if (t < 1) { + return -0.5*(a*Math.pow(2,10*(t-=1)) * + Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + } + return a*Math.pow(2,-10*(t-=1)) * + Math.sin( (t*d-s)*(2*Math.PI)/p )*0.5 + c + b; + }, + + + /** + * Backtracks slightly, then reverses direction and moves to end. + * @method backIn + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} s Overshoot (optional) + * @return {Number} The computed value for the current animation frame + */ + backIn: function (t, b, c, d, s) { + if (s === undefined) { + s = 1.70158; + } + if (t === d) { + t -= 0.001; + } + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + + /** + * Overshoots end, then reverses and comes back to end. + * @method backOut + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} s Overshoot (optional) + * @return {Number} The computed value for the current animation frame + */ + backOut: function (t, b, c, d, s) { + if (typeof s === 'undefined') { + s = 1.70158; + } + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + + /** + * Backtracks slightly, then reverses direction, overshoots end, + * then reverses and comes back to end. + * @method backBoth + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @param {Number} s Overshoot (optional) + * @return {Number} The computed value for the current animation frame + */ + backBoth: function (t, b, c, d, s) { + if (typeof s === 'undefined') { + s = 1.70158; + } + + if ((t /= d/2 ) < 1) { + return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + } + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + + /** + * Bounce off of start. + * @method bounceIn + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + bounceIn: function (t, b, c, d) { + return c - Y.Easing.bounceOut(d-t, 0, c, d) + b; + }, + + /** + * Bounces off end. + * @method bounceOut + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + bounceOut: function (t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + 0.75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b; + } + return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b; + }, + + /** + * Bounces off start and end. + * @method bounceBoth + * @param {Number} t Time value used to compute current value + * @param {Number} b Starting value + * @param {Number} c Delta between start and end values + * @param {Number} d Total length of animation + * @return {Number} The computed value for the current animation frame + */ + bounceBoth: function (t, b, c, d) { + if (t < d/2) { + return Y.Easing.bounceIn(t * 2, 0, c, d) * 0.5 + b; + } + return Y.Easing.bounceOut(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; + } +}; + +Y.Easing = Easing; + + +}, '3.9.0', {"requires": ["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-easing/anim-easing-min.js b/src/errors/static/js/yui/build/anim-easing/anim-easing-min.js new file mode 100644 index 00000000..085ac10b --- /dev/null +++ b/src/errors/static/js/yui/build/anim-easing/anim-easing-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("anim-easing",function(e,t){var n={easeNone:function(e,t,n,r){return n*e/r+t},easeIn:function(e,t,n,r){return n*(e/=r)*e+t},easeOut:function(e,t,n,r){return-n*(e/=r)*(e-2)+t},easeBoth:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t},easeInStrong:function(e,t,n,r){return n*(e/=r)*e*e*e+t},easeOutStrong:function(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t},easeBothStrong:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t},elasticIn:function(e,t,n,r,i,s){var o;return e===0?t:(e/=r)===1?t+n:(s||(s=r*.3),!i||iscroll property in to"," * and from attributes."," * @module anim"," * @submodule anim-scroll"," */","","var NUM = Number;","","//TODO: deprecate for scrollTop/Left properties?","Y.Anim.behaviors.scroll = {"," set: function(anim, att, from, to, elapsed, duration, fn) {"," var"," node = anim._node,"," val = (["," fn(elapsed, NUM(from[0]), NUM(to[0]) - NUM(from[0]), duration),"," fn(elapsed, NUM(from[1]), NUM(to[1]) - NUM(from[1]), duration)"," ]);",""," if (val[0]) {"," node.set('scrollLeft', val[0]);"," }",""," if (val[1]) {"," node.set('scrollTop', val[1]);"," }"," },"," get: function(anim) {"," var node = anim._node;"," return [node.get('scrollLeft'), node.get('scrollTop')];"," }","};","","","","}, '3.9.0', {\"requires\": [\"anim-base\"]});"]; +_yuitest_coverage["build/anim-scroll/anim-scroll.js"].lines = {"1":0,"10":0,"13":0,"15":0,"22":0,"23":0,"26":0,"27":0,"31":0,"32":0}; +_yuitest_coverage["build/anim-scroll/anim-scroll.js"].functions = {"set:14":0,"get:30":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/anim-scroll/anim-scroll.js"].coveredLines = 10; +_yuitest_coverage["build/anim-scroll/anim-scroll.js"].coveredFunctions = 3; +_yuitest_coverline("build/anim-scroll/anim-scroll.js", 1); +YUI.add('anim-scroll', function (Y, NAME) { + +/** + * Adds support for the scroll property in to + * and from attributes. + * @module anim + * @submodule anim-scroll + */ + +_yuitest_coverfunc("build/anim-scroll/anim-scroll.js", "(anonymous 1)", 1); +_yuitest_coverline("build/anim-scroll/anim-scroll.js", 10); +var NUM = Number; + +//TODO: deprecate for scrollTop/Left properties? +_yuitest_coverline("build/anim-scroll/anim-scroll.js", 13); +Y.Anim.behaviors.scroll = { + set: function(anim, att, from, to, elapsed, duration, fn) { + _yuitest_coverfunc("build/anim-scroll/anim-scroll.js", "set", 14); +_yuitest_coverline("build/anim-scroll/anim-scroll.js", 15); +var + node = anim._node, + val = ([ + fn(elapsed, NUM(from[0]), NUM(to[0]) - NUM(from[0]), duration), + fn(elapsed, NUM(from[1]), NUM(to[1]) - NUM(from[1]), duration) + ]); + + _yuitest_coverline("build/anim-scroll/anim-scroll.js", 22); +if (val[0]) { + _yuitest_coverline("build/anim-scroll/anim-scroll.js", 23); +node.set('scrollLeft', val[0]); + } + + _yuitest_coverline("build/anim-scroll/anim-scroll.js", 26); +if (val[1]) { + _yuitest_coverline("build/anim-scroll/anim-scroll.js", 27); +node.set('scrollTop', val[1]); + } + }, + get: function(anim) { + _yuitest_coverfunc("build/anim-scroll/anim-scroll.js", "get", 30); +_yuitest_coverline("build/anim-scroll/anim-scroll.js", 31); +var node = anim._node; + _yuitest_coverline("build/anim-scroll/anim-scroll.js", 32); +return [node.get('scrollLeft'), node.get('scrollTop')]; + } +}; + + + +}, '3.9.0', {"requires": ["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-scroll/anim-scroll-debug.js b/src/errors/static/js/yui/build/anim-scroll/anim-scroll-debug.js new file mode 100644 index 00000000..48b2ce3c --- /dev/null +++ b/src/errors/static/js/yui/build/anim-scroll/anim-scroll-debug.js @@ -0,0 +1,39 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-scroll', function (Y, NAME) { + +/** + * Adds support for the scroll property in to + * and from attributes. + * @module anim + * @submodule anim-scroll + */ + +var NUM = Number; + +//TODO: deprecate for scrollTop/Left properties? +Y.Anim.behaviors.scroll = { + set: function(anim, att, from, to, elapsed, duration, fn) { + var + node = anim._node, + val = ([ + fn(elapsed, NUM(from[0]), NUM(to[0]) - NUM(from[0]), duration), + fn(elapsed, NUM(from[1]), NUM(to[1]) - NUM(from[1]), duration) + ]); + + if (val[0]) { + node.set('scrollLeft', val[0]); + } + + if (val[1]) { + node.set('scrollTop', val[1]); + } + }, + get: function(anim) { + var node = anim._node; + return [node.get('scrollLeft'), node.get('scrollTop')]; + } +}; + + + +}, '3.9.0', {"requires": ["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-scroll/anim-scroll-min.js b/src/errors/static/js/yui/build/anim-scroll/anim-scroll-min.js new file mode 100644 index 00000000..90487602 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-scroll/anim-scroll-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("anim-scroll",function(e,t){var n=Number;e.Anim.behaviors.scroll={set:function(e,t,r,i,s,o,u){var a=e._node,f=[u(s,n(r[0]),n(i[0])-n(r[0]),o),u(s,n(r[1]),n(i[1])-n(r[1]),o)];f[0]&&a.set("scrollLeft",f[0]),f[1]&&a.set("scrollTop",f[1])},get:function(e){var t=e._node;return[t.get("scrollLeft"),t.get("scrollTop")]}}},"3.9.0",{requires:["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-scroll/anim-scroll.js b/src/errors/static/js/yui/build/anim-scroll/anim-scroll.js new file mode 100644 index 00000000..48b2ce3c --- /dev/null +++ b/src/errors/static/js/yui/build/anim-scroll/anim-scroll.js @@ -0,0 +1,39 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-scroll', function (Y, NAME) { + +/** + * Adds support for the scroll property in to + * and from attributes. + * @module anim + * @submodule anim-scroll + */ + +var NUM = Number; + +//TODO: deprecate for scrollTop/Left properties? +Y.Anim.behaviors.scroll = { + set: function(anim, att, from, to, elapsed, duration, fn) { + var + node = anim._node, + val = ([ + fn(elapsed, NUM(from[0]), NUM(to[0]) - NUM(from[0]), duration), + fn(elapsed, NUM(from[1]), NUM(to[1]) - NUM(from[1]), duration) + ]); + + if (val[0]) { + node.set('scrollLeft', val[0]); + } + + if (val[1]) { + node.set('scrollTop', val[1]); + } + }, + get: function(anim) { + var node = anim._node; + return [node.get('scrollLeft'), node.get('scrollTop')]; + } +}; + + + +}, '3.9.0', {"requires": ["anim-base"]}); diff --git a/src/errors/static/js/yui/build/anim-shape-transform/anim-shape-transform-coverage.js b/src/errors/static/js/yui/build/anim-shape-transform/anim-shape-transform-coverage.js new file mode 100644 index 00000000..7b812379 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-shape-transform/anim-shape-transform-coverage.js @@ -0,0 +1,187 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/anim-shape-transform/anim-shape-transform.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/anim-shape-transform/anim-shape-transform.js", + code: [] +}; +_yuitest_coverage["build/anim-shape-transform/anim-shape-transform.js"].code=["YUI.add('anim-shape-transform', function (Y, NAME) {","","/**"," * Adds support for the transform attribute of Graphic"," * Shape instances."," * @module anim"," * @submodule anim-shape-transform"," */"," var NUM = Number,"," TO,"," TOSTRING;",""," Y.Anim.behaviors.transform = {"," set: function(anim, att, from, to, elapsed, duration, fn) {"," var node = anim._node,"," transform = \"\","," transformTo,"," transformFrom,"," toArgs,"," fromArgs,"," i = 0,"," j,"," argLen,"," len;"," to = TO;"," len = TO.length;"," for(; i < len; ++i)"," {"," toArgs = to[i].concat();"," fromArgs = from[i].concat();"," transformTo = toArgs.shift();"," transformFrom = fromArgs.shift();"," argLen = toArgs.length;"," transform += transformTo + \"(\";"," for(j = 0; j < argLen; ++j)"," {"," transform += fn(elapsed, NUM(fromArgs[j]), NUM(toArgs[j]) - NUM(fromArgs[j]), duration);"," if(j < argLen - 1)"," {"," transform += \", \";"," }"," }"," transform += \");\";"," }"," if(transform)"," {"," node.set('transform', transform);"," }"," node._transform = TOSTRING;"," },"," "," get: function(anim) {"," var node = anim._node,"," fromMatrix = node.matrix,"," toAttr = anim.get(\"to\") || {},"," toString = anim.get(\"to\").transform,"," fromString = node.get(\"transform\"),"," toArray = Y.MatrixUtil.getTransformArray(toString),"," fromArray = fromString ? Y.MatrixUtil.getTransformArray(fromString) : null,"," toMatrix,"," i,"," len,"," transformFunction,"," from;"," if(toArray)"," {"," if(!fromArray || fromArray.length < 1)"," {"," fromArray = [];"," len = toArray.length;"," for(i = 0; i < len; ++i)"," {"," transformFunction = toArray[i][0];"," fromArray[i] = Y.MatrixUtil.getTransformFunctionArray(transformFunction);"," }"," TO = toArray;"," from = fromArray;"," }"," else if(Y.MatrixUtil.compareTransformSequence(toArray, fromArray))"," {"," TO = toArray;"," from = fromArray;"," }"," else"," {"," toMatrix = new Y.Matrix();"," len = toArray.length;"," for(i = 0; i < len; ++i)"," {"," transformFunction = toArray[i].shift();"," transformFunction = transformFunction == \"matrix\" ? \"multiply\" : transformFunction;"," toMatrix[transformFunction].apply(toMatrix, toArray[i]); "," }",""," TO = toMatrix.decompose();"," from = fromMatrix.decompose();"," }"," }"," TOSTRING = toString;"," return from;"," }"," }; ","","","","}, '3.9.0', {\"requires\": [\"anim-base\", \"anim-easing\", \"matrix\"]});"]; +_yuitest_coverage["build/anim-shape-transform/anim-shape-transform.js"].lines = {"1":0,"9":0,"13":0,"15":0,"25":0,"26":0,"27":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"37":0,"38":0,"40":0,"43":0,"45":0,"47":0,"49":0,"53":0,"65":0,"67":0,"69":0,"70":0,"71":0,"73":0,"74":0,"76":0,"77":0,"79":0,"81":0,"82":0,"86":0,"87":0,"88":0,"90":0,"91":0,"92":0,"95":0,"96":0,"99":0,"100":0}; +_yuitest_coverage["build/anim-shape-transform/anim-shape-transform.js"].functions = {"set:14":0,"get:52":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/anim-shape-transform/anim-shape-transform.js"].coveredLines = 44; +_yuitest_coverage["build/anim-shape-transform/anim-shape-transform.js"].coveredFunctions = 3; +_yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 1); +YUI.add('anim-shape-transform', function (Y, NAME) { + +/** + * Adds support for the transform attribute of Graphic + * Shape instances. + * @module anim + * @submodule anim-shape-transform + */ + _yuitest_coverfunc("build/anim-shape-transform/anim-shape-transform.js", "(anonymous 1)", 1); +_yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 9); +var NUM = Number, + TO, + TOSTRING; + + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 13); +Y.Anim.behaviors.transform = { + set: function(anim, att, from, to, elapsed, duration, fn) { + _yuitest_coverfunc("build/anim-shape-transform/anim-shape-transform.js", "set", 14); +_yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 15); +var node = anim._node, + transform = "", + transformTo, + transformFrom, + toArgs, + fromArgs, + i = 0, + j, + argLen, + len; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 25); +to = TO; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 26); +len = TO.length; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 27); +for(; i < len; ++i) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 29); +toArgs = to[i].concat(); + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 30); +fromArgs = from[i].concat(); + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 31); +transformTo = toArgs.shift(); + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 32); +transformFrom = fromArgs.shift(); + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 33); +argLen = toArgs.length; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 34); +transform += transformTo + "("; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 35); +for(j = 0; j < argLen; ++j) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 37); +transform += fn(elapsed, NUM(fromArgs[j]), NUM(toArgs[j]) - NUM(fromArgs[j]), duration); + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 38); +if(j < argLen - 1) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 40); +transform += ", "; + } + } + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 43); +transform += ");"; + } + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 45); +if(transform) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 47); +node.set('transform', transform); + } + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 49); +node._transform = TOSTRING; + }, + + get: function(anim) { + _yuitest_coverfunc("build/anim-shape-transform/anim-shape-transform.js", "get", 52); +_yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 53); +var node = anim._node, + fromMatrix = node.matrix, + toAttr = anim.get("to") || {}, + toString = anim.get("to").transform, + fromString = node.get("transform"), + toArray = Y.MatrixUtil.getTransformArray(toString), + fromArray = fromString ? Y.MatrixUtil.getTransformArray(fromString) : null, + toMatrix, + i, + len, + transformFunction, + from; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 65); +if(toArray) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 67); +if(!fromArray || fromArray.length < 1) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 69); +fromArray = []; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 70); +len = toArray.length; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 71); +for(i = 0; i < len; ++i) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 73); +transformFunction = toArray[i][0]; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 74); +fromArray[i] = Y.MatrixUtil.getTransformFunctionArray(transformFunction); + } + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 76); +TO = toArray; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 77); +from = fromArray; + } + else {_yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 79); +if(Y.MatrixUtil.compareTransformSequence(toArray, fromArray)) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 81); +TO = toArray; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 82); +from = fromArray; + } + else + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 86); +toMatrix = new Y.Matrix(); + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 87); +len = toArray.length; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 88); +for(i = 0; i < len; ++i) + { + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 90); +transformFunction = toArray[i].shift(); + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 91); +transformFunction = transformFunction == "matrix" ? "multiply" : transformFunction; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 92); +toMatrix[transformFunction].apply(toMatrix, toArray[i]); + } + + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 95); +TO = toMatrix.decompose(); + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 96); +from = fromMatrix.decompose(); + }} + } + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 99); +TOSTRING = toString; + _yuitest_coverline("build/anim-shape-transform/anim-shape-transform.js", 100); +return from; + } + }; + + + +}, '3.9.0', {"requires": ["anim-base", "anim-easing", "matrix"]}); diff --git a/src/errors/static/js/yui/build/anim-shape/anim-shape-coverage.js b/src/errors/static/js/yui/build/anim-shape/anim-shape-coverage.js new file mode 100644 index 00000000..fbbf28b6 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-shape/anim-shape-coverage.js @@ -0,0 +1,293 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/anim-shape/anim-shape.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/anim-shape/anim-shape.js", + code: [] +}; +_yuitest_coverage["build/anim-shape/anim-shape.js"].code=["YUI.add('anim-shape', function (Y, NAME) {","","/**"," * Adds support for the transform attribute of Graphic"," * Shape instances."," * @module anim"," * @submodule anim-shape-transform"," * @deprecated Use anim-shape instead."," */","/**"," * Adds support for the transform, fill, and attributes of Graphic"," * Shape instances. The anim-shape submodule can be used for all animations involving"," * Graphic Shape attributes."," *"," * @module anim"," * @submodule anim-shape"," */"," var NUM = Number,"," TO,"," TOSTRING,"," COLOR = \"color\","," STOPS = \"stops\","," TYPE = \"type\","," GETUPDATEDSTOPS = function(anim, from, to, elapsed, duration, fn)"," {"," var i = 0,"," getUpdatedColorValue = Y.Anim.getUpdatedColorValue,"," toStop,"," fromStop,"," prop,"," len = to.length,"," stops = [],"," stop;"," for(; i < len; i = i + 1)"," {"," toStop = to[i];"," fromStop = from[i];"," stop = {};"," for(prop in toStop)"," {"," if(toStop.hasOwnProperty(prop))"," {"," if(prop === COLOR)"," {"," stop[prop] = Y.Color.toHex(getUpdatedColorValue("," Y.Color.toHex(fromStop[prop]),"," Y.Color.toHex(toStop[prop]),"," elapsed,"," duration,"," fn"," ));"," }"," else"," {"," stop[prop] = fn(elapsed, NUM(fromStop[prop]), NUM(toStop[prop]) - NUM(fromStop[prop]), duration);"," }"," }"," }"," stops.push(stop);"," }"," return stops;"," },"," FILLANDSTROKEBEHAVIOR = {"," set: function(anim, att, from, to, elapsed, duration, fn) {"," var i,"," updated = {},"," getUpdatedColorValue = Y.Anim.getUpdatedColorValue,"," getUpdatedStops = GETUPDATEDSTOPS;"," for(i in to)"," {"," if(to.hasOwnProperty(i) && i !== TYPE)"," {"," switch(i)"," {"," case COLOR :"," updated[i] = getUpdatedColorValue(from[i], to[i], elapsed, duration, fn);"," break;"," case STOPS :"," updated[i] = getUpdatedStops(anim, from[i], to[i], elapsed, duration, fn);"," break;"," default :"," updated[i] = fn(elapsed, NUM(from[i]), NUM(to[i]) - NUM(from[i]), duration);"," break;"," }"," }"," }"," anim._node.set(att, updated);"," }"," };"," Y.Anim.behaviors.fill = FILLANDSTROKEBEHAVIOR;"," Y.Anim.behaviors.stroke = FILLANDSTROKEBEHAVIOR;",""," Y.Anim.behaviors.transform = {"," set: function(anim, att, from, to, elapsed, duration, fn) {"," var node = anim._node,"," transform = \"\","," transformTo,"," transformFrom,"," toArgs,"," fromArgs,"," i = 0,"," j,"," argLen,"," len;"," to = TO;"," len = TO.length;"," for(; i < len; ++i)"," {"," toArgs = to[i].concat();"," fromArgs = from[i].concat();"," transformTo = toArgs.shift();"," transformFrom = fromArgs.shift();"," argLen = toArgs.length;"," transform += transformTo + \"(\";"," for(j = 0; j < argLen; ++j)"," {"," transform += fn(elapsed, NUM(fromArgs[j]), NUM(toArgs[j]) - NUM(fromArgs[j]), duration);"," if(j < argLen - 1)"," {"," transform += \", \";"," }"," }"," transform += \");\";"," }"," if(transform)"," {"," node.set('transform', transform);"," }"," node._transform = TOSTRING;"," },",""," get: function(anim) {"," var node = anim._node,"," fromMatrix = node.matrix,"," toString = anim.get(\"to\").transform,"," fromString = node.get(\"transform\"),"," toArray = Y.MatrixUtil.getTransformArray(toString),"," fromArray = fromString ? Y.MatrixUtil.getTransformArray(fromString) : null,"," toMatrix,"," i,"," len,"," transformFunction,"," from;"," if(toArray)"," {"," if(!fromArray || fromArray.length < 1)"," {"," fromArray = [];"," len = toArray.length;"," for(i = 0; i < len; ++i)"," {"," transformFunction = toArray[i][0];"," fromArray[i] = Y.MatrixUtil.getTransformFunctionArray(transformFunction);"," }"," TO = toArray;"," from = fromArray;"," }"," else if(Y.MatrixUtil.compareTransformSequence(toArray, fromArray))"," {"," TO = toArray;"," from = fromArray;"," }"," else"," {"," toMatrix = new Y.Matrix();"," len = toArray.length;"," for(i = 0; i < len; ++i)"," {"," transformFunction = toArray[i].shift();"," transformFunction = transformFunction === \"matrix\" ? \"multiply\" : transformFunction;"," toMatrix[transformFunction].apply(toMatrix, toArray[i]);"," }",""," TO = toMatrix.decompose();"," from = fromMatrix.decompose();"," }"," }"," TOSTRING = toString;"," return from;"," }"," };","","","","}, '3.9.0', {\"requires\": [\"anim-base\", \"anim-easing\", \"anim-color\", \"matrix\"]});"]; +_yuitest_coverage["build/anim-shape/anim-shape.js"].lines = {"1":0,"18":0,"26":0,"34":0,"36":0,"37":0,"38":0,"39":0,"41":0,"43":0,"45":0,"55":0,"59":0,"61":0,"65":0,"69":0,"71":0,"73":0,"76":0,"77":0,"79":0,"80":0,"82":0,"83":0,"87":0,"90":0,"91":0,"93":0,"95":0,"105":0,"106":0,"107":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"117":0,"118":0,"120":0,"123":0,"125":0,"127":0,"129":0,"133":0,"144":0,"146":0,"148":0,"149":0,"150":0,"152":0,"153":0,"155":0,"156":0,"158":0,"160":0,"161":0,"165":0,"166":0,"167":0,"169":0,"170":0,"171":0,"174":0,"175":0,"178":0,"179":0}; +_yuitest_coverage["build/anim-shape/anim-shape.js"].functions = {"GETUPDATEDSTOPS:24":0,"set:64":0,"set:94":0,"get:132":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/anim-shape/anim-shape.js"].coveredLines = 69; +_yuitest_coverage["build/anim-shape/anim-shape.js"].coveredFunctions = 5; +_yuitest_coverline("build/anim-shape/anim-shape.js", 1); +YUI.add('anim-shape', function (Y, NAME) { + +/** + * Adds support for the transform attribute of Graphic + * Shape instances. + * @module anim + * @submodule anim-shape-transform + * @deprecated Use anim-shape instead. + */ +/** + * Adds support for the transform, fill, and attributes of Graphic + * Shape instances. The anim-shape submodule can be used for all animations involving + * Graphic Shape attributes. + * + * @module anim + * @submodule anim-shape + */ + _yuitest_coverfunc("build/anim-shape/anim-shape.js", "(anonymous 1)", 1); +_yuitest_coverline("build/anim-shape/anim-shape.js", 18); +var NUM = Number, + TO, + TOSTRING, + COLOR = "color", + STOPS = "stops", + TYPE = "type", + GETUPDATEDSTOPS = function(anim, from, to, elapsed, duration, fn) + { + _yuitest_coverfunc("build/anim-shape/anim-shape.js", "GETUPDATEDSTOPS", 24); +_yuitest_coverline("build/anim-shape/anim-shape.js", 26); +var i = 0, + getUpdatedColorValue = Y.Anim.getUpdatedColorValue, + toStop, + fromStop, + prop, + len = to.length, + stops = [], + stop; + _yuitest_coverline("build/anim-shape/anim-shape.js", 34); +for(; i < len; i = i + 1) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 36); +toStop = to[i]; + _yuitest_coverline("build/anim-shape/anim-shape.js", 37); +fromStop = from[i]; + _yuitest_coverline("build/anim-shape/anim-shape.js", 38); +stop = {}; + _yuitest_coverline("build/anim-shape/anim-shape.js", 39); +for(prop in toStop) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 41); +if(toStop.hasOwnProperty(prop)) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 43); +if(prop === COLOR) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 45); +stop[prop] = Y.Color.toHex(getUpdatedColorValue( + Y.Color.toHex(fromStop[prop]), + Y.Color.toHex(toStop[prop]), + elapsed, + duration, + fn + )); + } + else + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 55); +stop[prop] = fn(elapsed, NUM(fromStop[prop]), NUM(toStop[prop]) - NUM(fromStop[prop]), duration); + } + } + } + _yuitest_coverline("build/anim-shape/anim-shape.js", 59); +stops.push(stop); + } + _yuitest_coverline("build/anim-shape/anim-shape.js", 61); +return stops; + }, + FILLANDSTROKEBEHAVIOR = { + set: function(anim, att, from, to, elapsed, duration, fn) { + _yuitest_coverfunc("build/anim-shape/anim-shape.js", "set", 64); +_yuitest_coverline("build/anim-shape/anim-shape.js", 65); +var i, + updated = {}, + getUpdatedColorValue = Y.Anim.getUpdatedColorValue, + getUpdatedStops = GETUPDATEDSTOPS; + _yuitest_coverline("build/anim-shape/anim-shape.js", 69); +for(i in to) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 71); +if(to.hasOwnProperty(i) && i !== TYPE) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 73); +switch(i) + { + case COLOR : + _yuitest_coverline("build/anim-shape/anim-shape.js", 76); +updated[i] = getUpdatedColorValue(from[i], to[i], elapsed, duration, fn); + _yuitest_coverline("build/anim-shape/anim-shape.js", 77); +break; + case STOPS : + _yuitest_coverline("build/anim-shape/anim-shape.js", 79); +updated[i] = getUpdatedStops(anim, from[i], to[i], elapsed, duration, fn); + _yuitest_coverline("build/anim-shape/anim-shape.js", 80); +break; + default : + _yuitest_coverline("build/anim-shape/anim-shape.js", 82); +updated[i] = fn(elapsed, NUM(from[i]), NUM(to[i]) - NUM(from[i]), duration); + _yuitest_coverline("build/anim-shape/anim-shape.js", 83); +break; + } + } + } + _yuitest_coverline("build/anim-shape/anim-shape.js", 87); +anim._node.set(att, updated); + } + }; + _yuitest_coverline("build/anim-shape/anim-shape.js", 90); +Y.Anim.behaviors.fill = FILLANDSTROKEBEHAVIOR; + _yuitest_coverline("build/anim-shape/anim-shape.js", 91); +Y.Anim.behaviors.stroke = FILLANDSTROKEBEHAVIOR; + + _yuitest_coverline("build/anim-shape/anim-shape.js", 93); +Y.Anim.behaviors.transform = { + set: function(anim, att, from, to, elapsed, duration, fn) { + _yuitest_coverfunc("build/anim-shape/anim-shape.js", "set", 94); +_yuitest_coverline("build/anim-shape/anim-shape.js", 95); +var node = anim._node, + transform = "", + transformTo, + transformFrom, + toArgs, + fromArgs, + i = 0, + j, + argLen, + len; + _yuitest_coverline("build/anim-shape/anim-shape.js", 105); +to = TO; + _yuitest_coverline("build/anim-shape/anim-shape.js", 106); +len = TO.length; + _yuitest_coverline("build/anim-shape/anim-shape.js", 107); +for(; i < len; ++i) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 109); +toArgs = to[i].concat(); + _yuitest_coverline("build/anim-shape/anim-shape.js", 110); +fromArgs = from[i].concat(); + _yuitest_coverline("build/anim-shape/anim-shape.js", 111); +transformTo = toArgs.shift(); + _yuitest_coverline("build/anim-shape/anim-shape.js", 112); +transformFrom = fromArgs.shift(); + _yuitest_coverline("build/anim-shape/anim-shape.js", 113); +argLen = toArgs.length; + _yuitest_coverline("build/anim-shape/anim-shape.js", 114); +transform += transformTo + "("; + _yuitest_coverline("build/anim-shape/anim-shape.js", 115); +for(j = 0; j < argLen; ++j) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 117); +transform += fn(elapsed, NUM(fromArgs[j]), NUM(toArgs[j]) - NUM(fromArgs[j]), duration); + _yuitest_coverline("build/anim-shape/anim-shape.js", 118); +if(j < argLen - 1) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 120); +transform += ", "; + } + } + _yuitest_coverline("build/anim-shape/anim-shape.js", 123); +transform += ");"; + } + _yuitest_coverline("build/anim-shape/anim-shape.js", 125); +if(transform) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 127); +node.set('transform', transform); + } + _yuitest_coverline("build/anim-shape/anim-shape.js", 129); +node._transform = TOSTRING; + }, + + get: function(anim) { + _yuitest_coverfunc("build/anim-shape/anim-shape.js", "get", 132); +_yuitest_coverline("build/anim-shape/anim-shape.js", 133); +var node = anim._node, + fromMatrix = node.matrix, + toString = anim.get("to").transform, + fromString = node.get("transform"), + toArray = Y.MatrixUtil.getTransformArray(toString), + fromArray = fromString ? Y.MatrixUtil.getTransformArray(fromString) : null, + toMatrix, + i, + len, + transformFunction, + from; + _yuitest_coverline("build/anim-shape/anim-shape.js", 144); +if(toArray) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 146); +if(!fromArray || fromArray.length < 1) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 148); +fromArray = []; + _yuitest_coverline("build/anim-shape/anim-shape.js", 149); +len = toArray.length; + _yuitest_coverline("build/anim-shape/anim-shape.js", 150); +for(i = 0; i < len; ++i) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 152); +transformFunction = toArray[i][0]; + _yuitest_coverline("build/anim-shape/anim-shape.js", 153); +fromArray[i] = Y.MatrixUtil.getTransformFunctionArray(transformFunction); + } + _yuitest_coverline("build/anim-shape/anim-shape.js", 155); +TO = toArray; + _yuitest_coverline("build/anim-shape/anim-shape.js", 156); +from = fromArray; + } + else {_yuitest_coverline("build/anim-shape/anim-shape.js", 158); +if(Y.MatrixUtil.compareTransformSequence(toArray, fromArray)) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 160); +TO = toArray; + _yuitest_coverline("build/anim-shape/anim-shape.js", 161); +from = fromArray; + } + else + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 165); +toMatrix = new Y.Matrix(); + _yuitest_coverline("build/anim-shape/anim-shape.js", 166); +len = toArray.length; + _yuitest_coverline("build/anim-shape/anim-shape.js", 167); +for(i = 0; i < len; ++i) + { + _yuitest_coverline("build/anim-shape/anim-shape.js", 169); +transformFunction = toArray[i].shift(); + _yuitest_coverline("build/anim-shape/anim-shape.js", 170); +transformFunction = transformFunction === "matrix" ? "multiply" : transformFunction; + _yuitest_coverline("build/anim-shape/anim-shape.js", 171); +toMatrix[transformFunction].apply(toMatrix, toArray[i]); + } + + _yuitest_coverline("build/anim-shape/anim-shape.js", 174); +TO = toMatrix.decompose(); + _yuitest_coverline("build/anim-shape/anim-shape.js", 175); +from = fromMatrix.decompose(); + }} + } + _yuitest_coverline("build/anim-shape/anim-shape.js", 178); +TOSTRING = toString; + _yuitest_coverline("build/anim-shape/anim-shape.js", 179); +return from; + } + }; + + + +}, '3.9.0', {"requires": ["anim-base", "anim-easing", "anim-color", "matrix"]}); diff --git a/src/errors/static/js/yui/build/anim-shape/anim-shape-debug.js b/src/errors/static/js/yui/build/anim-shape/anim-shape-debug.js new file mode 100644 index 00000000..5ab069af --- /dev/null +++ b/src/errors/static/js/yui/build/anim-shape/anim-shape-debug.js @@ -0,0 +1,186 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-shape', function (Y, NAME) { + +/** + * Adds support for the transform attribute of Graphic + * Shape instances. + * @module anim + * @submodule anim-shape-transform + * @deprecated Use anim-shape instead. + */ +/** + * Adds support for the transform, fill, and attributes of Graphic + * Shape instances. The anim-shape submodule can be used for all animations involving + * Graphic Shape attributes. + * + * @module anim + * @submodule anim-shape + */ + var NUM = Number, + TO, + TOSTRING, + COLOR = "color", + STOPS = "stops", + TYPE = "type", + GETUPDATEDSTOPS = function(anim, from, to, elapsed, duration, fn) + { + var i = 0, + getUpdatedColorValue = Y.Anim.getUpdatedColorValue, + toStop, + fromStop, + prop, + len = to.length, + stops = [], + stop; + for(; i < len; i = i + 1) + { + toStop = to[i]; + fromStop = from[i]; + stop = {}; + for(prop in toStop) + { + if(toStop.hasOwnProperty(prop)) + { + if(prop === COLOR) + { + stop[prop] = Y.Color.toHex(getUpdatedColorValue( + Y.Color.toHex(fromStop[prop]), + Y.Color.toHex(toStop[prop]), + elapsed, + duration, + fn + )); + } + else + { + stop[prop] = fn(elapsed, NUM(fromStop[prop]), NUM(toStop[prop]) - NUM(fromStop[prop]), duration); + } + } + } + stops.push(stop); + } + return stops; + }, + FILLANDSTROKEBEHAVIOR = { + set: function(anim, att, from, to, elapsed, duration, fn) { + var i, + updated = {}, + getUpdatedColorValue = Y.Anim.getUpdatedColorValue, + getUpdatedStops = GETUPDATEDSTOPS; + for(i in to) + { + if(to.hasOwnProperty(i) && i !== TYPE) + { + switch(i) + { + case COLOR : + updated[i] = getUpdatedColorValue(from[i], to[i], elapsed, duration, fn); + break; + case STOPS : + updated[i] = getUpdatedStops(anim, from[i], to[i], elapsed, duration, fn); + break; + default : + updated[i] = fn(elapsed, NUM(from[i]), NUM(to[i]) - NUM(from[i]), duration); + break; + } + } + } + anim._node.set(att, updated); + } + }; + Y.Anim.behaviors.fill = FILLANDSTROKEBEHAVIOR; + Y.Anim.behaviors.stroke = FILLANDSTROKEBEHAVIOR; + + Y.Anim.behaviors.transform = { + set: function(anim, att, from, to, elapsed, duration, fn) { + var node = anim._node, + transform = "", + transformTo, + transformFrom, + toArgs, + fromArgs, + i = 0, + j, + argLen, + len; + to = TO; + len = TO.length; + for(; i < len; ++i) + { + toArgs = to[i].concat(); + fromArgs = from[i].concat(); + transformTo = toArgs.shift(); + transformFrom = fromArgs.shift(); + argLen = toArgs.length; + transform += transformTo + "("; + for(j = 0; j < argLen; ++j) + { + transform += fn(elapsed, NUM(fromArgs[j]), NUM(toArgs[j]) - NUM(fromArgs[j]), duration); + if(j < argLen - 1) + { + transform += ", "; + } + } + transform += ");"; + } + if(transform) + { + node.set('transform', transform); + } + node._transform = TOSTRING; + }, + + get: function(anim) { + var node = anim._node, + fromMatrix = node.matrix, + toString = anim.get("to").transform, + fromString = node.get("transform"), + toArray = Y.MatrixUtil.getTransformArray(toString), + fromArray = fromString ? Y.MatrixUtil.getTransformArray(fromString) : null, + toMatrix, + i, + len, + transformFunction, + from; + if(toArray) + { + if(!fromArray || fromArray.length < 1) + { + fromArray = []; + len = toArray.length; + for(i = 0; i < len; ++i) + { + transformFunction = toArray[i][0]; + fromArray[i] = Y.MatrixUtil.getTransformFunctionArray(transformFunction); + } + TO = toArray; + from = fromArray; + } + else if(Y.MatrixUtil.compareTransformSequence(toArray, fromArray)) + { + TO = toArray; + from = fromArray; + } + else + { + toMatrix = new Y.Matrix(); + len = toArray.length; + for(i = 0; i < len; ++i) + { + transformFunction = toArray[i].shift(); + transformFunction = transformFunction === "matrix" ? "multiply" : transformFunction; + toMatrix[transformFunction].apply(toMatrix, toArray[i]); + } + + TO = toMatrix.decompose(); + from = fromMatrix.decompose(); + } + } + TOSTRING = toString; + return from; + } + }; + + + +}, '3.9.0', {"requires": ["anim-base", "anim-easing", "anim-color", "matrix"]}); diff --git a/src/errors/static/js/yui/build/anim-shape/anim-shape-min.js b/src/errors/static/js/yui/build/anim-shape/anim-shape-min.js new file mode 100644 index 00000000..99af0a47 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-shape/anim-shape-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("anim-shape",function(e,t){var n=Number,r,i,s="color",o="stops",u="type",a=function(t,r,i,o,u,a){var f=0,l=e.Anim.getUpdatedColorValue,c,h,p,d=i.length,v=[],m;for(;ftransform attribute of Graphic + * Shape instances. + * @module anim + * @submodule anim-shape-transform + * @deprecated Use anim-shape instead. + */ +/** + * Adds support for the transform, fill, and attributes of Graphic + * Shape instances. The anim-shape submodule can be used for all animations involving + * Graphic Shape attributes. + * + * @module anim + * @submodule anim-shape + */ + var NUM = Number, + TO, + TOSTRING, + COLOR = "color", + STOPS = "stops", + TYPE = "type", + GETUPDATEDSTOPS = function(anim, from, to, elapsed, duration, fn) + { + var i = 0, + getUpdatedColorValue = Y.Anim.getUpdatedColorValue, + toStop, + fromStop, + prop, + len = to.length, + stops = [], + stop; + for(; i < len; i = i + 1) + { + toStop = to[i]; + fromStop = from[i]; + stop = {}; + for(prop in toStop) + { + if(toStop.hasOwnProperty(prop)) + { + if(prop === COLOR) + { + stop[prop] = Y.Color.toHex(getUpdatedColorValue( + Y.Color.toHex(fromStop[prop]), + Y.Color.toHex(toStop[prop]), + elapsed, + duration, + fn + )); + } + else + { + stop[prop] = fn(elapsed, NUM(fromStop[prop]), NUM(toStop[prop]) - NUM(fromStop[prop]), duration); + } + } + } + stops.push(stop); + } + return stops; + }, + FILLANDSTROKEBEHAVIOR = { + set: function(anim, att, from, to, elapsed, duration, fn) { + var i, + updated = {}, + getUpdatedColorValue = Y.Anim.getUpdatedColorValue, + getUpdatedStops = GETUPDATEDSTOPS; + for(i in to) + { + if(to.hasOwnProperty(i) && i !== TYPE) + { + switch(i) + { + case COLOR : + updated[i] = getUpdatedColorValue(from[i], to[i], elapsed, duration, fn); + break; + case STOPS : + updated[i] = getUpdatedStops(anim, from[i], to[i], elapsed, duration, fn); + break; + default : + updated[i] = fn(elapsed, NUM(from[i]), NUM(to[i]) - NUM(from[i]), duration); + break; + } + } + } + anim._node.set(att, updated); + } + }; + Y.Anim.behaviors.fill = FILLANDSTROKEBEHAVIOR; + Y.Anim.behaviors.stroke = FILLANDSTROKEBEHAVIOR; + + Y.Anim.behaviors.transform = { + set: function(anim, att, from, to, elapsed, duration, fn) { + var node = anim._node, + transform = "", + transformTo, + transformFrom, + toArgs, + fromArgs, + i = 0, + j, + argLen, + len; + to = TO; + len = TO.length; + for(; i < len; ++i) + { + toArgs = to[i].concat(); + fromArgs = from[i].concat(); + transformTo = toArgs.shift(); + transformFrom = fromArgs.shift(); + argLen = toArgs.length; + transform += transformTo + "("; + for(j = 0; j < argLen; ++j) + { + transform += fn(elapsed, NUM(fromArgs[j]), NUM(toArgs[j]) - NUM(fromArgs[j]), duration); + if(j < argLen - 1) + { + transform += ", "; + } + } + transform += ");"; + } + if(transform) + { + node.set('transform', transform); + } + node._transform = TOSTRING; + }, + + get: function(anim) { + var node = anim._node, + fromMatrix = node.matrix, + toString = anim.get("to").transform, + fromString = node.get("transform"), + toArray = Y.MatrixUtil.getTransformArray(toString), + fromArray = fromString ? Y.MatrixUtil.getTransformArray(fromString) : null, + toMatrix, + i, + len, + transformFunction, + from; + if(toArray) + { + if(!fromArray || fromArray.length < 1) + { + fromArray = []; + len = toArray.length; + for(i = 0; i < len; ++i) + { + transformFunction = toArray[i][0]; + fromArray[i] = Y.MatrixUtil.getTransformFunctionArray(transformFunction); + } + TO = toArray; + from = fromArray; + } + else if(Y.MatrixUtil.compareTransformSequence(toArray, fromArray)) + { + TO = toArray; + from = fromArray; + } + else + { + toMatrix = new Y.Matrix(); + len = toArray.length; + for(i = 0; i < len; ++i) + { + transformFunction = toArray[i].shift(); + transformFunction = transformFunction === "matrix" ? "multiply" : transformFunction; + toMatrix[transformFunction].apply(toMatrix, toArray[i]); + } + + TO = toMatrix.decompose(); + from = fromMatrix.decompose(); + } + } + TOSTRING = toString; + return from; + } + }; + + + +}, '3.9.0', {"requires": ["anim-base", "anim-easing", "anim-color", "matrix"]}); diff --git a/src/errors/static/js/yui/build/anim-xy/anim-xy-coverage.js b/src/errors/static/js/yui/build/anim-xy/anim-xy-coverage.js new file mode 100644 index 00000000..e052e05e --- /dev/null +++ b/src/errors/static/js/yui/build/anim-xy/anim-xy-coverage.js @@ -0,0 +1,68 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/anim-xy/anim-xy.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/anim-xy/anim-xy.js", + code: [] +}; +_yuitest_coverage["build/anim-xy/anim-xy.js"].code=["YUI.add('anim-xy', function (Y, NAME) {","","/**"," * Adds support for the xy property in from and"," * to attributes."," * @module anim"," * @submodule anim-xy"," */","","var NUM = Number;","","Y.Anim.behaviors.xy = {"," set: function(anim, att, from, to, elapsed, duration, fn) {"," anim._node.setXY(["," fn(elapsed, NUM(from[0]), NUM(to[0]) - NUM(from[0]), duration),"," fn(elapsed, NUM(from[1]), NUM(to[1]) - NUM(from[1]), duration)"," ]);"," },"," get: function(anim) {"," return anim._node.getXY();"," }","};","","","","}, '3.9.0', {\"requires\": [\"anim-base\", \"node-screen\"]});"]; +_yuitest_coverage["build/anim-xy/anim-xy.js"].lines = {"1":0,"10":0,"12":0,"14":0,"20":0}; +_yuitest_coverage["build/anim-xy/anim-xy.js"].functions = {"set:13":0,"get:19":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/anim-xy/anim-xy.js"].coveredLines = 5; +_yuitest_coverage["build/anim-xy/anim-xy.js"].coveredFunctions = 3; +_yuitest_coverline("build/anim-xy/anim-xy.js", 1); +YUI.add('anim-xy', function (Y, NAME) { + +/** + * Adds support for the xy property in from and + * to attributes. + * @module anim + * @submodule anim-xy + */ + +_yuitest_coverfunc("build/anim-xy/anim-xy.js", "(anonymous 1)", 1); +_yuitest_coverline("build/anim-xy/anim-xy.js", 10); +var NUM = Number; + +_yuitest_coverline("build/anim-xy/anim-xy.js", 12); +Y.Anim.behaviors.xy = { + set: function(anim, att, from, to, elapsed, duration, fn) { + _yuitest_coverfunc("build/anim-xy/anim-xy.js", "set", 13); +_yuitest_coverline("build/anim-xy/anim-xy.js", 14); +anim._node.setXY([ + fn(elapsed, NUM(from[0]), NUM(to[0]) - NUM(from[0]), duration), + fn(elapsed, NUM(from[1]), NUM(to[1]) - NUM(from[1]), duration) + ]); + }, + get: function(anim) { + _yuitest_coverfunc("build/anim-xy/anim-xy.js", "get", 19); +_yuitest_coverline("build/anim-xy/anim-xy.js", 20); +return anim._node.getXY(); + } +}; + + + +}, '3.9.0', {"requires": ["anim-base", "node-screen"]}); diff --git a/src/errors/static/js/yui/build/anim-xy/anim-xy-debug.js b/src/errors/static/js/yui/build/anim-xy/anim-xy-debug.js new file mode 100644 index 00000000..4143e7fd --- /dev/null +++ b/src/errors/static/js/yui/build/anim-xy/anim-xy-debug.js @@ -0,0 +1,27 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-xy', function (Y, NAME) { + +/** + * Adds support for the xy property in from and + * to attributes. + * @module anim + * @submodule anim-xy + */ + +var NUM = Number; + +Y.Anim.behaviors.xy = { + set: function(anim, att, from, to, elapsed, duration, fn) { + anim._node.setXY([ + fn(elapsed, NUM(from[0]), NUM(to[0]) - NUM(from[0]), duration), + fn(elapsed, NUM(from[1]), NUM(to[1]) - NUM(from[1]), duration) + ]); + }, + get: function(anim) { + return anim._node.getXY(); + } +}; + + + +}, '3.9.0', {"requires": ["anim-base", "node-screen"]}); diff --git a/src/errors/static/js/yui/build/anim-xy/anim-xy-min.js b/src/errors/static/js/yui/build/anim-xy/anim-xy-min.js new file mode 100644 index 00000000..8b265151 --- /dev/null +++ b/src/errors/static/js/yui/build/anim-xy/anim-xy-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("anim-xy",function(e,t){var n=Number;e.Anim.behaviors.xy={set:function(e,t,r,i,s,o,u){e._node.setXY([u(s,n(r[0]),n(i[0])-n(r[0]),o),u(s,n(r[1]),n(i[1])-n(r[1]),o)])},get:function(e){return e._node.getXY()}}},"3.9.0",{requires:["anim-base","node-screen"]}); diff --git a/src/errors/static/js/yui/build/anim-xy/anim-xy.js b/src/errors/static/js/yui/build/anim-xy/anim-xy.js new file mode 100644 index 00000000..4143e7fd --- /dev/null +++ b/src/errors/static/js/yui/build/anim-xy/anim-xy.js @@ -0,0 +1,27 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('anim-xy', function (Y, NAME) { + +/** + * Adds support for the xy property in from and + * to attributes. + * @module anim + * @submodule anim-xy + */ + +var NUM = Number; + +Y.Anim.behaviors.xy = { + set: function(anim, att, from, to, elapsed, duration, fn) { + anim._node.setXY([ + fn(elapsed, NUM(from[0]), NUM(to[0]) - NUM(from[0]), duration), + fn(elapsed, NUM(from[1]), NUM(to[1]) - NUM(from[1]), duration) + ]); + }, + get: function(anim) { + return anim._node.getXY(); + } +}; + + + +}, '3.9.0', {"requires": ["anim-base", "node-screen"]}); diff --git a/src/errors/static/js/yui/build/app-base/app-base-coverage.js b/src/errors/static/js/yui/build/app-base/app-base-coverage.js new file mode 100644 index 00000000..38b4058f --- /dev/null +++ b/src/errors/static/js/yui/build/app-base/app-base-coverage.js @@ -0,0 +1,1275 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/app-base/app-base.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/app-base/app-base.js", + code: [] +}; +_yuitest_coverage["build/app-base/app-base.js"].code=["YUI.add('app-base', function (Y, NAME) {","","/**","The App Framework provides simple MVC-like building blocks (models, model lists,","views, and URL-based routing) for writing single-page JavaScript applications.","","@main app","@module app","@since 3.4.0","**/","","/**","Provides a top-level application component which manages navigation and views.","","@module app","@submodule app-base","@since 3.5.0","**/","","// TODO: Better handling of lifecycle for registered views:","//","// * [!] Just redo basically everything with view management so there are no","// pre-`activeViewChange` side effects and handle the rest of these things:","//","// * Seems like any view created via `createView` should listen for the view's","// `destroy` event and use that to remove it from the `_viewsInfoMap`. I","// should look at what ModelList does for Models as a reference.","//","// * Should we have a companion `destroyView()` method? Maybe this wouldn't be","// needed if we have a `getView(name, create)` method, and already doing the","// above? We could do `app.getView('foo').destroy()` and it would be removed","// from the `_viewsInfoMap` as well.","//","// * Should we wait to call a view's `render()` method inside of the","// `_attachView()` method?","//","// * Should named views support a collection of instances instead of just one?","//","","var Lang = Y.Lang,"," YObject = Y.Object,",""," PjaxBase = Y.PjaxBase,"," Router = Y.Router,"," View = Y.View,",""," getClassName = Y.ClassNameManager.getClassName,",""," win = Y.config.win,",""," AppBase;","","/**","Provides a top-level application component which manages navigation and views.","","This gives you a foundation and structure on which to build your application; it","combines robust URL navigation with powerful routing and flexible view","management.","","@class App.Base","@param {Object} [config] The following are configuration properties that can be"," specified _in addition_ to default attribute values and the non-attribute"," properties provided by `Y.Base`:"," @param {Object} [config.views] Hash of view-name to metadata used to"," declaratively describe an application's views and their relationship with"," the app and other views. The views specified here will override any defaults"," provided by the `views` object on the `prototype`.","@constructor","@extends Base","@uses View","@uses Router","@uses PjaxBase","@since 3.5.0","**/","AppBase = Y.Base.create('app', Y.Base, [View, Router, PjaxBase], {"," // -- Public Properties ----------------------------------------------------",""," /**"," Hash of view-name to metadata used to declaratively describe an"," application's views and their relationship with the app and its other views.",""," The view metadata is composed of Objects keyed to a view-name that can have"," any or all of the following properties:",""," * `type`: Function or a string representing the view constructor to use to"," create view instances. If a string is used, the constructor function is"," assumed to be on the `Y` object; e.g. `\"SomeView\"` -> `Y.SomeView`.",""," * `preserve`: Boolean for whether the view instance should be retained. By"," default, the view instance will be destroyed when it is no longer the"," `activeView`. If `true` the view instance will simply be `removed()`"," from the DOM when it is no longer active. This is useful when the view"," is frequently used and may be expensive to re-create.",""," * `parent`: String to another named view in this hash that represents the"," parent view within the application's view hierarchy; e.g. a `\"photo\"`"," view could have `\"album\"` has its `parent` view. This parent/child"," relationship is a useful cue for things like transitions.",""," * `instance`: Used internally to manage the current instance of this named"," view. This can be used if your view instance is created up-front, or if"," you would rather manage the View lifecycle, but you probably should just"," let this be handled for you.",""," If `views` are specified at instantiation time, the metadata in the `views`"," Object here will be used as defaults when creating the instance's `views`.",""," Every `Y.App` instance gets its own copy of a `views` object so this Object"," on the prototype will not be polluted.",""," @example"," // Imagine that `Y.UsersView` and `Y.UserView` have been defined."," var app = new Y.App({"," views: {"," users: {"," type : Y.UsersView,"," preserve: true"," },",""," user: {"," type : Y.UserView,"," parent: 'users'"," }"," }"," });",""," @property views"," @type Object"," @default {}"," @since 3.5.0"," **/"," views: {},",""," // -- Protected Properties -------------------------------------------------",""," /**"," Map of view instance id (via `Y.stamp()`) to view-info object in `views`.",""," This mapping is used to tie a specific view instance back to its metadata by"," adding a reference to the the related view info on the `views` object.",""," @property _viewInfoMap"," @type Object"," @default {}"," @protected"," @since 3.5.0"," **/",""," // -- Lifecycle Methods ----------------------------------------------------"," initializer: function (config) {"," config || (config = {});",""," var views = {};",""," // Merges-in specified view metadata into local `views` object."," function mergeViewConfig(view, name) {"," views[name] = Y.merge(views[name], view);"," }",""," // First, each view in the `views` prototype object gets its metadata"," // merged-in, providing the defaults."," YObject.each(this.views, mergeViewConfig);",""," // Then, each view in the specified `config.views` object gets its"," // metadata merged-in."," YObject.each(config.views, mergeViewConfig);",""," // The resulting hodgepodge of metadata is then stored as the instance's"," // `views` object, and no one's objects were harmed in the making."," this.views = views;"," this._viewInfoMap = {};",""," // Using `bind()` to aid extensibility."," this.after('activeViewChange', Y.bind('_afterActiveViewChange', this));",""," // PjaxBase will bind click events when `html5` is `true`, so this just"," // forces the binding when `serverRouting` and `html5` are both falsy."," if (!this.get('serverRouting')) {"," this._pjaxBindUI();"," }"," },",""," // TODO: `destructor` to destroy the `activeView`?",""," // -- Public Methods -------------------------------------------------------",""," /**"," Creates and returns a new view instance using the provided `name` to look up"," the view info metadata defined in the `views` object. The passed-in `config`"," object is passed to the view constructor function.",""," This function also maps a view instance back to its view info metadata.",""," @method createView"," @param {String} name The name of a view defined on the `views` object."," @param {Object} [config] The configuration object passed to the view"," constructor function when creating the new view instance."," @return {View} The new view instance."," @since 3.5.0"," **/"," createView: function (name, config) {"," var viewInfo = this.getViewInfo(name),"," type = (viewInfo && viewInfo.type) || View,"," ViewConstructor, view;",""," // Looks for a namespaced constructor function on `Y`."," ViewConstructor = Lang.isString(type) ?"," YObject.getValue(Y, type.split('.')) : type;",""," // Create the view instance and map it with its metadata."," view = new ViewConstructor(config);"," this._viewInfoMap[Y.stamp(view, true)] = viewInfo;",""," return view;"," },",""," /**"," Returns the metadata associated with a view instance or view name defined on"," the `views` object.",""," @method getViewInfo"," @param {View|String} view View instance, or name of a view defined on the"," `views` object."," @return {Object} The metadata for the view, or `undefined` if the view is"," not registered."," @since 3.5.0"," **/"," getViewInfo: function (view) {"," if (Lang.isString(view)) {"," return this.views[view];"," }",""," return view && this._viewInfoMap[Y.stamp(view, true)];"," },",""," /**"," Navigates to the specified URL if there is a route handler that matches. In"," browsers capable of using HTML5 history or when `serverRouting` is falsy,"," the navigation will be enhanced by firing the `navigate` event and having"," the app handle the \"request\". When `serverRouting` is `true`, non-HTML5"," browsers will navigate to the new URL via a full page reload.",""," When there is a route handler for the specified URL and it is being"," navigated to, this method will return `true`, otherwise it will return"," `false`.",""," **Note:** The specified URL _must_ be of the same origin as the current URL,"," otherwise an error will be logged and navigation will not occur. This is"," intended as both a security constraint and a purposely imposed limitation as"," it does not make sense to tell the app to navigate to a URL on a"," different scheme, host, or port.",""," @method navigate"," @param {String} url The URL to navigate to. This must be of the same origin"," as the current URL."," @param {Object} [options] Additional options to configure the navigation."," These are mixed into the `navigate` event facade."," @param {Boolean} [options.replace] Whether or not the current history"," entry will be replaced, or a new entry will be created. Will default"," to `true` if the specified `url` is the same as the current URL."," @param {Boolean} [options.force] Whether the enhanced navigation"," should occur even in browsers without HTML5 history. Will default to"," `true` when `serverRouting` is falsy."," @see PjaxBase.navigate()"," **/"," // Does not override `navigate()` but does use extra `options`.",""," /**"," Renders this application by appending the `viewContainer` node to the"," `container` node if it isn't already a child of the container, and the"," `activeView` will be appended the view container, if it isn't already.",""," You should call this method at least once, usually after the initialization"," of your app instance so the proper DOM structure is setup and optionally"," append the container to the DOM if it's not there already.",""," You may override this method to customize the app's rendering, but you"," should expect that the `viewContainer`'s contents will be modified by the"," app for the purpose of rendering the `activeView` when it changes.",""," @method render"," @chainable"," @see View.render()"," **/"," render: function () {"," var CLASS_NAMES = Y.App.CLASS_NAMES,"," container = this.get('container'),"," viewContainer = this.get('viewContainer'),"," activeView = this.get('activeView'),"," activeViewContainer = activeView && activeView.get('container'),"," areSame = container.compareTo(viewContainer);",""," container.addClass(CLASS_NAMES.app);"," viewContainer.addClass(CLASS_NAMES.views);",""," // Prevents needless shuffling around of nodes and maintains DOM order."," if (activeView && !viewContainer.contains(activeViewContainer)) {"," viewContainer.appendChild(activeViewContainer);"," }",""," // Prevents needless shuffling around of nodes and maintains DOM order."," if (!container.contains(viewContainer) && !areSame) {"," container.appendChild(viewContainer);"," }",""," return this;"," },",""," /**"," Sets which view is active/visible for the application. This will set the"," app's `activeView` attribute to the specified `view`.",""," The `view` will be \"attached\" to this app, meaning it will be both rendered"," into this app's `viewContainer` node and all of its events will bubble to"," the app. The previous `activeView` will be \"detached\" from this app.",""," When a string-name is provided for a view which has been registered on this"," app's `views` object, the referenced metadata will be used and the"," `activeView` will be set to either a preserved view instance, or a new"," instance of the registered view will be created using the specified `config`"," object passed-into this method.",""," A callback function can be specified as either the third or fourth argument,"," and this function will be called after the new `view` becomes the"," `activeView`, is rendered to the `viewContainer`, and is ready to use.",""," @example"," var app = new Y.App({"," views: {"," usersView: {"," // Imagine that `Y.UsersView` has been defined."," type: Y.UsersView"," }"," },",""," users: new Y.ModelList()"," });",""," app.route('/users/', function () {"," this.showView('usersView', {users: this.get('users')});"," });",""," app.render();"," app.navigate('/uses/'); // => Creates a new `Y.UsersView` and shows it.",""," @method showView"," @param {String|View} view The name of a view defined in the `views` object,"," or a view instance which should become this app's `activeView`."," @param {Object} [config] Optional configuration to use when creating a new"," view instance. This config object can also be used to update an existing"," or preserved view's attributes when `options.update` is `true`."," @param {Object} [options] Optional object containing any of the following"," properties:"," @param {Function} [options.callback] Optional callback function to call"," after new `activeView` is ready to use, the function will be passed:"," @param {View} options.callback.view A reference to the new"," `activeView`."," @param {Boolean} [options.prepend=false] Whether the `view` should be"," prepended instead of appended to the `viewContainer`."," @param {Boolean} [options.render] Whether the `view` should be rendered."," **Note:** If no value is specified, a view instance will only be"," rendered if it's newly created by this method."," @param {Boolean} [options.update=false] Whether an existing view should"," have its attributes updated by passing the `config` object to its"," `setAttrs()` method. **Note:** This option does not have an effect if"," the `view` instance is created as a result of calling this method."," @param {Function} [callback] Optional callback Function to call after the"," new `activeView` is ready to use. **Note:** this will override"," `options.callback` and it can be specified as either the third or fourth"," argument. The function will be passed the following:"," @param {View} callback.view A reference to the new `activeView`."," @chainable"," @since 3.5.0"," **/"," showView: function (view, config, options, callback) {"," var viewInfo, created;",""," options || (options = {});",""," // Support the callback function being either the third or fourth arg."," if (callback) {"," options = Y.merge(options, {callback: callback});"," } else if (Lang.isFunction(options)) {"," options = {callback: options};"," }",""," if (Lang.isString(view)) {"," viewInfo = this.getViewInfo(view);",""," // Use the preserved view instance, or create a new view."," // TODO: Maybe we can remove the strict check for `preserve` and"," // assume we'll use a View instance if it is there, and just check"," // `preserve` when detaching?"," if (viewInfo && viewInfo.preserve && viewInfo.instance) {"," view = viewInfo.instance;",""," // Make sure there's a mapping back to the view metadata."," this._viewInfoMap[Y.stamp(view, true)] = viewInfo;"," } else {"," // TODO: Add the app as a bubble target during construction, but"," // make sure to check that it isn't already in `bubbleTargets`!"," // This will allow the app to be notified for about _all_ of the"," // view's events. **Note:** This should _only_ happen if the"," // view is created _after_ `activeViewChange`.",""," view = this.createView(view, config);"," created = true;"," }"," }",""," // Update the specified or preserved `view` when signaled to do so."," // There's no need to updated a view if it was _just_ created."," if (options.update && !created) {"," view.setAttrs(config);"," }",""," // TODO: Hold off on rendering the view until after it has been"," // \"attached\", and move the call to render into `_attachView()`.",""," // When a value is specified for `options.render`, prefer it because it"," // represents the developer's intent. When no value is specified, the"," // `view` will only be rendered if it was just created."," if ('render' in options) {"," if (options.render) {"," view.render();"," }"," } else if (created) {"," view.render();"," }",""," return this._set('activeView', view, {options: options});"," },",""," // -- Protected Methods ----------------------------------------------------",""," /**"," Helper method to attach the view instance to the application by making the"," app a bubble target of the view, append the view to the `viewContainer`, and"," assign it to the `instance` property of the associated view info metadata.",""," @method _attachView"," @param {View} view View to attach."," @param {Boolean} prepend=false Whether the view should be prepended instead"," of appended to the `viewContainer`."," @protected"," @since 3.5.0"," **/"," _attachView: function (view, prepend) {"," if (!view) {"," return;"," }",""," var viewInfo = this.getViewInfo(view),"," viewContainer = this.get('viewContainer');",""," // Bubble the view's events to this app."," view.addTarget(this);",""," // Save the view instance in the `views` registry."," if (viewInfo) {"," viewInfo.instance = view;"," }",""," // TODO: Attach events here for persevered Views?"," // See related TODO in `_detachView`.",""," // TODO: Actually render the view here so that it gets \"attached\" before"," // it gets rendered?",""," // Insert view into the DOM."," viewContainer[prepend ? 'prepend' : 'append'](view.get('container'));"," },",""," /**"," Overrides View's container destruction to deal with the `viewContainer` and"," checks to make sure not to remove and purge the ``.",""," @method _destroyContainer"," @protected"," @see View._destroyContainer()"," **/"," _destroyContainer: function () {"," var CLASS_NAMES = Y.App.CLASS_NAMES,"," container = this.get('container'),"," viewContainer = this.get('viewContainer'),"," areSame = container.compareTo(viewContainer);",""," // We do not want to remove or destroy the ``."," if (Y.one('body').compareTo(container)) {"," // Just clean-up our events listeners."," this.detachEvents();",""," // Clean-up `yui3-app` CSS class on the `container`."," container.removeClass(CLASS_NAMES.app);",""," if (areSame) {"," // Clean-up `yui3-app-views` CSS class on the `container`."," container.removeClass(CLASS_NAMES.views);"," } else {"," // Destroy and purge the `viewContainer`."," viewContainer.remove(true);"," }",""," return;"," }",""," // Remove and purge events from both containers.",""," viewContainer.remove(true);",""," if (!areSame) {"," container.remove(true);"," }"," },",""," /**"," Helper method to detach the view instance from the application by removing"," the application as a bubble target of the view, and either just removing the"," view if it is intended to be preserved, or destroying the instance"," completely.",""," @method _detachView"," @param {View} view View to detach."," @protected"," @since 3.5.0"," **/"," _detachView: function (view) {"," if (!view) {"," return;"," }",""," var viewInfo = this.getViewInfo(view) || {};",""," if (viewInfo.preserve) {"," view.remove();"," // TODO: Detach events here for preserved Views? It is possible that"," // some event subscriptions are made on elements other than the"," // View's `container`."," } else {"," view.destroy({remove: true});",""," // TODO: The following should probably happen automagically from"," // `destroy()` being called! Possibly `removeTarget()` as well.",""," // Remove from view to view-info map."," delete this._viewInfoMap[Y.stamp(view, true)];",""," // Remove from view-info instance property."," if (view === viewInfo.instance) {"," delete viewInfo.instance;"," }"," }",""," view.removeTarget(this);"," },",""," /**"," Getter for the `viewContainer` attribute.",""," @method _getViewContainer"," @param {Node|null} value Current attribute value."," @return {Node} View container node."," @protected"," @since 3.5.0"," **/"," _getViewContainer: function (value) {"," // This wackiness is necessary to enable fully lazy creation of the"," // container node both when no container is specified and when one is"," // specified via a valueFn.",""," if (!value && !this._viewContainer) {"," // Create a default container and set that as the new attribute"," // value. The `this._viewContainer` property prevents infinite"," // recursion."," value = this._viewContainer = this.create();"," this._set('viewContainer', value);"," }",""," return value;"," },",""," /**"," Provides the default value for the `html5` attribute.",""," The value returned is dependent on the value of the `serverRouting`"," attribute. When `serverRouting` is explicit set to `false` (not just falsy),"," the default value for `html5` will be set to `false` for *all* browsers.",""," When `serverRouting` is `true` or `undefined` the returned value will be"," dependent on the browser's capability of using HTML5 history.",""," @method _initHtml5"," @return {Boolean} Whether or not HTML5 history should be used."," @protected"," @since 3.5.0"," **/"," _initHtml5: function () {"," // When `serverRouting` is explicitly set to `false` (not just falsy),"," // forcing hash-based URLs in all browsers."," if (this.get('serverRouting') === false) {"," return false;"," }",""," // Defaults to whether or not the browser supports HTML5 history."," return Router.html5;"," },",""," /**"," Determines if the specified `view` is configured as a child of the specified"," `parent` view. This requires both views to be either named-views, or view"," instances created using configuration data that exists in the `views`"," object, e.g. created by the `createView()` or `showView()` method.",""," @method _isChildView"," @param {View|String} view The name of a view defined in the `views` object,"," or a view instance."," @param {View|String} parent The name of a view defined in the `views`"," object, or a view instance."," @return {Boolean} Whether the view is configured as a child of the parent."," @protected"," @since 3.5.0"," **/"," _isChildView: function (view, parent) {"," var viewInfo = this.getViewInfo(view),"," parentInfo = this.getViewInfo(parent);",""," if (viewInfo && parentInfo) {"," return this.getViewInfo(viewInfo.parent) === parentInfo;"," }",""," return false;"," },",""," /**"," Determines if the specified `view` is configured as the parent of the"," specified `child` view. This requires both views to be either named-views,"," or view instances created using configuration data that exists in the"," `views` object, e.g. created by the `createView()` or `showView()` method.",""," @method _isParentView"," @param {View|String} view The name of a view defined in the `views` object,"," or a view instance."," @param {View|String} parent The name of a view defined in the `views`"," object, or a view instance."," @return {Boolean} Whether the view is configured as the parent of the child."," @protected"," @since 3.5.0"," **/"," _isParentView: function (view, child) {"," var viewInfo = this.getViewInfo(view),"," childInfo = this.getViewInfo(child);",""," if (viewInfo && childInfo) {"," return this.getViewInfo(childInfo.parent) === viewInfo;"," }",""," return false;"," },",""," /**"," Underlying implementation for `navigate()`.",""," @method _navigate"," @param {String} url The fully-resolved URL that the app should dispatch to"," its route handlers to fulfill the enhanced navigation \"request\", or use to"," update `window.location` in non-HTML5 history capable browsers when"," `serverRouting` is `true`."," @param {Object} [options] Additional options to configure the navigation."," These are mixed into the `navigate` event facade."," @param {Boolean} [options.replace] Whether or not the current history"," entry will be replaced, or a new entry will be created. Will default"," to `true` if the specified `url` is the same as the current URL."," @param {Boolean} [options.force] Whether the enhanced navigation"," should occur even in browsers without HTML5 history. Will default to"," `true` when `serverRouting` is falsy."," @protected"," @see PjaxBase._navigate()"," **/"," _navigate: function (url, options) {"," if (!this.get('serverRouting')) {"," // Force navigation to be enhanced and handled by the app when"," // `serverRouting` is falsy because the server might not be able to"," // properly handle the request."," options = Y.merge({force: true}, options);"," }",""," return PjaxBase.prototype._navigate.call(this, url, options);"," },",""," /**"," Will either save a history entry using `pushState()` or the location hash,"," or gracefully-degrade to sending a request to the server causing a full-page"," reload.",""," Overrides Router's `_save()` method to preform graceful-degradation when the"," app's `serverRouting` is `true` and `html5` is `false` by updating the full"," URL via standard assignment to `window.location` or by calling"," `window.location.replace()`; both of which will cause a request to the"," server resulting in a full-page reload.",""," Otherwise this will just delegate off to Router's `_save()` method allowing"," the client-side enhanced routing to occur.",""," @method _save"," @param {String} [url] URL for the history entry."," @param {Boolean} [replace=false] If `true`, the current history entry will"," be replaced instead of a new one being added."," @chainable"," @protected"," @see Router._save()"," **/"," _save: function (url, replace) {"," var path;",""," // Forces full-path URLs to always be used by modifying"," // `window.location` in non-HTML5 history capable browsers."," if (this.get('serverRouting') && !this.get('html5')) {"," // Perform same-origin check on the specified URL."," if (!this._hasSameOrigin(url)) {"," Y.error('Security error: The new URL must be of the same origin as the current URL.');"," return this;"," }",""," // Either replace the current history entry or create a new one"," // while navigating to the `url`."," if (win) {"," // Results in the URL's full path starting with '/'."," path = this._joinURL(url || '');",""," if (replace) {"," win.location.replace(path);"," } else {"," win.location = path;"," }"," }",""," return this;"," }",""," return Router.prototype._save.apply(this, arguments);"," },",""," /**"," Performs the actual change of this app's `activeView` by attaching the"," `newView` to this app, and detaching the `oldView` from this app using any"," specified `options`.",""," The `newView` is attached to the app by rendering it to the `viewContainer`,"," and making this app a bubble target of its events.",""," The `oldView` is detached from the app by removing it from the"," `viewContainer`, and removing this app as a bubble target for its events."," The `oldView` will either be preserved or properly destroyed.",""," **Note:** The `activeView` attribute is read-only and can be changed by"," calling the `showView()` method.",""," @method _uiSetActiveView"," @param {View} newView The View which is now this app's `activeView`."," @param {View} [oldView] The View which was this app's `activeView`."," @param {Object} [options] Optional object containing any of the following"," properties:"," @param {Function} [options.callback] Optional callback function to call"," after new `activeView` is ready to use, the function will be passed:"," @param {View} options.callback.view A reference to the new"," `activeView`."," @param {Boolean} [options.prepend=false] Whether the `view` should be"," prepended instead of appended to the `viewContainer`."," @param {Boolean} [options.render] Whether the `view` should be rendered."," **Note:** If no value is specified, a view instance will only be"," rendered if it's newly created by this method."," @param {Boolean} [options.update=false] Whether an existing view should"," have its attributes updated by passing the `config` object to its"," `setAttrs()` method. **Note:** This option does not have an effect if"," the `view` instance is created as a result of calling this method."," @protected"," @since 3.5.0"," **/"," _uiSetActiveView: function (newView, oldView, options) {"," options || (options = {});",""," var callback = options.callback,"," isChild = this._isChildView(newView, oldView),"," isParent = !isChild && this._isParentView(newView, oldView),"," prepend = !!options.prepend || isParent;",""," // Prevent detaching (thus removing) the view we want to show. Also hard"," // to animate out and in, the same view."," if (newView === oldView) {"," return callback && callback.call(this, newView);"," }",""," this._attachView(newView, prepend);"," this._detachView(oldView);",""," if (callback) {"," callback.call(this, newView);"," }"," },",""," // -- Protected Event Handlers ---------------------------------------------",""," /**"," Handles the application's `activeViewChange` event (which is fired when the"," `activeView` attribute changes) by detaching the old view, attaching the new"," view.",""," The `activeView` attribute is read-only, so the public API to change its"," value is through the `showView()` method.",""," @method _afterActiveViewChange"," @param {EventFacade} e"," @protected"," @since 3.5.0"," **/"," _afterActiveViewChange: function (e) {"," this._uiSetActiveView(e.newVal, e.prevVal, e.options);"," }","}, {"," ATTRS: {"," /**"," The application's active/visible view.",""," This attribute is read-only, to set the `activeView` use the"," `showView()` method.",""," @attribute activeView"," @type View"," @default null"," @readOnly"," @see App.Base.showView()"," @since 3.5.0"," **/"," activeView: {"," value : null,"," readOnly: true"," },",""," /**"," Container node which represents the application's bounding-box, into"," which this app's content will be rendered.",""," The container node serves as the host for all DOM events attached by the"," app. Delegation is used to handle events on children of the container,"," allowing the container's contents to be re-rendered at any time without"," losing event subscriptions.",""," The default container is the `` Node, but you can override this in"," a subclass, or by passing in a custom `container` config value at"," instantiation time.",""," When `container` is overridden by a subclass or passed as a config"," option at instantiation time, it may be provided as a selector string, a"," DOM element, or a `Y.Node` instance. During initialization, this app's"," `create()` method will be called to convert the container into a"," `Y.Node` instance if it isn't one already and stamp it with the CSS"," class: `\"yui3-app\"`.",""," The container is not added to the page automatically. This allows you to"," have full control over how and when your app is actually rendered to"," the page.",""," @attribute container"," @type HTMLElement|Node|String"," @default Y.one('body')"," @initOnly"," **/"," container: {"," valueFn: function () {"," return Y.one('body');"," }"," },",""," /**"," Whether or not this browser is capable of using HTML5 history.",""," This value is dependent on the value of `serverRouting` and will default"," accordingly.",""," Setting this to `false` will force the use of hash-based history even on"," HTML5 browsers, but please don't do this unless you understand the"," consequences.",""," @attribute html5"," @type Boolean"," @initOnly"," @see serverRouting"," **/"," html5: {"," valueFn: '_initHtml5'"," },",""," /**"," CSS selector string used to filter link click events so that only the"," links which match it will have the enhanced-navigation behavior of pjax"," applied.",""," When a link is clicked and that link matches this selector, navigating"," to the link's `href` URL using the enhanced, pjax, behavior will be"," attempted; and the browser's default way to navigate to new pages will"," be the fallback.",""," By default this selector will match _all_ links on the page.",""," @attribute linkSelector"," @type String|Function"," @default \"a\""," **/"," linkSelector: {"," value: 'a'"," },",""," /**"," Whether or not this application's server is capable of properly routing"," all requests and rendering the initial state in the HTML responses.",""," This can have three different values, each having particular"," implications on how the app will handle routing and navigation:",""," * `undefined`: The best form of URLs will be chosen based on the"," capabilities of the browser. Given no information about the server"," environmentm a balanced approach to routing and navigation is"," chosen.",""," The server should be capable of handling full-path requests, since"," full-URLs will be generated by browsers using HTML5 history. If this"," is a client-side-only app the server could handle full-URL requests"," by sending a redirect back to the root with a hash-based URL, e.g:",""," Request: http://example.com/users/1"," Redirect to: http://example.com/#/users/1",""," * `true`: The server is *fully* capable of properly handling requests"," to all full-path URLs the app can produce.",""," This is the best option for progressive-enhancement because it will"," cause **all URLs to always have full-paths**, which means the server"," will be able to accurately handle all URLs this app produces. e.g.",""," http://example.com/users/1",""," To meet this strict full-URL requirement, browsers which are not"," capable of using HTML5 history will make requests to the server"," resulting in full-page reloads.",""," * `false`: The server is *not* capable of properly handling requests"," to all full-path URLs the app can produce, therefore all routing"," will be handled by this App instance.",""," Be aware that this will cause **all URLs to always be hash-based**,"," even in browsers that are capable of using HTML5 history. e.g.",""," http://example.com/#/users/1",""," A single-page or client-side-only app where the server sends a"," \"shell\" page with JavaScript to the client might have this"," restriction. If you're setting this to `false`, read the following:",""," **Note:** When this is set to `false`, the server will *never* receive"," the full URL because browsers do not send the fragment-part to the"," server, that is everything after and including the \"#\".",""," Consider the following example:",""," URL shown in browser: http://example.com/#/users/1"," URL sent to server: http://example.com/",""," You should feel bad about hurting our precious web if you forcefully set"," either `serverRouting` or `html5` to `false`, because you're basically"," punching the web in the face here with your lossy URLs! Please make sure"," you know what you're doing and that you understand the implications.",""," Ideally you should always prefer full-path URLs (not /#/foo/), and want"," full-page reloads when the client's browser is not capable of enhancing"," the experience using the HTML5 history APIs. Setting this to `true` is"," the best option for progressive-enhancement (and graceful-degradation).",""," @attribute serverRouting"," @type Boolean"," @default undefined"," @initOnly"," @since 3.5.0"," **/"," serverRouting: {"," valueFn : function () { return Y.App.serverRouting; },"," writeOnce: 'initOnly'"," },",""," /**"," The node into which this app's `views` will be rendered when they become"," the `activeView`.",""," The view container node serves as the container to hold the app's"," `activeView`. Each time the `activeView` is set via `showView()`, the"," previous view will be removed from this node, and the new active view's"," `container` node will be appended.",""," The default view container is a `
` Node, but you can override this"," in a subclass, or by passing in a custom `viewContainer` config value at"," instantiation time. The `viewContainer` may be provided as a selector"," string, DOM element, or a `Y.Node` instance (having the `viewContainer`"," and the `container` be the same node is also supported).",""," The app's `render()` method will stamp the view container with the CSS"," class `\"yui3-app-views\"` and append it to the app's `container` node if"," it isn't already, and any `activeView` will be appended to this node if"," it isn't already.",""," @attribute viewContainer"," @type HTMLElement|Node|String"," @default Y.Node.create(this.containerTemplate)"," @initOnly"," @since 3.5.0"," **/"," viewContainer: {"," getter : '_getViewContainer',"," setter : Y.one,"," writeOnce: true"," }"," },",""," /**"," Properties that shouldn't be turned into ad-hoc attributes when passed to"," App's constructor.",""," @property _NON_ATTRS_CFG"," @type Array"," @static"," @protected"," @since 3.5.0"," **/"," _NON_ATTRS_CFG: ['views']","});","","// -- Namespace ----------------------------------------------------------------","Y.namespace('App').Base = AppBase;","","/**","Provides a top-level application component which manages navigation and views.","","This gives you a foundation and structure on which to build your application; it","combines robust URL navigation with powerful routing and flexible view","management.","","`Y.App` is both a namespace and constructor function. The `Y.App` class is","special in that any `Y.App` class extensions that are included in the YUI","instance will be **auto-mixed** on to the `Y.App` class. Consider this example:",""," YUI().use('app-base', 'app-transitions', function (Y) {"," // This will create two YUI Apps, `basicApp` will not have transitions,"," // but `fancyApp` will have transitions support included and turn it on."," var basicApp = new Y.App.Base(),"," fancyApp = new Y.App({transitions: true});"," });","","@class App","@param {Object} [config] The following are configuration properties that can be"," specified _in addition_ to default attribute values and the non-attribute"," properties provided by `Y.Base`:"," @param {Object} [config.views] Hash of view-name to metadata used to"," declaratively describe an application's views and their relationship with"," the app and other views. The views specified here will override any defaults"," provided by the `views` object on the `prototype`.","@constructor","@extends App.Base","@uses App.Content","@uses App.Transitions","@uses PjaxContent","@since 3.5.0","**/","Y.App = Y.mix(Y.Base.create('app', AppBase, []), Y.App, true);","","/**","CSS classes used by `Y.App`.","","@property CLASS_NAMES","@type Object","@default {}","@static","@since 3.6.0","**/","Y.App.CLASS_NAMES = {"," app : getClassName('app'),"," views: getClassName('app', 'views')","};","","/**","Default `serverRouting` attribute value for all apps.","","@property serverRouting","@type Boolean","@default undefined","@static","@since 3.6.0","**/","","","}, '3.9.0', {\"requires\": [\"classnamemanager\", \"pjax-base\", \"router\", \"view\"]});"]; +_yuitest_coverage["build/app-base/app-base.js"].lines = {"1":0,"40":0,"75":0,"151":0,"153":0,"156":0,"157":0,"162":0,"166":0,"170":0,"171":0,"174":0,"178":0,"179":0,"202":0,"207":0,"211":0,"212":0,"214":0,"229":0,"230":0,"233":0,"286":0,"293":0,"294":0,"297":0,"298":0,"302":0,"303":0,"306":0,"376":0,"378":0,"381":0,"382":0,"383":0,"384":0,"387":0,"388":0,"394":0,"395":0,"398":0,"406":0,"407":0,"413":0,"414":0,"423":0,"424":0,"425":0,"427":0,"428":0,"431":0,"449":0,"450":0,"453":0,"457":0,"460":0,"461":0,"471":0,"483":0,"489":0,"491":0,"494":0,"496":0,"498":0,"501":0,"504":0,"509":0,"511":0,"512":0,"528":0,"529":0,"532":0,"534":0,"535":0,"540":0,"546":0,"549":0,"550":0,"554":0,"571":0,"575":0,"576":0,"579":0,"600":0,"601":0,"605":0,"624":0,"627":0,"628":0,"631":0,"650":0,"653":0,"654":0,"657":0,"680":0,"684":0,"687":0,"713":0,"717":0,"719":0,"720":0,"721":0,"726":0,"728":0,"730":0,"731":0,"733":0,"737":0,"740":0,"780":0,"782":0,"789":0,"790":0,"793":0,"794":0,"796":0,"797":0,"817":0,"870":0,"985":0,"1036":0,"1071":0,"1082":0}; +_yuitest_coverage["build/app-base/app-base.js"].functions = {"mergeViewConfig:156":0,"initializer:150":0,"createView:201":0,"getViewInfo:228":0,"render:285":0,"showView:375":0,"_attachView:448":0,"_destroyContainer:482":0,"_detachView:527":0,"_getViewContainer:566":0,"_initHtml5:597":0,"_isChildView:623":0,"_isParentView:649":0,"_navigate:679":0,"_save:712":0,"_uiSetActiveView:779":0,"_afterActiveViewChange:816":0,"valueFn:869":0,"valueFn:985":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/app-base/app-base.js"].coveredLines = 123; +_yuitest_coverage["build/app-base/app-base.js"].coveredFunctions = 20; +_yuitest_coverline("build/app-base/app-base.js", 1); +YUI.add('app-base', function (Y, NAME) { + +/** +The App Framework provides simple MVC-like building blocks (models, model lists, +views, and URL-based routing) for writing single-page JavaScript applications. + +@main app +@module app +@since 3.4.0 +**/ + +/** +Provides a top-level application component which manages navigation and views. + +@module app +@submodule app-base +@since 3.5.0 +**/ + +// TODO: Better handling of lifecycle for registered views: +// +// * [!] Just redo basically everything with view management so there are no +// pre-`activeViewChange` side effects and handle the rest of these things: +// +// * Seems like any view created via `createView` should listen for the view's +// `destroy` event and use that to remove it from the `_viewsInfoMap`. I +// should look at what ModelList does for Models as a reference. +// +// * Should we have a companion `destroyView()` method? Maybe this wouldn't be +// needed if we have a `getView(name, create)` method, and already doing the +// above? We could do `app.getView('foo').destroy()` and it would be removed +// from the `_viewsInfoMap` as well. +// +// * Should we wait to call a view's `render()` method inside of the +// `_attachView()` method? +// +// * Should named views support a collection of instances instead of just one? +// + +_yuitest_coverfunc("build/app-base/app-base.js", "(anonymous 1)", 1); +_yuitest_coverline("build/app-base/app-base.js", 40); +var Lang = Y.Lang, + YObject = Y.Object, + + PjaxBase = Y.PjaxBase, + Router = Y.Router, + View = Y.View, + + getClassName = Y.ClassNameManager.getClassName, + + win = Y.config.win, + + AppBase; + +/** +Provides a top-level application component which manages navigation and views. + +This gives you a foundation and structure on which to build your application; it +combines robust URL navigation with powerful routing and flexible view +management. + +@class App.Base +@param {Object} [config] The following are configuration properties that can be + specified _in addition_ to default attribute values and the non-attribute + properties provided by `Y.Base`: + @param {Object} [config.views] Hash of view-name to metadata used to + declaratively describe an application's views and their relationship with + the app and other views. The views specified here will override any defaults + provided by the `views` object on the `prototype`. +@constructor +@extends Base +@uses View +@uses Router +@uses PjaxBase +@since 3.5.0 +**/ +_yuitest_coverline("build/app-base/app-base.js", 75); +AppBase = Y.Base.create('app', Y.Base, [View, Router, PjaxBase], { + // -- Public Properties ---------------------------------------------------- + + /** + Hash of view-name to metadata used to declaratively describe an + application's views and their relationship with the app and its other views. + + The view metadata is composed of Objects keyed to a view-name that can have + any or all of the following properties: + + * `type`: Function or a string representing the view constructor to use to + create view instances. If a string is used, the constructor function is + assumed to be on the `Y` object; e.g. `"SomeView"` -> `Y.SomeView`. + + * `preserve`: Boolean for whether the view instance should be retained. By + default, the view instance will be destroyed when it is no longer the + `activeView`. If `true` the view instance will simply be `removed()` + from the DOM when it is no longer active. This is useful when the view + is frequently used and may be expensive to re-create. + + * `parent`: String to another named view in this hash that represents the + parent view within the application's view hierarchy; e.g. a `"photo"` + view could have `"album"` has its `parent` view. This parent/child + relationship is a useful cue for things like transitions. + + * `instance`: Used internally to manage the current instance of this named + view. This can be used if your view instance is created up-front, or if + you would rather manage the View lifecycle, but you probably should just + let this be handled for you. + + If `views` are specified at instantiation time, the metadata in the `views` + Object here will be used as defaults when creating the instance's `views`. + + Every `Y.App` instance gets its own copy of a `views` object so this Object + on the prototype will not be polluted. + + @example + // Imagine that `Y.UsersView` and `Y.UserView` have been defined. + var app = new Y.App({ + views: { + users: { + type : Y.UsersView, + preserve: true + }, + + user: { + type : Y.UserView, + parent: 'users' + } + } + }); + + @property views + @type Object + @default {} + @since 3.5.0 + **/ + views: {}, + + // -- Protected Properties ------------------------------------------------- + + /** + Map of view instance id (via `Y.stamp()`) to view-info object in `views`. + + This mapping is used to tie a specific view instance back to its metadata by + adding a reference to the the related view info on the `views` object. + + @property _viewInfoMap + @type Object + @default {} + @protected + @since 3.5.0 + **/ + + // -- Lifecycle Methods ---------------------------------------------------- + initializer: function (config) { + _yuitest_coverfunc("build/app-base/app-base.js", "initializer", 150); +_yuitest_coverline("build/app-base/app-base.js", 151); +config || (config = {}); + + _yuitest_coverline("build/app-base/app-base.js", 153); +var views = {}; + + // Merges-in specified view metadata into local `views` object. + _yuitest_coverline("build/app-base/app-base.js", 156); +function mergeViewConfig(view, name) { + _yuitest_coverfunc("build/app-base/app-base.js", "mergeViewConfig", 156); +_yuitest_coverline("build/app-base/app-base.js", 157); +views[name] = Y.merge(views[name], view); + } + + // First, each view in the `views` prototype object gets its metadata + // merged-in, providing the defaults. + _yuitest_coverline("build/app-base/app-base.js", 162); +YObject.each(this.views, mergeViewConfig); + + // Then, each view in the specified `config.views` object gets its + // metadata merged-in. + _yuitest_coverline("build/app-base/app-base.js", 166); +YObject.each(config.views, mergeViewConfig); + + // The resulting hodgepodge of metadata is then stored as the instance's + // `views` object, and no one's objects were harmed in the making. + _yuitest_coverline("build/app-base/app-base.js", 170); +this.views = views; + _yuitest_coverline("build/app-base/app-base.js", 171); +this._viewInfoMap = {}; + + // Using `bind()` to aid extensibility. + _yuitest_coverline("build/app-base/app-base.js", 174); +this.after('activeViewChange', Y.bind('_afterActiveViewChange', this)); + + // PjaxBase will bind click events when `html5` is `true`, so this just + // forces the binding when `serverRouting` and `html5` are both falsy. + _yuitest_coverline("build/app-base/app-base.js", 178); +if (!this.get('serverRouting')) { + _yuitest_coverline("build/app-base/app-base.js", 179); +this._pjaxBindUI(); + } + }, + + // TODO: `destructor` to destroy the `activeView`? + + // -- Public Methods ------------------------------------------------------- + + /** + Creates and returns a new view instance using the provided `name` to look up + the view info metadata defined in the `views` object. The passed-in `config` + object is passed to the view constructor function. + + This function also maps a view instance back to its view info metadata. + + @method createView + @param {String} name The name of a view defined on the `views` object. + @param {Object} [config] The configuration object passed to the view + constructor function when creating the new view instance. + @return {View} The new view instance. + @since 3.5.0 + **/ + createView: function (name, config) { + _yuitest_coverfunc("build/app-base/app-base.js", "createView", 201); +_yuitest_coverline("build/app-base/app-base.js", 202); +var viewInfo = this.getViewInfo(name), + type = (viewInfo && viewInfo.type) || View, + ViewConstructor, view; + + // Looks for a namespaced constructor function on `Y`. + _yuitest_coverline("build/app-base/app-base.js", 207); +ViewConstructor = Lang.isString(type) ? + YObject.getValue(Y, type.split('.')) : type; + + // Create the view instance and map it with its metadata. + _yuitest_coverline("build/app-base/app-base.js", 211); +view = new ViewConstructor(config); + _yuitest_coverline("build/app-base/app-base.js", 212); +this._viewInfoMap[Y.stamp(view, true)] = viewInfo; + + _yuitest_coverline("build/app-base/app-base.js", 214); +return view; + }, + + /** + Returns the metadata associated with a view instance or view name defined on + the `views` object. + + @method getViewInfo + @param {View|String} view View instance, or name of a view defined on the + `views` object. + @return {Object} The metadata for the view, or `undefined` if the view is + not registered. + @since 3.5.0 + **/ + getViewInfo: function (view) { + _yuitest_coverfunc("build/app-base/app-base.js", "getViewInfo", 228); +_yuitest_coverline("build/app-base/app-base.js", 229); +if (Lang.isString(view)) { + _yuitest_coverline("build/app-base/app-base.js", 230); +return this.views[view]; + } + + _yuitest_coverline("build/app-base/app-base.js", 233); +return view && this._viewInfoMap[Y.stamp(view, true)]; + }, + + /** + Navigates to the specified URL if there is a route handler that matches. In + browsers capable of using HTML5 history or when `serverRouting` is falsy, + the navigation will be enhanced by firing the `navigate` event and having + the app handle the "request". When `serverRouting` is `true`, non-HTML5 + browsers will navigate to the new URL via a full page reload. + + When there is a route handler for the specified URL and it is being + navigated to, this method will return `true`, otherwise it will return + `false`. + + **Note:** The specified URL _must_ be of the same origin as the current URL, + otherwise an error will be logged and navigation will not occur. This is + intended as both a security constraint and a purposely imposed limitation as + it does not make sense to tell the app to navigate to a URL on a + different scheme, host, or port. + + @method navigate + @param {String} url The URL to navigate to. This must be of the same origin + as the current URL. + @param {Object} [options] Additional options to configure the navigation. + These are mixed into the `navigate` event facade. + @param {Boolean} [options.replace] Whether or not the current history + entry will be replaced, or a new entry will be created. Will default + to `true` if the specified `url` is the same as the current URL. + @param {Boolean} [options.force] Whether the enhanced navigation + should occur even in browsers without HTML5 history. Will default to + `true` when `serverRouting` is falsy. + @see PjaxBase.navigate() + **/ + // Does not override `navigate()` but does use extra `options`. + + /** + Renders this application by appending the `viewContainer` node to the + `container` node if it isn't already a child of the container, and the + `activeView` will be appended the view container, if it isn't already. + + You should call this method at least once, usually after the initialization + of your app instance so the proper DOM structure is setup and optionally + append the container to the DOM if it's not there already. + + You may override this method to customize the app's rendering, but you + should expect that the `viewContainer`'s contents will be modified by the + app for the purpose of rendering the `activeView` when it changes. + + @method render + @chainable + @see View.render() + **/ + render: function () { + _yuitest_coverfunc("build/app-base/app-base.js", "render", 285); +_yuitest_coverline("build/app-base/app-base.js", 286); +var CLASS_NAMES = Y.App.CLASS_NAMES, + container = this.get('container'), + viewContainer = this.get('viewContainer'), + activeView = this.get('activeView'), + activeViewContainer = activeView && activeView.get('container'), + areSame = container.compareTo(viewContainer); + + _yuitest_coverline("build/app-base/app-base.js", 293); +container.addClass(CLASS_NAMES.app); + _yuitest_coverline("build/app-base/app-base.js", 294); +viewContainer.addClass(CLASS_NAMES.views); + + // Prevents needless shuffling around of nodes and maintains DOM order. + _yuitest_coverline("build/app-base/app-base.js", 297); +if (activeView && !viewContainer.contains(activeViewContainer)) { + _yuitest_coverline("build/app-base/app-base.js", 298); +viewContainer.appendChild(activeViewContainer); + } + + // Prevents needless shuffling around of nodes and maintains DOM order. + _yuitest_coverline("build/app-base/app-base.js", 302); +if (!container.contains(viewContainer) && !areSame) { + _yuitest_coverline("build/app-base/app-base.js", 303); +container.appendChild(viewContainer); + } + + _yuitest_coverline("build/app-base/app-base.js", 306); +return this; + }, + + /** + Sets which view is active/visible for the application. This will set the + app's `activeView` attribute to the specified `view`. + + The `view` will be "attached" to this app, meaning it will be both rendered + into this app's `viewContainer` node and all of its events will bubble to + the app. The previous `activeView` will be "detached" from this app. + + When a string-name is provided for a view which has been registered on this + app's `views` object, the referenced metadata will be used and the + `activeView` will be set to either a preserved view instance, or a new + instance of the registered view will be created using the specified `config` + object passed-into this method. + + A callback function can be specified as either the third or fourth argument, + and this function will be called after the new `view` becomes the + `activeView`, is rendered to the `viewContainer`, and is ready to use. + + @example + var app = new Y.App({ + views: { + usersView: { + // Imagine that `Y.UsersView` has been defined. + type: Y.UsersView + } + }, + + users: new Y.ModelList() + }); + + app.route('/users/', function () { + this.showView('usersView', {users: this.get('users')}); + }); + + app.render(); + app.navigate('/uses/'); // => Creates a new `Y.UsersView` and shows it. + + @method showView + @param {String|View} view The name of a view defined in the `views` object, + or a view instance which should become this app's `activeView`. + @param {Object} [config] Optional configuration to use when creating a new + view instance. This config object can also be used to update an existing + or preserved view's attributes when `options.update` is `true`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @param {Function} [callback] Optional callback Function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the third or fourth + argument. The function will be passed the following: + @param {View} callback.view A reference to the new `activeView`. + @chainable + @since 3.5.0 + **/ + showView: function (view, config, options, callback) { + _yuitest_coverfunc("build/app-base/app-base.js", "showView", 375); +_yuitest_coverline("build/app-base/app-base.js", 376); +var viewInfo, created; + + _yuitest_coverline("build/app-base/app-base.js", 378); +options || (options = {}); + + // Support the callback function being either the third or fourth arg. + _yuitest_coverline("build/app-base/app-base.js", 381); +if (callback) { + _yuitest_coverline("build/app-base/app-base.js", 382); +options = Y.merge(options, {callback: callback}); + } else {_yuitest_coverline("build/app-base/app-base.js", 383); +if (Lang.isFunction(options)) { + _yuitest_coverline("build/app-base/app-base.js", 384); +options = {callback: options}; + }} + + _yuitest_coverline("build/app-base/app-base.js", 387); +if (Lang.isString(view)) { + _yuitest_coverline("build/app-base/app-base.js", 388); +viewInfo = this.getViewInfo(view); + + // Use the preserved view instance, or create a new view. + // TODO: Maybe we can remove the strict check for `preserve` and + // assume we'll use a View instance if it is there, and just check + // `preserve` when detaching? + _yuitest_coverline("build/app-base/app-base.js", 394); +if (viewInfo && viewInfo.preserve && viewInfo.instance) { + _yuitest_coverline("build/app-base/app-base.js", 395); +view = viewInfo.instance; + + // Make sure there's a mapping back to the view metadata. + _yuitest_coverline("build/app-base/app-base.js", 398); +this._viewInfoMap[Y.stamp(view, true)] = viewInfo; + } else { + // TODO: Add the app as a bubble target during construction, but + // make sure to check that it isn't already in `bubbleTargets`! + // This will allow the app to be notified for about _all_ of the + // view's events. **Note:** This should _only_ happen if the + // view is created _after_ `activeViewChange`. + + _yuitest_coverline("build/app-base/app-base.js", 406); +view = this.createView(view, config); + _yuitest_coverline("build/app-base/app-base.js", 407); +created = true; + } + } + + // Update the specified or preserved `view` when signaled to do so. + // There's no need to updated a view if it was _just_ created. + _yuitest_coverline("build/app-base/app-base.js", 413); +if (options.update && !created) { + _yuitest_coverline("build/app-base/app-base.js", 414); +view.setAttrs(config); + } + + // TODO: Hold off on rendering the view until after it has been + // "attached", and move the call to render into `_attachView()`. + + // When a value is specified for `options.render`, prefer it because it + // represents the developer's intent. When no value is specified, the + // `view` will only be rendered if it was just created. + _yuitest_coverline("build/app-base/app-base.js", 423); +if ('render' in options) { + _yuitest_coverline("build/app-base/app-base.js", 424); +if (options.render) { + _yuitest_coverline("build/app-base/app-base.js", 425); +view.render(); + } + } else {_yuitest_coverline("build/app-base/app-base.js", 427); +if (created) { + _yuitest_coverline("build/app-base/app-base.js", 428); +view.render(); + }} + + _yuitest_coverline("build/app-base/app-base.js", 431); +return this._set('activeView', view, {options: options}); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Helper method to attach the view instance to the application by making the + app a bubble target of the view, append the view to the `viewContainer`, and + assign it to the `instance` property of the associated view info metadata. + + @method _attachView + @param {View} view View to attach. + @param {Boolean} prepend=false Whether the view should be prepended instead + of appended to the `viewContainer`. + @protected + @since 3.5.0 + **/ + _attachView: function (view, prepend) { + _yuitest_coverfunc("build/app-base/app-base.js", "_attachView", 448); +_yuitest_coverline("build/app-base/app-base.js", 449); +if (!view) { + _yuitest_coverline("build/app-base/app-base.js", 450); +return; + } + + _yuitest_coverline("build/app-base/app-base.js", 453); +var viewInfo = this.getViewInfo(view), + viewContainer = this.get('viewContainer'); + + // Bubble the view's events to this app. + _yuitest_coverline("build/app-base/app-base.js", 457); +view.addTarget(this); + + // Save the view instance in the `views` registry. + _yuitest_coverline("build/app-base/app-base.js", 460); +if (viewInfo) { + _yuitest_coverline("build/app-base/app-base.js", 461); +viewInfo.instance = view; + } + + // TODO: Attach events here for persevered Views? + // See related TODO in `_detachView`. + + // TODO: Actually render the view here so that it gets "attached" before + // it gets rendered? + + // Insert view into the DOM. + _yuitest_coverline("build/app-base/app-base.js", 471); +viewContainer[prepend ? 'prepend' : 'append'](view.get('container')); + }, + + /** + Overrides View's container destruction to deal with the `viewContainer` and + checks to make sure not to remove and purge the ``. + + @method _destroyContainer + @protected + @see View._destroyContainer() + **/ + _destroyContainer: function () { + _yuitest_coverfunc("build/app-base/app-base.js", "_destroyContainer", 482); +_yuitest_coverline("build/app-base/app-base.js", 483); +var CLASS_NAMES = Y.App.CLASS_NAMES, + container = this.get('container'), + viewContainer = this.get('viewContainer'), + areSame = container.compareTo(viewContainer); + + // We do not want to remove or destroy the ``. + _yuitest_coverline("build/app-base/app-base.js", 489); +if (Y.one('body').compareTo(container)) { + // Just clean-up our events listeners. + _yuitest_coverline("build/app-base/app-base.js", 491); +this.detachEvents(); + + // Clean-up `yui3-app` CSS class on the `container`. + _yuitest_coverline("build/app-base/app-base.js", 494); +container.removeClass(CLASS_NAMES.app); + + _yuitest_coverline("build/app-base/app-base.js", 496); +if (areSame) { + // Clean-up `yui3-app-views` CSS class on the `container`. + _yuitest_coverline("build/app-base/app-base.js", 498); +container.removeClass(CLASS_NAMES.views); + } else { + // Destroy and purge the `viewContainer`. + _yuitest_coverline("build/app-base/app-base.js", 501); +viewContainer.remove(true); + } + + _yuitest_coverline("build/app-base/app-base.js", 504); +return; + } + + // Remove and purge events from both containers. + + _yuitest_coverline("build/app-base/app-base.js", 509); +viewContainer.remove(true); + + _yuitest_coverline("build/app-base/app-base.js", 511); +if (!areSame) { + _yuitest_coverline("build/app-base/app-base.js", 512); +container.remove(true); + } + }, + + /** + Helper method to detach the view instance from the application by removing + the application as a bubble target of the view, and either just removing the + view if it is intended to be preserved, or destroying the instance + completely. + + @method _detachView + @param {View} view View to detach. + @protected + @since 3.5.0 + **/ + _detachView: function (view) { + _yuitest_coverfunc("build/app-base/app-base.js", "_detachView", 527); +_yuitest_coverline("build/app-base/app-base.js", 528); +if (!view) { + _yuitest_coverline("build/app-base/app-base.js", 529); +return; + } + + _yuitest_coverline("build/app-base/app-base.js", 532); +var viewInfo = this.getViewInfo(view) || {}; + + _yuitest_coverline("build/app-base/app-base.js", 534); +if (viewInfo.preserve) { + _yuitest_coverline("build/app-base/app-base.js", 535); +view.remove(); + // TODO: Detach events here for preserved Views? It is possible that + // some event subscriptions are made on elements other than the + // View's `container`. + } else { + _yuitest_coverline("build/app-base/app-base.js", 540); +view.destroy({remove: true}); + + // TODO: The following should probably happen automagically from + // `destroy()` being called! Possibly `removeTarget()` as well. + + // Remove from view to view-info map. + _yuitest_coverline("build/app-base/app-base.js", 546); +delete this._viewInfoMap[Y.stamp(view, true)]; + + // Remove from view-info instance property. + _yuitest_coverline("build/app-base/app-base.js", 549); +if (view === viewInfo.instance) { + _yuitest_coverline("build/app-base/app-base.js", 550); +delete viewInfo.instance; + } + } + + _yuitest_coverline("build/app-base/app-base.js", 554); +view.removeTarget(this); + }, + + /** + Getter for the `viewContainer` attribute. + + @method _getViewContainer + @param {Node|null} value Current attribute value. + @return {Node} View container node. + @protected + @since 3.5.0 + **/ + _getViewContainer: function (value) { + // This wackiness is necessary to enable fully lazy creation of the + // container node both when no container is specified and when one is + // specified via a valueFn. + + _yuitest_coverfunc("build/app-base/app-base.js", "_getViewContainer", 566); +_yuitest_coverline("build/app-base/app-base.js", 571); +if (!value && !this._viewContainer) { + // Create a default container and set that as the new attribute + // value. The `this._viewContainer` property prevents infinite + // recursion. + _yuitest_coverline("build/app-base/app-base.js", 575); +value = this._viewContainer = this.create(); + _yuitest_coverline("build/app-base/app-base.js", 576); +this._set('viewContainer', value); + } + + _yuitest_coverline("build/app-base/app-base.js", 579); +return value; + }, + + /** + Provides the default value for the `html5` attribute. + + The value returned is dependent on the value of the `serverRouting` + attribute. When `serverRouting` is explicit set to `false` (not just falsy), + the default value for `html5` will be set to `false` for *all* browsers. + + When `serverRouting` is `true` or `undefined` the returned value will be + dependent on the browser's capability of using HTML5 history. + + @method _initHtml5 + @return {Boolean} Whether or not HTML5 history should be used. + @protected + @since 3.5.0 + **/ + _initHtml5: function () { + // When `serverRouting` is explicitly set to `false` (not just falsy), + // forcing hash-based URLs in all browsers. + _yuitest_coverfunc("build/app-base/app-base.js", "_initHtml5", 597); +_yuitest_coverline("build/app-base/app-base.js", 600); +if (this.get('serverRouting') === false) { + _yuitest_coverline("build/app-base/app-base.js", 601); +return false; + } + + // Defaults to whether or not the browser supports HTML5 history. + _yuitest_coverline("build/app-base/app-base.js", 605); +return Router.html5; + }, + + /** + Determines if the specified `view` is configured as a child of the specified + `parent` view. This requires both views to be either named-views, or view + instances created using configuration data that exists in the `views` + object, e.g. created by the `createView()` or `showView()` method. + + @method _isChildView + @param {View|String} view The name of a view defined in the `views` object, + or a view instance. + @param {View|String} parent The name of a view defined in the `views` + object, or a view instance. + @return {Boolean} Whether the view is configured as a child of the parent. + @protected + @since 3.5.0 + **/ + _isChildView: function (view, parent) { + _yuitest_coverfunc("build/app-base/app-base.js", "_isChildView", 623); +_yuitest_coverline("build/app-base/app-base.js", 624); +var viewInfo = this.getViewInfo(view), + parentInfo = this.getViewInfo(parent); + + _yuitest_coverline("build/app-base/app-base.js", 627); +if (viewInfo && parentInfo) { + _yuitest_coverline("build/app-base/app-base.js", 628); +return this.getViewInfo(viewInfo.parent) === parentInfo; + } + + _yuitest_coverline("build/app-base/app-base.js", 631); +return false; + }, + + /** + Determines if the specified `view` is configured as the parent of the + specified `child` view. This requires both views to be either named-views, + or view instances created using configuration data that exists in the + `views` object, e.g. created by the `createView()` or `showView()` method. + + @method _isParentView + @param {View|String} view The name of a view defined in the `views` object, + or a view instance. + @param {View|String} parent The name of a view defined in the `views` + object, or a view instance. + @return {Boolean} Whether the view is configured as the parent of the child. + @protected + @since 3.5.0 + **/ + _isParentView: function (view, child) { + _yuitest_coverfunc("build/app-base/app-base.js", "_isParentView", 649); +_yuitest_coverline("build/app-base/app-base.js", 650); +var viewInfo = this.getViewInfo(view), + childInfo = this.getViewInfo(child); + + _yuitest_coverline("build/app-base/app-base.js", 653); +if (viewInfo && childInfo) { + _yuitest_coverline("build/app-base/app-base.js", 654); +return this.getViewInfo(childInfo.parent) === viewInfo; + } + + _yuitest_coverline("build/app-base/app-base.js", 657); +return false; + }, + + /** + Underlying implementation for `navigate()`. + + @method _navigate + @param {String} url The fully-resolved URL that the app should dispatch to + its route handlers to fulfill the enhanced navigation "request", or use to + update `window.location` in non-HTML5 history capable browsers when + `serverRouting` is `true`. + @param {Object} [options] Additional options to configure the navigation. + These are mixed into the `navigate` event facade. + @param {Boolean} [options.replace] Whether or not the current history + entry will be replaced, or a new entry will be created. Will default + to `true` if the specified `url` is the same as the current URL. + @param {Boolean} [options.force] Whether the enhanced navigation + should occur even in browsers without HTML5 history. Will default to + `true` when `serverRouting` is falsy. + @protected + @see PjaxBase._navigate() + **/ + _navigate: function (url, options) { + _yuitest_coverfunc("build/app-base/app-base.js", "_navigate", 679); +_yuitest_coverline("build/app-base/app-base.js", 680); +if (!this.get('serverRouting')) { + // Force navigation to be enhanced and handled by the app when + // `serverRouting` is falsy because the server might not be able to + // properly handle the request. + _yuitest_coverline("build/app-base/app-base.js", 684); +options = Y.merge({force: true}, options); + } + + _yuitest_coverline("build/app-base/app-base.js", 687); +return PjaxBase.prototype._navigate.call(this, url, options); + }, + + /** + Will either save a history entry using `pushState()` or the location hash, + or gracefully-degrade to sending a request to the server causing a full-page + reload. + + Overrides Router's `_save()` method to preform graceful-degradation when the + app's `serverRouting` is `true` and `html5` is `false` by updating the full + URL via standard assignment to `window.location` or by calling + `window.location.replace()`; both of which will cause a request to the + server resulting in a full-page reload. + + Otherwise this will just delegate off to Router's `_save()` method allowing + the client-side enhanced routing to occur. + + @method _save + @param {String} [url] URL for the history entry. + @param {Boolean} [replace=false] If `true`, the current history entry will + be replaced instead of a new one being added. + @chainable + @protected + @see Router._save() + **/ + _save: function (url, replace) { + _yuitest_coverfunc("build/app-base/app-base.js", "_save", 712); +_yuitest_coverline("build/app-base/app-base.js", 713); +var path; + + // Forces full-path URLs to always be used by modifying + // `window.location` in non-HTML5 history capable browsers. + _yuitest_coverline("build/app-base/app-base.js", 717); +if (this.get('serverRouting') && !this.get('html5')) { + // Perform same-origin check on the specified URL. + _yuitest_coverline("build/app-base/app-base.js", 719); +if (!this._hasSameOrigin(url)) { + _yuitest_coverline("build/app-base/app-base.js", 720); +Y.error('Security error: The new URL must be of the same origin as the current URL.'); + _yuitest_coverline("build/app-base/app-base.js", 721); +return this; + } + + // Either replace the current history entry or create a new one + // while navigating to the `url`. + _yuitest_coverline("build/app-base/app-base.js", 726); +if (win) { + // Results in the URL's full path starting with '/'. + _yuitest_coverline("build/app-base/app-base.js", 728); +path = this._joinURL(url || ''); + + _yuitest_coverline("build/app-base/app-base.js", 730); +if (replace) { + _yuitest_coverline("build/app-base/app-base.js", 731); +win.location.replace(path); + } else { + _yuitest_coverline("build/app-base/app-base.js", 733); +win.location = path; + } + } + + _yuitest_coverline("build/app-base/app-base.js", 737); +return this; + } + + _yuitest_coverline("build/app-base/app-base.js", 740); +return Router.prototype._save.apply(this, arguments); + }, + + /** + Performs the actual change of this app's `activeView` by attaching the + `newView` to this app, and detaching the `oldView` from this app using any + specified `options`. + + The `newView` is attached to the app by rendering it to the `viewContainer`, + and making this app a bubble target of its events. + + The `oldView` is detached from the app by removing it from the + `viewContainer`, and removing this app as a bubble target for its events. + The `oldView` will either be preserved or properly destroyed. + + **Note:** The `activeView` attribute is read-only and can be changed by + calling the `showView()` method. + + @method _uiSetActiveView + @param {View} newView The View which is now this app's `activeView`. + @param {View} [oldView] The View which was this app's `activeView`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @protected + @since 3.5.0 + **/ + _uiSetActiveView: function (newView, oldView, options) { + _yuitest_coverfunc("build/app-base/app-base.js", "_uiSetActiveView", 779); +_yuitest_coverline("build/app-base/app-base.js", 780); +options || (options = {}); + + _yuitest_coverline("build/app-base/app-base.js", 782); +var callback = options.callback, + isChild = this._isChildView(newView, oldView), + isParent = !isChild && this._isParentView(newView, oldView), + prepend = !!options.prepend || isParent; + + // Prevent detaching (thus removing) the view we want to show. Also hard + // to animate out and in, the same view. + _yuitest_coverline("build/app-base/app-base.js", 789); +if (newView === oldView) { + _yuitest_coverline("build/app-base/app-base.js", 790); +return callback && callback.call(this, newView); + } + + _yuitest_coverline("build/app-base/app-base.js", 793); +this._attachView(newView, prepend); + _yuitest_coverline("build/app-base/app-base.js", 794); +this._detachView(oldView); + + _yuitest_coverline("build/app-base/app-base.js", 796); +if (callback) { + _yuitest_coverline("build/app-base/app-base.js", 797); +callback.call(this, newView); + } + }, + + // -- Protected Event Handlers --------------------------------------------- + + /** + Handles the application's `activeViewChange` event (which is fired when the + `activeView` attribute changes) by detaching the old view, attaching the new + view. + + The `activeView` attribute is read-only, so the public API to change its + value is through the `showView()` method. + + @method _afterActiveViewChange + @param {EventFacade} e + @protected + @since 3.5.0 + **/ + _afterActiveViewChange: function (e) { + _yuitest_coverfunc("build/app-base/app-base.js", "_afterActiveViewChange", 816); +_yuitest_coverline("build/app-base/app-base.js", 817); +this._uiSetActiveView(e.newVal, e.prevVal, e.options); + } +}, { + ATTRS: { + /** + The application's active/visible view. + + This attribute is read-only, to set the `activeView` use the + `showView()` method. + + @attribute activeView + @type View + @default null + @readOnly + @see App.Base.showView() + @since 3.5.0 + **/ + activeView: { + value : null, + readOnly: true + }, + + /** + Container node which represents the application's bounding-box, into + which this app's content will be rendered. + + The container node serves as the host for all DOM events attached by the + app. Delegation is used to handle events on children of the container, + allowing the container's contents to be re-rendered at any time without + losing event subscriptions. + + The default container is the `` Node, but you can override this in + a subclass, or by passing in a custom `container` config value at + instantiation time. + + When `container` is overridden by a subclass or passed as a config + option at instantiation time, it may be provided as a selector string, a + DOM element, or a `Y.Node` instance. During initialization, this app's + `create()` method will be called to convert the container into a + `Y.Node` instance if it isn't one already and stamp it with the CSS + class: `"yui3-app"`. + + The container is not added to the page automatically. This allows you to + have full control over how and when your app is actually rendered to + the page. + + @attribute container + @type HTMLElement|Node|String + @default Y.one('body') + @initOnly + **/ + container: { + valueFn: function () { + _yuitest_coverfunc("build/app-base/app-base.js", "valueFn", 869); +_yuitest_coverline("build/app-base/app-base.js", 870); +return Y.one('body'); + } + }, + + /** + Whether or not this browser is capable of using HTML5 history. + + This value is dependent on the value of `serverRouting` and will default + accordingly. + + Setting this to `false` will force the use of hash-based history even on + HTML5 browsers, but please don't do this unless you understand the + consequences. + + @attribute html5 + @type Boolean + @initOnly + @see serverRouting + **/ + html5: { + valueFn: '_initHtml5' + }, + + /** + CSS selector string used to filter link click events so that only the + links which match it will have the enhanced-navigation behavior of pjax + applied. + + When a link is clicked and that link matches this selector, navigating + to the link's `href` URL using the enhanced, pjax, behavior will be + attempted; and the browser's default way to navigate to new pages will + be the fallback. + + By default this selector will match _all_ links on the page. + + @attribute linkSelector + @type String|Function + @default "a" + **/ + linkSelector: { + value: 'a' + }, + + /** + Whether or not this application's server is capable of properly routing + all requests and rendering the initial state in the HTML responses. + + This can have three different values, each having particular + implications on how the app will handle routing and navigation: + + * `undefined`: The best form of URLs will be chosen based on the + capabilities of the browser. Given no information about the server + environmentm a balanced approach to routing and navigation is + chosen. + + The server should be capable of handling full-path requests, since + full-URLs will be generated by browsers using HTML5 history. If this + is a client-side-only app the server could handle full-URL requests + by sending a redirect back to the root with a hash-based URL, e.g: + + Request: http://example.com/users/1 + Redirect to: http://example.com/#/users/1 + + * `true`: The server is *fully* capable of properly handling requests + to all full-path URLs the app can produce. + + This is the best option for progressive-enhancement because it will + cause **all URLs to always have full-paths**, which means the server + will be able to accurately handle all URLs this app produces. e.g. + + http://example.com/users/1 + + To meet this strict full-URL requirement, browsers which are not + capable of using HTML5 history will make requests to the server + resulting in full-page reloads. + + * `false`: The server is *not* capable of properly handling requests + to all full-path URLs the app can produce, therefore all routing + will be handled by this App instance. + + Be aware that this will cause **all URLs to always be hash-based**, + even in browsers that are capable of using HTML5 history. e.g. + + http://example.com/#/users/1 + + A single-page or client-side-only app where the server sends a + "shell" page with JavaScript to the client might have this + restriction. If you're setting this to `false`, read the following: + + **Note:** When this is set to `false`, the server will *never* receive + the full URL because browsers do not send the fragment-part to the + server, that is everything after and including the "#". + + Consider the following example: + + URL shown in browser: http://example.com/#/users/1 + URL sent to server: http://example.com/ + + You should feel bad about hurting our precious web if you forcefully set + either `serverRouting` or `html5` to `false`, because you're basically + punching the web in the face here with your lossy URLs! Please make sure + you know what you're doing and that you understand the implications. + + Ideally you should always prefer full-path URLs (not /#/foo/), and want + full-page reloads when the client's browser is not capable of enhancing + the experience using the HTML5 history APIs. Setting this to `true` is + the best option for progressive-enhancement (and graceful-degradation). + + @attribute serverRouting + @type Boolean + @default undefined + @initOnly + @since 3.5.0 + **/ + serverRouting: { + valueFn : function () { _yuitest_coverfunc("build/app-base/app-base.js", "valueFn", 985); +_yuitest_coverline("build/app-base/app-base.js", 985); +return Y.App.serverRouting; }, + writeOnce: 'initOnly' + }, + + /** + The node into which this app's `views` will be rendered when they become + the `activeView`. + + The view container node serves as the container to hold the app's + `activeView`. Each time the `activeView` is set via `showView()`, the + previous view will be removed from this node, and the new active view's + `container` node will be appended. + + The default view container is a `
` Node, but you can override this + in a subclass, or by passing in a custom `viewContainer` config value at + instantiation time. The `viewContainer` may be provided as a selector + string, DOM element, or a `Y.Node` instance (having the `viewContainer` + and the `container` be the same node is also supported). + + The app's `render()` method will stamp the view container with the CSS + class `"yui3-app-views"` and append it to the app's `container` node if + it isn't already, and any `activeView` will be appended to this node if + it isn't already. + + @attribute viewContainer + @type HTMLElement|Node|String + @default Y.Node.create(this.containerTemplate) + @initOnly + @since 3.5.0 + **/ + viewContainer: { + getter : '_getViewContainer', + setter : Y.one, + writeOnce: true + } + }, + + /** + Properties that shouldn't be turned into ad-hoc attributes when passed to + App's constructor. + + @property _NON_ATTRS_CFG + @type Array + @static + @protected + @since 3.5.0 + **/ + _NON_ATTRS_CFG: ['views'] +}); + +// -- Namespace ---------------------------------------------------------------- +_yuitest_coverline("build/app-base/app-base.js", 1036); +Y.namespace('App').Base = AppBase; + +/** +Provides a top-level application component which manages navigation and views. + +This gives you a foundation and structure on which to build your application; it +combines robust URL navigation with powerful routing and flexible view +management. + +`Y.App` is both a namespace and constructor function. The `Y.App` class is +special in that any `Y.App` class extensions that are included in the YUI +instance will be **auto-mixed** on to the `Y.App` class. Consider this example: + + YUI().use('app-base', 'app-transitions', function (Y) { + // This will create two YUI Apps, `basicApp` will not have transitions, + // but `fancyApp` will have transitions support included and turn it on. + var basicApp = new Y.App.Base(), + fancyApp = new Y.App({transitions: true}); + }); + +@class App +@param {Object} [config] The following are configuration properties that can be + specified _in addition_ to default attribute values and the non-attribute + properties provided by `Y.Base`: + @param {Object} [config.views] Hash of view-name to metadata used to + declaratively describe an application's views and their relationship with + the app and other views. The views specified here will override any defaults + provided by the `views` object on the `prototype`. +@constructor +@extends App.Base +@uses App.Content +@uses App.Transitions +@uses PjaxContent +@since 3.5.0 +**/ +_yuitest_coverline("build/app-base/app-base.js", 1071); +Y.App = Y.mix(Y.Base.create('app', AppBase, []), Y.App, true); + +/** +CSS classes used by `Y.App`. + +@property CLASS_NAMES +@type Object +@default {} +@static +@since 3.6.0 +**/ +_yuitest_coverline("build/app-base/app-base.js", 1082); +Y.App.CLASS_NAMES = { + app : getClassName('app'), + views: getClassName('app', 'views') +}; + +/** +Default `serverRouting` attribute value for all apps. + +@property serverRouting +@type Boolean +@default undefined +@static +@since 3.6.0 +**/ + + +}, '3.9.0', {"requires": ["classnamemanager", "pjax-base", "router", "view"]}); diff --git a/src/errors/static/js/yui/build/app-base/app-base-debug.js b/src/errors/static/js/yui/build/app-base/app-base-debug.js new file mode 100644 index 00000000..e24475aa --- /dev/null +++ b/src/errors/static/js/yui/build/app-base/app-base-debug.js @@ -0,0 +1,1099 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('app-base', function (Y, NAME) { + +/** +The App Framework provides simple MVC-like building blocks (models, model lists, +views, and URL-based routing) for writing single-page JavaScript applications. + +@main app +@module app +@since 3.4.0 +**/ + +/** +Provides a top-level application component which manages navigation and views. + +@module app +@submodule app-base +@since 3.5.0 +**/ + +// TODO: Better handling of lifecycle for registered views: +// +// * [!] Just redo basically everything with view management so there are no +// pre-`activeViewChange` side effects and handle the rest of these things: +// +// * Seems like any view created via `createView` should listen for the view's +// `destroy` event and use that to remove it from the `_viewsInfoMap`. I +// should look at what ModelList does for Models as a reference. +// +// * Should we have a companion `destroyView()` method? Maybe this wouldn't be +// needed if we have a `getView(name, create)` method, and already doing the +// above? We could do `app.getView('foo').destroy()` and it would be removed +// from the `_viewsInfoMap` as well. +// +// * Should we wait to call a view's `render()` method inside of the +// `_attachView()` method? +// +// * Should named views support a collection of instances instead of just one? +// + +var Lang = Y.Lang, + YObject = Y.Object, + + PjaxBase = Y.PjaxBase, + Router = Y.Router, + View = Y.View, + + getClassName = Y.ClassNameManager.getClassName, + + win = Y.config.win, + + AppBase; + +/** +Provides a top-level application component which manages navigation and views. + +This gives you a foundation and structure on which to build your application; it +combines robust URL navigation with powerful routing and flexible view +management. + +@class App.Base +@param {Object} [config] The following are configuration properties that can be + specified _in addition_ to default attribute values and the non-attribute + properties provided by `Y.Base`: + @param {Object} [config.views] Hash of view-name to metadata used to + declaratively describe an application's views and their relationship with + the app and other views. The views specified here will override any defaults + provided by the `views` object on the `prototype`. +@constructor +@extends Base +@uses View +@uses Router +@uses PjaxBase +@since 3.5.0 +**/ +AppBase = Y.Base.create('app', Y.Base, [View, Router, PjaxBase], { + // -- Public Properties ---------------------------------------------------- + + /** + Hash of view-name to metadata used to declaratively describe an + application's views and their relationship with the app and its other views. + + The view metadata is composed of Objects keyed to a view-name that can have + any or all of the following properties: + + * `type`: Function or a string representing the view constructor to use to + create view instances. If a string is used, the constructor function is + assumed to be on the `Y` object; e.g. `"SomeView"` -> `Y.SomeView`. + + * `preserve`: Boolean for whether the view instance should be retained. By + default, the view instance will be destroyed when it is no longer the + `activeView`. If `true` the view instance will simply be `removed()` + from the DOM when it is no longer active. This is useful when the view + is frequently used and may be expensive to re-create. + + * `parent`: String to another named view in this hash that represents the + parent view within the application's view hierarchy; e.g. a `"photo"` + view could have `"album"` has its `parent` view. This parent/child + relationship is a useful cue for things like transitions. + + * `instance`: Used internally to manage the current instance of this named + view. This can be used if your view instance is created up-front, or if + you would rather manage the View lifecycle, but you probably should just + let this be handled for you. + + If `views` are specified at instantiation time, the metadata in the `views` + Object here will be used as defaults when creating the instance's `views`. + + Every `Y.App` instance gets its own copy of a `views` object so this Object + on the prototype will not be polluted. + + @example + // Imagine that `Y.UsersView` and `Y.UserView` have been defined. + var app = new Y.App({ + views: { + users: { + type : Y.UsersView, + preserve: true + }, + + user: { + type : Y.UserView, + parent: 'users' + } + } + }); + + @property views + @type Object + @default {} + @since 3.5.0 + **/ + views: {}, + + // -- Protected Properties ------------------------------------------------- + + /** + Map of view instance id (via `Y.stamp()`) to view-info object in `views`. + + This mapping is used to tie a specific view instance back to its metadata by + adding a reference to the the related view info on the `views` object. + + @property _viewInfoMap + @type Object + @default {} + @protected + @since 3.5.0 + **/ + + // -- Lifecycle Methods ---------------------------------------------------- + initializer: function (config) { + config || (config = {}); + + var views = {}; + + // Merges-in specified view metadata into local `views` object. + function mergeViewConfig(view, name) { + views[name] = Y.merge(views[name], view); + } + + // First, each view in the `views` prototype object gets its metadata + // merged-in, providing the defaults. + YObject.each(this.views, mergeViewConfig); + + // Then, each view in the specified `config.views` object gets its + // metadata merged-in. + YObject.each(config.views, mergeViewConfig); + + // The resulting hodgepodge of metadata is then stored as the instance's + // `views` object, and no one's objects were harmed in the making. + this.views = views; + this._viewInfoMap = {}; + + // Using `bind()` to aid extensibility. + this.after('activeViewChange', Y.bind('_afterActiveViewChange', this)); + + // PjaxBase will bind click events when `html5` is `true`, so this just + // forces the binding when `serverRouting` and `html5` are both falsy. + if (!this.get('serverRouting')) { + this._pjaxBindUI(); + } + }, + + // TODO: `destructor` to destroy the `activeView`? + + // -- Public Methods ------------------------------------------------------- + + /** + Creates and returns a new view instance using the provided `name` to look up + the view info metadata defined in the `views` object. The passed-in `config` + object is passed to the view constructor function. + + This function also maps a view instance back to its view info metadata. + + @method createView + @param {String} name The name of a view defined on the `views` object. + @param {Object} [config] The configuration object passed to the view + constructor function when creating the new view instance. + @return {View} The new view instance. + @since 3.5.0 + **/ + createView: function (name, config) { + var viewInfo = this.getViewInfo(name), + type = (viewInfo && viewInfo.type) || View, + ViewConstructor, view; + + // Looks for a namespaced constructor function on `Y`. + ViewConstructor = Lang.isString(type) ? + YObject.getValue(Y, type.split('.')) : type; + + // Create the view instance and map it with its metadata. + view = new ViewConstructor(config); + this._viewInfoMap[Y.stamp(view, true)] = viewInfo; + + return view; + }, + + /** + Returns the metadata associated with a view instance or view name defined on + the `views` object. + + @method getViewInfo + @param {View|String} view View instance, or name of a view defined on the + `views` object. + @return {Object} The metadata for the view, or `undefined` if the view is + not registered. + @since 3.5.0 + **/ + getViewInfo: function (view) { + if (Lang.isString(view)) { + return this.views[view]; + } + + return view && this._viewInfoMap[Y.stamp(view, true)]; + }, + + /** + Navigates to the specified URL if there is a route handler that matches. In + browsers capable of using HTML5 history or when `serverRouting` is falsy, + the navigation will be enhanced by firing the `navigate` event and having + the app handle the "request". When `serverRouting` is `true`, non-HTML5 + browsers will navigate to the new URL via a full page reload. + + When there is a route handler for the specified URL and it is being + navigated to, this method will return `true`, otherwise it will return + `false`. + + **Note:** The specified URL _must_ be of the same origin as the current URL, + otherwise an error will be logged and navigation will not occur. This is + intended as both a security constraint and a purposely imposed limitation as + it does not make sense to tell the app to navigate to a URL on a + different scheme, host, or port. + + @method navigate + @param {String} url The URL to navigate to. This must be of the same origin + as the current URL. + @param {Object} [options] Additional options to configure the navigation. + These are mixed into the `navigate` event facade. + @param {Boolean} [options.replace] Whether or not the current history + entry will be replaced, or a new entry will be created. Will default + to `true` if the specified `url` is the same as the current URL. + @param {Boolean} [options.force] Whether the enhanced navigation + should occur even in browsers without HTML5 history. Will default to + `true` when `serverRouting` is falsy. + @see PjaxBase.navigate() + **/ + // Does not override `navigate()` but does use extra `options`. + + /** + Renders this application by appending the `viewContainer` node to the + `container` node if it isn't already a child of the container, and the + `activeView` will be appended the view container, if it isn't already. + + You should call this method at least once, usually after the initialization + of your app instance so the proper DOM structure is setup and optionally + append the container to the DOM if it's not there already. + + You may override this method to customize the app's rendering, but you + should expect that the `viewContainer`'s contents will be modified by the + app for the purpose of rendering the `activeView` when it changes. + + @method render + @chainable + @see View.render() + **/ + render: function () { + var CLASS_NAMES = Y.App.CLASS_NAMES, + container = this.get('container'), + viewContainer = this.get('viewContainer'), + activeView = this.get('activeView'), + activeViewContainer = activeView && activeView.get('container'), + areSame = container.compareTo(viewContainer); + + container.addClass(CLASS_NAMES.app); + viewContainer.addClass(CLASS_NAMES.views); + + // Prevents needless shuffling around of nodes and maintains DOM order. + if (activeView && !viewContainer.contains(activeViewContainer)) { + viewContainer.appendChild(activeViewContainer); + } + + // Prevents needless shuffling around of nodes and maintains DOM order. + if (!container.contains(viewContainer) && !areSame) { + container.appendChild(viewContainer); + } + + return this; + }, + + /** + Sets which view is active/visible for the application. This will set the + app's `activeView` attribute to the specified `view`. + + The `view` will be "attached" to this app, meaning it will be both rendered + into this app's `viewContainer` node and all of its events will bubble to + the app. The previous `activeView` will be "detached" from this app. + + When a string-name is provided for a view which has been registered on this + app's `views` object, the referenced metadata will be used and the + `activeView` will be set to either a preserved view instance, or a new + instance of the registered view will be created using the specified `config` + object passed-into this method. + + A callback function can be specified as either the third or fourth argument, + and this function will be called after the new `view` becomes the + `activeView`, is rendered to the `viewContainer`, and is ready to use. + + @example + var app = new Y.App({ + views: { + usersView: { + // Imagine that `Y.UsersView` has been defined. + type: Y.UsersView + } + }, + + users: new Y.ModelList() + }); + + app.route('/users/', function () { + this.showView('usersView', {users: this.get('users')}); + }); + + app.render(); + app.navigate('/uses/'); // => Creates a new `Y.UsersView` and shows it. + + @method showView + @param {String|View} view The name of a view defined in the `views` object, + or a view instance which should become this app's `activeView`. + @param {Object} [config] Optional configuration to use when creating a new + view instance. This config object can also be used to update an existing + or preserved view's attributes when `options.update` is `true`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @param {Function} [callback] Optional callback Function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the third or fourth + argument. The function will be passed the following: + @param {View} callback.view A reference to the new `activeView`. + @chainable + @since 3.5.0 + **/ + showView: function (view, config, options, callback) { + var viewInfo, created; + + options || (options = {}); + + // Support the callback function being either the third or fourth arg. + if (callback) { + options = Y.merge(options, {callback: callback}); + } else if (Lang.isFunction(options)) { + options = {callback: options}; + } + + if (Lang.isString(view)) { + viewInfo = this.getViewInfo(view); + + // Use the preserved view instance, or create a new view. + // TODO: Maybe we can remove the strict check for `preserve` and + // assume we'll use a View instance if it is there, and just check + // `preserve` when detaching? + if (viewInfo && viewInfo.preserve && viewInfo.instance) { + view = viewInfo.instance; + + // Make sure there's a mapping back to the view metadata. + this._viewInfoMap[Y.stamp(view, true)] = viewInfo; + } else { + // TODO: Add the app as a bubble target during construction, but + // make sure to check that it isn't already in `bubbleTargets`! + // This will allow the app to be notified for about _all_ of the + // view's events. **Note:** This should _only_ happen if the + // view is created _after_ `activeViewChange`. + + view = this.createView(view, config); + created = true; + } + } + + // Update the specified or preserved `view` when signaled to do so. + // There's no need to updated a view if it was _just_ created. + if (options.update && !created) { + view.setAttrs(config); + } + + // TODO: Hold off on rendering the view until after it has been + // "attached", and move the call to render into `_attachView()`. + + // When a value is specified for `options.render`, prefer it because it + // represents the developer's intent. When no value is specified, the + // `view` will only be rendered if it was just created. + if ('render' in options) { + if (options.render) { + view.render(); + } + } else if (created) { + view.render(); + } + + return this._set('activeView', view, {options: options}); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Helper method to attach the view instance to the application by making the + app a bubble target of the view, append the view to the `viewContainer`, and + assign it to the `instance` property of the associated view info metadata. + + @method _attachView + @param {View} view View to attach. + @param {Boolean} prepend=false Whether the view should be prepended instead + of appended to the `viewContainer`. + @protected + @since 3.5.0 + **/ + _attachView: function (view, prepend) { + if (!view) { + return; + } + + var viewInfo = this.getViewInfo(view), + viewContainer = this.get('viewContainer'); + + // Bubble the view's events to this app. + view.addTarget(this); + + // Save the view instance in the `views` registry. + if (viewInfo) { + viewInfo.instance = view; + } + + // TODO: Attach events here for persevered Views? + // See related TODO in `_detachView`. + + // TODO: Actually render the view here so that it gets "attached" before + // it gets rendered? + + // Insert view into the DOM. + viewContainer[prepend ? 'prepend' : 'append'](view.get('container')); + }, + + /** + Overrides View's container destruction to deal with the `viewContainer` and + checks to make sure not to remove and purge the ``. + + @method _destroyContainer + @protected + @see View._destroyContainer() + **/ + _destroyContainer: function () { + var CLASS_NAMES = Y.App.CLASS_NAMES, + container = this.get('container'), + viewContainer = this.get('viewContainer'), + areSame = container.compareTo(viewContainer); + + // We do not want to remove or destroy the ``. + if (Y.one('body').compareTo(container)) { + // Just clean-up our events listeners. + this.detachEvents(); + + // Clean-up `yui3-app` CSS class on the `container`. + container.removeClass(CLASS_NAMES.app); + + if (areSame) { + // Clean-up `yui3-app-views` CSS class on the `container`. + container.removeClass(CLASS_NAMES.views); + } else { + // Destroy and purge the `viewContainer`. + viewContainer.remove(true); + } + + return; + } + + // Remove and purge events from both containers. + + viewContainer.remove(true); + + if (!areSame) { + container.remove(true); + } + }, + + /** + Helper method to detach the view instance from the application by removing + the application as a bubble target of the view, and either just removing the + view if it is intended to be preserved, or destroying the instance + completely. + + @method _detachView + @param {View} view View to detach. + @protected + @since 3.5.0 + **/ + _detachView: function (view) { + if (!view) { + return; + } + + var viewInfo = this.getViewInfo(view) || {}; + + if (viewInfo.preserve) { + view.remove(); + // TODO: Detach events here for preserved Views? It is possible that + // some event subscriptions are made on elements other than the + // View's `container`. + } else { + view.destroy({remove: true}); + + // TODO: The following should probably happen automagically from + // `destroy()` being called! Possibly `removeTarget()` as well. + + // Remove from view to view-info map. + delete this._viewInfoMap[Y.stamp(view, true)]; + + // Remove from view-info instance property. + if (view === viewInfo.instance) { + delete viewInfo.instance; + } + } + + view.removeTarget(this); + }, + + /** + Getter for the `viewContainer` attribute. + + @method _getViewContainer + @param {Node|null} value Current attribute value. + @return {Node} View container node. + @protected + @since 3.5.0 + **/ + _getViewContainer: function (value) { + // This wackiness is necessary to enable fully lazy creation of the + // container node both when no container is specified and when one is + // specified via a valueFn. + + if (!value && !this._viewContainer) { + // Create a default container and set that as the new attribute + // value. The `this._viewContainer` property prevents infinite + // recursion. + value = this._viewContainer = this.create(); + this._set('viewContainer', value); + } + + return value; + }, + + /** + Provides the default value for the `html5` attribute. + + The value returned is dependent on the value of the `serverRouting` + attribute. When `serverRouting` is explicit set to `false` (not just falsy), + the default value for `html5` will be set to `false` for *all* browsers. + + When `serverRouting` is `true` or `undefined` the returned value will be + dependent on the browser's capability of using HTML5 history. + + @method _initHtml5 + @return {Boolean} Whether or not HTML5 history should be used. + @protected + @since 3.5.0 + **/ + _initHtml5: function () { + // When `serverRouting` is explicitly set to `false` (not just falsy), + // forcing hash-based URLs in all browsers. + if (this.get('serverRouting') === false) { + return false; + } + + // Defaults to whether or not the browser supports HTML5 history. + return Router.html5; + }, + + /** + Determines if the specified `view` is configured as a child of the specified + `parent` view. This requires both views to be either named-views, or view + instances created using configuration data that exists in the `views` + object, e.g. created by the `createView()` or `showView()` method. + + @method _isChildView + @param {View|String} view The name of a view defined in the `views` object, + or a view instance. + @param {View|String} parent The name of a view defined in the `views` + object, or a view instance. + @return {Boolean} Whether the view is configured as a child of the parent. + @protected + @since 3.5.0 + **/ + _isChildView: function (view, parent) { + var viewInfo = this.getViewInfo(view), + parentInfo = this.getViewInfo(parent); + + if (viewInfo && parentInfo) { + return this.getViewInfo(viewInfo.parent) === parentInfo; + } + + return false; + }, + + /** + Determines if the specified `view` is configured as the parent of the + specified `child` view. This requires both views to be either named-views, + or view instances created using configuration data that exists in the + `views` object, e.g. created by the `createView()` or `showView()` method. + + @method _isParentView + @param {View|String} view The name of a view defined in the `views` object, + or a view instance. + @param {View|String} parent The name of a view defined in the `views` + object, or a view instance. + @return {Boolean} Whether the view is configured as the parent of the child. + @protected + @since 3.5.0 + **/ + _isParentView: function (view, child) { + var viewInfo = this.getViewInfo(view), + childInfo = this.getViewInfo(child); + + if (viewInfo && childInfo) { + return this.getViewInfo(childInfo.parent) === viewInfo; + } + + return false; + }, + + /** + Underlying implementation for `navigate()`. + + @method _navigate + @param {String} url The fully-resolved URL that the app should dispatch to + its route handlers to fulfill the enhanced navigation "request", or use to + update `window.location` in non-HTML5 history capable browsers when + `serverRouting` is `true`. + @param {Object} [options] Additional options to configure the navigation. + These are mixed into the `navigate` event facade. + @param {Boolean} [options.replace] Whether or not the current history + entry will be replaced, or a new entry will be created. Will default + to `true` if the specified `url` is the same as the current URL. + @param {Boolean} [options.force] Whether the enhanced navigation + should occur even in browsers without HTML5 history. Will default to + `true` when `serverRouting` is falsy. + @protected + @see PjaxBase._navigate() + **/ + _navigate: function (url, options) { + if (!this.get('serverRouting')) { + // Force navigation to be enhanced and handled by the app when + // `serverRouting` is falsy because the server might not be able to + // properly handle the request. + options = Y.merge({force: true}, options); + } + + return PjaxBase.prototype._navigate.call(this, url, options); + }, + + /** + Will either save a history entry using `pushState()` or the location hash, + or gracefully-degrade to sending a request to the server causing a full-page + reload. + + Overrides Router's `_save()` method to preform graceful-degradation when the + app's `serverRouting` is `true` and `html5` is `false` by updating the full + URL via standard assignment to `window.location` or by calling + `window.location.replace()`; both of which will cause a request to the + server resulting in a full-page reload. + + Otherwise this will just delegate off to Router's `_save()` method allowing + the client-side enhanced routing to occur. + + @method _save + @param {String} [url] URL for the history entry. + @param {Boolean} [replace=false] If `true`, the current history entry will + be replaced instead of a new one being added. + @chainable + @protected + @see Router._save() + **/ + _save: function (url, replace) { + var path; + + // Forces full-path URLs to always be used by modifying + // `window.location` in non-HTML5 history capable browsers. + if (this.get('serverRouting') && !this.get('html5')) { + // Perform same-origin check on the specified URL. + if (!this._hasSameOrigin(url)) { + Y.error('Security error: The new URL must be of the same origin as the current URL.'); + return this; + } + + // Either replace the current history entry or create a new one + // while navigating to the `url`. + if (win) { + // Results in the URL's full path starting with '/'. + path = this._joinURL(url || ''); + + if (replace) { + win.location.replace(path); + } else { + win.location = path; + } + } + + return this; + } + + return Router.prototype._save.apply(this, arguments); + }, + + /** + Performs the actual change of this app's `activeView` by attaching the + `newView` to this app, and detaching the `oldView` from this app using any + specified `options`. + + The `newView` is attached to the app by rendering it to the `viewContainer`, + and making this app a bubble target of its events. + + The `oldView` is detached from the app by removing it from the + `viewContainer`, and removing this app as a bubble target for its events. + The `oldView` will either be preserved or properly destroyed. + + **Note:** The `activeView` attribute is read-only and can be changed by + calling the `showView()` method. + + @method _uiSetActiveView + @param {View} newView The View which is now this app's `activeView`. + @param {View} [oldView] The View which was this app's `activeView`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @protected + @since 3.5.0 + **/ + _uiSetActiveView: function (newView, oldView, options) { + options || (options = {}); + + var callback = options.callback, + isChild = this._isChildView(newView, oldView), + isParent = !isChild && this._isParentView(newView, oldView), + prepend = !!options.prepend || isParent; + + // Prevent detaching (thus removing) the view we want to show. Also hard + // to animate out and in, the same view. + if (newView === oldView) { + return callback && callback.call(this, newView); + } + + this._attachView(newView, prepend); + this._detachView(oldView); + + if (callback) { + callback.call(this, newView); + } + }, + + // -- Protected Event Handlers --------------------------------------------- + + /** + Handles the application's `activeViewChange` event (which is fired when the + `activeView` attribute changes) by detaching the old view, attaching the new + view. + + The `activeView` attribute is read-only, so the public API to change its + value is through the `showView()` method. + + @method _afterActiveViewChange + @param {EventFacade} e + @protected + @since 3.5.0 + **/ + _afterActiveViewChange: function (e) { + this._uiSetActiveView(e.newVal, e.prevVal, e.options); + } +}, { + ATTRS: { + /** + The application's active/visible view. + + This attribute is read-only, to set the `activeView` use the + `showView()` method. + + @attribute activeView + @type View + @default null + @readOnly + @see App.Base.showView() + @since 3.5.0 + **/ + activeView: { + value : null, + readOnly: true + }, + + /** + Container node which represents the application's bounding-box, into + which this app's content will be rendered. + + The container node serves as the host for all DOM events attached by the + app. Delegation is used to handle events on children of the container, + allowing the container's contents to be re-rendered at any time without + losing event subscriptions. + + The default container is the `` Node, but you can override this in + a subclass, or by passing in a custom `container` config value at + instantiation time. + + When `container` is overridden by a subclass or passed as a config + option at instantiation time, it may be provided as a selector string, a + DOM element, or a `Y.Node` instance. During initialization, this app's + `create()` method will be called to convert the container into a + `Y.Node` instance if it isn't one already and stamp it with the CSS + class: `"yui3-app"`. + + The container is not added to the page automatically. This allows you to + have full control over how and when your app is actually rendered to + the page. + + @attribute container + @type HTMLElement|Node|String + @default Y.one('body') + @initOnly + **/ + container: { + valueFn: function () { + return Y.one('body'); + } + }, + + /** + Whether or not this browser is capable of using HTML5 history. + + This value is dependent on the value of `serverRouting` and will default + accordingly. + + Setting this to `false` will force the use of hash-based history even on + HTML5 browsers, but please don't do this unless you understand the + consequences. + + @attribute html5 + @type Boolean + @initOnly + @see serverRouting + **/ + html5: { + valueFn: '_initHtml5' + }, + + /** + CSS selector string used to filter link click events so that only the + links which match it will have the enhanced-navigation behavior of pjax + applied. + + When a link is clicked and that link matches this selector, navigating + to the link's `href` URL using the enhanced, pjax, behavior will be + attempted; and the browser's default way to navigate to new pages will + be the fallback. + + By default this selector will match _all_ links on the page. + + @attribute linkSelector + @type String|Function + @default "a" + **/ + linkSelector: { + value: 'a' + }, + + /** + Whether or not this application's server is capable of properly routing + all requests and rendering the initial state in the HTML responses. + + This can have three different values, each having particular + implications on how the app will handle routing and navigation: + + * `undefined`: The best form of URLs will be chosen based on the + capabilities of the browser. Given no information about the server + environmentm a balanced approach to routing and navigation is + chosen. + + The server should be capable of handling full-path requests, since + full-URLs will be generated by browsers using HTML5 history. If this + is a client-side-only app the server could handle full-URL requests + by sending a redirect back to the root with a hash-based URL, e.g: + + Request: http://example.com/users/1 + Redirect to: http://example.com/#/users/1 + + * `true`: The server is *fully* capable of properly handling requests + to all full-path URLs the app can produce. + + This is the best option for progressive-enhancement because it will + cause **all URLs to always have full-paths**, which means the server + will be able to accurately handle all URLs this app produces. e.g. + + http://example.com/users/1 + + To meet this strict full-URL requirement, browsers which are not + capable of using HTML5 history will make requests to the server + resulting in full-page reloads. + + * `false`: The server is *not* capable of properly handling requests + to all full-path URLs the app can produce, therefore all routing + will be handled by this App instance. + + Be aware that this will cause **all URLs to always be hash-based**, + even in browsers that are capable of using HTML5 history. e.g. + + http://example.com/#/users/1 + + A single-page or client-side-only app where the server sends a + "shell" page with JavaScript to the client might have this + restriction. If you're setting this to `false`, read the following: + + **Note:** When this is set to `false`, the server will *never* receive + the full URL because browsers do not send the fragment-part to the + server, that is everything after and including the "#". + + Consider the following example: + + URL shown in browser: http://example.com/#/users/1 + URL sent to server: http://example.com/ + + You should feel bad about hurting our precious web if you forcefully set + either `serverRouting` or `html5` to `false`, because you're basically + punching the web in the face here with your lossy URLs! Please make sure + you know what you're doing and that you understand the implications. + + Ideally you should always prefer full-path URLs (not /#/foo/), and want + full-page reloads when the client's browser is not capable of enhancing + the experience using the HTML5 history APIs. Setting this to `true` is + the best option for progressive-enhancement (and graceful-degradation). + + @attribute serverRouting + @type Boolean + @default undefined + @initOnly + @since 3.5.0 + **/ + serverRouting: { + valueFn : function () { return Y.App.serverRouting; }, + writeOnce: 'initOnly' + }, + + /** + The node into which this app's `views` will be rendered when they become + the `activeView`. + + The view container node serves as the container to hold the app's + `activeView`. Each time the `activeView` is set via `showView()`, the + previous view will be removed from this node, and the new active view's + `container` node will be appended. + + The default view container is a `
` Node, but you can override this + in a subclass, or by passing in a custom `viewContainer` config value at + instantiation time. The `viewContainer` may be provided as a selector + string, DOM element, or a `Y.Node` instance (having the `viewContainer` + and the `container` be the same node is also supported). + + The app's `render()` method will stamp the view container with the CSS + class `"yui3-app-views"` and append it to the app's `container` node if + it isn't already, and any `activeView` will be appended to this node if + it isn't already. + + @attribute viewContainer + @type HTMLElement|Node|String + @default Y.Node.create(this.containerTemplate) + @initOnly + @since 3.5.0 + **/ + viewContainer: { + getter : '_getViewContainer', + setter : Y.one, + writeOnce: true + } + }, + + /** + Properties that shouldn't be turned into ad-hoc attributes when passed to + App's constructor. + + @property _NON_ATTRS_CFG + @type Array + @static + @protected + @since 3.5.0 + **/ + _NON_ATTRS_CFG: ['views'] +}); + +// -- Namespace ---------------------------------------------------------------- +Y.namespace('App').Base = AppBase; + +/** +Provides a top-level application component which manages navigation and views. + +This gives you a foundation and structure on which to build your application; it +combines robust URL navigation with powerful routing and flexible view +management. + +`Y.App` is both a namespace and constructor function. The `Y.App` class is +special in that any `Y.App` class extensions that are included in the YUI +instance will be **auto-mixed** on to the `Y.App` class. Consider this example: + + YUI().use('app-base', 'app-transitions', function (Y) { + // This will create two YUI Apps, `basicApp` will not have transitions, + // but `fancyApp` will have transitions support included and turn it on. + var basicApp = new Y.App.Base(), + fancyApp = new Y.App({transitions: true}); + }); + +@class App +@param {Object} [config] The following are configuration properties that can be + specified _in addition_ to default attribute values and the non-attribute + properties provided by `Y.Base`: + @param {Object} [config.views] Hash of view-name to metadata used to + declaratively describe an application's views and their relationship with + the app and other views. The views specified here will override any defaults + provided by the `views` object on the `prototype`. +@constructor +@extends App.Base +@uses App.Content +@uses App.Transitions +@uses PjaxContent +@since 3.5.0 +**/ +Y.App = Y.mix(Y.Base.create('app', AppBase, []), Y.App, true); + +/** +CSS classes used by `Y.App`. + +@property CLASS_NAMES +@type Object +@default {} +@static +@since 3.6.0 +**/ +Y.App.CLASS_NAMES = { + app : getClassName('app'), + views: getClassName('app', 'views') +}; + +/** +Default `serverRouting` attribute value for all apps. + +@property serverRouting +@type Boolean +@default undefined +@static +@since 3.6.0 +**/ + + +}, '3.9.0', {"requires": ["classnamemanager", "pjax-base", "router", "view"]}); diff --git a/src/errors/static/js/yui/build/app-base/app-base-min.js b/src/errors/static/js/yui/build/app-base/app-base-min.js new file mode 100644 index 00000000..4113d9a2 --- /dev/null +++ b/src/errors/static/js/yui/build/app-base/app-base-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("app-base",function(e,t){var n=e.Lang,r=e.Object,i=e.PjaxBase,s=e.Router,o=e.View,u=e.ClassNameManager.getClassName,a=e.config.win,f;f=e.Base.create("app",e.Base,[o,s,i],{views:{},initializer:function(t){function i(t,r){n[r]=e.merge(n[r],t)}t||(t={});var n={};r.each(this.views,i),r.each(t.views,i),this.views=n,this._viewInfoMap={},this.after("activeViewChange",e.bind("_afterActiveViewChange",this)),this.get("serverRouting")||this._pjaxBindUI()},createView:function(t,i){var s=this.getViewInfo(t),u=s&&s.type||o,a,f;return a=n.isString(u)?r.getValue(e,u.split(".")):u,f=new a(i),this._viewInfoMap[e.stamp(f,!0)]=s,f},getViewInfo:function(t){return n.isString(t)?this.views[t]:t&&this._viewInfoMap[e.stamp(t,!0)]},render:function(){var t=e.App.CLASS_NAMES,n=this.get("container"),r=this.get("viewContainer"),i=this.get("activeView"),s=i&&i.get("container"),o=n.compareTo(r);return n.addClass(t.app),r.addClass(t.views),i&&!r.contains(s)&&r.appendChild(s),!n.contains(r)&&!o&&n.appendChild(r),this},showView:function(t,r,i,s){var o,u;return i||(i={}),s?i=e.merge(i,{callback:s}):n.isFunction(i)&&(i={callback:i}),n.isString(t)&&(o=this.getViewInfo(t),o&&o.preserve&&o.instance?(t=o.instance,this._viewInfoMap[e.stamp(t,!0)]=o):(t=this.createView(t,r),u=!0)),i.update&&!u&&t.setAttrs(r),"render"in i?i.render&&t.render():u&&t.render(),this._set("activeView",t,{options:i})},_attachView:function(e,t){if(!e)return;var n=this.getViewInfo(e),r=this.get("viewContainer");e.addTarget(this),n&&(n.instance=e),r[t?"prepend":"append"](e.get("container"))},_destroyContainer:function(){var t=e.App.CLASS_NAMES,n=this.get("container"),r=this.get("viewContainer"),i=n.compareTo(r);if(e.one("body").compareTo(n)){this.detachEvents(),n.removeClass(t.app),i?n.removeClass(t.views):r.remove(!0);return}r.remove(!0),i||n.remove(!0)},_detachView:function(t){if(!t)return;var n=this.getViewInfo(t)||{};n.preserve?t.remove():(t.destroy({remove:!0}),delete this._viewInfoMap[e.stamp(t,!0)],t===n.instance&&delete n.instance),t.removeTarget(this)},_getViewContainer:function(e){return!e&&!this._viewContainer&&(e=this._viewContainer=this.create(),this._set("viewContainer",e)),e},_initHtml5:function(){return this.get("serverRouting")===!1?!1:s.html5},_isChildView:function(e,t){var n=this.getViewInfo(e),r=this.getViewInfo(t);return n&&r?this.getViewInfo(n.parent)===r:!1},_isParentView:function(e,t){var n=this.getViewInfo(e),r=this.getViewInfo(t);return n&&r?this.getViewInfo(r.parent)===n:!1},_navigate:function(t,n){return this.get("serverRouting")||(n=e.merge({force:!0},n)),i.prototype._navigate.call(this,t,n)},_save:function(t,n){var r;return this.get("serverRouting")&&!this.get("html5")?this._hasSameOrigin(t)?(a&&(r=this._joinURL(t||""),n?a.location.replace(r):a.location=r),this):(e.error("Security error: The new URL must be of the same origin as the current URL."),this):s.prototype._save.apply(this,arguments)},_uiSetActiveView:function(e,t,n){n||(n={});var r=n.callback,i=this._isChildView(e,t),s=!i&&this._isParentView(e,t),o=!!n.prepend||s;if(e===t)return r&&r.call(this,e);this._attachView(e,o),this._detachView(t),r&&r.call(this,e)},_afterActiveViewChange:function(e){this._uiSetActiveView(e.newVal,e.prevVal,e.options)}},{ATTRS:{activeView:{value:null,readOnly:!0},container:{valueFn:function(){return e.one("body")}},html5:{valueFn:"_initHtml5"},linkSelector:{value:"a"},serverRouting:{valueFn:function(){return e.App.serverRouting},writeOnce:"initOnly"},viewContainer:{getter:"_getViewContainer",setter:e.one,writeOnce:!0}},_NON_ATTRS_CFG:["views"]}),e.namespace("App").Base=f,e.App=e.mix(e.Base.create("app",f,[]),e.App,!0),e.App.CLASS_NAMES={app:u("app"),views:u("app","views")}},"3.9.0",{requires:["classnamemanager","pjax-base","router","view"]}); diff --git a/src/errors/static/js/yui/build/app-base/app-base.js b/src/errors/static/js/yui/build/app-base/app-base.js new file mode 100644 index 00000000..e24475aa --- /dev/null +++ b/src/errors/static/js/yui/build/app-base/app-base.js @@ -0,0 +1,1099 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('app-base', function (Y, NAME) { + +/** +The App Framework provides simple MVC-like building blocks (models, model lists, +views, and URL-based routing) for writing single-page JavaScript applications. + +@main app +@module app +@since 3.4.0 +**/ + +/** +Provides a top-level application component which manages navigation and views. + +@module app +@submodule app-base +@since 3.5.0 +**/ + +// TODO: Better handling of lifecycle for registered views: +// +// * [!] Just redo basically everything with view management so there are no +// pre-`activeViewChange` side effects and handle the rest of these things: +// +// * Seems like any view created via `createView` should listen for the view's +// `destroy` event and use that to remove it from the `_viewsInfoMap`. I +// should look at what ModelList does for Models as a reference. +// +// * Should we have a companion `destroyView()` method? Maybe this wouldn't be +// needed if we have a `getView(name, create)` method, and already doing the +// above? We could do `app.getView('foo').destroy()` and it would be removed +// from the `_viewsInfoMap` as well. +// +// * Should we wait to call a view's `render()` method inside of the +// `_attachView()` method? +// +// * Should named views support a collection of instances instead of just one? +// + +var Lang = Y.Lang, + YObject = Y.Object, + + PjaxBase = Y.PjaxBase, + Router = Y.Router, + View = Y.View, + + getClassName = Y.ClassNameManager.getClassName, + + win = Y.config.win, + + AppBase; + +/** +Provides a top-level application component which manages navigation and views. + +This gives you a foundation and structure on which to build your application; it +combines robust URL navigation with powerful routing and flexible view +management. + +@class App.Base +@param {Object} [config] The following are configuration properties that can be + specified _in addition_ to default attribute values and the non-attribute + properties provided by `Y.Base`: + @param {Object} [config.views] Hash of view-name to metadata used to + declaratively describe an application's views and their relationship with + the app and other views. The views specified here will override any defaults + provided by the `views` object on the `prototype`. +@constructor +@extends Base +@uses View +@uses Router +@uses PjaxBase +@since 3.5.0 +**/ +AppBase = Y.Base.create('app', Y.Base, [View, Router, PjaxBase], { + // -- Public Properties ---------------------------------------------------- + + /** + Hash of view-name to metadata used to declaratively describe an + application's views and their relationship with the app and its other views. + + The view metadata is composed of Objects keyed to a view-name that can have + any or all of the following properties: + + * `type`: Function or a string representing the view constructor to use to + create view instances. If a string is used, the constructor function is + assumed to be on the `Y` object; e.g. `"SomeView"` -> `Y.SomeView`. + + * `preserve`: Boolean for whether the view instance should be retained. By + default, the view instance will be destroyed when it is no longer the + `activeView`. If `true` the view instance will simply be `removed()` + from the DOM when it is no longer active. This is useful when the view + is frequently used and may be expensive to re-create. + + * `parent`: String to another named view in this hash that represents the + parent view within the application's view hierarchy; e.g. a `"photo"` + view could have `"album"` has its `parent` view. This parent/child + relationship is a useful cue for things like transitions. + + * `instance`: Used internally to manage the current instance of this named + view. This can be used if your view instance is created up-front, or if + you would rather manage the View lifecycle, but you probably should just + let this be handled for you. + + If `views` are specified at instantiation time, the metadata in the `views` + Object here will be used as defaults when creating the instance's `views`. + + Every `Y.App` instance gets its own copy of a `views` object so this Object + on the prototype will not be polluted. + + @example + // Imagine that `Y.UsersView` and `Y.UserView` have been defined. + var app = new Y.App({ + views: { + users: { + type : Y.UsersView, + preserve: true + }, + + user: { + type : Y.UserView, + parent: 'users' + } + } + }); + + @property views + @type Object + @default {} + @since 3.5.0 + **/ + views: {}, + + // -- Protected Properties ------------------------------------------------- + + /** + Map of view instance id (via `Y.stamp()`) to view-info object in `views`. + + This mapping is used to tie a specific view instance back to its metadata by + adding a reference to the the related view info on the `views` object. + + @property _viewInfoMap + @type Object + @default {} + @protected + @since 3.5.0 + **/ + + // -- Lifecycle Methods ---------------------------------------------------- + initializer: function (config) { + config || (config = {}); + + var views = {}; + + // Merges-in specified view metadata into local `views` object. + function mergeViewConfig(view, name) { + views[name] = Y.merge(views[name], view); + } + + // First, each view in the `views` prototype object gets its metadata + // merged-in, providing the defaults. + YObject.each(this.views, mergeViewConfig); + + // Then, each view in the specified `config.views` object gets its + // metadata merged-in. + YObject.each(config.views, mergeViewConfig); + + // The resulting hodgepodge of metadata is then stored as the instance's + // `views` object, and no one's objects were harmed in the making. + this.views = views; + this._viewInfoMap = {}; + + // Using `bind()` to aid extensibility. + this.after('activeViewChange', Y.bind('_afterActiveViewChange', this)); + + // PjaxBase will bind click events when `html5` is `true`, so this just + // forces the binding when `serverRouting` and `html5` are both falsy. + if (!this.get('serverRouting')) { + this._pjaxBindUI(); + } + }, + + // TODO: `destructor` to destroy the `activeView`? + + // -- Public Methods ------------------------------------------------------- + + /** + Creates and returns a new view instance using the provided `name` to look up + the view info metadata defined in the `views` object. The passed-in `config` + object is passed to the view constructor function. + + This function also maps a view instance back to its view info metadata. + + @method createView + @param {String} name The name of a view defined on the `views` object. + @param {Object} [config] The configuration object passed to the view + constructor function when creating the new view instance. + @return {View} The new view instance. + @since 3.5.0 + **/ + createView: function (name, config) { + var viewInfo = this.getViewInfo(name), + type = (viewInfo && viewInfo.type) || View, + ViewConstructor, view; + + // Looks for a namespaced constructor function on `Y`. + ViewConstructor = Lang.isString(type) ? + YObject.getValue(Y, type.split('.')) : type; + + // Create the view instance and map it with its metadata. + view = new ViewConstructor(config); + this._viewInfoMap[Y.stamp(view, true)] = viewInfo; + + return view; + }, + + /** + Returns the metadata associated with a view instance or view name defined on + the `views` object. + + @method getViewInfo + @param {View|String} view View instance, or name of a view defined on the + `views` object. + @return {Object} The metadata for the view, or `undefined` if the view is + not registered. + @since 3.5.0 + **/ + getViewInfo: function (view) { + if (Lang.isString(view)) { + return this.views[view]; + } + + return view && this._viewInfoMap[Y.stamp(view, true)]; + }, + + /** + Navigates to the specified URL if there is a route handler that matches. In + browsers capable of using HTML5 history or when `serverRouting` is falsy, + the navigation will be enhanced by firing the `navigate` event and having + the app handle the "request". When `serverRouting` is `true`, non-HTML5 + browsers will navigate to the new URL via a full page reload. + + When there is a route handler for the specified URL and it is being + navigated to, this method will return `true`, otherwise it will return + `false`. + + **Note:** The specified URL _must_ be of the same origin as the current URL, + otherwise an error will be logged and navigation will not occur. This is + intended as both a security constraint and a purposely imposed limitation as + it does not make sense to tell the app to navigate to a URL on a + different scheme, host, or port. + + @method navigate + @param {String} url The URL to navigate to. This must be of the same origin + as the current URL. + @param {Object} [options] Additional options to configure the navigation. + These are mixed into the `navigate` event facade. + @param {Boolean} [options.replace] Whether or not the current history + entry will be replaced, or a new entry will be created. Will default + to `true` if the specified `url` is the same as the current URL. + @param {Boolean} [options.force] Whether the enhanced navigation + should occur even in browsers without HTML5 history. Will default to + `true` when `serverRouting` is falsy. + @see PjaxBase.navigate() + **/ + // Does not override `navigate()` but does use extra `options`. + + /** + Renders this application by appending the `viewContainer` node to the + `container` node if it isn't already a child of the container, and the + `activeView` will be appended the view container, if it isn't already. + + You should call this method at least once, usually after the initialization + of your app instance so the proper DOM structure is setup and optionally + append the container to the DOM if it's not there already. + + You may override this method to customize the app's rendering, but you + should expect that the `viewContainer`'s contents will be modified by the + app for the purpose of rendering the `activeView` when it changes. + + @method render + @chainable + @see View.render() + **/ + render: function () { + var CLASS_NAMES = Y.App.CLASS_NAMES, + container = this.get('container'), + viewContainer = this.get('viewContainer'), + activeView = this.get('activeView'), + activeViewContainer = activeView && activeView.get('container'), + areSame = container.compareTo(viewContainer); + + container.addClass(CLASS_NAMES.app); + viewContainer.addClass(CLASS_NAMES.views); + + // Prevents needless shuffling around of nodes and maintains DOM order. + if (activeView && !viewContainer.contains(activeViewContainer)) { + viewContainer.appendChild(activeViewContainer); + } + + // Prevents needless shuffling around of nodes and maintains DOM order. + if (!container.contains(viewContainer) && !areSame) { + container.appendChild(viewContainer); + } + + return this; + }, + + /** + Sets which view is active/visible for the application. This will set the + app's `activeView` attribute to the specified `view`. + + The `view` will be "attached" to this app, meaning it will be both rendered + into this app's `viewContainer` node and all of its events will bubble to + the app. The previous `activeView` will be "detached" from this app. + + When a string-name is provided for a view which has been registered on this + app's `views` object, the referenced metadata will be used and the + `activeView` will be set to either a preserved view instance, or a new + instance of the registered view will be created using the specified `config` + object passed-into this method. + + A callback function can be specified as either the third or fourth argument, + and this function will be called after the new `view` becomes the + `activeView`, is rendered to the `viewContainer`, and is ready to use. + + @example + var app = new Y.App({ + views: { + usersView: { + // Imagine that `Y.UsersView` has been defined. + type: Y.UsersView + } + }, + + users: new Y.ModelList() + }); + + app.route('/users/', function () { + this.showView('usersView', {users: this.get('users')}); + }); + + app.render(); + app.navigate('/uses/'); // => Creates a new `Y.UsersView` and shows it. + + @method showView + @param {String|View} view The name of a view defined in the `views` object, + or a view instance which should become this app's `activeView`. + @param {Object} [config] Optional configuration to use when creating a new + view instance. This config object can also be used to update an existing + or preserved view's attributes when `options.update` is `true`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @param {Function} [callback] Optional callback Function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the third or fourth + argument. The function will be passed the following: + @param {View} callback.view A reference to the new `activeView`. + @chainable + @since 3.5.0 + **/ + showView: function (view, config, options, callback) { + var viewInfo, created; + + options || (options = {}); + + // Support the callback function being either the third or fourth arg. + if (callback) { + options = Y.merge(options, {callback: callback}); + } else if (Lang.isFunction(options)) { + options = {callback: options}; + } + + if (Lang.isString(view)) { + viewInfo = this.getViewInfo(view); + + // Use the preserved view instance, or create a new view. + // TODO: Maybe we can remove the strict check for `preserve` and + // assume we'll use a View instance if it is there, and just check + // `preserve` when detaching? + if (viewInfo && viewInfo.preserve && viewInfo.instance) { + view = viewInfo.instance; + + // Make sure there's a mapping back to the view metadata. + this._viewInfoMap[Y.stamp(view, true)] = viewInfo; + } else { + // TODO: Add the app as a bubble target during construction, but + // make sure to check that it isn't already in `bubbleTargets`! + // This will allow the app to be notified for about _all_ of the + // view's events. **Note:** This should _only_ happen if the + // view is created _after_ `activeViewChange`. + + view = this.createView(view, config); + created = true; + } + } + + // Update the specified or preserved `view` when signaled to do so. + // There's no need to updated a view if it was _just_ created. + if (options.update && !created) { + view.setAttrs(config); + } + + // TODO: Hold off on rendering the view until after it has been + // "attached", and move the call to render into `_attachView()`. + + // When a value is specified for `options.render`, prefer it because it + // represents the developer's intent. When no value is specified, the + // `view` will only be rendered if it was just created. + if ('render' in options) { + if (options.render) { + view.render(); + } + } else if (created) { + view.render(); + } + + return this._set('activeView', view, {options: options}); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Helper method to attach the view instance to the application by making the + app a bubble target of the view, append the view to the `viewContainer`, and + assign it to the `instance` property of the associated view info metadata. + + @method _attachView + @param {View} view View to attach. + @param {Boolean} prepend=false Whether the view should be prepended instead + of appended to the `viewContainer`. + @protected + @since 3.5.0 + **/ + _attachView: function (view, prepend) { + if (!view) { + return; + } + + var viewInfo = this.getViewInfo(view), + viewContainer = this.get('viewContainer'); + + // Bubble the view's events to this app. + view.addTarget(this); + + // Save the view instance in the `views` registry. + if (viewInfo) { + viewInfo.instance = view; + } + + // TODO: Attach events here for persevered Views? + // See related TODO in `_detachView`. + + // TODO: Actually render the view here so that it gets "attached" before + // it gets rendered? + + // Insert view into the DOM. + viewContainer[prepend ? 'prepend' : 'append'](view.get('container')); + }, + + /** + Overrides View's container destruction to deal with the `viewContainer` and + checks to make sure not to remove and purge the ``. + + @method _destroyContainer + @protected + @see View._destroyContainer() + **/ + _destroyContainer: function () { + var CLASS_NAMES = Y.App.CLASS_NAMES, + container = this.get('container'), + viewContainer = this.get('viewContainer'), + areSame = container.compareTo(viewContainer); + + // We do not want to remove or destroy the ``. + if (Y.one('body').compareTo(container)) { + // Just clean-up our events listeners. + this.detachEvents(); + + // Clean-up `yui3-app` CSS class on the `container`. + container.removeClass(CLASS_NAMES.app); + + if (areSame) { + // Clean-up `yui3-app-views` CSS class on the `container`. + container.removeClass(CLASS_NAMES.views); + } else { + // Destroy and purge the `viewContainer`. + viewContainer.remove(true); + } + + return; + } + + // Remove and purge events from both containers. + + viewContainer.remove(true); + + if (!areSame) { + container.remove(true); + } + }, + + /** + Helper method to detach the view instance from the application by removing + the application as a bubble target of the view, and either just removing the + view if it is intended to be preserved, or destroying the instance + completely. + + @method _detachView + @param {View} view View to detach. + @protected + @since 3.5.0 + **/ + _detachView: function (view) { + if (!view) { + return; + } + + var viewInfo = this.getViewInfo(view) || {}; + + if (viewInfo.preserve) { + view.remove(); + // TODO: Detach events here for preserved Views? It is possible that + // some event subscriptions are made on elements other than the + // View's `container`. + } else { + view.destroy({remove: true}); + + // TODO: The following should probably happen automagically from + // `destroy()` being called! Possibly `removeTarget()` as well. + + // Remove from view to view-info map. + delete this._viewInfoMap[Y.stamp(view, true)]; + + // Remove from view-info instance property. + if (view === viewInfo.instance) { + delete viewInfo.instance; + } + } + + view.removeTarget(this); + }, + + /** + Getter for the `viewContainer` attribute. + + @method _getViewContainer + @param {Node|null} value Current attribute value. + @return {Node} View container node. + @protected + @since 3.5.0 + **/ + _getViewContainer: function (value) { + // This wackiness is necessary to enable fully lazy creation of the + // container node both when no container is specified and when one is + // specified via a valueFn. + + if (!value && !this._viewContainer) { + // Create a default container and set that as the new attribute + // value. The `this._viewContainer` property prevents infinite + // recursion. + value = this._viewContainer = this.create(); + this._set('viewContainer', value); + } + + return value; + }, + + /** + Provides the default value for the `html5` attribute. + + The value returned is dependent on the value of the `serverRouting` + attribute. When `serverRouting` is explicit set to `false` (not just falsy), + the default value for `html5` will be set to `false` for *all* browsers. + + When `serverRouting` is `true` or `undefined` the returned value will be + dependent on the browser's capability of using HTML5 history. + + @method _initHtml5 + @return {Boolean} Whether or not HTML5 history should be used. + @protected + @since 3.5.0 + **/ + _initHtml5: function () { + // When `serverRouting` is explicitly set to `false` (not just falsy), + // forcing hash-based URLs in all browsers. + if (this.get('serverRouting') === false) { + return false; + } + + // Defaults to whether or not the browser supports HTML5 history. + return Router.html5; + }, + + /** + Determines if the specified `view` is configured as a child of the specified + `parent` view. This requires both views to be either named-views, or view + instances created using configuration data that exists in the `views` + object, e.g. created by the `createView()` or `showView()` method. + + @method _isChildView + @param {View|String} view The name of a view defined in the `views` object, + or a view instance. + @param {View|String} parent The name of a view defined in the `views` + object, or a view instance. + @return {Boolean} Whether the view is configured as a child of the parent. + @protected + @since 3.5.0 + **/ + _isChildView: function (view, parent) { + var viewInfo = this.getViewInfo(view), + parentInfo = this.getViewInfo(parent); + + if (viewInfo && parentInfo) { + return this.getViewInfo(viewInfo.parent) === parentInfo; + } + + return false; + }, + + /** + Determines if the specified `view` is configured as the parent of the + specified `child` view. This requires both views to be either named-views, + or view instances created using configuration data that exists in the + `views` object, e.g. created by the `createView()` or `showView()` method. + + @method _isParentView + @param {View|String} view The name of a view defined in the `views` object, + or a view instance. + @param {View|String} parent The name of a view defined in the `views` + object, or a view instance. + @return {Boolean} Whether the view is configured as the parent of the child. + @protected + @since 3.5.0 + **/ + _isParentView: function (view, child) { + var viewInfo = this.getViewInfo(view), + childInfo = this.getViewInfo(child); + + if (viewInfo && childInfo) { + return this.getViewInfo(childInfo.parent) === viewInfo; + } + + return false; + }, + + /** + Underlying implementation for `navigate()`. + + @method _navigate + @param {String} url The fully-resolved URL that the app should dispatch to + its route handlers to fulfill the enhanced navigation "request", or use to + update `window.location` in non-HTML5 history capable browsers when + `serverRouting` is `true`. + @param {Object} [options] Additional options to configure the navigation. + These are mixed into the `navigate` event facade. + @param {Boolean} [options.replace] Whether or not the current history + entry will be replaced, or a new entry will be created. Will default + to `true` if the specified `url` is the same as the current URL. + @param {Boolean} [options.force] Whether the enhanced navigation + should occur even in browsers without HTML5 history. Will default to + `true` when `serverRouting` is falsy. + @protected + @see PjaxBase._navigate() + **/ + _navigate: function (url, options) { + if (!this.get('serverRouting')) { + // Force navigation to be enhanced and handled by the app when + // `serverRouting` is falsy because the server might not be able to + // properly handle the request. + options = Y.merge({force: true}, options); + } + + return PjaxBase.prototype._navigate.call(this, url, options); + }, + + /** + Will either save a history entry using `pushState()` or the location hash, + or gracefully-degrade to sending a request to the server causing a full-page + reload. + + Overrides Router's `_save()` method to preform graceful-degradation when the + app's `serverRouting` is `true` and `html5` is `false` by updating the full + URL via standard assignment to `window.location` or by calling + `window.location.replace()`; both of which will cause a request to the + server resulting in a full-page reload. + + Otherwise this will just delegate off to Router's `_save()` method allowing + the client-side enhanced routing to occur. + + @method _save + @param {String} [url] URL for the history entry. + @param {Boolean} [replace=false] If `true`, the current history entry will + be replaced instead of a new one being added. + @chainable + @protected + @see Router._save() + **/ + _save: function (url, replace) { + var path; + + // Forces full-path URLs to always be used by modifying + // `window.location` in non-HTML5 history capable browsers. + if (this.get('serverRouting') && !this.get('html5')) { + // Perform same-origin check on the specified URL. + if (!this._hasSameOrigin(url)) { + Y.error('Security error: The new URL must be of the same origin as the current URL.'); + return this; + } + + // Either replace the current history entry or create a new one + // while navigating to the `url`. + if (win) { + // Results in the URL's full path starting with '/'. + path = this._joinURL(url || ''); + + if (replace) { + win.location.replace(path); + } else { + win.location = path; + } + } + + return this; + } + + return Router.prototype._save.apply(this, arguments); + }, + + /** + Performs the actual change of this app's `activeView` by attaching the + `newView` to this app, and detaching the `oldView` from this app using any + specified `options`. + + The `newView` is attached to the app by rendering it to the `viewContainer`, + and making this app a bubble target of its events. + + The `oldView` is detached from the app by removing it from the + `viewContainer`, and removing this app as a bubble target for its events. + The `oldView` will either be preserved or properly destroyed. + + **Note:** The `activeView` attribute is read-only and can be changed by + calling the `showView()` method. + + @method _uiSetActiveView + @param {View} newView The View which is now this app's `activeView`. + @param {View} [oldView] The View which was this app's `activeView`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @protected + @since 3.5.0 + **/ + _uiSetActiveView: function (newView, oldView, options) { + options || (options = {}); + + var callback = options.callback, + isChild = this._isChildView(newView, oldView), + isParent = !isChild && this._isParentView(newView, oldView), + prepend = !!options.prepend || isParent; + + // Prevent detaching (thus removing) the view we want to show. Also hard + // to animate out and in, the same view. + if (newView === oldView) { + return callback && callback.call(this, newView); + } + + this._attachView(newView, prepend); + this._detachView(oldView); + + if (callback) { + callback.call(this, newView); + } + }, + + // -- Protected Event Handlers --------------------------------------------- + + /** + Handles the application's `activeViewChange` event (which is fired when the + `activeView` attribute changes) by detaching the old view, attaching the new + view. + + The `activeView` attribute is read-only, so the public API to change its + value is through the `showView()` method. + + @method _afterActiveViewChange + @param {EventFacade} e + @protected + @since 3.5.0 + **/ + _afterActiveViewChange: function (e) { + this._uiSetActiveView(e.newVal, e.prevVal, e.options); + } +}, { + ATTRS: { + /** + The application's active/visible view. + + This attribute is read-only, to set the `activeView` use the + `showView()` method. + + @attribute activeView + @type View + @default null + @readOnly + @see App.Base.showView() + @since 3.5.0 + **/ + activeView: { + value : null, + readOnly: true + }, + + /** + Container node which represents the application's bounding-box, into + which this app's content will be rendered. + + The container node serves as the host for all DOM events attached by the + app. Delegation is used to handle events on children of the container, + allowing the container's contents to be re-rendered at any time without + losing event subscriptions. + + The default container is the `` Node, but you can override this in + a subclass, or by passing in a custom `container` config value at + instantiation time. + + When `container` is overridden by a subclass or passed as a config + option at instantiation time, it may be provided as a selector string, a + DOM element, or a `Y.Node` instance. During initialization, this app's + `create()` method will be called to convert the container into a + `Y.Node` instance if it isn't one already and stamp it with the CSS + class: `"yui3-app"`. + + The container is not added to the page automatically. This allows you to + have full control over how and when your app is actually rendered to + the page. + + @attribute container + @type HTMLElement|Node|String + @default Y.one('body') + @initOnly + **/ + container: { + valueFn: function () { + return Y.one('body'); + } + }, + + /** + Whether or not this browser is capable of using HTML5 history. + + This value is dependent on the value of `serverRouting` and will default + accordingly. + + Setting this to `false` will force the use of hash-based history even on + HTML5 browsers, but please don't do this unless you understand the + consequences. + + @attribute html5 + @type Boolean + @initOnly + @see serverRouting + **/ + html5: { + valueFn: '_initHtml5' + }, + + /** + CSS selector string used to filter link click events so that only the + links which match it will have the enhanced-navigation behavior of pjax + applied. + + When a link is clicked and that link matches this selector, navigating + to the link's `href` URL using the enhanced, pjax, behavior will be + attempted; and the browser's default way to navigate to new pages will + be the fallback. + + By default this selector will match _all_ links on the page. + + @attribute linkSelector + @type String|Function + @default "a" + **/ + linkSelector: { + value: 'a' + }, + + /** + Whether or not this application's server is capable of properly routing + all requests and rendering the initial state in the HTML responses. + + This can have three different values, each having particular + implications on how the app will handle routing and navigation: + + * `undefined`: The best form of URLs will be chosen based on the + capabilities of the browser. Given no information about the server + environmentm a balanced approach to routing and navigation is + chosen. + + The server should be capable of handling full-path requests, since + full-URLs will be generated by browsers using HTML5 history. If this + is a client-side-only app the server could handle full-URL requests + by sending a redirect back to the root with a hash-based URL, e.g: + + Request: http://example.com/users/1 + Redirect to: http://example.com/#/users/1 + + * `true`: The server is *fully* capable of properly handling requests + to all full-path URLs the app can produce. + + This is the best option for progressive-enhancement because it will + cause **all URLs to always have full-paths**, which means the server + will be able to accurately handle all URLs this app produces. e.g. + + http://example.com/users/1 + + To meet this strict full-URL requirement, browsers which are not + capable of using HTML5 history will make requests to the server + resulting in full-page reloads. + + * `false`: The server is *not* capable of properly handling requests + to all full-path URLs the app can produce, therefore all routing + will be handled by this App instance. + + Be aware that this will cause **all URLs to always be hash-based**, + even in browsers that are capable of using HTML5 history. e.g. + + http://example.com/#/users/1 + + A single-page or client-side-only app where the server sends a + "shell" page with JavaScript to the client might have this + restriction. If you're setting this to `false`, read the following: + + **Note:** When this is set to `false`, the server will *never* receive + the full URL because browsers do not send the fragment-part to the + server, that is everything after and including the "#". + + Consider the following example: + + URL shown in browser: http://example.com/#/users/1 + URL sent to server: http://example.com/ + + You should feel bad about hurting our precious web if you forcefully set + either `serverRouting` or `html5` to `false`, because you're basically + punching the web in the face here with your lossy URLs! Please make sure + you know what you're doing and that you understand the implications. + + Ideally you should always prefer full-path URLs (not /#/foo/), and want + full-page reloads when the client's browser is not capable of enhancing + the experience using the HTML5 history APIs. Setting this to `true` is + the best option for progressive-enhancement (and graceful-degradation). + + @attribute serverRouting + @type Boolean + @default undefined + @initOnly + @since 3.5.0 + **/ + serverRouting: { + valueFn : function () { return Y.App.serverRouting; }, + writeOnce: 'initOnly' + }, + + /** + The node into which this app's `views` will be rendered when they become + the `activeView`. + + The view container node serves as the container to hold the app's + `activeView`. Each time the `activeView` is set via `showView()`, the + previous view will be removed from this node, and the new active view's + `container` node will be appended. + + The default view container is a `
` Node, but you can override this + in a subclass, or by passing in a custom `viewContainer` config value at + instantiation time. The `viewContainer` may be provided as a selector + string, DOM element, or a `Y.Node` instance (having the `viewContainer` + and the `container` be the same node is also supported). + + The app's `render()` method will stamp the view container with the CSS + class `"yui3-app-views"` and append it to the app's `container` node if + it isn't already, and any `activeView` will be appended to this node if + it isn't already. + + @attribute viewContainer + @type HTMLElement|Node|String + @default Y.Node.create(this.containerTemplate) + @initOnly + @since 3.5.0 + **/ + viewContainer: { + getter : '_getViewContainer', + setter : Y.one, + writeOnce: true + } + }, + + /** + Properties that shouldn't be turned into ad-hoc attributes when passed to + App's constructor. + + @property _NON_ATTRS_CFG + @type Array + @static + @protected + @since 3.5.0 + **/ + _NON_ATTRS_CFG: ['views'] +}); + +// -- Namespace ---------------------------------------------------------------- +Y.namespace('App').Base = AppBase; + +/** +Provides a top-level application component which manages navigation and views. + +This gives you a foundation and structure on which to build your application; it +combines robust URL navigation with powerful routing and flexible view +management. + +`Y.App` is both a namespace and constructor function. The `Y.App` class is +special in that any `Y.App` class extensions that are included in the YUI +instance will be **auto-mixed** on to the `Y.App` class. Consider this example: + + YUI().use('app-base', 'app-transitions', function (Y) { + // This will create two YUI Apps, `basicApp` will not have transitions, + // but `fancyApp` will have transitions support included and turn it on. + var basicApp = new Y.App.Base(), + fancyApp = new Y.App({transitions: true}); + }); + +@class App +@param {Object} [config] The following are configuration properties that can be + specified _in addition_ to default attribute values and the non-attribute + properties provided by `Y.Base`: + @param {Object} [config.views] Hash of view-name to metadata used to + declaratively describe an application's views and their relationship with + the app and other views. The views specified here will override any defaults + provided by the `views` object on the `prototype`. +@constructor +@extends App.Base +@uses App.Content +@uses App.Transitions +@uses PjaxContent +@since 3.5.0 +**/ +Y.App = Y.mix(Y.Base.create('app', AppBase, []), Y.App, true); + +/** +CSS classes used by `Y.App`. + +@property CLASS_NAMES +@type Object +@default {} +@static +@since 3.6.0 +**/ +Y.App.CLASS_NAMES = { + app : getClassName('app'), + views: getClassName('app', 'views') +}; + +/** +Default `serverRouting` attribute value for all apps. + +@property serverRouting +@type Boolean +@default undefined +@static +@since 3.6.0 +**/ + + +}, '3.9.0', {"requires": ["classnamemanager", "pjax-base", "router", "view"]}); diff --git a/src/errors/static/js/yui/build/app-content/app-content-coverage.js b/src/errors/static/js/yui/build/app-content/app-content-coverage.js new file mode 100644 index 00000000..e37eef8a --- /dev/null +++ b/src/errors/static/js/yui/build/app-content/app-content-coverage.js @@ -0,0 +1,310 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/app-content/app-content.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/app-content/app-content.js", + code: [] +}; +_yuitest_coverage["build/app-content/app-content.js"].code=["YUI.add('app-content', function (Y, NAME) {","","/**","`Y.App` extension that provides pjax-style content fetching and handling.","","@module app","@submodule app-content","@since 3.7.0","**/","","var PjaxContent = Y.PjaxContent;","","/**","`Y.App` extension that provides pjax-style content fetching and handling.","","This makes it easy to fetch server rendered content for URLs using Ajax. The","HTML content returned from the server will be view-ified and set as the app's","main content, making it seamless to use a mixture of server and client rendered","views.","","When the `\"app-content\"` module is used, it will automatically mix itself into","`Y.App`, and it provides three main features:",""," - **`Y.App.Content.route`**: A stack of middleware which forms a pjax-style"," content route.",""," - **`loadContent()`**: Route middleware which load content from a server. This"," makes an Ajax request for the requested URL, parses the returned content and"," puts it on the route's response object.",""," - **`showContent()`**: Method which provides an easy way to view-ify HTML"," content which should be shown as an app's active/visible view.","","The following is an example of how these features can be used:",""," // Creates a new app and registers the `\"post\"` view."," var app = new Y.App({"," views: {"," post: {type: Y.PostView}"," }"," });",""," // Uses a simple server rendered content route for the About page."," app.route('/about/', Y.App.Content.route);",""," // Uses the `loadContent()` middleware to fetch the contents of the post"," // from the server and shows that content in a `\"post\"` view."," app.route('/posts/:id/', 'loadContent', function (req, res, next) {"," this.showContent(res.content.node, {view: 'post'});"," });","","@class App.Content","@uses PjaxContent","@extensionfor App","@since 3.7.0","**/","function AppContent() {"," PjaxContent.apply(this, arguments);","}","","/**","A stack of middleware which forms a pjax-style content route.","","This route will load the rendered HTML content from the server, then create and","show a new view using those contents.","","@property route","@type Array","@static","@since 3.7.0","**/","AppContent.route = ['loadContent', '_contentRoute'];","","AppContent.prototype = {"," // -- Public Methods -------------------------------------------------------",""," /**"," Sets this app's `activeView` attribute using the specified `content`.",""," This provides an easy way to view-ify HTML content which should be shown as"," this app's active/visible view. This method will determine the appropriate"," view `container` node based on the specified `content`. By default, a new"," `Y.View` instance will be created unless `options.view` is specified.",""," Under the hood, this method calls the `showView()` method, so refer to its"," docs for more information.",""," @method showContent"," @param {HTMLElement|Node|String} content The content to show, it may be"," provided as a selector string, a DOM element, or a `Y.Node` instance."," @param {Object} [options] Optional objects containing any of the following"," properties in addition to any `showView()` options:",""," @param {Object|String} [options.view] The name of a view defined in this"," app's `views`, or an object with the following properties:",""," @param {String} options.view.name The name of a view defined in this"," app's `views`."," @param {Object} [options.view.config] Optional configuration to use when"," creating the new view instance. This config object can also be used"," to update an existing or preserved view's attributes when"," `options.update` is `true`. **Note:** If a `container` is specified,"," it will be overridden by the `content` specified in the first"," argument.",""," @param {Function} [callback] Optional callback function to call after the"," new `activeView` is ready to use. **Note:** this will override"," `options.callback` and it can be specified as either the second or third"," argument. The function will be passed the following:",""," @param {View} callback.view A reference to the new `activeView`.",""," @since 3.7.0"," @see App.showView()"," **/"," showContent: function (content, options, callback) {"," // Makes sure we have a node instance, and will query selector strings."," content = Y.one(content);",""," // Support the callback function being either the second or third arg."," if (typeof options === 'function') {"," options = {callback: options};"," callback = null;"," }",""," // Mix in default option to *not* render the view because presumably we"," // have pre-rendered content here. This also creates a copy so we can"," // modify the object."," options = Y.merge({render: false}, options);",""," var view = options.view || '',"," viewName = typeof view === 'string' ? view : view.name,"," viewConfig = typeof view !== 'string' ? view.config : {},"," viewInfo = this.getViewInfo(viewName),"," container, template, type, ViewConstructor;",""," // Remove `view` from the `options` which will be passed along to the"," // `showView()` method."," delete options.view;",""," // When the specified `content` is a document fragment, we want to see"," // if it only contains a single node, and use that as the content. This"," // checks `childNodes` which will include text nodes."," if (content && content.isFragment() &&"," content.get('childNodes').size() === 1) {",""," content = content.get('firstChild');"," }",""," // When the `content` is an element node (`nodeType` 1), we can use it"," // as-is for the `container`. Otherwise, we'll construct a new container"," // based on the `options.view`'s `containerTemplate`."," if (content && content.get('nodeType') === 1) {"," container = content;"," } else {"," type = (viewInfo && viewInfo.type) || Y.View;",""," // Looks for a namespaced constructor function on `Y`."," ViewConstructor = typeof type === 'string' ?"," Y.Object.getValue(Y, type.split('.')) : type;",""," // Find the correct node template for the view."," template = ViewConstructor.prototype.containerTemplate;"," container = Y.Node.create(template);",""," // Append the document fragment to the newly created `container`"," // node. This is the worst case where we have to create a wrapper"," // node around the `content`."," container.append(content);"," }",""," // Makes sure the view is created using _our_ `container` node."," viewConfig = Y.merge(viewConfig, {container: container});",""," // Finally switch to the new `activeView`. We want to make sure `view`"," // is a string if it's falsy, that way a new view will be created."," return this.showView(viewName, viewConfig, options, callback);"," },",""," // -- Protected Methods ----------------------------------------------------",""," /**"," Provides a default content route which will show a server rendered view.",""," **Note:** This route callback assumes that it's called after the"," `loadContent()` middleware.",""," @method _contentRoute"," @param {Object} req Request object."," @param {Object} res Response Object."," @param {Function} next Function to pass control to the next route callback."," @protected"," @since 3.7.0"," @see Y.App.Content.route"," **/"," _contentRoute: function (req, res, next) {"," var content = res.content,"," doc = Y.config.doc,"," activeViewHandle;",""," // We must have some content to work with."," if (!(content && content.node)) { return next(); }",""," if (content.title && doc) {"," // Make sure the `activeView` does actually change before we go"," // messing with the page title."," activeViewHandle = this.onceAfter('activeViewChange', function () {"," doc.title = content.title;"," });"," }",""," this.showContent(content.node);",""," // Detach the handle just in case."," if (activeViewHandle) {"," activeViewHandle.detach();"," }",""," next();"," }","};","","// Mix statics.","AppContent.ATTRS = Y.Attribute.protectAttrs(PjaxContent.ATTRS);","","// Mix prototype.","Y.mix(AppContent, PjaxContent, false, null, 1);","","// -- Namespace ----------------------------------------------------------------","Y.App.Content = AppContent;","Y.Base.mix(Y.App, [AppContent]);","","","}, '3.9.0', {\"requires\": [\"app-base\", \"pjax-content\"]});"]; +_yuitest_coverage["build/app-content/app-content.js"].lines = {"1":0,"11":0,"57":0,"58":0,"72":0,"74":0,"118":0,"121":0,"122":0,"123":0,"129":0,"131":0,"139":0,"144":0,"147":0,"153":0,"154":0,"156":0,"159":0,"163":0,"164":0,"169":0,"173":0,"177":0,"197":0,"202":0,"204":0,"207":0,"208":0,"212":0,"215":0,"216":0,"219":0,"224":0,"227":0,"230":0,"231":0}; +_yuitest_coverage["build/app-content/app-content.js"].functions = {"AppContent:57":0,"showContent:116":0,"(anonymous 2):207":0,"_contentRoute:196":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/app-content/app-content.js"].coveredLines = 37; +_yuitest_coverage["build/app-content/app-content.js"].coveredFunctions = 5; +_yuitest_coverline("build/app-content/app-content.js", 1); +YUI.add('app-content', function (Y, NAME) { + +/** +`Y.App` extension that provides pjax-style content fetching and handling. + +@module app +@submodule app-content +@since 3.7.0 +**/ + +_yuitest_coverfunc("build/app-content/app-content.js", "(anonymous 1)", 1); +_yuitest_coverline("build/app-content/app-content.js", 11); +var PjaxContent = Y.PjaxContent; + +/** +`Y.App` extension that provides pjax-style content fetching and handling. + +This makes it easy to fetch server rendered content for URLs using Ajax. The +HTML content returned from the server will be view-ified and set as the app's +main content, making it seamless to use a mixture of server and client rendered +views. + +When the `"app-content"` module is used, it will automatically mix itself into +`Y.App`, and it provides three main features: + + - **`Y.App.Content.route`**: A stack of middleware which forms a pjax-style + content route. + + - **`loadContent()`**: Route middleware which load content from a server. This + makes an Ajax request for the requested URL, parses the returned content and + puts it on the route's response object. + + - **`showContent()`**: Method which provides an easy way to view-ify HTML + content which should be shown as an app's active/visible view. + +The following is an example of how these features can be used: + + // Creates a new app and registers the `"post"` view. + var app = new Y.App({ + views: { + post: {type: Y.PostView} + } + }); + + // Uses a simple server rendered content route for the About page. + app.route('/about/', Y.App.Content.route); + + // Uses the `loadContent()` middleware to fetch the contents of the post + // from the server and shows that content in a `"post"` view. + app.route('/posts/:id/', 'loadContent', function (req, res, next) { + this.showContent(res.content.node, {view: 'post'}); + }); + +@class App.Content +@uses PjaxContent +@extensionfor App +@since 3.7.0 +**/ +_yuitest_coverline("build/app-content/app-content.js", 57); +function AppContent() { + _yuitest_coverfunc("build/app-content/app-content.js", "AppContent", 57); +_yuitest_coverline("build/app-content/app-content.js", 58); +PjaxContent.apply(this, arguments); +} + +/** +A stack of middleware which forms a pjax-style content route. + +This route will load the rendered HTML content from the server, then create and +show a new view using those contents. + +@property route +@type Array +@static +@since 3.7.0 +**/ +_yuitest_coverline("build/app-content/app-content.js", 72); +AppContent.route = ['loadContent', '_contentRoute']; + +_yuitest_coverline("build/app-content/app-content.js", 74); +AppContent.prototype = { + // -- Public Methods ------------------------------------------------------- + + /** + Sets this app's `activeView` attribute using the specified `content`. + + This provides an easy way to view-ify HTML content which should be shown as + this app's active/visible view. This method will determine the appropriate + view `container` node based on the specified `content`. By default, a new + `Y.View` instance will be created unless `options.view` is specified. + + Under the hood, this method calls the `showView()` method, so refer to its + docs for more information. + + @method showContent + @param {HTMLElement|Node|String} content The content to show, it may be + provided as a selector string, a DOM element, or a `Y.Node` instance. + @param {Object} [options] Optional objects containing any of the following + properties in addition to any `showView()` options: + + @param {Object|String} [options.view] The name of a view defined in this + app's `views`, or an object with the following properties: + + @param {String} options.view.name The name of a view defined in this + app's `views`. + @param {Object} [options.view.config] Optional configuration to use when + creating the new view instance. This config object can also be used + to update an existing or preserved view's attributes when + `options.update` is `true`. **Note:** If a `container` is specified, + it will be overridden by the `content` specified in the first + argument. + + @param {Function} [callback] Optional callback function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the second or third + argument. The function will be passed the following: + + @param {View} callback.view A reference to the new `activeView`. + + @since 3.7.0 + @see App.showView() + **/ + showContent: function (content, options, callback) { + // Makes sure we have a node instance, and will query selector strings. + _yuitest_coverfunc("build/app-content/app-content.js", "showContent", 116); +_yuitest_coverline("build/app-content/app-content.js", 118); +content = Y.one(content); + + // Support the callback function being either the second or third arg. + _yuitest_coverline("build/app-content/app-content.js", 121); +if (typeof options === 'function') { + _yuitest_coverline("build/app-content/app-content.js", 122); +options = {callback: options}; + _yuitest_coverline("build/app-content/app-content.js", 123); +callback = null; + } + + // Mix in default option to *not* render the view because presumably we + // have pre-rendered content here. This also creates a copy so we can + // modify the object. + _yuitest_coverline("build/app-content/app-content.js", 129); +options = Y.merge({render: false}, options); + + _yuitest_coverline("build/app-content/app-content.js", 131); +var view = options.view || '', + viewName = typeof view === 'string' ? view : view.name, + viewConfig = typeof view !== 'string' ? view.config : {}, + viewInfo = this.getViewInfo(viewName), + container, template, type, ViewConstructor; + + // Remove `view` from the `options` which will be passed along to the + // `showView()` method. + _yuitest_coverline("build/app-content/app-content.js", 139); +delete options.view; + + // When the specified `content` is a document fragment, we want to see + // if it only contains a single node, and use that as the content. This + // checks `childNodes` which will include text nodes. + _yuitest_coverline("build/app-content/app-content.js", 144); +if (content && content.isFragment() && + content.get('childNodes').size() === 1) { + + _yuitest_coverline("build/app-content/app-content.js", 147); +content = content.get('firstChild'); + } + + // When the `content` is an element node (`nodeType` 1), we can use it + // as-is for the `container`. Otherwise, we'll construct a new container + // based on the `options.view`'s `containerTemplate`. + _yuitest_coverline("build/app-content/app-content.js", 153); +if (content && content.get('nodeType') === 1) { + _yuitest_coverline("build/app-content/app-content.js", 154); +container = content; + } else { + _yuitest_coverline("build/app-content/app-content.js", 156); +type = (viewInfo && viewInfo.type) || Y.View; + + // Looks for a namespaced constructor function on `Y`. + _yuitest_coverline("build/app-content/app-content.js", 159); +ViewConstructor = typeof type === 'string' ? + Y.Object.getValue(Y, type.split('.')) : type; + + // Find the correct node template for the view. + _yuitest_coverline("build/app-content/app-content.js", 163); +template = ViewConstructor.prototype.containerTemplate; + _yuitest_coverline("build/app-content/app-content.js", 164); +container = Y.Node.create(template); + + // Append the document fragment to the newly created `container` + // node. This is the worst case where we have to create a wrapper + // node around the `content`. + _yuitest_coverline("build/app-content/app-content.js", 169); +container.append(content); + } + + // Makes sure the view is created using _our_ `container` node. + _yuitest_coverline("build/app-content/app-content.js", 173); +viewConfig = Y.merge(viewConfig, {container: container}); + + // Finally switch to the new `activeView`. We want to make sure `view` + // is a string if it's falsy, that way a new view will be created. + _yuitest_coverline("build/app-content/app-content.js", 177); +return this.showView(viewName, viewConfig, options, callback); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Provides a default content route which will show a server rendered view. + + **Note:** This route callback assumes that it's called after the + `loadContent()` middleware. + + @method _contentRoute + @param {Object} req Request object. + @param {Object} res Response Object. + @param {Function} next Function to pass control to the next route callback. + @protected + @since 3.7.0 + @see Y.App.Content.route + **/ + _contentRoute: function (req, res, next) { + _yuitest_coverfunc("build/app-content/app-content.js", "_contentRoute", 196); +_yuitest_coverline("build/app-content/app-content.js", 197); +var content = res.content, + doc = Y.config.doc, + activeViewHandle; + + // We must have some content to work with. + _yuitest_coverline("build/app-content/app-content.js", 202); +if (!(content && content.node)) { return next(); } + + _yuitest_coverline("build/app-content/app-content.js", 204); +if (content.title && doc) { + // Make sure the `activeView` does actually change before we go + // messing with the page title. + _yuitest_coverline("build/app-content/app-content.js", 207); +activeViewHandle = this.onceAfter('activeViewChange', function () { + _yuitest_coverfunc("build/app-content/app-content.js", "(anonymous 2)", 207); +_yuitest_coverline("build/app-content/app-content.js", 208); +doc.title = content.title; + }); + } + + _yuitest_coverline("build/app-content/app-content.js", 212); +this.showContent(content.node); + + // Detach the handle just in case. + _yuitest_coverline("build/app-content/app-content.js", 215); +if (activeViewHandle) { + _yuitest_coverline("build/app-content/app-content.js", 216); +activeViewHandle.detach(); + } + + _yuitest_coverline("build/app-content/app-content.js", 219); +next(); + } +}; + +// Mix statics. +_yuitest_coverline("build/app-content/app-content.js", 224); +AppContent.ATTRS = Y.Attribute.protectAttrs(PjaxContent.ATTRS); + +// Mix prototype. +_yuitest_coverline("build/app-content/app-content.js", 227); +Y.mix(AppContent, PjaxContent, false, null, 1); + +// -- Namespace ---------------------------------------------------------------- +_yuitest_coverline("build/app-content/app-content.js", 230); +Y.App.Content = AppContent; +_yuitest_coverline("build/app-content/app-content.js", 231); +Y.Base.mix(Y.App, [AppContent]); + + +}, '3.9.0', {"requires": ["app-base", "pjax-content"]}); diff --git a/src/errors/static/js/yui/build/app-content/app-content-debug.js b/src/errors/static/js/yui/build/app-content/app-content-debug.js new file mode 100644 index 00000000..3502debf --- /dev/null +++ b/src/errors/static/js/yui/build/app-content/app-content-debug.js @@ -0,0 +1,235 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('app-content', function (Y, NAME) { + +/** +`Y.App` extension that provides pjax-style content fetching and handling. + +@module app +@submodule app-content +@since 3.7.0 +**/ + +var PjaxContent = Y.PjaxContent; + +/** +`Y.App` extension that provides pjax-style content fetching and handling. + +This makes it easy to fetch server rendered content for URLs using Ajax. The +HTML content returned from the server will be view-ified and set as the app's +main content, making it seamless to use a mixture of server and client rendered +views. + +When the `"app-content"` module is used, it will automatically mix itself into +`Y.App`, and it provides three main features: + + - **`Y.App.Content.route`**: A stack of middleware which forms a pjax-style + content route. + + - **`loadContent()`**: Route middleware which load content from a server. This + makes an Ajax request for the requested URL, parses the returned content and + puts it on the route's response object. + + - **`showContent()`**: Method which provides an easy way to view-ify HTML + content which should be shown as an app's active/visible view. + +The following is an example of how these features can be used: + + // Creates a new app and registers the `"post"` view. + var app = new Y.App({ + views: { + post: {type: Y.PostView} + } + }); + + // Uses a simple server rendered content route for the About page. + app.route('/about/', Y.App.Content.route); + + // Uses the `loadContent()` middleware to fetch the contents of the post + // from the server and shows that content in a `"post"` view. + app.route('/posts/:id/', 'loadContent', function (req, res, next) { + this.showContent(res.content.node, {view: 'post'}); + }); + +@class App.Content +@uses PjaxContent +@extensionfor App +@since 3.7.0 +**/ +function AppContent() { + PjaxContent.apply(this, arguments); +} + +/** +A stack of middleware which forms a pjax-style content route. + +This route will load the rendered HTML content from the server, then create and +show a new view using those contents. + +@property route +@type Array +@static +@since 3.7.0 +**/ +AppContent.route = ['loadContent', '_contentRoute']; + +AppContent.prototype = { + // -- Public Methods ------------------------------------------------------- + + /** + Sets this app's `activeView` attribute using the specified `content`. + + This provides an easy way to view-ify HTML content which should be shown as + this app's active/visible view. This method will determine the appropriate + view `container` node based on the specified `content`. By default, a new + `Y.View` instance will be created unless `options.view` is specified. + + Under the hood, this method calls the `showView()` method, so refer to its + docs for more information. + + @method showContent + @param {HTMLElement|Node|String} content The content to show, it may be + provided as a selector string, a DOM element, or a `Y.Node` instance. + @param {Object} [options] Optional objects containing any of the following + properties in addition to any `showView()` options: + + @param {Object|String} [options.view] The name of a view defined in this + app's `views`, or an object with the following properties: + + @param {String} options.view.name The name of a view defined in this + app's `views`. + @param {Object} [options.view.config] Optional configuration to use when + creating the new view instance. This config object can also be used + to update an existing or preserved view's attributes when + `options.update` is `true`. **Note:** If a `container` is specified, + it will be overridden by the `content` specified in the first + argument. + + @param {Function} [callback] Optional callback function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the second or third + argument. The function will be passed the following: + + @param {View} callback.view A reference to the new `activeView`. + + @since 3.7.0 + @see App.showView() + **/ + showContent: function (content, options, callback) { + // Makes sure we have a node instance, and will query selector strings. + content = Y.one(content); + + // Support the callback function being either the second or third arg. + if (typeof options === 'function') { + options = {callback: options}; + callback = null; + } + + // Mix in default option to *not* render the view because presumably we + // have pre-rendered content here. This also creates a copy so we can + // modify the object. + options = Y.merge({render: false}, options); + + var view = options.view || '', + viewName = typeof view === 'string' ? view : view.name, + viewConfig = typeof view !== 'string' ? view.config : {}, + viewInfo = this.getViewInfo(viewName), + container, template, type, ViewConstructor; + + // Remove `view` from the `options` which will be passed along to the + // `showView()` method. + delete options.view; + + // When the specified `content` is a document fragment, we want to see + // if it only contains a single node, and use that as the content. This + // checks `childNodes` which will include text nodes. + if (content && content.isFragment() && + content.get('childNodes').size() === 1) { + + content = content.get('firstChild'); + } + + // When the `content` is an element node (`nodeType` 1), we can use it + // as-is for the `container`. Otherwise, we'll construct a new container + // based on the `options.view`'s `containerTemplate`. + if (content && content.get('nodeType') === 1) { + container = content; + } else { + type = (viewInfo && viewInfo.type) || Y.View; + + // Looks for a namespaced constructor function on `Y`. + ViewConstructor = typeof type === 'string' ? + Y.Object.getValue(Y, type.split('.')) : type; + + // Find the correct node template for the view. + template = ViewConstructor.prototype.containerTemplate; + container = Y.Node.create(template); + + // Append the document fragment to the newly created `container` + // node. This is the worst case where we have to create a wrapper + // node around the `content`. + container.append(content); + } + + // Makes sure the view is created using _our_ `container` node. + viewConfig = Y.merge(viewConfig, {container: container}); + + // Finally switch to the new `activeView`. We want to make sure `view` + // is a string if it's falsy, that way a new view will be created. + return this.showView(viewName, viewConfig, options, callback); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Provides a default content route which will show a server rendered view. + + **Note:** This route callback assumes that it's called after the + `loadContent()` middleware. + + @method _contentRoute + @param {Object} req Request object. + @param {Object} res Response Object. + @param {Function} next Function to pass control to the next route callback. + @protected + @since 3.7.0 + @see Y.App.Content.route + **/ + _contentRoute: function (req, res, next) { + var content = res.content, + doc = Y.config.doc, + activeViewHandle; + + // We must have some content to work with. + if (!(content && content.node)) { return next(); } + + if (content.title && doc) { + // Make sure the `activeView` does actually change before we go + // messing with the page title. + activeViewHandle = this.onceAfter('activeViewChange', function () { + doc.title = content.title; + }); + } + + this.showContent(content.node); + + // Detach the handle just in case. + if (activeViewHandle) { + activeViewHandle.detach(); + } + + next(); + } +}; + +// Mix statics. +AppContent.ATTRS = Y.Attribute.protectAttrs(PjaxContent.ATTRS); + +// Mix prototype. +Y.mix(AppContent, PjaxContent, false, null, 1); + +// -- Namespace ---------------------------------------------------------------- +Y.App.Content = AppContent; +Y.Base.mix(Y.App, [AppContent]); + + +}, '3.9.0', {"requires": ["app-base", "pjax-content"]}); diff --git a/src/errors/static/js/yui/build/app-content/app-content-min.js b/src/errors/static/js/yui/build/app-content/app-content-min.js new file mode 100644 index 00000000..e4596ebe --- /dev/null +++ b/src/errors/static/js/yui/build/app-content/app-content-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("app-content",function(e,t){function r(){n.apply(this,arguments)}var n=e.PjaxContent;r.route=["loadContent","_contentRoute"],r.prototype={showContent:function(t,n,r){t=e.one(t),typeof n=="function"&&(n={callback:n},r=null),n=e.merge({render:!1},n);var i=n.view||"",s=typeof i=="string"?i:i.name,o=typeof i!="string"?i.config:{},u=this.getViewInfo(s),a,f,l,c;return delete n.view,t&&t.isFragment()&&t.get("childNodes").size()===1&&(t=t.get("firstChild")),t&&t.get("nodeType")===1?a=t:(l=u&&u.type||e.View,c=typeof l=="string"?e.Object.getValue(e,l.split(".")):l,f=c.prototype.containerTemplate,a=e.Node.create(f),a.append(t)),o=e.merge(o,{container:a}),this.showView(s,o,n,r)},_contentRoute:function(t,n,r){var i=n.content,s=e.config.doc,o;if(!i||!i.node)return r();i.title&&s&&(o=this.onceAfter("activeViewChange",function(){s.title=i.title})),this.showContent(i.node),o&&o.detach(),r()}},r.ATTRS=e.Attribute.protectAttrs(n.ATTRS),e.mix(r,n,!1,null,1),e.App.Content=r,e.Base.mix(e.App,[r])},"3.9.0",{requires:["app-base","pjax-content"]}); diff --git a/src/errors/static/js/yui/build/app-content/app-content.js b/src/errors/static/js/yui/build/app-content/app-content.js new file mode 100644 index 00000000..3502debf --- /dev/null +++ b/src/errors/static/js/yui/build/app-content/app-content.js @@ -0,0 +1,235 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('app-content', function (Y, NAME) { + +/** +`Y.App` extension that provides pjax-style content fetching and handling. + +@module app +@submodule app-content +@since 3.7.0 +**/ + +var PjaxContent = Y.PjaxContent; + +/** +`Y.App` extension that provides pjax-style content fetching and handling. + +This makes it easy to fetch server rendered content for URLs using Ajax. The +HTML content returned from the server will be view-ified and set as the app's +main content, making it seamless to use a mixture of server and client rendered +views. + +When the `"app-content"` module is used, it will automatically mix itself into +`Y.App`, and it provides three main features: + + - **`Y.App.Content.route`**: A stack of middleware which forms a pjax-style + content route. + + - **`loadContent()`**: Route middleware which load content from a server. This + makes an Ajax request for the requested URL, parses the returned content and + puts it on the route's response object. + + - **`showContent()`**: Method which provides an easy way to view-ify HTML + content which should be shown as an app's active/visible view. + +The following is an example of how these features can be used: + + // Creates a new app and registers the `"post"` view. + var app = new Y.App({ + views: { + post: {type: Y.PostView} + } + }); + + // Uses a simple server rendered content route for the About page. + app.route('/about/', Y.App.Content.route); + + // Uses the `loadContent()` middleware to fetch the contents of the post + // from the server and shows that content in a `"post"` view. + app.route('/posts/:id/', 'loadContent', function (req, res, next) { + this.showContent(res.content.node, {view: 'post'}); + }); + +@class App.Content +@uses PjaxContent +@extensionfor App +@since 3.7.0 +**/ +function AppContent() { + PjaxContent.apply(this, arguments); +} + +/** +A stack of middleware which forms a pjax-style content route. + +This route will load the rendered HTML content from the server, then create and +show a new view using those contents. + +@property route +@type Array +@static +@since 3.7.0 +**/ +AppContent.route = ['loadContent', '_contentRoute']; + +AppContent.prototype = { + // -- Public Methods ------------------------------------------------------- + + /** + Sets this app's `activeView` attribute using the specified `content`. + + This provides an easy way to view-ify HTML content which should be shown as + this app's active/visible view. This method will determine the appropriate + view `container` node based on the specified `content`. By default, a new + `Y.View` instance will be created unless `options.view` is specified. + + Under the hood, this method calls the `showView()` method, so refer to its + docs for more information. + + @method showContent + @param {HTMLElement|Node|String} content The content to show, it may be + provided as a selector string, a DOM element, or a `Y.Node` instance. + @param {Object} [options] Optional objects containing any of the following + properties in addition to any `showView()` options: + + @param {Object|String} [options.view] The name of a view defined in this + app's `views`, or an object with the following properties: + + @param {String} options.view.name The name of a view defined in this + app's `views`. + @param {Object} [options.view.config] Optional configuration to use when + creating the new view instance. This config object can also be used + to update an existing or preserved view's attributes when + `options.update` is `true`. **Note:** If a `container` is specified, + it will be overridden by the `content` specified in the first + argument. + + @param {Function} [callback] Optional callback function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the second or third + argument. The function will be passed the following: + + @param {View} callback.view A reference to the new `activeView`. + + @since 3.7.0 + @see App.showView() + **/ + showContent: function (content, options, callback) { + // Makes sure we have a node instance, and will query selector strings. + content = Y.one(content); + + // Support the callback function being either the second or third arg. + if (typeof options === 'function') { + options = {callback: options}; + callback = null; + } + + // Mix in default option to *not* render the view because presumably we + // have pre-rendered content here. This also creates a copy so we can + // modify the object. + options = Y.merge({render: false}, options); + + var view = options.view || '', + viewName = typeof view === 'string' ? view : view.name, + viewConfig = typeof view !== 'string' ? view.config : {}, + viewInfo = this.getViewInfo(viewName), + container, template, type, ViewConstructor; + + // Remove `view` from the `options` which will be passed along to the + // `showView()` method. + delete options.view; + + // When the specified `content` is a document fragment, we want to see + // if it only contains a single node, and use that as the content. This + // checks `childNodes` which will include text nodes. + if (content && content.isFragment() && + content.get('childNodes').size() === 1) { + + content = content.get('firstChild'); + } + + // When the `content` is an element node (`nodeType` 1), we can use it + // as-is for the `container`. Otherwise, we'll construct a new container + // based on the `options.view`'s `containerTemplate`. + if (content && content.get('nodeType') === 1) { + container = content; + } else { + type = (viewInfo && viewInfo.type) || Y.View; + + // Looks for a namespaced constructor function on `Y`. + ViewConstructor = typeof type === 'string' ? + Y.Object.getValue(Y, type.split('.')) : type; + + // Find the correct node template for the view. + template = ViewConstructor.prototype.containerTemplate; + container = Y.Node.create(template); + + // Append the document fragment to the newly created `container` + // node. This is the worst case where we have to create a wrapper + // node around the `content`. + container.append(content); + } + + // Makes sure the view is created using _our_ `container` node. + viewConfig = Y.merge(viewConfig, {container: container}); + + // Finally switch to the new `activeView`. We want to make sure `view` + // is a string if it's falsy, that way a new view will be created. + return this.showView(viewName, viewConfig, options, callback); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Provides a default content route which will show a server rendered view. + + **Note:** This route callback assumes that it's called after the + `loadContent()` middleware. + + @method _contentRoute + @param {Object} req Request object. + @param {Object} res Response Object. + @param {Function} next Function to pass control to the next route callback. + @protected + @since 3.7.0 + @see Y.App.Content.route + **/ + _contentRoute: function (req, res, next) { + var content = res.content, + doc = Y.config.doc, + activeViewHandle; + + // We must have some content to work with. + if (!(content && content.node)) { return next(); } + + if (content.title && doc) { + // Make sure the `activeView` does actually change before we go + // messing with the page title. + activeViewHandle = this.onceAfter('activeViewChange', function () { + doc.title = content.title; + }); + } + + this.showContent(content.node); + + // Detach the handle just in case. + if (activeViewHandle) { + activeViewHandle.detach(); + } + + next(); + } +}; + +// Mix statics. +AppContent.ATTRS = Y.Attribute.protectAttrs(PjaxContent.ATTRS); + +// Mix prototype. +Y.mix(AppContent, PjaxContent, false, null, 1); + +// -- Namespace ---------------------------------------------------------------- +Y.App.Content = AppContent; +Y.Base.mix(Y.App, [AppContent]); + + +}, '3.9.0', {"requires": ["app-base", "pjax-content"]}); diff --git a/src/errors/static/js/yui/build/app-transitions-css/app-transitions-css-min.css b/src/errors/static/js/yui/build/app-transitions-css/app-transitions-css-min.css new file mode 100644 index 00000000..929ffd1e --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions-css/app-transitions-css-min.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-app-transitioning .yui3-app-views,.yui3-app-views.yui3-app-transitioning{overflow-x:hidden;position:relative;white-space:nowrap;letter-spacing:-0.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.yui3-app-transitioning .yui3-app-views,.yui3-app-views.yui3-app-transitioning{word-spacing:-0.43em}.yui3-app-transitioning .yui3-app-views>*,.yui3-app-views.yui3-app-transitioning>*{display:inline-block;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;width:100%;white-space:normal;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#yui3-css-stamp.app-transitions-css{display:none} diff --git a/src/errors/static/js/yui/build/app-transitions-css/app-transitions-css.css b/src/errors/static/js/yui/build/app-transitions-css/app-transitions-css.css new file mode 100644 index 00000000..d390b0b7 --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions-css/app-transitions-css.css @@ -0,0 +1,34 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-app-transitioning .yui3-app-views, +.yui3-app-views.yui3-app-transitioning { + overflow-x: hidden; + position: relative; + white-space: nowrap; + letter-spacing: -0.31em; /* webkit: collapse white-space between units */ + text-rendering: optimizespeed; /* Webkit: fixes text-rendering: optimizeLegibility */ +} +/* Opera as of 12 on Windows needs word-spacing. + The ".opera-only" selector is used to prevent actual prefocus styling + and is not required in markup. +*/ +.opera-only :-o-prefocus, +.yui3-app-transitioning .yui3-app-views, +.yui3-app-views.yui3-app-transitioning { + word-spacing: -0.43em; +} +.yui3-app-transitioning .yui3-app-views > *, +.yui3-app-views.yui3-app-transitioning > * { + display: inline-block; + letter-spacing: normal; + word-spacing: normal; + vertical-align: top; + text-rendering: auto; + width: 100%; + white-space: normal; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* YUI CSS Detection Stamp */ +#yui3-css-stamp.app-transitions-css { display: none; } diff --git a/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-coverage.js b/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-coverage.js new file mode 100644 index 00000000..4e9e46fe --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-coverage.js @@ -0,0 +1,481 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/app-transitions-native/app-transitions-native.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/app-transitions-native/app-transitions-native.js", + code: [] +}; +_yuitest_coverage["build/app-transitions-native/app-transitions-native.js"].code=["YUI.add('app-transitions-native', function (Y, NAME) {","","/**","Provides the implementation of view transitions for `Y.App.Transitions` in","browsers which support native CSS3 transitions.","","@module app","@submodule app-transitions-native","@since 3.5.0","**/","","var AppTransitions = Y.App.Transitions;","","/**","Provides the implementation of view transitions for `Y.App.Transitions` in","browsers which support native CSS3 transitions.","","When this module is used, `Y.App.TransitionsNative` will automatically mix","itself in to `Y.App`.","","@class App.TransitionsNative","@extensionfor App","@since 3.5.0","**/","function AppTransitionsNative() {}","","AppTransitionsNative.prototype = {"," // -- Protected Properties -------------------------------------------------",""," /**"," Whether this app is currently transitioning its `activeView`.",""," @property _transitioning"," @type Boolean"," @default false"," @protected"," @since 3.5.0"," **/",""," /**"," A queue that holds pending calls to this app's `_uiTransitionActiveView()`"," method.",""," @property _viewTransitionQueue"," @type Array"," @default []"," @protected"," @since 3.5.0"," **/",""," // -- Lifecycle Methods ----------------------------------------------------",""," initializer: function () {"," this._transitioning = false;"," this._viewTransitionQueue = [];",""," // TODO: Consider the AOP approach that `Plugin.WidgetAnim` uses."," Y.Do.before(this._queueActiveView, this, '_uiSetActiveView');"," },",""," // -- Protected Methods ----------------------------------------------------",""," /**"," Dequeues any pending calls to `_uiTransitionActiveView()`.",""," **Note:** When there is more than one queued transition, only the most"," recent `activeView` change will be visually transitioned, while the others"," will have their `transition` option overridden to `false`.",""," @method _dequeueActiveView"," @protected"," @since 3.5.0"," **/"," _dequeueActiveView: function () {"," var queue = this._viewTransitionQueue,"," transition = queue.shift(),"," options;",""," if (transition) {"," // When items are still left in the queue, override the transition"," // so it does not run."," if (queue.length) {"," // Overrides `transition` option and splices in the new options."," options = Y.merge(transition[2], {transition: false});"," transition.splice(2, 1, options);"," }",""," this._uiTransitionActiveView.apply(this, transition);"," }"," },",""," /**"," Returns an object containing a named fx for both `viewIn` and `viewOut`"," based on the relationship between the specified `newView` and `oldView`.",""," @method _getFx"," @param {View} newView The view being transitioned-in."," @param {View} oldView The view being transitioned-out."," @param {String} [transition] The preferred transition to use."," @return {Object} An object containing a named fx for both `viewIn` and"," `viewOut`."," @protected"," @since 3.5.0"," **/"," _getFx: function (newView, oldView, transition) {"," var fx = AppTransitions.FX,"," transitions = this.get('transitions');",""," if (transition === false || !transitions) {"," return null;"," }",""," if (transition) {"," return fx[transition];"," }",""," if (this._isChildView(newView, oldView)) {"," return fx[transitions.toChild];"," }",""," if (this._isParentView(newView, oldView)) {"," return fx[transitions.toParent];"," }",""," return fx[transitions.navigate];"," },",""," /**"," Queues calls to `_uiTransitionActiveView()` to make sure a currently running"," transition isn't interrupted.",""," **Note:** This method prevents the default `_uiSetActiveView()` method from"," running.",""," @method _queueActiveView"," @protected"," @since 3.5.0"," **/"," _queueActiveView: function () {"," var args = Y.Array(arguments, 0, true);",""," this._viewTransitionQueue.push(args);",""," if (!this._transitioning) {"," this._dequeueActiveView();"," }",""," return new Y.Do.Prevent();"," },",""," /**"," Performs the actual change of this app's `activeView` by visually"," transitioning between the `newView` and `oldView` using any specified"," `options`.",""," The `newView` is attached to the app by rendering it to the `viewContainer`,"," and making this app a bubble target of its events.",""," The `oldView` is detached from the app by removing it from the"," `viewContainer`, and removing this app as a bubble target for its events."," The `oldView` will either be preserved or properly destroyed.",""," **Note:** This method overrides `_uiSetActiveView()` and provides all of its"," functionality plus supports visual transitions. Also, the `activeView`"," attribute is read-only and can be changed by calling the `showView()`"," method.",""," @method _uiTransitionActiveView"," @param {View} newView The View which is now this app's `activeView`."," @param {View} [oldView] The View which was this app's `activeView`."," @param {Object} [options] Optional object containing any of the following"," properties:"," @param {Function} [options.callback] Optional callback function to call"," after new `activeView` is ready to use, the function will be passed:"," @param {View} options.callback.view A reference to the new"," `activeView`."," @param {Boolean} [options.prepend=false] Whether the `view` should be"," prepended instead of appended to the `viewContainer`."," @param {Boolean} [options.render] Whether the `view` should be rendered."," **Note:** If no value is specified, a view instance will only be"," rendered if it's newly created by this method."," @param {Boolean|String} [options.transition] Optional transition override."," A transition can be specified which will override the default, or"," `false` for no transition."," @param {Boolean} [options.update=false] Whether an existing view should"," have its attributes updated by passing the `config` object to its"," `setAttrs()` method. **Note:** This option does not have an effect if"," the `view` instance is created as a result of calling this method."," @protected"," @since 3.5.0"," **/"," _uiTransitionActiveView: function (newView, oldView, options) {"," options || (options = {});",""," var callback = options.callback,"," container, transitioning, isChild, isParent, prepend,"," fx, fxConfig, transitions;",""," // Quits early when to new and old views are the same."," if (newView === oldView) {"," callback && callback.call(this, newView);",""," this._transitioning = false;"," return this._dequeueActiveView();"," }",""," fx = this._getFx(newView, oldView, options.transition);"," isChild = this._isChildView(newView, oldView);"," isParent = !isChild && this._isParentView(newView, oldView);"," prepend = !!options.prepend || isParent;",""," // Preforms simply attach/detach of the new and old view respectively"," // when there's no transition to perform."," if (!fx) {"," this._attachView(newView, prepend);"," this._detachView(oldView);"," callback && callback.call(this, newView);",""," this._transitioning = false;"," return this._dequeueActiveView();"," }",""," this._transitioning = true;",""," container = this.get('container');"," transitioning = Y.App.CLASS_NAMES.transitioning;",""," container.addClass(transitioning);",""," this._attachView(newView, prepend);",""," // Called when view transitions completed, if none were added this will"," // run right away."," function complete() {"," this._detachView(oldView);"," container.removeClass(transitioning);"," callback && callback.call(this, newView);",""," this._transitioning = false;"," return this._dequeueActiveView();"," }",""," // Setup a new stack to run the view transitions in parallel."," transitions = new Y.Parallel({context: this});"," fxConfig = {"," crossView: !!oldView && !!newView,"," prepended: prepend"," };",""," // Transition the new view first to prevent a gap when sliding."," if (newView && fx.viewIn) {"," newView.get('container')"," .transition(fx.viewIn, fxConfig, transitions.add());"," }",""," if (oldView && fx.viewOut) {"," oldView.get('container')"," .transition(fx.viewOut, fxConfig, transitions.add());"," }",""," transitions.done(complete);"," }","};","","// -- Transition fx ------------------------------------------------------------","Y.mix(Y.Transition.fx, {"," 'app:fadeIn': {"," opacity : 1,"," duration: 0.3,",""," on: {"," start: function (data) {"," var styles = {opacity: 0},"," config = data.config;",""," if (config.crossView && !config.prepended) {"," styles.transform = 'translateX(-100%)';"," }",""," this.setStyles(styles);"," },",""," end: function () {"," this.setStyle('transform', 'translateX(0)');"," }"," }"," },",""," 'app:fadeOut': {"," opacity : 0,"," duration: 0.3,",""," on: {"," start: function (data) {"," var styles = {opacity: 1},"," config = data.config;",""," if (config.crossView && config.prepended) {"," styles.transform = 'translateX(-100%)';"," }",""," this.setStyles(styles);"," },",""," end: function () {"," this.setStyle('transform', 'translateX(0)');"," }"," }"," },",""," 'app:slideLeft': {"," duration : 0.3,"," transform: 'translateX(-100%)',",""," on: {"," start: function () {"," this.setStyles({"," opacity : 1,"," transform: 'translateX(0%)'"," });"," },",""," end: function () {"," this.setStyle('transform', 'translateX(0)');"," }"," }"," },",""," 'app:slideRight': {"," duration : 0.3,"," transform: 'translateX(0)',",""," on: {"," start: function () {"," this.setStyles({"," opacity : 1,"," transform: 'translateX(-100%)'"," });"," },",""," end: function () {"," this.setStyle('transform', 'translateX(0)');"," }"," }"," }","});","","// -- Namespacae ---------------------------------------------------------------","Y.App.TransitionsNative = AppTransitionsNative;","Y.Base.mix(Y.App, [AppTransitionsNative]);","","","}, '3.9.0', {\"requires\": [\"app-transitions\", \"app-transitions-css\", \"parallel\", \"transition\"]});"]; +_yuitest_coverage["build/app-transitions-native/app-transitions-native.js"].lines = {"1":0,"12":0,"25":0,"27":0,"54":0,"55":0,"58":0,"75":0,"79":0,"82":0,"84":0,"85":0,"88":0,"106":0,"109":0,"110":0,"113":0,"114":0,"117":0,"118":0,"121":0,"122":0,"125":0,"140":0,"142":0,"144":0,"145":0,"148":0,"193":0,"195":0,"200":0,"201":0,"203":0,"204":0,"207":0,"208":0,"209":0,"210":0,"214":0,"215":0,"216":0,"217":0,"219":0,"220":0,"223":0,"225":0,"226":0,"228":0,"230":0,"234":0,"235":0,"236":0,"237":0,"239":0,"240":0,"244":0,"245":0,"251":0,"252":0,"256":0,"257":0,"261":0,"266":0,"273":0,"276":0,"277":0,"280":0,"284":0,"295":0,"298":0,"299":0,"302":0,"306":0,"317":0,"324":0,"335":0,"342":0,"349":0,"350":0}; +_yuitest_coverage["build/app-transitions-native/app-transitions-native.js"].functions = {"AppTransitionsNative:25":0,"initializer:53":0,"_dequeueActiveView:74":0,"_getFx:105":0,"_queueActiveView:139":0,"complete:234":0,"_uiTransitionActiveView:192":0,"start:272":0,"end:283":0,"start:294":0,"end:305":0,"start:316":0,"end:323":0,"start:334":0,"end:341":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/app-transitions-native/app-transitions-native.js"].coveredLines = 79; +_yuitest_coverage["build/app-transitions-native/app-transitions-native.js"].coveredFunctions = 16; +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 1); +YUI.add('app-transitions-native', function (Y, NAME) { + +/** +Provides the implementation of view transitions for `Y.App.Transitions` in +browsers which support native CSS3 transitions. + +@module app +@submodule app-transitions-native +@since 3.5.0 +**/ + +_yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "(anonymous 1)", 1); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 12); +var AppTransitions = Y.App.Transitions; + +/** +Provides the implementation of view transitions for `Y.App.Transitions` in +browsers which support native CSS3 transitions. + +When this module is used, `Y.App.TransitionsNative` will automatically mix +itself in to `Y.App`. + +@class App.TransitionsNative +@extensionfor App +@since 3.5.0 +**/ +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 25); +function AppTransitionsNative() {} + +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 27); +AppTransitionsNative.prototype = { + // -- Protected Properties ------------------------------------------------- + + /** + Whether this app is currently transitioning its `activeView`. + + @property _transitioning + @type Boolean + @default false + @protected + @since 3.5.0 + **/ + + /** + A queue that holds pending calls to this app's `_uiTransitionActiveView()` + method. + + @property _viewTransitionQueue + @type Array + @default [] + @protected + @since 3.5.0 + **/ + + // -- Lifecycle Methods ---------------------------------------------------- + + initializer: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "initializer", 53); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 54); +this._transitioning = false; + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 55); +this._viewTransitionQueue = []; + + // TODO: Consider the AOP approach that `Plugin.WidgetAnim` uses. + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 58); +Y.Do.before(this._queueActiveView, this, '_uiSetActiveView'); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Dequeues any pending calls to `_uiTransitionActiveView()`. + + **Note:** When there is more than one queued transition, only the most + recent `activeView` change will be visually transitioned, while the others + will have their `transition` option overridden to `false`. + + @method _dequeueActiveView + @protected + @since 3.5.0 + **/ + _dequeueActiveView: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "_dequeueActiveView", 74); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 75); +var queue = this._viewTransitionQueue, + transition = queue.shift(), + options; + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 79); +if (transition) { + // When items are still left in the queue, override the transition + // so it does not run. + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 82); +if (queue.length) { + // Overrides `transition` option and splices in the new options. + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 84); +options = Y.merge(transition[2], {transition: false}); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 85); +transition.splice(2, 1, options); + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 88); +this._uiTransitionActiveView.apply(this, transition); + } + }, + + /** + Returns an object containing a named fx for both `viewIn` and `viewOut` + based on the relationship between the specified `newView` and `oldView`. + + @method _getFx + @param {View} newView The view being transitioned-in. + @param {View} oldView The view being transitioned-out. + @param {String} [transition] The preferred transition to use. + @return {Object} An object containing a named fx for both `viewIn` and + `viewOut`. + @protected + @since 3.5.0 + **/ + _getFx: function (newView, oldView, transition) { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "_getFx", 105); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 106); +var fx = AppTransitions.FX, + transitions = this.get('transitions'); + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 109); +if (transition === false || !transitions) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 110); +return null; + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 113); +if (transition) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 114); +return fx[transition]; + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 117); +if (this._isChildView(newView, oldView)) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 118); +return fx[transitions.toChild]; + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 121); +if (this._isParentView(newView, oldView)) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 122); +return fx[transitions.toParent]; + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 125); +return fx[transitions.navigate]; + }, + + /** + Queues calls to `_uiTransitionActiveView()` to make sure a currently running + transition isn't interrupted. + + **Note:** This method prevents the default `_uiSetActiveView()` method from + running. + + @method _queueActiveView + @protected + @since 3.5.0 + **/ + _queueActiveView: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "_queueActiveView", 139); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 140); +var args = Y.Array(arguments, 0, true); + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 142); +this._viewTransitionQueue.push(args); + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 144); +if (!this._transitioning) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 145); +this._dequeueActiveView(); + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 148); +return new Y.Do.Prevent(); + }, + + /** + Performs the actual change of this app's `activeView` by visually + transitioning between the `newView` and `oldView` using any specified + `options`. + + The `newView` is attached to the app by rendering it to the `viewContainer`, + and making this app a bubble target of its events. + + The `oldView` is detached from the app by removing it from the + `viewContainer`, and removing this app as a bubble target for its events. + The `oldView` will either be preserved or properly destroyed. + + **Note:** This method overrides `_uiSetActiveView()` and provides all of its + functionality plus supports visual transitions. Also, the `activeView` + attribute is read-only and can be changed by calling the `showView()` + method. + + @method _uiTransitionActiveView + @param {View} newView The View which is now this app's `activeView`. + @param {View} [oldView] The View which was this app's `activeView`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean|String} [options.transition] Optional transition override. + A transition can be specified which will override the default, or + `false` for no transition. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @protected + @since 3.5.0 + **/ + _uiTransitionActiveView: function (newView, oldView, options) { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "_uiTransitionActiveView", 192); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 193); +options || (options = {}); + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 195); +var callback = options.callback, + container, transitioning, isChild, isParent, prepend, + fx, fxConfig, transitions; + + // Quits early when to new and old views are the same. + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 200); +if (newView === oldView) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 201); +callback && callback.call(this, newView); + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 203); +this._transitioning = false; + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 204); +return this._dequeueActiveView(); + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 207); +fx = this._getFx(newView, oldView, options.transition); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 208); +isChild = this._isChildView(newView, oldView); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 209); +isParent = !isChild && this._isParentView(newView, oldView); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 210); +prepend = !!options.prepend || isParent; + + // Preforms simply attach/detach of the new and old view respectively + // when there's no transition to perform. + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 214); +if (!fx) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 215); +this._attachView(newView, prepend); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 216); +this._detachView(oldView); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 217); +callback && callback.call(this, newView); + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 219); +this._transitioning = false; + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 220); +return this._dequeueActiveView(); + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 223); +this._transitioning = true; + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 225); +container = this.get('container'); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 226); +transitioning = Y.App.CLASS_NAMES.transitioning; + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 228); +container.addClass(transitioning); + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 230); +this._attachView(newView, prepend); + + // Called when view transitions completed, if none were added this will + // run right away. + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 234); +function complete() { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "complete", 234); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 235); +this._detachView(oldView); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 236); +container.removeClass(transitioning); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 237); +callback && callback.call(this, newView); + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 239); +this._transitioning = false; + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 240); +return this._dequeueActiveView(); + } + + // Setup a new stack to run the view transitions in parallel. + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 244); +transitions = new Y.Parallel({context: this}); + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 245); +fxConfig = { + crossView: !!oldView && !!newView, + prepended: prepend + }; + + // Transition the new view first to prevent a gap when sliding. + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 251); +if (newView && fx.viewIn) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 252); +newView.get('container') + .transition(fx.viewIn, fxConfig, transitions.add()); + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 256); +if (oldView && fx.viewOut) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 257); +oldView.get('container') + .transition(fx.viewOut, fxConfig, transitions.add()); + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 261); +transitions.done(complete); + } +}; + +// -- Transition fx ------------------------------------------------------------ +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 266); +Y.mix(Y.Transition.fx, { + 'app:fadeIn': { + opacity : 1, + duration: 0.3, + + on: { + start: function (data) { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "start", 272); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 273); +var styles = {opacity: 0}, + config = data.config; + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 276); +if (config.crossView && !config.prepended) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 277); +styles.transform = 'translateX(-100%)'; + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 280); +this.setStyles(styles); + }, + + end: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "end", 283); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 284); +this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:fadeOut': { + opacity : 0, + duration: 0.3, + + on: { + start: function (data) { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "start", 294); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 295); +var styles = {opacity: 1}, + config = data.config; + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 298); +if (config.crossView && config.prepended) { + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 299); +styles.transform = 'translateX(-100%)'; + } + + _yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 302); +this.setStyles(styles); + }, + + end: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "end", 305); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 306); +this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:slideLeft': { + duration : 0.3, + transform: 'translateX(-100%)', + + on: { + start: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "start", 316); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 317); +this.setStyles({ + opacity : 1, + transform: 'translateX(0%)' + }); + }, + + end: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "end", 323); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 324); +this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:slideRight': { + duration : 0.3, + transform: 'translateX(0)', + + on: { + start: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "start", 334); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 335); +this.setStyles({ + opacity : 1, + transform: 'translateX(-100%)' + }); + }, + + end: function () { + _yuitest_coverfunc("build/app-transitions-native/app-transitions-native.js", "end", 341); +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 342); +this.setStyle('transform', 'translateX(0)'); + } + } + } +}); + +// -- Namespacae --------------------------------------------------------------- +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 349); +Y.App.TransitionsNative = AppTransitionsNative; +_yuitest_coverline("build/app-transitions-native/app-transitions-native.js", 350); +Y.Base.mix(Y.App, [AppTransitionsNative]); + + +}, '3.9.0', {"requires": ["app-transitions", "app-transitions-css", "parallel", "transition"]}); diff --git a/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-debug.js b/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-debug.js new file mode 100644 index 00000000..3ab50e3d --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-debug.js @@ -0,0 +1,354 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('app-transitions-native', function (Y, NAME) { + +/** +Provides the implementation of view transitions for `Y.App.Transitions` in +browsers which support native CSS3 transitions. + +@module app +@submodule app-transitions-native +@since 3.5.0 +**/ + +var AppTransitions = Y.App.Transitions; + +/** +Provides the implementation of view transitions for `Y.App.Transitions` in +browsers which support native CSS3 transitions. + +When this module is used, `Y.App.TransitionsNative` will automatically mix +itself in to `Y.App`. + +@class App.TransitionsNative +@extensionfor App +@since 3.5.0 +**/ +function AppTransitionsNative() {} + +AppTransitionsNative.prototype = { + // -- Protected Properties ------------------------------------------------- + + /** + Whether this app is currently transitioning its `activeView`. + + @property _transitioning + @type Boolean + @default false + @protected + @since 3.5.0 + **/ + + /** + A queue that holds pending calls to this app's `_uiTransitionActiveView()` + method. + + @property _viewTransitionQueue + @type Array + @default [] + @protected + @since 3.5.0 + **/ + + // -- Lifecycle Methods ---------------------------------------------------- + + initializer: function () { + this._transitioning = false; + this._viewTransitionQueue = []; + + // TODO: Consider the AOP approach that `Plugin.WidgetAnim` uses. + Y.Do.before(this._queueActiveView, this, '_uiSetActiveView'); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Dequeues any pending calls to `_uiTransitionActiveView()`. + + **Note:** When there is more than one queued transition, only the most + recent `activeView` change will be visually transitioned, while the others + will have their `transition` option overridden to `false`. + + @method _dequeueActiveView + @protected + @since 3.5.0 + **/ + _dequeueActiveView: function () { + var queue = this._viewTransitionQueue, + transition = queue.shift(), + options; + + if (transition) { + // When items are still left in the queue, override the transition + // so it does not run. + if (queue.length) { + // Overrides `transition` option and splices in the new options. + options = Y.merge(transition[2], {transition: false}); + transition.splice(2, 1, options); + } + + this._uiTransitionActiveView.apply(this, transition); + } + }, + + /** + Returns an object containing a named fx for both `viewIn` and `viewOut` + based on the relationship between the specified `newView` and `oldView`. + + @method _getFx + @param {View} newView The view being transitioned-in. + @param {View} oldView The view being transitioned-out. + @param {String} [transition] The preferred transition to use. + @return {Object} An object containing a named fx for both `viewIn` and + `viewOut`. + @protected + @since 3.5.0 + **/ + _getFx: function (newView, oldView, transition) { + var fx = AppTransitions.FX, + transitions = this.get('transitions'); + + if (transition === false || !transitions) { + return null; + } + + if (transition) { + return fx[transition]; + } + + if (this._isChildView(newView, oldView)) { + return fx[transitions.toChild]; + } + + if (this._isParentView(newView, oldView)) { + return fx[transitions.toParent]; + } + + return fx[transitions.navigate]; + }, + + /** + Queues calls to `_uiTransitionActiveView()` to make sure a currently running + transition isn't interrupted. + + **Note:** This method prevents the default `_uiSetActiveView()` method from + running. + + @method _queueActiveView + @protected + @since 3.5.0 + **/ + _queueActiveView: function () { + var args = Y.Array(arguments, 0, true); + + this._viewTransitionQueue.push(args); + + if (!this._transitioning) { + this._dequeueActiveView(); + } + + return new Y.Do.Prevent(); + }, + + /** + Performs the actual change of this app's `activeView` by visually + transitioning between the `newView` and `oldView` using any specified + `options`. + + The `newView` is attached to the app by rendering it to the `viewContainer`, + and making this app a bubble target of its events. + + The `oldView` is detached from the app by removing it from the + `viewContainer`, and removing this app as a bubble target for its events. + The `oldView` will either be preserved or properly destroyed. + + **Note:** This method overrides `_uiSetActiveView()` and provides all of its + functionality plus supports visual transitions. Also, the `activeView` + attribute is read-only and can be changed by calling the `showView()` + method. + + @method _uiTransitionActiveView + @param {View} newView The View which is now this app's `activeView`. + @param {View} [oldView] The View which was this app's `activeView`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean|String} [options.transition] Optional transition override. + A transition can be specified which will override the default, or + `false` for no transition. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @protected + @since 3.5.0 + **/ + _uiTransitionActiveView: function (newView, oldView, options) { + options || (options = {}); + + var callback = options.callback, + container, transitioning, isChild, isParent, prepend, + fx, fxConfig, transitions; + + // Quits early when to new and old views are the same. + if (newView === oldView) { + callback && callback.call(this, newView); + + this._transitioning = false; + return this._dequeueActiveView(); + } + + fx = this._getFx(newView, oldView, options.transition); + isChild = this._isChildView(newView, oldView); + isParent = !isChild && this._isParentView(newView, oldView); + prepend = !!options.prepend || isParent; + + // Preforms simply attach/detach of the new and old view respectively + // when there's no transition to perform. + if (!fx) { + this._attachView(newView, prepend); + this._detachView(oldView); + callback && callback.call(this, newView); + + this._transitioning = false; + return this._dequeueActiveView(); + } + + this._transitioning = true; + + container = this.get('container'); + transitioning = Y.App.CLASS_NAMES.transitioning; + + container.addClass(transitioning); + + this._attachView(newView, prepend); + + // Called when view transitions completed, if none were added this will + // run right away. + function complete() { + this._detachView(oldView); + container.removeClass(transitioning); + callback && callback.call(this, newView); + + this._transitioning = false; + return this._dequeueActiveView(); + } + + // Setup a new stack to run the view transitions in parallel. + transitions = new Y.Parallel({context: this}); + fxConfig = { + crossView: !!oldView && !!newView, + prepended: prepend + }; + + // Transition the new view first to prevent a gap when sliding. + if (newView && fx.viewIn) { + newView.get('container') + .transition(fx.viewIn, fxConfig, transitions.add()); + } + + if (oldView && fx.viewOut) { + oldView.get('container') + .transition(fx.viewOut, fxConfig, transitions.add()); + } + + transitions.done(complete); + } +}; + +// -- Transition fx ------------------------------------------------------------ +Y.mix(Y.Transition.fx, { + 'app:fadeIn': { + opacity : 1, + duration: 0.3, + + on: { + start: function (data) { + var styles = {opacity: 0}, + config = data.config; + + if (config.crossView && !config.prepended) { + styles.transform = 'translateX(-100%)'; + } + + this.setStyles(styles); + }, + + end: function () { + this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:fadeOut': { + opacity : 0, + duration: 0.3, + + on: { + start: function (data) { + var styles = {opacity: 1}, + config = data.config; + + if (config.crossView && config.prepended) { + styles.transform = 'translateX(-100%)'; + } + + this.setStyles(styles); + }, + + end: function () { + this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:slideLeft': { + duration : 0.3, + transform: 'translateX(-100%)', + + on: { + start: function () { + this.setStyles({ + opacity : 1, + transform: 'translateX(0%)' + }); + }, + + end: function () { + this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:slideRight': { + duration : 0.3, + transform: 'translateX(0)', + + on: { + start: function () { + this.setStyles({ + opacity : 1, + transform: 'translateX(-100%)' + }); + }, + + end: function () { + this.setStyle('transform', 'translateX(0)'); + } + } + } +}); + +// -- Namespacae --------------------------------------------------------------- +Y.App.TransitionsNative = AppTransitionsNative; +Y.Base.mix(Y.App, [AppTransitionsNative]); + + +}, '3.9.0', {"requires": ["app-transitions", "app-transitions-css", "parallel", "transition"]}); diff --git a/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-min.js b/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-min.js new file mode 100644 index 00000000..e442bf1a --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("app-transitions-native",function(e,t){function r(){}var n=e.App.Transitions;r.prototype={initializer:function(){this._transitioning=!1,this._viewTransitionQueue=[],e.Do.before(this._queueActiveView,this,"_uiSetActiveView")},_dequeueActiveView:function(){var t=this._viewTransitionQueue,n=t.shift(),r;n&&(t.length&&(r=e.merge(n[2],{transition:!1}),n.splice(2,1,r)),this._uiTransitionActiveView.apply(this,n))},_getFx:function(e,t,r){var i=n.FX,s=this.get("transitions");return r===!1||!s?null:r?i[r]:this._isChildView(e,t)?i[s.toChild]:this._isParentView(e,t)?i[s.toParent]:i[s.navigate]},_queueActiveView:function(){var t=e.Array(arguments,0,!0);return this._viewTransitionQueue.push(t),this._transitioning||this._dequeueActiveView(),new e.Do.Prevent},_uiTransitionActiveView:function(t,n,r){function p(){return this._detachView(n),s.removeClass(o),i&&i.call(this,t),this._transitioning=!1,this._dequeueActiveView()}r||(r={});var i=r.callback,s,o,u,a,f,l,c,h;if(t===n)return i&&i.call(this,t),this._transitioning=!1,this._dequeueActiveView();l=this._getFx(t,n,r.transition),u=this._isChildView(t,n),a=!u&&this._isParentView(t,n),f=!!r.prepend||a;if(!l)return this._attachView(t,f),this._detachView(n),i&&i.call(this,t),this._transitioning=!1,this._dequeueActiveView();this._transitioning=!0,s=this.get("container"),o=e.App.CLASS_NAMES.transitioning,s.addClass(o),this._attachView(t,f),h=new e.Parallel({context:this}),c={crossView:!!n&&!!t,prepended:f},t&&l.viewIn&&t.get("container").transition(l.viewIn,c,h.add()),n&&l.viewOut&&n.get("container").transition(l.viewOut,c,h.add()),h.done(p)}},e.mix(e.Transition.fx,{"app:fadeIn":{opacity:1,duration:.3,on:{start:function(e){var t={opacity:0},n=e.config;n.crossView&&!n.prepended&&(t.transform="translateX(-100%)"),this.setStyles(t)},end:function(){this.setStyle("transform","translateX(0)")}}},"app:fadeOut":{opacity:0,duration:.3,on:{start:function(e){var t={opacity:1},n=e.config;n.crossView&&n.prepended&&(t.transform="translateX(-100%)"),this.setStyles(t)},end:function(){this.setStyle("transform","translateX(0)")}}},"app:slideLeft":{duration:.3,transform:"translateX(-100%)",on:{start:function(){this.setStyles({opacity:1,transform:"translateX(0%)"})},end:function(){this.setStyle("transform","translateX(0)")}}},"app:slideRight":{duration:.3,transform:"translateX(0)",on:{start:function(){this.setStyles({opacity:1,transform:"translateX(-100%)"})},end:function(){this.setStyle("transform","translateX(0)")}}}}),e.App.TransitionsNative=r,e.Base.mix(e.App,[r])},"3.9.0",{requires:["app-transitions","app-transitions-css","parallel","transition"]}); diff --git a/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native.js b/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native.js new file mode 100644 index 00000000..3ab50e3d --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions-native/app-transitions-native.js @@ -0,0 +1,354 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('app-transitions-native', function (Y, NAME) { + +/** +Provides the implementation of view transitions for `Y.App.Transitions` in +browsers which support native CSS3 transitions. + +@module app +@submodule app-transitions-native +@since 3.5.0 +**/ + +var AppTransitions = Y.App.Transitions; + +/** +Provides the implementation of view transitions for `Y.App.Transitions` in +browsers which support native CSS3 transitions. + +When this module is used, `Y.App.TransitionsNative` will automatically mix +itself in to `Y.App`. + +@class App.TransitionsNative +@extensionfor App +@since 3.5.0 +**/ +function AppTransitionsNative() {} + +AppTransitionsNative.prototype = { + // -- Protected Properties ------------------------------------------------- + + /** + Whether this app is currently transitioning its `activeView`. + + @property _transitioning + @type Boolean + @default false + @protected + @since 3.5.0 + **/ + + /** + A queue that holds pending calls to this app's `_uiTransitionActiveView()` + method. + + @property _viewTransitionQueue + @type Array + @default [] + @protected + @since 3.5.0 + **/ + + // -- Lifecycle Methods ---------------------------------------------------- + + initializer: function () { + this._transitioning = false; + this._viewTransitionQueue = []; + + // TODO: Consider the AOP approach that `Plugin.WidgetAnim` uses. + Y.Do.before(this._queueActiveView, this, '_uiSetActiveView'); + }, + + // -- Protected Methods ---------------------------------------------------- + + /** + Dequeues any pending calls to `_uiTransitionActiveView()`. + + **Note:** When there is more than one queued transition, only the most + recent `activeView` change will be visually transitioned, while the others + will have their `transition` option overridden to `false`. + + @method _dequeueActiveView + @protected + @since 3.5.0 + **/ + _dequeueActiveView: function () { + var queue = this._viewTransitionQueue, + transition = queue.shift(), + options; + + if (transition) { + // When items are still left in the queue, override the transition + // so it does not run. + if (queue.length) { + // Overrides `transition` option and splices in the new options. + options = Y.merge(transition[2], {transition: false}); + transition.splice(2, 1, options); + } + + this._uiTransitionActiveView.apply(this, transition); + } + }, + + /** + Returns an object containing a named fx for both `viewIn` and `viewOut` + based on the relationship between the specified `newView` and `oldView`. + + @method _getFx + @param {View} newView The view being transitioned-in. + @param {View} oldView The view being transitioned-out. + @param {String} [transition] The preferred transition to use. + @return {Object} An object containing a named fx for both `viewIn` and + `viewOut`. + @protected + @since 3.5.0 + **/ + _getFx: function (newView, oldView, transition) { + var fx = AppTransitions.FX, + transitions = this.get('transitions'); + + if (transition === false || !transitions) { + return null; + } + + if (transition) { + return fx[transition]; + } + + if (this._isChildView(newView, oldView)) { + return fx[transitions.toChild]; + } + + if (this._isParentView(newView, oldView)) { + return fx[transitions.toParent]; + } + + return fx[transitions.navigate]; + }, + + /** + Queues calls to `_uiTransitionActiveView()` to make sure a currently running + transition isn't interrupted. + + **Note:** This method prevents the default `_uiSetActiveView()` method from + running. + + @method _queueActiveView + @protected + @since 3.5.0 + **/ + _queueActiveView: function () { + var args = Y.Array(arguments, 0, true); + + this._viewTransitionQueue.push(args); + + if (!this._transitioning) { + this._dequeueActiveView(); + } + + return new Y.Do.Prevent(); + }, + + /** + Performs the actual change of this app's `activeView` by visually + transitioning between the `newView` and `oldView` using any specified + `options`. + + The `newView` is attached to the app by rendering it to the `viewContainer`, + and making this app a bubble target of its events. + + The `oldView` is detached from the app by removing it from the + `viewContainer`, and removing this app as a bubble target for its events. + The `oldView` will either be preserved or properly destroyed. + + **Note:** This method overrides `_uiSetActiveView()` and provides all of its + functionality plus supports visual transitions. Also, the `activeView` + attribute is read-only and can be changed by calling the `showView()` + method. + + @method _uiTransitionActiveView + @param {View} newView The View which is now this app's `activeView`. + @param {View} [oldView] The View which was this app's `activeView`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean|String} [options.transition] Optional transition override. + A transition can be specified which will override the default, or + `false` for no transition. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @protected + @since 3.5.0 + **/ + _uiTransitionActiveView: function (newView, oldView, options) { + options || (options = {}); + + var callback = options.callback, + container, transitioning, isChild, isParent, prepend, + fx, fxConfig, transitions; + + // Quits early when to new and old views are the same. + if (newView === oldView) { + callback && callback.call(this, newView); + + this._transitioning = false; + return this._dequeueActiveView(); + } + + fx = this._getFx(newView, oldView, options.transition); + isChild = this._isChildView(newView, oldView); + isParent = !isChild && this._isParentView(newView, oldView); + prepend = !!options.prepend || isParent; + + // Preforms simply attach/detach of the new and old view respectively + // when there's no transition to perform. + if (!fx) { + this._attachView(newView, prepend); + this._detachView(oldView); + callback && callback.call(this, newView); + + this._transitioning = false; + return this._dequeueActiveView(); + } + + this._transitioning = true; + + container = this.get('container'); + transitioning = Y.App.CLASS_NAMES.transitioning; + + container.addClass(transitioning); + + this._attachView(newView, prepend); + + // Called when view transitions completed, if none were added this will + // run right away. + function complete() { + this._detachView(oldView); + container.removeClass(transitioning); + callback && callback.call(this, newView); + + this._transitioning = false; + return this._dequeueActiveView(); + } + + // Setup a new stack to run the view transitions in parallel. + transitions = new Y.Parallel({context: this}); + fxConfig = { + crossView: !!oldView && !!newView, + prepended: prepend + }; + + // Transition the new view first to prevent a gap when sliding. + if (newView && fx.viewIn) { + newView.get('container') + .transition(fx.viewIn, fxConfig, transitions.add()); + } + + if (oldView && fx.viewOut) { + oldView.get('container') + .transition(fx.viewOut, fxConfig, transitions.add()); + } + + transitions.done(complete); + } +}; + +// -- Transition fx ------------------------------------------------------------ +Y.mix(Y.Transition.fx, { + 'app:fadeIn': { + opacity : 1, + duration: 0.3, + + on: { + start: function (data) { + var styles = {opacity: 0}, + config = data.config; + + if (config.crossView && !config.prepended) { + styles.transform = 'translateX(-100%)'; + } + + this.setStyles(styles); + }, + + end: function () { + this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:fadeOut': { + opacity : 0, + duration: 0.3, + + on: { + start: function (data) { + var styles = {opacity: 1}, + config = data.config; + + if (config.crossView && config.prepended) { + styles.transform = 'translateX(-100%)'; + } + + this.setStyles(styles); + }, + + end: function () { + this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:slideLeft': { + duration : 0.3, + transform: 'translateX(-100%)', + + on: { + start: function () { + this.setStyles({ + opacity : 1, + transform: 'translateX(0%)' + }); + }, + + end: function () { + this.setStyle('transform', 'translateX(0)'); + } + } + }, + + 'app:slideRight': { + duration : 0.3, + transform: 'translateX(0)', + + on: { + start: function () { + this.setStyles({ + opacity : 1, + transform: 'translateX(-100%)' + }); + }, + + end: function () { + this.setStyle('transform', 'translateX(0)'); + } + } + } +}); + +// -- Namespacae --------------------------------------------------------------- +Y.App.TransitionsNative = AppTransitionsNative; +Y.Base.mix(Y.App, [AppTransitionsNative]); + + +}, '3.9.0', {"requires": ["app-transitions", "app-transitions-css", "parallel", "transition"]}); diff --git a/src/errors/static/js/yui/build/app-transitions/app-transitions-coverage.js b/src/errors/static/js/yui/build/app-transitions/app-transitions-coverage.js new file mode 100644 index 00000000..8f1fc63e --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions/app-transitions-coverage.js @@ -0,0 +1,290 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/app-transitions/app-transitions.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/app-transitions/app-transitions.js", + code: [] +}; +_yuitest_coverage["build/app-transitions/app-transitions.js"].code=["YUI.add('app-transitions', function (Y, NAME) {","","/**","`Y.App` extension that provides view transitions in browsers which support","native CSS3 transitions.","","@module app","@submodule app-transitions","@since 3.5.0","**/","","/**","`Y.App` extension that provides view transitions in browsers which support","native CSS3 transitions.","","View transitions provide an nice way to move from one \"page\" to the next that is","both pleasant to the user and helps to communicate a hierarchy between sections","of an application.","","When the `\"app-transitions\"` module is used, it will automatically mix itself","into `Y.App` and transition between `activeView` changes using the following","effects:",""," - **`fade`**: Cross-fades between the old an new active views.",""," - **`slideLeft`**: The old and new active views are positioned next to each"," other and both slide to the left.",""," - **`slideRight`**: The old and new active views are positioned next to each"," other and both slide to the right.","","**Note:** Transitions are an opt-in feature and are enabled via an app's","`transitions` attribute.","","@class App.Transitions","@uses App.TransitionsNative","@extensionfor App","@since 3.5.0","**/","function AppTransitions() {}","","AppTransitions.ATTRS = {"," /**"," Whether or not this application should use view transitions, and if so then"," which ones or `true` for the defaults which are specified by the"," `transitions` prototype property.",""," **Note:** Transitions are an opt-in feature and will only be used in"," browsers which support native CSS3 transitions.",""," @attribute transitions"," @type Boolean|Object"," @default false"," @since 3.5.0"," **/"," transitions: {"," setter: '_setTransitions',"," value : false"," }","};","","/**","Collect of transitions -> fx.","","A transition (e.g. \"fade\") is a simple name given to a configuration of fx to","apply, consisting of `viewIn` and `viewOut` properties who's values are names of","fx registered on `Y.Transition.fx`.","","By default transitions: `fade`, `slideLeft`, and `slideRight` have fx defined.","","@property FX","@type Object","@static","@since 3.5.0","**/","AppTransitions.FX = {"," fade: {"," viewIn : 'app:fadeIn',"," viewOut: 'app:fadeOut'"," },",""," slideLeft: {"," viewIn : 'app:slideLeft',"," viewOut: 'app:slideLeft'"," },",""," slideRight: {"," viewIn : 'app:slideRight',"," viewOut: 'app:slideRight'"," }","};","","AppTransitions.prototype = {"," // -- Public Properties ----------------------------------------------------",""," /**"," Default transitions to use when the `activeView` changes.",""," The following are types of changes for which transitions can be defined that"," correspond to the relationship between the new and previous `activeView`:",""," * `navigate`: The default transition to use when changing the `activeView`"," of the application.",""," * `toChild`: The transition to use when the new `activeView` is configured"," as a child of the previously active view via its `parent` property as"," defined in this app's `views`.",""," * `toParent`: The transition to use when the new `activeView` is"," configured as the `parent` of the previously active view as defined in"," this app's `views`.",""," **Note:** Transitions are an opt-in feature and will only be used in"," browsers which support native CSS3 transitions.",""," @property transitions"," @type Object"," @default"," {"," navigate: 'fade',"," toChild : 'slideLeft',"," toParent: 'slideRight'"," }"," @since 3.5.0"," **/"," transitions: {"," navigate: 'fade',"," toChild : 'slideLeft',"," toParent: 'slideRight'"," },",""," // -- Public Methods -------------------------------------------------------",""," /**"," Sets which view is active/visible for the application. This will set the"," app's `activeView` attribute to the specified `view`.",""," The `view` will be \"attached\" to this app, meaning it will be both rendered"," into this app's `viewContainer` node and all of its events will bubble to"," the app. The previous `activeView` will be \"detached\" from this app.",""," When a string-name is provided for a view which has been registered on this"," app's `views` object, the referenced metadata will be used and the"," `activeView` will be set to either a preserved view instance, or a new"," instance of the registered view will be created using the specified `config`"," object passed-into this method.",""," A callback function can be specified as either the third or fourth argument,"," and this function will be called after the new `view` becomes the"," `activeView`, is rendered to the `viewContainer`, and is ready to use.",""," @example"," var app = new Y.App({"," views: {"," usersView: {"," // Imagine that `Y.UsersView` has been defined."," type: Y.UsersView"," }"," },",""," transitions: true,"," users : new Y.ModelList()"," });",""," app.route('/users/', function () {"," this.showView('usersView', {users: this.get('users')});"," });",""," app.render();"," app.navigate('/uses/');"," // => Creates a new `Y.UsersView` and transitions to it.",""," @method showView"," @param {String|View} view The name of a view defined in the `views` object,"," or a view instance which should become this app's `activeView`."," @param {Object} [config] Optional configuration to use when creating a new"," view instance. This config object can also be used to update an existing"," or preserved view's attributes when `options.update` is `true`."," @param {Object} [options] Optional object containing any of the following"," properties:"," @param {Function} [options.callback] Optional callback function to call"," after new `activeView` is ready to use, the function will be passed:"," @param {View} options.callback.view A reference to the new"," `activeView`."," @param {Boolean} [options.prepend=false] Whether the `view` should be"," prepended instead of appended to the `viewContainer`."," @param {Boolean} [options.render] Whether the `view` should be rendered."," **Note:** If no value is specified, a view instance will only be"," rendered if it's newly created by this method."," @param {Boolean|String} [options.transition] Optional transition override."," A transition can be specified which will override the default, or"," `false` for no transition."," @param {Boolean} [options.update=false] Whether an existing view should"," have its attributes updated by passing the `config` object to its"," `setAttrs()` method. **Note:** This option does not have an effect if"," the `view` instance is created as a result of calling this method."," @param {Function} [callback] Optional callback Function to call after the"," new `activeView` is ready to use. **Note:** this will override"," `options.callback` and it can be specified as either the third or fourth"," argument. The function will be passed the following:"," @param {View} callback.view A reference to the new `activeView`."," @chainable"," @since 3.5.0"," **/"," // Does not override `showView()` but does use `options.transitions`.",""," // -- Protected Methods ----------------------------------------------------",""," /**"," Setter for `transitions` attribute.",""," When specified as `true`, the defaults will be use as specified by the"," `transitions` prototype property.",""," @method _setTransitions"," @param {Boolean|Object} transitions The new `transitions` attribute value."," @return {Mixed} The processed value which represents the new state."," @protected"," @see App.Base.showView()"," @since 3.5.0"," **/"," _setTransitions: function (transitions) {"," var defTransitions = this.transitions;",""," if (transitions && transitions === true) {"," return Y.merge(defTransitions);"," }",""," return transitions;"," }","};","","// -- Namespace ----------------------------------------------------------------","Y.App.Transitions = AppTransitions;","Y.Base.mix(Y.App, [AppTransitions]);","","Y.mix(Y.App.CLASS_NAMES, {"," transitioning: Y.ClassNameManager.getClassName('app', 'transitioning')","});","","","}, '3.9.0', {\"requires\": [\"app-base\"]});"]; +_yuitest_coverage["build/app-transitions/app-transitions.js"].lines = {"1":0,"40":0,"42":0,"76":0,"93":0,"223":0,"225":0,"226":0,"229":0,"234":0,"235":0,"237":0}; +_yuitest_coverage["build/app-transitions/app-transitions.js"].functions = {"AppTransitions:40":0,"_setTransitions:222":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/app-transitions/app-transitions.js"].coveredLines = 12; +_yuitest_coverage["build/app-transitions/app-transitions.js"].coveredFunctions = 3; +_yuitest_coverline("build/app-transitions/app-transitions.js", 1); +YUI.add('app-transitions', function (Y, NAME) { + +/** +`Y.App` extension that provides view transitions in browsers which support +native CSS3 transitions. + +@module app +@submodule app-transitions +@since 3.5.0 +**/ + +/** +`Y.App` extension that provides view transitions in browsers which support +native CSS3 transitions. + +View transitions provide an nice way to move from one "page" to the next that is +both pleasant to the user and helps to communicate a hierarchy between sections +of an application. + +When the `"app-transitions"` module is used, it will automatically mix itself +into `Y.App` and transition between `activeView` changes using the following +effects: + + - **`fade`**: Cross-fades between the old an new active views. + + - **`slideLeft`**: The old and new active views are positioned next to each + other and both slide to the left. + + - **`slideRight`**: The old and new active views are positioned next to each + other and both slide to the right. + +**Note:** Transitions are an opt-in feature and are enabled via an app's +`transitions` attribute. + +@class App.Transitions +@uses App.TransitionsNative +@extensionfor App +@since 3.5.0 +**/ +_yuitest_coverfunc("build/app-transitions/app-transitions.js", "(anonymous 1)", 1); +_yuitest_coverline("build/app-transitions/app-transitions.js", 40); +function AppTransitions() {} + +_yuitest_coverline("build/app-transitions/app-transitions.js", 42); +AppTransitions.ATTRS = { + /** + Whether or not this application should use view transitions, and if so then + which ones or `true` for the defaults which are specified by the + `transitions` prototype property. + + **Note:** Transitions are an opt-in feature and will only be used in + browsers which support native CSS3 transitions. + + @attribute transitions + @type Boolean|Object + @default false + @since 3.5.0 + **/ + transitions: { + setter: '_setTransitions', + value : false + } +}; + +/** +Collect of transitions -> fx. + +A transition (e.g. "fade") is a simple name given to a configuration of fx to +apply, consisting of `viewIn` and `viewOut` properties who's values are names of +fx registered on `Y.Transition.fx`. + +By default transitions: `fade`, `slideLeft`, and `slideRight` have fx defined. + +@property FX +@type Object +@static +@since 3.5.0 +**/ +_yuitest_coverline("build/app-transitions/app-transitions.js", 76); +AppTransitions.FX = { + fade: { + viewIn : 'app:fadeIn', + viewOut: 'app:fadeOut' + }, + + slideLeft: { + viewIn : 'app:slideLeft', + viewOut: 'app:slideLeft' + }, + + slideRight: { + viewIn : 'app:slideRight', + viewOut: 'app:slideRight' + } +}; + +_yuitest_coverline("build/app-transitions/app-transitions.js", 93); +AppTransitions.prototype = { + // -- Public Properties ---------------------------------------------------- + + /** + Default transitions to use when the `activeView` changes. + + The following are types of changes for which transitions can be defined that + correspond to the relationship between the new and previous `activeView`: + + * `navigate`: The default transition to use when changing the `activeView` + of the application. + + * `toChild`: The transition to use when the new `activeView` is configured + as a child of the previously active view via its `parent` property as + defined in this app's `views`. + + * `toParent`: The transition to use when the new `activeView` is + configured as the `parent` of the previously active view as defined in + this app's `views`. + + **Note:** Transitions are an opt-in feature and will only be used in + browsers which support native CSS3 transitions. + + @property transitions + @type Object + @default + { + navigate: 'fade', + toChild : 'slideLeft', + toParent: 'slideRight' + } + @since 3.5.0 + **/ + transitions: { + navigate: 'fade', + toChild : 'slideLeft', + toParent: 'slideRight' + }, + + // -- Public Methods ------------------------------------------------------- + + /** + Sets which view is active/visible for the application. This will set the + app's `activeView` attribute to the specified `view`. + + The `view` will be "attached" to this app, meaning it will be both rendered + into this app's `viewContainer` node and all of its events will bubble to + the app. The previous `activeView` will be "detached" from this app. + + When a string-name is provided for a view which has been registered on this + app's `views` object, the referenced metadata will be used and the + `activeView` will be set to either a preserved view instance, or a new + instance of the registered view will be created using the specified `config` + object passed-into this method. + + A callback function can be specified as either the third or fourth argument, + and this function will be called after the new `view` becomes the + `activeView`, is rendered to the `viewContainer`, and is ready to use. + + @example + var app = new Y.App({ + views: { + usersView: { + // Imagine that `Y.UsersView` has been defined. + type: Y.UsersView + } + }, + + transitions: true, + users : new Y.ModelList() + }); + + app.route('/users/', function () { + this.showView('usersView', {users: this.get('users')}); + }); + + app.render(); + app.navigate('/uses/'); + // => Creates a new `Y.UsersView` and transitions to it. + + @method showView + @param {String|View} view The name of a view defined in the `views` object, + or a view instance which should become this app's `activeView`. + @param {Object} [config] Optional configuration to use when creating a new + view instance. This config object can also be used to update an existing + or preserved view's attributes when `options.update` is `true`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean|String} [options.transition] Optional transition override. + A transition can be specified which will override the default, or + `false` for no transition. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @param {Function} [callback] Optional callback Function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the third or fourth + argument. The function will be passed the following: + @param {View} callback.view A reference to the new `activeView`. + @chainable + @since 3.5.0 + **/ + // Does not override `showView()` but does use `options.transitions`. + + // -- Protected Methods ---------------------------------------------------- + + /** + Setter for `transitions` attribute. + + When specified as `true`, the defaults will be use as specified by the + `transitions` prototype property. + + @method _setTransitions + @param {Boolean|Object} transitions The new `transitions` attribute value. + @return {Mixed} The processed value which represents the new state. + @protected + @see App.Base.showView() + @since 3.5.0 + **/ + _setTransitions: function (transitions) { + _yuitest_coverfunc("build/app-transitions/app-transitions.js", "_setTransitions", 222); +_yuitest_coverline("build/app-transitions/app-transitions.js", 223); +var defTransitions = this.transitions; + + _yuitest_coverline("build/app-transitions/app-transitions.js", 225); +if (transitions && transitions === true) { + _yuitest_coverline("build/app-transitions/app-transitions.js", 226); +return Y.merge(defTransitions); + } + + _yuitest_coverline("build/app-transitions/app-transitions.js", 229); +return transitions; + } +}; + +// -- Namespace ---------------------------------------------------------------- +_yuitest_coverline("build/app-transitions/app-transitions.js", 234); +Y.App.Transitions = AppTransitions; +_yuitest_coverline("build/app-transitions/app-transitions.js", 235); +Y.Base.mix(Y.App, [AppTransitions]); + +_yuitest_coverline("build/app-transitions/app-transitions.js", 237); +Y.mix(Y.App.CLASS_NAMES, { + transitioning: Y.ClassNameManager.getClassName('app', 'transitioning') +}); + + +}, '3.9.0', {"requires": ["app-base"]}); diff --git a/src/errors/static/js/yui/build/app-transitions/app-transitions-debug.js b/src/errors/static/js/yui/build/app-transitions/app-transitions-debug.js new file mode 100644 index 00000000..90a31879 --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions/app-transitions-debug.js @@ -0,0 +1,243 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('app-transitions', function (Y, NAME) { + +/** +`Y.App` extension that provides view transitions in browsers which support +native CSS3 transitions. + +@module app +@submodule app-transitions +@since 3.5.0 +**/ + +/** +`Y.App` extension that provides view transitions in browsers which support +native CSS3 transitions. + +View transitions provide an nice way to move from one "page" to the next that is +both pleasant to the user and helps to communicate a hierarchy between sections +of an application. + +When the `"app-transitions"` module is used, it will automatically mix itself +into `Y.App` and transition between `activeView` changes using the following +effects: + + - **`fade`**: Cross-fades between the old an new active views. + + - **`slideLeft`**: The old and new active views are positioned next to each + other and both slide to the left. + + - **`slideRight`**: The old and new active views are positioned next to each + other and both slide to the right. + +**Note:** Transitions are an opt-in feature and are enabled via an app's +`transitions` attribute. + +@class App.Transitions +@uses App.TransitionsNative +@extensionfor App +@since 3.5.0 +**/ +function AppTransitions() {} + +AppTransitions.ATTRS = { + /** + Whether or not this application should use view transitions, and if so then + which ones or `true` for the defaults which are specified by the + `transitions` prototype property. + + **Note:** Transitions are an opt-in feature and will only be used in + browsers which support native CSS3 transitions. + + @attribute transitions + @type Boolean|Object + @default false + @since 3.5.0 + **/ + transitions: { + setter: '_setTransitions', + value : false + } +}; + +/** +Collect of transitions -> fx. + +A transition (e.g. "fade") is a simple name given to a configuration of fx to +apply, consisting of `viewIn` and `viewOut` properties who's values are names of +fx registered on `Y.Transition.fx`. + +By default transitions: `fade`, `slideLeft`, and `slideRight` have fx defined. + +@property FX +@type Object +@static +@since 3.5.0 +**/ +AppTransitions.FX = { + fade: { + viewIn : 'app:fadeIn', + viewOut: 'app:fadeOut' + }, + + slideLeft: { + viewIn : 'app:slideLeft', + viewOut: 'app:slideLeft' + }, + + slideRight: { + viewIn : 'app:slideRight', + viewOut: 'app:slideRight' + } +}; + +AppTransitions.prototype = { + // -- Public Properties ---------------------------------------------------- + + /** + Default transitions to use when the `activeView` changes. + + The following are types of changes for which transitions can be defined that + correspond to the relationship between the new and previous `activeView`: + + * `navigate`: The default transition to use when changing the `activeView` + of the application. + + * `toChild`: The transition to use when the new `activeView` is configured + as a child of the previously active view via its `parent` property as + defined in this app's `views`. + + * `toParent`: The transition to use when the new `activeView` is + configured as the `parent` of the previously active view as defined in + this app's `views`. + + **Note:** Transitions are an opt-in feature and will only be used in + browsers which support native CSS3 transitions. + + @property transitions + @type Object + @default + { + navigate: 'fade', + toChild : 'slideLeft', + toParent: 'slideRight' + } + @since 3.5.0 + **/ + transitions: { + navigate: 'fade', + toChild : 'slideLeft', + toParent: 'slideRight' + }, + + // -- Public Methods ------------------------------------------------------- + + /** + Sets which view is active/visible for the application. This will set the + app's `activeView` attribute to the specified `view`. + + The `view` will be "attached" to this app, meaning it will be both rendered + into this app's `viewContainer` node and all of its events will bubble to + the app. The previous `activeView` will be "detached" from this app. + + When a string-name is provided for a view which has been registered on this + app's `views` object, the referenced metadata will be used and the + `activeView` will be set to either a preserved view instance, or a new + instance of the registered view will be created using the specified `config` + object passed-into this method. + + A callback function can be specified as either the third or fourth argument, + and this function will be called after the new `view` becomes the + `activeView`, is rendered to the `viewContainer`, and is ready to use. + + @example + var app = new Y.App({ + views: { + usersView: { + // Imagine that `Y.UsersView` has been defined. + type: Y.UsersView + } + }, + + transitions: true, + users : new Y.ModelList() + }); + + app.route('/users/', function () { + this.showView('usersView', {users: this.get('users')}); + }); + + app.render(); + app.navigate('/uses/'); + // => Creates a new `Y.UsersView` and transitions to it. + + @method showView + @param {String|View} view The name of a view defined in the `views` object, + or a view instance which should become this app's `activeView`. + @param {Object} [config] Optional configuration to use when creating a new + view instance. This config object can also be used to update an existing + or preserved view's attributes when `options.update` is `true`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean|String} [options.transition] Optional transition override. + A transition can be specified which will override the default, or + `false` for no transition. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @param {Function} [callback] Optional callback Function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the third or fourth + argument. The function will be passed the following: + @param {View} callback.view A reference to the new `activeView`. + @chainable + @since 3.5.0 + **/ + // Does not override `showView()` but does use `options.transitions`. + + // -- Protected Methods ---------------------------------------------------- + + /** + Setter for `transitions` attribute. + + When specified as `true`, the defaults will be use as specified by the + `transitions` prototype property. + + @method _setTransitions + @param {Boolean|Object} transitions The new `transitions` attribute value. + @return {Mixed} The processed value which represents the new state. + @protected + @see App.Base.showView() + @since 3.5.0 + **/ + _setTransitions: function (transitions) { + var defTransitions = this.transitions; + + if (transitions && transitions === true) { + return Y.merge(defTransitions); + } + + return transitions; + } +}; + +// -- Namespace ---------------------------------------------------------------- +Y.App.Transitions = AppTransitions; +Y.Base.mix(Y.App, [AppTransitions]); + +Y.mix(Y.App.CLASS_NAMES, { + transitioning: Y.ClassNameManager.getClassName('app', 'transitioning') +}); + + +}, '3.9.0', {"requires": ["app-base"]}); diff --git a/src/errors/static/js/yui/build/app-transitions/app-transitions-min.js b/src/errors/static/js/yui/build/app-transitions/app-transitions-min.js new file mode 100644 index 00000000..800a4e36 --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions/app-transitions-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("app-transitions",function(e,t){function n(){}n.ATTRS={transitions:{setter:"_setTransitions",value:!1}},n.FX={fade:{viewIn:"app:fadeIn",viewOut:"app:fadeOut"},slideLeft:{viewIn:"app:slideLeft",viewOut:"app:slideLeft"},slideRight:{viewIn:"app:slideRight",viewOut:"app:slideRight"}},n.prototype={transitions:{navigate:"fade",toChild:"slideLeft",toParent:"slideRight"},_setTransitions:function(t){var n=this.transitions;return t&&t===!0?e.merge(n):t}},e.App.Transitions=n,e.Base.mix(e.App,[n]),e.mix(e.App.CLASS_NAMES,{transitioning:e.ClassNameManager.getClassName("app","transitioning")})},"3.9.0",{requires:["app-base"]}); diff --git a/src/errors/static/js/yui/build/app-transitions/app-transitions.js b/src/errors/static/js/yui/build/app-transitions/app-transitions.js new file mode 100644 index 00000000..90a31879 --- /dev/null +++ b/src/errors/static/js/yui/build/app-transitions/app-transitions.js @@ -0,0 +1,243 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('app-transitions', function (Y, NAME) { + +/** +`Y.App` extension that provides view transitions in browsers which support +native CSS3 transitions. + +@module app +@submodule app-transitions +@since 3.5.0 +**/ + +/** +`Y.App` extension that provides view transitions in browsers which support +native CSS3 transitions. + +View transitions provide an nice way to move from one "page" to the next that is +both pleasant to the user and helps to communicate a hierarchy between sections +of an application. + +When the `"app-transitions"` module is used, it will automatically mix itself +into `Y.App` and transition between `activeView` changes using the following +effects: + + - **`fade`**: Cross-fades between the old an new active views. + + - **`slideLeft`**: The old and new active views are positioned next to each + other and both slide to the left. + + - **`slideRight`**: The old and new active views are positioned next to each + other and both slide to the right. + +**Note:** Transitions are an opt-in feature and are enabled via an app's +`transitions` attribute. + +@class App.Transitions +@uses App.TransitionsNative +@extensionfor App +@since 3.5.0 +**/ +function AppTransitions() {} + +AppTransitions.ATTRS = { + /** + Whether or not this application should use view transitions, and if so then + which ones or `true` for the defaults which are specified by the + `transitions` prototype property. + + **Note:** Transitions are an opt-in feature and will only be used in + browsers which support native CSS3 transitions. + + @attribute transitions + @type Boolean|Object + @default false + @since 3.5.0 + **/ + transitions: { + setter: '_setTransitions', + value : false + } +}; + +/** +Collect of transitions -> fx. + +A transition (e.g. "fade") is a simple name given to a configuration of fx to +apply, consisting of `viewIn` and `viewOut` properties who's values are names of +fx registered on `Y.Transition.fx`. + +By default transitions: `fade`, `slideLeft`, and `slideRight` have fx defined. + +@property FX +@type Object +@static +@since 3.5.0 +**/ +AppTransitions.FX = { + fade: { + viewIn : 'app:fadeIn', + viewOut: 'app:fadeOut' + }, + + slideLeft: { + viewIn : 'app:slideLeft', + viewOut: 'app:slideLeft' + }, + + slideRight: { + viewIn : 'app:slideRight', + viewOut: 'app:slideRight' + } +}; + +AppTransitions.prototype = { + // -- Public Properties ---------------------------------------------------- + + /** + Default transitions to use when the `activeView` changes. + + The following are types of changes for which transitions can be defined that + correspond to the relationship between the new and previous `activeView`: + + * `navigate`: The default transition to use when changing the `activeView` + of the application. + + * `toChild`: The transition to use when the new `activeView` is configured + as a child of the previously active view via its `parent` property as + defined in this app's `views`. + + * `toParent`: The transition to use when the new `activeView` is + configured as the `parent` of the previously active view as defined in + this app's `views`. + + **Note:** Transitions are an opt-in feature and will only be used in + browsers which support native CSS3 transitions. + + @property transitions + @type Object + @default + { + navigate: 'fade', + toChild : 'slideLeft', + toParent: 'slideRight' + } + @since 3.5.0 + **/ + transitions: { + navigate: 'fade', + toChild : 'slideLeft', + toParent: 'slideRight' + }, + + // -- Public Methods ------------------------------------------------------- + + /** + Sets which view is active/visible for the application. This will set the + app's `activeView` attribute to the specified `view`. + + The `view` will be "attached" to this app, meaning it will be both rendered + into this app's `viewContainer` node and all of its events will bubble to + the app. The previous `activeView` will be "detached" from this app. + + When a string-name is provided for a view which has been registered on this + app's `views` object, the referenced metadata will be used and the + `activeView` will be set to either a preserved view instance, or a new + instance of the registered view will be created using the specified `config` + object passed-into this method. + + A callback function can be specified as either the third or fourth argument, + and this function will be called after the new `view` becomes the + `activeView`, is rendered to the `viewContainer`, and is ready to use. + + @example + var app = new Y.App({ + views: { + usersView: { + // Imagine that `Y.UsersView` has been defined. + type: Y.UsersView + } + }, + + transitions: true, + users : new Y.ModelList() + }); + + app.route('/users/', function () { + this.showView('usersView', {users: this.get('users')}); + }); + + app.render(); + app.navigate('/uses/'); + // => Creates a new `Y.UsersView` and transitions to it. + + @method showView + @param {String|View} view The name of a view defined in the `views` object, + or a view instance which should become this app's `activeView`. + @param {Object} [config] Optional configuration to use when creating a new + view instance. This config object can also be used to update an existing + or preserved view's attributes when `options.update` is `true`. + @param {Object} [options] Optional object containing any of the following + properties: + @param {Function} [options.callback] Optional callback function to call + after new `activeView` is ready to use, the function will be passed: + @param {View} options.callback.view A reference to the new + `activeView`. + @param {Boolean} [options.prepend=false] Whether the `view` should be + prepended instead of appended to the `viewContainer`. + @param {Boolean} [options.render] Whether the `view` should be rendered. + **Note:** If no value is specified, a view instance will only be + rendered if it's newly created by this method. + @param {Boolean|String} [options.transition] Optional transition override. + A transition can be specified which will override the default, or + `false` for no transition. + @param {Boolean} [options.update=false] Whether an existing view should + have its attributes updated by passing the `config` object to its + `setAttrs()` method. **Note:** This option does not have an effect if + the `view` instance is created as a result of calling this method. + @param {Function} [callback] Optional callback Function to call after the + new `activeView` is ready to use. **Note:** this will override + `options.callback` and it can be specified as either the third or fourth + argument. The function will be passed the following: + @param {View} callback.view A reference to the new `activeView`. + @chainable + @since 3.5.0 + **/ + // Does not override `showView()` but does use `options.transitions`. + + // -- Protected Methods ---------------------------------------------------- + + /** + Setter for `transitions` attribute. + + When specified as `true`, the defaults will be use as specified by the + `transitions` prototype property. + + @method _setTransitions + @param {Boolean|Object} transitions The new `transitions` attribute value. + @return {Mixed} The processed value which represents the new state. + @protected + @see App.Base.showView() + @since 3.5.0 + **/ + _setTransitions: function (transitions) { + var defTransitions = this.transitions; + + if (transitions && transitions === true) { + return Y.merge(defTransitions); + } + + return transitions; + } +}; + +// -- Namespace ---------------------------------------------------------------- +Y.App.Transitions = AppTransitions; +Y.Base.mix(Y.App, [AppTransitions]); + +Y.mix(Y.App.CLASS_NAMES, { + transitioning: Y.ClassNameManager.getClassName('app', 'transitioning') +}); + + +}, '3.9.0', {"requires": ["app-base"]}); diff --git a/src/errors/static/js/yui/build/array-extras/array-extras-coverage.js b/src/errors/static/js/yui/build/array-extras/array-extras-coverage.js new file mode 100644 index 00000000..b2b93e1e --- /dev/null +++ b/src/errors/static/js/yui/build/array-extras/array-extras-coverage.js @@ -0,0 +1,544 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/array-extras/array-extras.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/array-extras/array-extras.js", + code: [] +}; +_yuitest_coverage["build/array-extras/array-extras.js"].code=["YUI.add('array-extras', function (Y, NAME) {","","/**","Adds additional utility methods to the `Y.Array` class.","","@module collection","@submodule array-extras","**/","","var A = Y.Array,"," L = Y.Lang,"," ArrayProto = Array.prototype;","","/**","Returns the index of the last item in the array that contains the specified","value, or `-1` if the value isn't found.","","@method lastIndexOf","@param {Array} a Array to search in.","@param {Any} val Value to search for.","@param {Number} [fromIndex] Index at which to start searching backwards."," Defaults to the array's length - 1. If negative, it will be taken as an offset"," from the end of the array. If the calculated index is less than 0, the array"," will not be searched and `-1` will be returned.","@return {Number} Index of the item that contains the value, or `-1` if not"," found.","@static","@for Array","**/","A.lastIndexOf = L._isNative(ArrayProto.lastIndexOf) ?"," function(a, val, fromIndex) {"," // An undefined fromIndex is still considered a value by some (all?)"," // native implementations, so we can't pass it unless it's actually"," // specified."," return fromIndex || fromIndex === 0 ? a.lastIndexOf(val, fromIndex) :"," a.lastIndexOf(val);"," } :"," function(a, val, fromIndex) {"," var len = a.length,"," i = len - 1;",""," if (fromIndex || fromIndex === 0) {"," i = Math.min(fromIndex < 0 ? len + fromIndex : fromIndex, len);"," }",""," if (i > -1 && len > 0) {"," for (; i > -1; --i) {"," if (i in a && a[i] === val) {"," return i;"," }"," }"," }",""," return -1;"," };","","/**","Returns a copy of the input array with duplicate items removed.","","Note: If the input array only contains strings, the `Y.Array.dedupe()` method is","a much faster alternative.","","@method unique","@param {Array} array Array to dedupe.","@param {Function} [testFn] Custom function to use to test the equality of two"," values. A truthy return value indicates that the values are equal. A falsy"," return value indicates that the values are not equal.",""," @param {Any} testFn.a First value to compare."," @param {Any} testFn.b Second value to compare."," @param {Number} testFn.index Index of the current item in the original"," array."," @param {Array} testFn.array The original array."," @return {Boolean} _true_ if the items are equal, _false_ otherwise.","","@return {Array} Copy of the input array with duplicate items removed.","@static","**/","A.unique = function (array, testFn) {"," var i = 0,"," len = array.length,"," results = [],"," j, result, resultLen, value;",""," // Note the label here. It's used to jump out of the inner loop when a value"," // is not unique."," outerLoop: for (; i < len; i++) {"," value = array[i];",""," // For each value in the input array, iterate through the result array"," // and check for uniqueness against each result value."," for (j = 0, resultLen = results.length; j < resultLen; j++) {"," result = results[j];",""," // If the test function returns true or there's no test function and"," // the value equals the current result item, stop iterating over the"," // results and continue to the next value in the input array."," if (testFn) {"," if (testFn.call(array, value, result, i, array)) {"," continue outerLoop;"," }"," } else if (value === result) {"," continue outerLoop;"," }"," }",""," // If we get this far, that means the current value is not already in"," // the result array, so add it."," results.push(value);"," }",""," return results;","};","","/**","Executes the supplied function on each item in the array. Returns a new array","containing the items for which the supplied function returned a truthy value.","","@method filter","@param {Array} a Array to filter.","@param {Function} f Function to execute on each item.","@param {Object} [o] Optional context object.","@return {Array} Array of items for which the supplied function returned a"," truthy value (empty if it never returned a truthy value).","@static","*/","A.filter = L._isNative(ArrayProto.filter) ?"," function(a, f, o) {"," return ArrayProto.filter.call(a, f, o);"," } :"," function(a, f, o) {"," var i = 0,"," len = a.length,"," results = [],"," item;",""," for (; i < len; ++i) {"," if (i in a) {"," item = a[i];",""," if (f.call(o, item, i, a)) {"," results.push(item);"," }"," }"," }",""," return results;"," };","","/**","The inverse of `Array.filter()`. Executes the supplied function on each item.","Returns a new array containing the items for which the supplied function","returned `false`.","","@method reject","@param {Array} a the array to iterate.","@param {Function} f the function to execute on each item.","@param {object} [o] Optional context object.","@return {Array} The items for which the supplied function returned `false`.","@static","*/","A.reject = function(a, f, o) {"," return A.filter(a, function(item, i, a) {"," return !f.call(o, item, i, a);"," });","};","","/**","Executes the supplied function on each item in the array. Iteration stops if the","supplied function does not return a truthy value.","","@method every","@param {Array} a the array to iterate.","@param {Function} f the function to execute on each item.","@param {Object} [o] Optional context object.","@return {Boolean} `true` if every item in the array returns `true` from the"," supplied function, `false` otherwise.","@static","*/","A.every = L._isNative(ArrayProto.every) ?"," function(a, f, o) {"," return ArrayProto.every.call(a, f, o);"," } :"," function(a, f, o) {"," for (var i = 0, l = a.length; i < l; ++i) {"," if (i in a && !f.call(o, a[i], i, a)) {"," return false;"," }"," }",""," return true;"," };","","/**","Executes the supplied function on each item in the array and returns a new array","containing all the values returned by the supplied function.","","@example",""," // Convert an array of numbers into an array of strings."," Y.Array.map([1, 2, 3, 4], function (item) {"," return '' + item;"," });"," // => ['1', '2', '3', '4']","","@method map","@param {Array} a the array to iterate.","@param {Function} f the function to execute on each item.","@param {object} [o] Optional context object.","@return {Array} A new array containing the return value of the supplied function"," for each item in the original array.","@static","*/","A.map = L._isNative(ArrayProto.map) ?"," function(a, f, o) {"," return ArrayProto.map.call(a, f, o);"," } :"," function(a, f, o) {"," var i = 0,"," len = a.length,"," results = ArrayProto.concat.call(a);",""," for (; i < len; ++i) {"," if (i in a) {"," results[i] = f.call(o, a[i], i, a);"," }"," }",""," return results;"," };","","","/**","Executes the supplied function on each item in the array, \"folding\" the array","into a single value.","","@method reduce","@param {Array} a Array to iterate.","@param {Any} init Initial value to start with.","@param {Function} f Function to execute on each item. This function should"," update and return the value of the computation. It will receive the following"," arguments:"," @param {Any} f.previousValue Value returned from the previous iteration,"," or the initial value if this is the first iteration."," @param {Any} f.currentValue Value of the current item being iterated."," @param {Number} f.index Index of the current item."," @param {Array} f.array Array being iterated.","@param {Object} [o] Optional context object.","@return {Any} Final result from iteratively applying the given function to each"," element in the array.","@static","*/","A.reduce = L._isNative(ArrayProto.reduce) ?"," function(a, init, f, o) {"," // ES5 Array.reduce doesn't support a thisObject, so we need to"," // implement it manually."," return ArrayProto.reduce.call(a, function(init, item, i, a) {"," return f.call(o, init, item, i, a);"," }, init);"," } :"," function(a, init, f, o) {"," var i = 0,"," len = a.length,"," result = init;",""," for (; i < len; ++i) {"," if (i in a) {"," result = f.call(o, result, a[i], i, a);"," }"," }",""," return result;"," };","","/**","Executes the supplied function on each item in the array, searching for the","first item that matches the supplied function.","","@method find","@param {Array} a the array to search.","@param {Function} f the function to execute on each item. Iteration is stopped"," as soon as this function returns `true`.","@param {Object} [o] Optional context object.","@return {Object} the first item that the supplied function returns `true` for,"," or `null` if it never returns `true`.","@static","*/","A.find = function(a, f, o) {"," for (var i = 0, l = a.length; i < l; i++) {"," if (i in a && f.call(o, a[i], i, a)) {"," return a[i];"," }"," }"," return null;","};","","/**","Iterates over an array, returning a new array of all the elements that match the","supplied regular expression.","","@method grep","@param {Array} a Array to iterate over.","@param {RegExp} pattern Regular expression to test against each item.","@return {Array} All the items in the array that produce a match against the"," supplied regular expression. If no items match, an empty array is returned.","@static","*/","A.grep = function(a, pattern) {"," return A.filter(a, function(item, index) {"," return pattern.test(item);"," });","};","","/**","Partitions an array into two new arrays, one with the items for which the","supplied function returns `true`, and one with the items for which the function","returns `false`.","","@method partition","@param {Array} a Array to iterate over.","@param {Function} f Function to execute for each item in the array. It will"," receive the following arguments:"," @param {Any} f.item Current item."," @param {Number} f.index Index of the current item."," @param {Array} f.array The array being iterated.","@param {Object} [o] Optional execution context.","@return {Object} An object with two properties: `matches` and `rejects`. Each is"," an array containing the items that were selected or rejected by the test"," function (or an empty array if none).","@static","*/","A.partition = function(a, f, o) {"," var results = {"," matches: [],"," rejects: []"," };",""," A.each(a, function(item, index) {"," var set = f.call(o, item, index, a) ? results.matches : results.rejects;"," set.push(item);"," });",""," return results;","};","","/**","Creates an array of arrays by pairing the corresponding elements of two arrays","together into a new array.","","@method zip","@param {Array} a Array to iterate over.","@param {Array} a2 Another array whose values will be paired with values of the"," first array.","@return {Array} An array of arrays formed by pairing each element of the first"," array with an item in the second array having the corresponding index.","@static","*/","A.zip = function(a, a2) {"," var results = [];"," A.each(a, function(item, index) {"," results.push([item, a2[index]]);"," });"," return results;","};","","/**","Flattens an array of nested arrays at any abitrary depth into a single, flat","array.","","@method flatten","@param {Array} a Array with nested arrays to flatten.","@return {Array} An array whose nested arrays have been flattened.","@static","@since 3.7.0","**/","A.flatten = function(a) {"," var result = [],"," i, len, val;",""," // Always return an array."," if (!a) {"," return result;"," }",""," for (i = 0, len = a.length; i < len; ++i) {"," val = a[i];",""," if (L.isArray(val)) {"," // Recusively flattens any nested arrays."," result.push.apply(result, A.flatten(val));"," } else {"," result.push(val);"," }"," }",""," return result;","};","","","}, '3.9.0', {\"requires\": [\"yui-base\"]});"]; +_yuitest_coverage["build/array-extras/array-extras.js"].lines = {"1":0,"10":0,"30":0,"35":0,"39":0,"42":0,"43":0,"46":0,"47":0,"48":0,"49":0,"54":0,"79":0,"80":0,"87":0,"88":0,"92":0,"93":0,"98":0,"99":0,"100":0,"102":0,"103":0,"109":0,"112":0,"127":0,"129":0,"132":0,"137":0,"138":0,"139":0,"141":0,"142":0,"147":0,"162":0,"163":0,"164":0,"180":0,"182":0,"185":0,"186":0,"187":0,"191":0,"214":0,"216":0,"219":0,"223":0,"224":0,"225":0,"229":0,"253":0,"257":0,"258":0,"262":0,"266":0,"267":0,"268":0,"272":0,"288":0,"289":0,"290":0,"291":0,"294":0,"308":0,"309":0,"310":0,"332":0,"333":0,"338":0,"339":0,"340":0,"343":0,"358":0,"359":0,"360":0,"361":0,"363":0,"376":0,"377":0,"381":0,"382":0,"385":0,"386":0,"388":0,"390":0,"392":0,"396":0}; +_yuitest_coverage["build/array-extras/array-extras.js"].functions = {"(anonymous 2):31":0,"}:38":0,"unique:79":0,"(anonymous 3):128":0,"}:131":0,"(anonymous 4):163":0,"reject:162":0,"(anonymous 5):181":0,"}:184":0,"(anonymous 6):215":0,"}:218":0,"(anonymous 8):257":0,"(anonymous 7):254":0,"}:261":0,"find:288":0,"(anonymous 9):309":0,"grep:308":0,"(anonymous 10):338":0,"partition:332":0,"(anonymous 11):360":0,"zip:358":0,"flatten:376":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/array-extras/array-extras.js"].coveredLines = 87; +_yuitest_coverage["build/array-extras/array-extras.js"].coveredFunctions = 23; +_yuitest_coverline("build/array-extras/array-extras.js", 1); +YUI.add('array-extras', function (Y, NAME) { + +/** +Adds additional utility methods to the `Y.Array` class. + +@module collection +@submodule array-extras +**/ + +_yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 1)", 1); +_yuitest_coverline("build/array-extras/array-extras.js", 10); +var A = Y.Array, + L = Y.Lang, + ArrayProto = Array.prototype; + +/** +Returns the index of the last item in the array that contains the specified +value, or `-1` if the value isn't found. + +@method lastIndexOf +@param {Array} a Array to search in. +@param {Any} val Value to search for. +@param {Number} [fromIndex] Index at which to start searching backwards. + Defaults to the array's length - 1. If negative, it will be taken as an offset + from the end of the array. If the calculated index is less than 0, the array + will not be searched and `-1` will be returned. +@return {Number} Index of the item that contains the value, or `-1` if not + found. +@static +@for Array +**/ +_yuitest_coverline("build/array-extras/array-extras.js", 30); +A.lastIndexOf = L._isNative(ArrayProto.lastIndexOf) ? + function(a, val, fromIndex) { + // An undefined fromIndex is still considered a value by some (all?) + // native implementations, so we can't pass it unless it's actually + // specified. + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 2)", 31); +_yuitest_coverline("build/array-extras/array-extras.js", 35); +return fromIndex || fromIndex === 0 ? a.lastIndexOf(val, fromIndex) : + a.lastIndexOf(val); + } : + function(a, val, fromIndex) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "}", 38); +_yuitest_coverline("build/array-extras/array-extras.js", 39); +var len = a.length, + i = len - 1; + + _yuitest_coverline("build/array-extras/array-extras.js", 42); +if (fromIndex || fromIndex === 0) { + _yuitest_coverline("build/array-extras/array-extras.js", 43); +i = Math.min(fromIndex < 0 ? len + fromIndex : fromIndex, len); + } + + _yuitest_coverline("build/array-extras/array-extras.js", 46); +if (i > -1 && len > 0) { + _yuitest_coverline("build/array-extras/array-extras.js", 47); +for (; i > -1; --i) { + _yuitest_coverline("build/array-extras/array-extras.js", 48); +if (i in a && a[i] === val) { + _yuitest_coverline("build/array-extras/array-extras.js", 49); +return i; + } + } + } + + _yuitest_coverline("build/array-extras/array-extras.js", 54); +return -1; + }; + +/** +Returns a copy of the input array with duplicate items removed. + +Note: If the input array only contains strings, the `Y.Array.dedupe()` method is +a much faster alternative. + +@method unique +@param {Array} array Array to dedupe. +@param {Function} [testFn] Custom function to use to test the equality of two + values. A truthy return value indicates that the values are equal. A falsy + return value indicates that the values are not equal. + + @param {Any} testFn.a First value to compare. + @param {Any} testFn.b Second value to compare. + @param {Number} testFn.index Index of the current item in the original + array. + @param {Array} testFn.array The original array. + @return {Boolean} _true_ if the items are equal, _false_ otherwise. + +@return {Array} Copy of the input array with duplicate items removed. +@static +**/ +_yuitest_coverline("build/array-extras/array-extras.js", 79); +A.unique = function (array, testFn) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "unique", 79); +_yuitest_coverline("build/array-extras/array-extras.js", 80); +var i = 0, + len = array.length, + results = [], + j, result, resultLen, value; + + // Note the label here. It's used to jump out of the inner loop when a value + // is not unique. + _yuitest_coverline("build/array-extras/array-extras.js", 87); +outerLoop: for (; i < len; i++) { + _yuitest_coverline("build/array-extras/array-extras.js", 88); +value = array[i]; + + // For each value in the input array, iterate through the result array + // and check for uniqueness against each result value. + _yuitest_coverline("build/array-extras/array-extras.js", 92); +for (j = 0, resultLen = results.length; j < resultLen; j++) { + _yuitest_coverline("build/array-extras/array-extras.js", 93); +result = results[j]; + + // If the test function returns true or there's no test function and + // the value equals the current result item, stop iterating over the + // results and continue to the next value in the input array. + _yuitest_coverline("build/array-extras/array-extras.js", 98); +if (testFn) { + _yuitest_coverline("build/array-extras/array-extras.js", 99); +if (testFn.call(array, value, result, i, array)) { + _yuitest_coverline("build/array-extras/array-extras.js", 100); +continue outerLoop; + } + } else {_yuitest_coverline("build/array-extras/array-extras.js", 102); +if (value === result) { + _yuitest_coverline("build/array-extras/array-extras.js", 103); +continue outerLoop; + }} + } + + // If we get this far, that means the current value is not already in + // the result array, so add it. + _yuitest_coverline("build/array-extras/array-extras.js", 109); +results.push(value); + } + + _yuitest_coverline("build/array-extras/array-extras.js", 112); +return results; +}; + +/** +Executes the supplied function on each item in the array. Returns a new array +containing the items for which the supplied function returned a truthy value. + +@method filter +@param {Array} a Array to filter. +@param {Function} f Function to execute on each item. +@param {Object} [o] Optional context object. +@return {Array} Array of items for which the supplied function returned a + truthy value (empty if it never returned a truthy value). +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 127); +A.filter = L._isNative(ArrayProto.filter) ? + function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 3)", 128); +_yuitest_coverline("build/array-extras/array-extras.js", 129); +return ArrayProto.filter.call(a, f, o); + } : + function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "}", 131); +_yuitest_coverline("build/array-extras/array-extras.js", 132); +var i = 0, + len = a.length, + results = [], + item; + + _yuitest_coverline("build/array-extras/array-extras.js", 137); +for (; i < len; ++i) { + _yuitest_coverline("build/array-extras/array-extras.js", 138); +if (i in a) { + _yuitest_coverline("build/array-extras/array-extras.js", 139); +item = a[i]; + + _yuitest_coverline("build/array-extras/array-extras.js", 141); +if (f.call(o, item, i, a)) { + _yuitest_coverline("build/array-extras/array-extras.js", 142); +results.push(item); + } + } + } + + _yuitest_coverline("build/array-extras/array-extras.js", 147); +return results; + }; + +/** +The inverse of `Array.filter()`. Executes the supplied function on each item. +Returns a new array containing the items for which the supplied function +returned `false`. + +@method reject +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {object} [o] Optional context object. +@return {Array} The items for which the supplied function returned `false`. +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 162); +A.reject = function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "reject", 162); +_yuitest_coverline("build/array-extras/array-extras.js", 163); +return A.filter(a, function(item, i, a) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 4)", 163); +_yuitest_coverline("build/array-extras/array-extras.js", 164); +return !f.call(o, item, i, a); + }); +}; + +/** +Executes the supplied function on each item in the array. Iteration stops if the +supplied function does not return a truthy value. + +@method every +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {Object} [o] Optional context object. +@return {Boolean} `true` if every item in the array returns `true` from the + supplied function, `false` otherwise. +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 180); +A.every = L._isNative(ArrayProto.every) ? + function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 5)", 181); +_yuitest_coverline("build/array-extras/array-extras.js", 182); +return ArrayProto.every.call(a, f, o); + } : + function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "}", 184); +_yuitest_coverline("build/array-extras/array-extras.js", 185); +for (var i = 0, l = a.length; i < l; ++i) { + _yuitest_coverline("build/array-extras/array-extras.js", 186); +if (i in a && !f.call(o, a[i], i, a)) { + _yuitest_coverline("build/array-extras/array-extras.js", 187); +return false; + } + } + + _yuitest_coverline("build/array-extras/array-extras.js", 191); +return true; + }; + +/** +Executes the supplied function on each item in the array and returns a new array +containing all the values returned by the supplied function. + +@example + + // Convert an array of numbers into an array of strings. + Y.Array.map([1, 2, 3, 4], function (item) { + return '' + item; + }); + // => ['1', '2', '3', '4'] + +@method map +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {object} [o] Optional context object. +@return {Array} A new array containing the return value of the supplied function + for each item in the original array. +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 214); +A.map = L._isNative(ArrayProto.map) ? + function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 6)", 215); +_yuitest_coverline("build/array-extras/array-extras.js", 216); +return ArrayProto.map.call(a, f, o); + } : + function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "}", 218); +_yuitest_coverline("build/array-extras/array-extras.js", 219); +var i = 0, + len = a.length, + results = ArrayProto.concat.call(a); + + _yuitest_coverline("build/array-extras/array-extras.js", 223); +for (; i < len; ++i) { + _yuitest_coverline("build/array-extras/array-extras.js", 224); +if (i in a) { + _yuitest_coverline("build/array-extras/array-extras.js", 225); +results[i] = f.call(o, a[i], i, a); + } + } + + _yuitest_coverline("build/array-extras/array-extras.js", 229); +return results; + }; + + +/** +Executes the supplied function on each item in the array, "folding" the array +into a single value. + +@method reduce +@param {Array} a Array to iterate. +@param {Any} init Initial value to start with. +@param {Function} f Function to execute on each item. This function should + update and return the value of the computation. It will receive the following + arguments: + @param {Any} f.previousValue Value returned from the previous iteration, + or the initial value if this is the first iteration. + @param {Any} f.currentValue Value of the current item being iterated. + @param {Number} f.index Index of the current item. + @param {Array} f.array Array being iterated. +@param {Object} [o] Optional context object. +@return {Any} Final result from iteratively applying the given function to each + element in the array. +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 253); +A.reduce = L._isNative(ArrayProto.reduce) ? + function(a, init, f, o) { + // ES5 Array.reduce doesn't support a thisObject, so we need to + // implement it manually. + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 7)", 254); +_yuitest_coverline("build/array-extras/array-extras.js", 257); +return ArrayProto.reduce.call(a, function(init, item, i, a) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 8)", 257); +_yuitest_coverline("build/array-extras/array-extras.js", 258); +return f.call(o, init, item, i, a); + }, init); + } : + function(a, init, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "}", 261); +_yuitest_coverline("build/array-extras/array-extras.js", 262); +var i = 0, + len = a.length, + result = init; + + _yuitest_coverline("build/array-extras/array-extras.js", 266); +for (; i < len; ++i) { + _yuitest_coverline("build/array-extras/array-extras.js", 267); +if (i in a) { + _yuitest_coverline("build/array-extras/array-extras.js", 268); +result = f.call(o, result, a[i], i, a); + } + } + + _yuitest_coverline("build/array-extras/array-extras.js", 272); +return result; + }; + +/** +Executes the supplied function on each item in the array, searching for the +first item that matches the supplied function. + +@method find +@param {Array} a the array to search. +@param {Function} f the function to execute on each item. Iteration is stopped + as soon as this function returns `true`. +@param {Object} [o] Optional context object. +@return {Object} the first item that the supplied function returns `true` for, + or `null` if it never returns `true`. +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 288); +A.find = function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "find", 288); +_yuitest_coverline("build/array-extras/array-extras.js", 289); +for (var i = 0, l = a.length; i < l; i++) { + _yuitest_coverline("build/array-extras/array-extras.js", 290); +if (i in a && f.call(o, a[i], i, a)) { + _yuitest_coverline("build/array-extras/array-extras.js", 291); +return a[i]; + } + } + _yuitest_coverline("build/array-extras/array-extras.js", 294); +return null; +}; + +/** +Iterates over an array, returning a new array of all the elements that match the +supplied regular expression. + +@method grep +@param {Array} a Array to iterate over. +@param {RegExp} pattern Regular expression to test against each item. +@return {Array} All the items in the array that produce a match against the + supplied regular expression. If no items match, an empty array is returned. +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 308); +A.grep = function(a, pattern) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "grep", 308); +_yuitest_coverline("build/array-extras/array-extras.js", 309); +return A.filter(a, function(item, index) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 9)", 309); +_yuitest_coverline("build/array-extras/array-extras.js", 310); +return pattern.test(item); + }); +}; + +/** +Partitions an array into two new arrays, one with the items for which the +supplied function returns `true`, and one with the items for which the function +returns `false`. + +@method partition +@param {Array} a Array to iterate over. +@param {Function} f Function to execute for each item in the array. It will + receive the following arguments: + @param {Any} f.item Current item. + @param {Number} f.index Index of the current item. + @param {Array} f.array The array being iterated. +@param {Object} [o] Optional execution context. +@return {Object} An object with two properties: `matches` and `rejects`. Each is + an array containing the items that were selected or rejected by the test + function (or an empty array if none). +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 332); +A.partition = function(a, f, o) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "partition", 332); +_yuitest_coverline("build/array-extras/array-extras.js", 333); +var results = { + matches: [], + rejects: [] + }; + + _yuitest_coverline("build/array-extras/array-extras.js", 338); +A.each(a, function(item, index) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 10)", 338); +_yuitest_coverline("build/array-extras/array-extras.js", 339); +var set = f.call(o, item, index, a) ? results.matches : results.rejects; + _yuitest_coverline("build/array-extras/array-extras.js", 340); +set.push(item); + }); + + _yuitest_coverline("build/array-extras/array-extras.js", 343); +return results; +}; + +/** +Creates an array of arrays by pairing the corresponding elements of two arrays +together into a new array. + +@method zip +@param {Array} a Array to iterate over. +@param {Array} a2 Another array whose values will be paired with values of the + first array. +@return {Array} An array of arrays formed by pairing each element of the first + array with an item in the second array having the corresponding index. +@static +*/ +_yuitest_coverline("build/array-extras/array-extras.js", 358); +A.zip = function(a, a2) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "zip", 358); +_yuitest_coverline("build/array-extras/array-extras.js", 359); +var results = []; + _yuitest_coverline("build/array-extras/array-extras.js", 360); +A.each(a, function(item, index) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "(anonymous 11)", 360); +_yuitest_coverline("build/array-extras/array-extras.js", 361); +results.push([item, a2[index]]); + }); + _yuitest_coverline("build/array-extras/array-extras.js", 363); +return results; +}; + +/** +Flattens an array of nested arrays at any abitrary depth into a single, flat +array. + +@method flatten +@param {Array} a Array with nested arrays to flatten. +@return {Array} An array whose nested arrays have been flattened. +@static +@since 3.7.0 +**/ +_yuitest_coverline("build/array-extras/array-extras.js", 376); +A.flatten = function(a) { + _yuitest_coverfunc("build/array-extras/array-extras.js", "flatten", 376); +_yuitest_coverline("build/array-extras/array-extras.js", 377); +var result = [], + i, len, val; + + // Always return an array. + _yuitest_coverline("build/array-extras/array-extras.js", 381); +if (!a) { + _yuitest_coverline("build/array-extras/array-extras.js", 382); +return result; + } + + _yuitest_coverline("build/array-extras/array-extras.js", 385); +for (i = 0, len = a.length; i < len; ++i) { + _yuitest_coverline("build/array-extras/array-extras.js", 386); +val = a[i]; + + _yuitest_coverline("build/array-extras/array-extras.js", 388); +if (L.isArray(val)) { + // Recusively flattens any nested arrays. + _yuitest_coverline("build/array-extras/array-extras.js", 390); +result.push.apply(result, A.flatten(val)); + } else { + _yuitest_coverline("build/array-extras/array-extras.js", 392); +result.push(val); + } + } + + _yuitest_coverline("build/array-extras/array-extras.js", 396); +return result; +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/array-extras/array-extras-debug.js b/src/errors/static/js/yui/build/array-extras/array-extras-debug.js new file mode 100644 index 00000000..5d212b56 --- /dev/null +++ b/src/errors/static/js/yui/build/array-extras/array-extras-debug.js @@ -0,0 +1,401 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('array-extras', function (Y, NAME) { + +/** +Adds additional utility methods to the `Y.Array` class. + +@module collection +@submodule array-extras +**/ + +var A = Y.Array, + L = Y.Lang, + ArrayProto = Array.prototype; + +/** +Returns the index of the last item in the array that contains the specified +value, or `-1` if the value isn't found. + +@method lastIndexOf +@param {Array} a Array to search in. +@param {Any} val Value to search for. +@param {Number} [fromIndex] Index at which to start searching backwards. + Defaults to the array's length - 1. If negative, it will be taken as an offset + from the end of the array. If the calculated index is less than 0, the array + will not be searched and `-1` will be returned. +@return {Number} Index of the item that contains the value, or `-1` if not + found. +@static +@for Array +**/ +A.lastIndexOf = L._isNative(ArrayProto.lastIndexOf) ? + function(a, val, fromIndex) { + // An undefined fromIndex is still considered a value by some (all?) + // native implementations, so we can't pass it unless it's actually + // specified. + return fromIndex || fromIndex === 0 ? a.lastIndexOf(val, fromIndex) : + a.lastIndexOf(val); + } : + function(a, val, fromIndex) { + var len = a.length, + i = len - 1; + + if (fromIndex || fromIndex === 0) { + i = Math.min(fromIndex < 0 ? len + fromIndex : fromIndex, len); + } + + if (i > -1 && len > 0) { + for (; i > -1; --i) { + if (i in a && a[i] === val) { + return i; + } + } + } + + return -1; + }; + +/** +Returns a copy of the input array with duplicate items removed. + +Note: If the input array only contains strings, the `Y.Array.dedupe()` method is +a much faster alternative. + +@method unique +@param {Array} array Array to dedupe. +@param {Function} [testFn] Custom function to use to test the equality of two + values. A truthy return value indicates that the values are equal. A falsy + return value indicates that the values are not equal. + + @param {Any} testFn.a First value to compare. + @param {Any} testFn.b Second value to compare. + @param {Number} testFn.index Index of the current item in the original + array. + @param {Array} testFn.array The original array. + @return {Boolean} _true_ if the items are equal, _false_ otherwise. + +@return {Array} Copy of the input array with duplicate items removed. +@static +**/ +A.unique = function (array, testFn) { + var i = 0, + len = array.length, + results = [], + j, result, resultLen, value; + + // Note the label here. It's used to jump out of the inner loop when a value + // is not unique. + outerLoop: for (; i < len; i++) { + value = array[i]; + + // For each value in the input array, iterate through the result array + // and check for uniqueness against each result value. + for (j = 0, resultLen = results.length; j < resultLen; j++) { + result = results[j]; + + // If the test function returns true or there's no test function and + // the value equals the current result item, stop iterating over the + // results and continue to the next value in the input array. + if (testFn) { + if (testFn.call(array, value, result, i, array)) { + continue outerLoop; + } + } else if (value === result) { + continue outerLoop; + } + } + + // If we get this far, that means the current value is not already in + // the result array, so add it. + results.push(value); + } + + return results; +}; + +/** +Executes the supplied function on each item in the array. Returns a new array +containing the items for which the supplied function returned a truthy value. + +@method filter +@param {Array} a Array to filter. +@param {Function} f Function to execute on each item. +@param {Object} [o] Optional context object. +@return {Array} Array of items for which the supplied function returned a + truthy value (empty if it never returned a truthy value). +@static +*/ +A.filter = L._isNative(ArrayProto.filter) ? + function(a, f, o) { + return ArrayProto.filter.call(a, f, o); + } : + function(a, f, o) { + var i = 0, + len = a.length, + results = [], + item; + + for (; i < len; ++i) { + if (i in a) { + item = a[i]; + + if (f.call(o, item, i, a)) { + results.push(item); + } + } + } + + return results; + }; + +/** +The inverse of `Array.filter()`. Executes the supplied function on each item. +Returns a new array containing the items for which the supplied function +returned `false`. + +@method reject +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {object} [o] Optional context object. +@return {Array} The items for which the supplied function returned `false`. +@static +*/ +A.reject = function(a, f, o) { + return A.filter(a, function(item, i, a) { + return !f.call(o, item, i, a); + }); +}; + +/** +Executes the supplied function on each item in the array. Iteration stops if the +supplied function does not return a truthy value. + +@method every +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {Object} [o] Optional context object. +@return {Boolean} `true` if every item in the array returns `true` from the + supplied function, `false` otherwise. +@static +*/ +A.every = L._isNative(ArrayProto.every) ? + function(a, f, o) { + return ArrayProto.every.call(a, f, o); + } : + function(a, f, o) { + for (var i = 0, l = a.length; i < l; ++i) { + if (i in a && !f.call(o, a[i], i, a)) { + return false; + } + } + + return true; + }; + +/** +Executes the supplied function on each item in the array and returns a new array +containing all the values returned by the supplied function. + +@example + + // Convert an array of numbers into an array of strings. + Y.Array.map([1, 2, 3, 4], function (item) { + return '' + item; + }); + // => ['1', '2', '3', '4'] + +@method map +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {object} [o] Optional context object. +@return {Array} A new array containing the return value of the supplied function + for each item in the original array. +@static +*/ +A.map = L._isNative(ArrayProto.map) ? + function(a, f, o) { + return ArrayProto.map.call(a, f, o); + } : + function(a, f, o) { + var i = 0, + len = a.length, + results = ArrayProto.concat.call(a); + + for (; i < len; ++i) { + if (i in a) { + results[i] = f.call(o, a[i], i, a); + } + } + + return results; + }; + + +/** +Executes the supplied function on each item in the array, "folding" the array +into a single value. + +@method reduce +@param {Array} a Array to iterate. +@param {Any} init Initial value to start with. +@param {Function} f Function to execute on each item. This function should + update and return the value of the computation. It will receive the following + arguments: + @param {Any} f.previousValue Value returned from the previous iteration, + or the initial value if this is the first iteration. + @param {Any} f.currentValue Value of the current item being iterated. + @param {Number} f.index Index of the current item. + @param {Array} f.array Array being iterated. +@param {Object} [o] Optional context object. +@return {Any} Final result from iteratively applying the given function to each + element in the array. +@static +*/ +A.reduce = L._isNative(ArrayProto.reduce) ? + function(a, init, f, o) { + // ES5 Array.reduce doesn't support a thisObject, so we need to + // implement it manually. + return ArrayProto.reduce.call(a, function(init, item, i, a) { + return f.call(o, init, item, i, a); + }, init); + } : + function(a, init, f, o) { + var i = 0, + len = a.length, + result = init; + + for (; i < len; ++i) { + if (i in a) { + result = f.call(o, result, a[i], i, a); + } + } + + return result; + }; + +/** +Executes the supplied function on each item in the array, searching for the +first item that matches the supplied function. + +@method find +@param {Array} a the array to search. +@param {Function} f the function to execute on each item. Iteration is stopped + as soon as this function returns `true`. +@param {Object} [o] Optional context object. +@return {Object} the first item that the supplied function returns `true` for, + or `null` if it never returns `true`. +@static +*/ +A.find = function(a, f, o) { + for (var i = 0, l = a.length; i < l; i++) { + if (i in a && f.call(o, a[i], i, a)) { + return a[i]; + } + } + return null; +}; + +/** +Iterates over an array, returning a new array of all the elements that match the +supplied regular expression. + +@method grep +@param {Array} a Array to iterate over. +@param {RegExp} pattern Regular expression to test against each item. +@return {Array} All the items in the array that produce a match against the + supplied regular expression. If no items match, an empty array is returned. +@static +*/ +A.grep = function(a, pattern) { + return A.filter(a, function(item, index) { + return pattern.test(item); + }); +}; + +/** +Partitions an array into two new arrays, one with the items for which the +supplied function returns `true`, and one with the items for which the function +returns `false`. + +@method partition +@param {Array} a Array to iterate over. +@param {Function} f Function to execute for each item in the array. It will + receive the following arguments: + @param {Any} f.item Current item. + @param {Number} f.index Index of the current item. + @param {Array} f.array The array being iterated. +@param {Object} [o] Optional execution context. +@return {Object} An object with two properties: `matches` and `rejects`. Each is + an array containing the items that were selected or rejected by the test + function (or an empty array if none). +@static +*/ +A.partition = function(a, f, o) { + var results = { + matches: [], + rejects: [] + }; + + A.each(a, function(item, index) { + var set = f.call(o, item, index, a) ? results.matches : results.rejects; + set.push(item); + }); + + return results; +}; + +/** +Creates an array of arrays by pairing the corresponding elements of two arrays +together into a new array. + +@method zip +@param {Array} a Array to iterate over. +@param {Array} a2 Another array whose values will be paired with values of the + first array. +@return {Array} An array of arrays formed by pairing each element of the first + array with an item in the second array having the corresponding index. +@static +*/ +A.zip = function(a, a2) { + var results = []; + A.each(a, function(item, index) { + results.push([item, a2[index]]); + }); + return results; +}; + +/** +Flattens an array of nested arrays at any abitrary depth into a single, flat +array. + +@method flatten +@param {Array} a Array with nested arrays to flatten. +@return {Array} An array whose nested arrays have been flattened. +@static +@since 3.7.0 +**/ +A.flatten = function(a) { + var result = [], + i, len, val; + + // Always return an array. + if (!a) { + return result; + } + + for (i = 0, len = a.length; i < len; ++i) { + val = a[i]; + + if (L.isArray(val)) { + // Recusively flattens any nested arrays. + result.push.apply(result, A.flatten(val)); + } else { + result.push(val); + } + } + + return result; +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/array-extras/array-extras-min.js b/src/errors/static/js/yui/build/array-extras/array-extras-min.js new file mode 100644 index 00000000..dca58bf9 --- /dev/null +++ b/src/errors/static/js/yui/build/array-extras/array-extras-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("array-extras",function(e,t){var n=e.Array,r=e.Lang,i=Array.prototype;n.lastIndexOf=r._isNative(i.lastIndexOf)?function(e,t,n){return n||n===0?e.lastIndexOf(t,n):e.lastIndexOf(t)}:function(e,t,n){var r=e.length,i=r-1;if(n||n===0)i=Math.min(n<0?r+n:n,r);if(i>-1&&r>0)for(;i>-1;--i)if(i in e&&e[i]===t)return i;return-1},n.unique=function(e,t){var n=0,r=e.length,i=[],s,o,u,a;e:for(;n -1 && len > 0) { + for (; i > -1; --i) { + if (i in a && a[i] === val) { + return i; + } + } + } + + return -1; + }; + +/** +Returns a copy of the input array with duplicate items removed. + +Note: If the input array only contains strings, the `Y.Array.dedupe()` method is +a much faster alternative. + +@method unique +@param {Array} array Array to dedupe. +@param {Function} [testFn] Custom function to use to test the equality of two + values. A truthy return value indicates that the values are equal. A falsy + return value indicates that the values are not equal. + + @param {Any} testFn.a First value to compare. + @param {Any} testFn.b Second value to compare. + @param {Number} testFn.index Index of the current item in the original + array. + @param {Array} testFn.array The original array. + @return {Boolean} _true_ if the items are equal, _false_ otherwise. + +@return {Array} Copy of the input array with duplicate items removed. +@static +**/ +A.unique = function (array, testFn) { + var i = 0, + len = array.length, + results = [], + j, result, resultLen, value; + + // Note the label here. It's used to jump out of the inner loop when a value + // is not unique. + outerLoop: for (; i < len; i++) { + value = array[i]; + + // For each value in the input array, iterate through the result array + // and check for uniqueness against each result value. + for (j = 0, resultLen = results.length; j < resultLen; j++) { + result = results[j]; + + // If the test function returns true or there's no test function and + // the value equals the current result item, stop iterating over the + // results and continue to the next value in the input array. + if (testFn) { + if (testFn.call(array, value, result, i, array)) { + continue outerLoop; + } + } else if (value === result) { + continue outerLoop; + } + } + + // If we get this far, that means the current value is not already in + // the result array, so add it. + results.push(value); + } + + return results; +}; + +/** +Executes the supplied function on each item in the array. Returns a new array +containing the items for which the supplied function returned a truthy value. + +@method filter +@param {Array} a Array to filter. +@param {Function} f Function to execute on each item. +@param {Object} [o] Optional context object. +@return {Array} Array of items for which the supplied function returned a + truthy value (empty if it never returned a truthy value). +@static +*/ +A.filter = L._isNative(ArrayProto.filter) ? + function(a, f, o) { + return ArrayProto.filter.call(a, f, o); + } : + function(a, f, o) { + var i = 0, + len = a.length, + results = [], + item; + + for (; i < len; ++i) { + if (i in a) { + item = a[i]; + + if (f.call(o, item, i, a)) { + results.push(item); + } + } + } + + return results; + }; + +/** +The inverse of `Array.filter()`. Executes the supplied function on each item. +Returns a new array containing the items for which the supplied function +returned `false`. + +@method reject +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {object} [o] Optional context object. +@return {Array} The items for which the supplied function returned `false`. +@static +*/ +A.reject = function(a, f, o) { + return A.filter(a, function(item, i, a) { + return !f.call(o, item, i, a); + }); +}; + +/** +Executes the supplied function on each item in the array. Iteration stops if the +supplied function does not return a truthy value. + +@method every +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {Object} [o] Optional context object. +@return {Boolean} `true` if every item in the array returns `true` from the + supplied function, `false` otherwise. +@static +*/ +A.every = L._isNative(ArrayProto.every) ? + function(a, f, o) { + return ArrayProto.every.call(a, f, o); + } : + function(a, f, o) { + for (var i = 0, l = a.length; i < l; ++i) { + if (i in a && !f.call(o, a[i], i, a)) { + return false; + } + } + + return true; + }; + +/** +Executes the supplied function on each item in the array and returns a new array +containing all the values returned by the supplied function. + +@example + + // Convert an array of numbers into an array of strings. + Y.Array.map([1, 2, 3, 4], function (item) { + return '' + item; + }); + // => ['1', '2', '3', '4'] + +@method map +@param {Array} a the array to iterate. +@param {Function} f the function to execute on each item. +@param {object} [o] Optional context object. +@return {Array} A new array containing the return value of the supplied function + for each item in the original array. +@static +*/ +A.map = L._isNative(ArrayProto.map) ? + function(a, f, o) { + return ArrayProto.map.call(a, f, o); + } : + function(a, f, o) { + var i = 0, + len = a.length, + results = ArrayProto.concat.call(a); + + for (; i < len; ++i) { + if (i in a) { + results[i] = f.call(o, a[i], i, a); + } + } + + return results; + }; + + +/** +Executes the supplied function on each item in the array, "folding" the array +into a single value. + +@method reduce +@param {Array} a Array to iterate. +@param {Any} init Initial value to start with. +@param {Function} f Function to execute on each item. This function should + update and return the value of the computation. It will receive the following + arguments: + @param {Any} f.previousValue Value returned from the previous iteration, + or the initial value if this is the first iteration. + @param {Any} f.currentValue Value of the current item being iterated. + @param {Number} f.index Index of the current item. + @param {Array} f.array Array being iterated. +@param {Object} [o] Optional context object. +@return {Any} Final result from iteratively applying the given function to each + element in the array. +@static +*/ +A.reduce = L._isNative(ArrayProto.reduce) ? + function(a, init, f, o) { + // ES5 Array.reduce doesn't support a thisObject, so we need to + // implement it manually. + return ArrayProto.reduce.call(a, function(init, item, i, a) { + return f.call(o, init, item, i, a); + }, init); + } : + function(a, init, f, o) { + var i = 0, + len = a.length, + result = init; + + for (; i < len; ++i) { + if (i in a) { + result = f.call(o, result, a[i], i, a); + } + } + + return result; + }; + +/** +Executes the supplied function on each item in the array, searching for the +first item that matches the supplied function. + +@method find +@param {Array} a the array to search. +@param {Function} f the function to execute on each item. Iteration is stopped + as soon as this function returns `true`. +@param {Object} [o] Optional context object. +@return {Object} the first item that the supplied function returns `true` for, + or `null` if it never returns `true`. +@static +*/ +A.find = function(a, f, o) { + for (var i = 0, l = a.length; i < l; i++) { + if (i in a && f.call(o, a[i], i, a)) { + return a[i]; + } + } + return null; +}; + +/** +Iterates over an array, returning a new array of all the elements that match the +supplied regular expression. + +@method grep +@param {Array} a Array to iterate over. +@param {RegExp} pattern Regular expression to test against each item. +@return {Array} All the items in the array that produce a match against the + supplied regular expression. If no items match, an empty array is returned. +@static +*/ +A.grep = function(a, pattern) { + return A.filter(a, function(item, index) { + return pattern.test(item); + }); +}; + +/** +Partitions an array into two new arrays, one with the items for which the +supplied function returns `true`, and one with the items for which the function +returns `false`. + +@method partition +@param {Array} a Array to iterate over. +@param {Function} f Function to execute for each item in the array. It will + receive the following arguments: + @param {Any} f.item Current item. + @param {Number} f.index Index of the current item. + @param {Array} f.array The array being iterated. +@param {Object} [o] Optional execution context. +@return {Object} An object with two properties: `matches` and `rejects`. Each is + an array containing the items that were selected or rejected by the test + function (or an empty array if none). +@static +*/ +A.partition = function(a, f, o) { + var results = { + matches: [], + rejects: [] + }; + + A.each(a, function(item, index) { + var set = f.call(o, item, index, a) ? results.matches : results.rejects; + set.push(item); + }); + + return results; +}; + +/** +Creates an array of arrays by pairing the corresponding elements of two arrays +together into a new array. + +@method zip +@param {Array} a Array to iterate over. +@param {Array} a2 Another array whose values will be paired with values of the + first array. +@return {Array} An array of arrays formed by pairing each element of the first + array with an item in the second array having the corresponding index. +@static +*/ +A.zip = function(a, a2) { + var results = []; + A.each(a, function(item, index) { + results.push([item, a2[index]]); + }); + return results; +}; + +/** +Flattens an array of nested arrays at any abitrary depth into a single, flat +array. + +@method flatten +@param {Array} a Array with nested arrays to flatten. +@return {Array} An array whose nested arrays have been flattened. +@static +@since 3.7.0 +**/ +A.flatten = function(a) { + var result = [], + i, len, val; + + // Always return an array. + if (!a) { + return result; + } + + for (i = 0, len = a.length; i < len; ++i) { + val = a[i]; + + if (L.isArray(val)) { + // Recusively flattens any nested arrays. + result.push.apply(result, A.flatten(val)); + } else { + result.push(val); + } + } + + return result; +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/array-invoke/array-invoke-coverage.js b/src/errors/static/js/yui/build/array-invoke/array-invoke-coverage.js new file mode 100644 index 00000000..1720a679 --- /dev/null +++ b/src/errors/static/js/yui/build/array-invoke/array-invoke-coverage.js @@ -0,0 +1,84 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/array-invoke/array-invoke.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/array-invoke/array-invoke.js", + code: [] +}; +_yuitest_coverage["build/array-invoke/array-invoke.js"].code=["YUI.add('array-invoke', function (Y, NAME) {","","/**","@module collection","@submodule array-invoke","*/","","/**","Executes a named method on each item in an array of objects. Items in the array","that do not have a function by that name will be skipped.","","@example",""," Y.Array.invoke(arrayOfDrags, 'plug', Y.Plugin.DDProxy);","","@method invoke","@param {Array} items Array of objects supporting the named method.","@param {String} name the name of the method to execute on each item.","@param {Any} [args*] Any number of additional args are passed as parameters to"," the execution of the named method.","@return {Array} All return values, indexed according to the item index.","@static","@for Array","**/","Y.Array.invoke = function(items, name) {"," var args = Y.Array(arguments, 2, true),"," isFunction = Y.Lang.isFunction,"," ret = [];",""," Y.Array.each(Y.Array(items), function(item, i) {"," if (item && isFunction(item[name])) {"," ret[i] = item[name].apply(item, args);"," }"," });",""," return ret;","};","","","}, '3.9.0', {\"requires\": [\"yui-base\"]});"]; +_yuitest_coverage["build/array-invoke/array-invoke.js"].lines = {"1":0,"25":0,"26":0,"30":0,"31":0,"32":0,"36":0}; +_yuitest_coverage["build/array-invoke/array-invoke.js"].functions = {"(anonymous 2):30":0,"invoke:25":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/array-invoke/array-invoke.js"].coveredLines = 7; +_yuitest_coverage["build/array-invoke/array-invoke.js"].coveredFunctions = 3; +_yuitest_coverline("build/array-invoke/array-invoke.js", 1); +YUI.add('array-invoke', function (Y, NAME) { + +/** +@module collection +@submodule array-invoke +*/ + +/** +Executes a named method on each item in an array of objects. Items in the array +that do not have a function by that name will be skipped. + +@example + + Y.Array.invoke(arrayOfDrags, 'plug', Y.Plugin.DDProxy); + +@method invoke +@param {Array} items Array of objects supporting the named method. +@param {String} name the name of the method to execute on each item. +@param {Any} [args*] Any number of additional args are passed as parameters to + the execution of the named method. +@return {Array} All return values, indexed according to the item index. +@static +@for Array +**/ +_yuitest_coverfunc("build/array-invoke/array-invoke.js", "(anonymous 1)", 1); +_yuitest_coverline("build/array-invoke/array-invoke.js", 25); +Y.Array.invoke = function(items, name) { + _yuitest_coverfunc("build/array-invoke/array-invoke.js", "invoke", 25); +_yuitest_coverline("build/array-invoke/array-invoke.js", 26); +var args = Y.Array(arguments, 2, true), + isFunction = Y.Lang.isFunction, + ret = []; + + _yuitest_coverline("build/array-invoke/array-invoke.js", 30); +Y.Array.each(Y.Array(items), function(item, i) { + _yuitest_coverfunc("build/array-invoke/array-invoke.js", "(anonymous 2)", 30); +_yuitest_coverline("build/array-invoke/array-invoke.js", 31); +if (item && isFunction(item[name])) { + _yuitest_coverline("build/array-invoke/array-invoke.js", 32); +ret[i] = item[name].apply(item, args); + } + }); + + _yuitest_coverline("build/array-invoke/array-invoke.js", 36); +return ret; +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/array-invoke/array-invoke-debug.js b/src/errors/static/js/yui/build/array-invoke/array-invoke-debug.js new file mode 100644 index 00000000..ea5bf476 --- /dev/null +++ b/src/errors/static/js/yui/build/array-invoke/array-invoke-debug.js @@ -0,0 +1,41 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('array-invoke', function (Y, NAME) { + +/** +@module collection +@submodule array-invoke +*/ + +/** +Executes a named method on each item in an array of objects. Items in the array +that do not have a function by that name will be skipped. + +@example + + Y.Array.invoke(arrayOfDrags, 'plug', Y.Plugin.DDProxy); + +@method invoke +@param {Array} items Array of objects supporting the named method. +@param {String} name the name of the method to execute on each item. +@param {Any} [args*] Any number of additional args are passed as parameters to + the execution of the named method. +@return {Array} All return values, indexed according to the item index. +@static +@for Array +**/ +Y.Array.invoke = function(items, name) { + var args = Y.Array(arguments, 2, true), + isFunction = Y.Lang.isFunction, + ret = []; + + Y.Array.each(Y.Array(items), function(item, i) { + if (item && isFunction(item[name])) { + ret[i] = item[name].apply(item, args); + } + }); + + return ret; +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/array-invoke/array-invoke-min.js b/src/errors/static/js/yui/build/array-invoke/array-invoke-min.js new file mode 100644 index 00000000..25964eef --- /dev/null +++ b/src/errors/static/js/yui/build/array-invoke/array-invoke-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("array-invoke",function(e,t){e.Array.invoke=function(t,n){var r=e.Array(arguments,2,!0),i=e.Lang.isFunction,s=[];return e.Array.each(e.Array(t),function(e,t){e&&i(e[n])&&(s[t]=e[n].apply(e,r))}),s}},"3.9.0",{requires:["yui-base"]}); diff --git a/src/errors/static/js/yui/build/array-invoke/array-invoke.js b/src/errors/static/js/yui/build/array-invoke/array-invoke.js new file mode 100644 index 00000000..ea5bf476 --- /dev/null +++ b/src/errors/static/js/yui/build/array-invoke/array-invoke.js @@ -0,0 +1,41 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('array-invoke', function (Y, NAME) { + +/** +@module collection +@submodule array-invoke +*/ + +/** +Executes a named method on each item in an array of objects. Items in the array +that do not have a function by that name will be skipped. + +@example + + Y.Array.invoke(arrayOfDrags, 'plug', Y.Plugin.DDProxy); + +@method invoke +@param {Array} items Array of objects supporting the named method. +@param {String} name the name of the method to execute on each item. +@param {Any} [args*] Any number of additional args are passed as parameters to + the execution of the named method. +@return {Array} All return values, indexed according to the item index. +@static +@for Array +**/ +Y.Array.invoke = function(items, name) { + var args = Y.Array(arguments, 2, true), + isFunction = Y.Lang.isFunction, + ret = []; + + Y.Array.each(Y.Array(items), function(item, i) { + if (item && isFunction(item[name])) { + ret[i] = item[name].apply(item, args); + } + }); + + return ret; +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/arraylist-add/arraylist-add-coverage.js b/src/errors/static/js/yui/build/arraylist-add/arraylist-add-coverage.js new file mode 100644 index 00000000..65454cc9 --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist-add/arraylist-add-coverage.js @@ -0,0 +1,140 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/arraylist-add/arraylist-add.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/arraylist-add/arraylist-add.js", + code: [] +}; +_yuitest_coverage["build/arraylist-add/arraylist-add.js"].code=["YUI.add('arraylist-add', function (Y, NAME) {","","/**"," * Collection utilities beyond what is provided in the YUI core"," * @module collection"," * @submodule arraylist-add"," * @deprecated Use ModelList or a custom ArrayList subclass"," */","","/*"," * Adds methods add and remove to Y.ArrayList"," */","Y.mix(Y.ArrayList.prototype, {",""," /**"," * Add a single item to the ArrayList. Does not prevent duplicates."," *"," * @method add"," * @param { mixed } item Item presumably of the same type as others in the"," * ArrayList."," * @param {Number} index (Optional.) Number representing the position at"," * which the item should be inserted."," * @return {ArrayList} the instance."," * @for ArrayList"," * @deprecated Use ModelList or a custom ArrayList subclass"," * @chainable"," */"," add: function(item, index) {"," var items = this._items;",""," if (Y.Lang.isNumber(index)) {"," items.splice(index, 0, item);"," }"," else {"," items.push(item);"," }",""," return this;"," },",""," /**"," * Removes first or all occurrences of an item to the ArrayList. If a"," * comparator is not provided, uses itemsAreEqual method to determine"," * matches."," *"," * @method remove"," * @param { mixed } needle Item to find and remove from the list."," * @param { Boolean } all If true, remove all occurrences."," * @param { Function } comparator optional a/b function to test equivalence."," * @return {ArrayList} the instance."," * @for ArrayList"," * @deprecated Use ModelList or a custom ArrayList subclass"," * @chainable"," */"," remove: function(needle, all, comparator) {"," comparator = comparator || this.itemsAreEqual;",""," for (var i = this._items.length - 1; i >= 0; --i) {"," if (comparator.call(this, needle, this.item(i))) {"," this._items.splice(i, 1);"," if (!all) {"," break;"," }"," }"," }",""," return this;"," },",""," /**"," * Default comparator for items stored in this list. Used by remove()."," *"," * @method itemsAreEqual"," * @param { mixed } a item to test equivalence with."," * @param { mixed } b other item to test equivalance."," * @return { Boolean } true if items are deemed equivalent."," * @for ArrayList"," * @deprecated Use ModelList or a custom ArrayList subclass"," */"," itemsAreEqual: function(a, b) {"," return a === b;"," }","","});","","","}, '3.9.0', {\"requires\": [\"arraylist\"]});"]; +_yuitest_coverage["build/arraylist-add/arraylist-add.js"].lines = {"1":0,"13":0,"29":0,"31":0,"32":0,"35":0,"38":0,"56":0,"58":0,"59":0,"60":0,"61":0,"62":0,"67":0,"81":0}; +_yuitest_coverage["build/arraylist-add/arraylist-add.js"].functions = {"add:28":0,"remove:55":0,"itemsAreEqual:80":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/arraylist-add/arraylist-add.js"].coveredLines = 15; +_yuitest_coverage["build/arraylist-add/arraylist-add.js"].coveredFunctions = 4; +_yuitest_coverline("build/arraylist-add/arraylist-add.js", 1); +YUI.add('arraylist-add', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist-add + * @deprecated Use ModelList or a custom ArrayList subclass + */ + +/* + * Adds methods add and remove to Y.ArrayList + */ +_yuitest_coverfunc("build/arraylist-add/arraylist-add.js", "(anonymous 1)", 1); +_yuitest_coverline("build/arraylist-add/arraylist-add.js", 13); +Y.mix(Y.ArrayList.prototype, { + + /** + * Add a single item to the ArrayList. Does not prevent duplicates. + * + * @method add + * @param { mixed } item Item presumably of the same type as others in the + * ArrayList. + * @param {Number} index (Optional.) Number representing the position at + * which the item should be inserted. + * @return {ArrayList} the instance. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + * @chainable + */ + add: function(item, index) { + _yuitest_coverfunc("build/arraylist-add/arraylist-add.js", "add", 28); +_yuitest_coverline("build/arraylist-add/arraylist-add.js", 29); +var items = this._items; + + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 31); +if (Y.Lang.isNumber(index)) { + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 32); +items.splice(index, 0, item); + } + else { + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 35); +items.push(item); + } + + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 38); +return this; + }, + + /** + * Removes first or all occurrences of an item to the ArrayList. If a + * comparator is not provided, uses itemsAreEqual method to determine + * matches. + * + * @method remove + * @param { mixed } needle Item to find and remove from the list. + * @param { Boolean } all If true, remove all occurrences. + * @param { Function } comparator optional a/b function to test equivalence. + * @return {ArrayList} the instance. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + * @chainable + */ + remove: function(needle, all, comparator) { + _yuitest_coverfunc("build/arraylist-add/arraylist-add.js", "remove", 55); +_yuitest_coverline("build/arraylist-add/arraylist-add.js", 56); +comparator = comparator || this.itemsAreEqual; + + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 58); +for (var i = this._items.length - 1; i >= 0; --i) { + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 59); +if (comparator.call(this, needle, this.item(i))) { + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 60); +this._items.splice(i, 1); + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 61); +if (!all) { + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 62); +break; + } + } + } + + _yuitest_coverline("build/arraylist-add/arraylist-add.js", 67); +return this; + }, + + /** + * Default comparator for items stored in this list. Used by remove(). + * + * @method itemsAreEqual + * @param { mixed } a item to test equivalence with. + * @param { mixed } b other item to test equivalance. + * @return { Boolean } true if items are deemed equivalent. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + */ + itemsAreEqual: function(a, b) { + _yuitest_coverfunc("build/arraylist-add/arraylist-add.js", "itemsAreEqual", 80); +_yuitest_coverline("build/arraylist-add/arraylist-add.js", 81); +return a === b; + } + +}); + + +}, '3.9.0', {"requires": ["arraylist"]}); diff --git a/src/errors/static/js/yui/build/arraylist-add/arraylist-add-debug.js b/src/errors/static/js/yui/build/arraylist-add/arraylist-add-debug.js new file mode 100644 index 00000000..ff22ff2e --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist-add/arraylist-add-debug.js @@ -0,0 +1,88 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('arraylist-add', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist-add + * @deprecated Use ModelList or a custom ArrayList subclass + */ + +/* + * Adds methods add and remove to Y.ArrayList + */ +Y.mix(Y.ArrayList.prototype, { + + /** + * Add a single item to the ArrayList. Does not prevent duplicates. + * + * @method add + * @param { mixed } item Item presumably of the same type as others in the + * ArrayList. + * @param {Number} index (Optional.) Number representing the position at + * which the item should be inserted. + * @return {ArrayList} the instance. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + * @chainable + */ + add: function(item, index) { + var items = this._items; + + if (Y.Lang.isNumber(index)) { + items.splice(index, 0, item); + } + else { + items.push(item); + } + + return this; + }, + + /** + * Removes first or all occurrences of an item to the ArrayList. If a + * comparator is not provided, uses itemsAreEqual method to determine + * matches. + * + * @method remove + * @param { mixed } needle Item to find and remove from the list. + * @param { Boolean } all If true, remove all occurrences. + * @param { Function } comparator optional a/b function to test equivalence. + * @return {ArrayList} the instance. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + * @chainable + */ + remove: function(needle, all, comparator) { + comparator = comparator || this.itemsAreEqual; + + for (var i = this._items.length - 1; i >= 0; --i) { + if (comparator.call(this, needle, this.item(i))) { + this._items.splice(i, 1); + if (!all) { + break; + } + } + } + + return this; + }, + + /** + * Default comparator for items stored in this list. Used by remove(). + * + * @method itemsAreEqual + * @param { mixed } a item to test equivalence with. + * @param { mixed } b other item to test equivalance. + * @return { Boolean } true if items are deemed equivalent. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + */ + itemsAreEqual: function(a, b) { + return a === b; + } + +}); + + +}, '3.9.0', {"requires": ["arraylist"]}); diff --git a/src/errors/static/js/yui/build/arraylist-add/arraylist-add-min.js b/src/errors/static/js/yui/build/arraylist-add/arraylist-add-min.js new file mode 100644 index 00000000..f3551f8d --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist-add/arraylist-add-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("arraylist-add",function(e,t){e.mix(e.ArrayList.prototype,{add:function(t,n){var r=this._items;return e.Lang.isNumber(n)?r.splice(n,0,t):r.push(t),this},remove:function(e,t,n){n=n||this.itemsAreEqual;for(var r=this._items.length-1;r>=0;--r)if(n.call(this,e,this.item(r))){this._items.splice(r,1);if(!t)break}return this},itemsAreEqual:function(e,t){return e===t}})},"3.9.0",{requires:["arraylist"]}); diff --git a/src/errors/static/js/yui/build/arraylist-add/arraylist-add.js b/src/errors/static/js/yui/build/arraylist-add/arraylist-add.js new file mode 100644 index 00000000..ff22ff2e --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist-add/arraylist-add.js @@ -0,0 +1,88 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('arraylist-add', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist-add + * @deprecated Use ModelList or a custom ArrayList subclass + */ + +/* + * Adds methods add and remove to Y.ArrayList + */ +Y.mix(Y.ArrayList.prototype, { + + /** + * Add a single item to the ArrayList. Does not prevent duplicates. + * + * @method add + * @param { mixed } item Item presumably of the same type as others in the + * ArrayList. + * @param {Number} index (Optional.) Number representing the position at + * which the item should be inserted. + * @return {ArrayList} the instance. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + * @chainable + */ + add: function(item, index) { + var items = this._items; + + if (Y.Lang.isNumber(index)) { + items.splice(index, 0, item); + } + else { + items.push(item); + } + + return this; + }, + + /** + * Removes first or all occurrences of an item to the ArrayList. If a + * comparator is not provided, uses itemsAreEqual method to determine + * matches. + * + * @method remove + * @param { mixed } needle Item to find and remove from the list. + * @param { Boolean } all If true, remove all occurrences. + * @param { Function } comparator optional a/b function to test equivalence. + * @return {ArrayList} the instance. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + * @chainable + */ + remove: function(needle, all, comparator) { + comparator = comparator || this.itemsAreEqual; + + for (var i = this._items.length - 1; i >= 0; --i) { + if (comparator.call(this, needle, this.item(i))) { + this._items.splice(i, 1); + if (!all) { + break; + } + } + } + + return this; + }, + + /** + * Default comparator for items stored in this list. Used by remove(). + * + * @method itemsAreEqual + * @param { mixed } a item to test equivalence with. + * @param { mixed } b other item to test equivalance. + * @return { Boolean } true if items are deemed equivalent. + * @for ArrayList + * @deprecated Use ModelList or a custom ArrayList subclass + */ + itemsAreEqual: function(a, b) { + return a === b; + } + +}); + + +}, '3.9.0', {"requires": ["arraylist"]}); diff --git a/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-coverage.js b/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-coverage.js new file mode 100644 index 00000000..3ad98e77 --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-coverage.js @@ -0,0 +1,90 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/arraylist-filter/arraylist-filter.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/arraylist-filter/arraylist-filter.js", + code: [] +}; +_yuitest_coverage["build/arraylist-filter/arraylist-filter.js"].code=["YUI.add('arraylist-filter', function (Y, NAME) {","","/**"," * Collection utilities beyond what is provided in the YUI core"," * @module collection"," * @submodule arraylist-filter"," * @deprecated Use ModelList or a custom subclass implementation"," */","","/*"," * Adds filter method to ArrayList prototype"," */","Y.mix(Y.ArrayList.prototype, {",""," /**"," *

Create a new ArrayList (or augmenting class instance) from a subset"," * of items as determined by the boolean function passed as the"," * argument. The original ArrayList is unchanged.

"," *"," *

The validator signature is validator( item ).

"," *"," * @method filter"," * @param { Function } validator Boolean function to determine in or out."," * @return { ArrayList } New instance based on who passed the validator."," * @for ArrayList"," * @deprecated Use ModelList or a custom subclass implementation"," */"," filter: function(validator) {"," var items = [];",""," Y.Array.each(this._items, function(item, i) {"," item = this.item(i);",""," if (validator(item)) {"," items.push(item);"," }"," }, this);",""," return new this.constructor(items);"," }","","});","","","}, '3.9.0', {\"requires\": [\"arraylist\"]});"]; +_yuitest_coverage["build/arraylist-filter/arraylist-filter.js"].lines = {"1":0,"13":0,"29":0,"31":0,"32":0,"34":0,"35":0,"39":0}; +_yuitest_coverage["build/arraylist-filter/arraylist-filter.js"].functions = {"(anonymous 2):31":0,"filter:28":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/arraylist-filter/arraylist-filter.js"].coveredLines = 8; +_yuitest_coverage["build/arraylist-filter/arraylist-filter.js"].coveredFunctions = 3; +_yuitest_coverline("build/arraylist-filter/arraylist-filter.js", 1); +YUI.add('arraylist-filter', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist-filter + * @deprecated Use ModelList or a custom subclass implementation + */ + +/* + * Adds filter method to ArrayList prototype + */ +_yuitest_coverfunc("build/arraylist-filter/arraylist-filter.js", "(anonymous 1)", 1); +_yuitest_coverline("build/arraylist-filter/arraylist-filter.js", 13); +Y.mix(Y.ArrayList.prototype, { + + /** + *

Create a new ArrayList (or augmenting class instance) from a subset + * of items as determined by the boolean function passed as the + * argument. The original ArrayList is unchanged.

+ * + *

The validator signature is validator( item ).

+ * + * @method filter + * @param { Function } validator Boolean function to determine in or out. + * @return { ArrayList } New instance based on who passed the validator. + * @for ArrayList + * @deprecated Use ModelList or a custom subclass implementation + */ + filter: function(validator) { + _yuitest_coverfunc("build/arraylist-filter/arraylist-filter.js", "filter", 28); +_yuitest_coverline("build/arraylist-filter/arraylist-filter.js", 29); +var items = []; + + _yuitest_coverline("build/arraylist-filter/arraylist-filter.js", 31); +Y.Array.each(this._items, function(item, i) { + _yuitest_coverfunc("build/arraylist-filter/arraylist-filter.js", "(anonymous 2)", 31); +_yuitest_coverline("build/arraylist-filter/arraylist-filter.js", 32); +item = this.item(i); + + _yuitest_coverline("build/arraylist-filter/arraylist-filter.js", 34); +if (validator(item)) { + _yuitest_coverline("build/arraylist-filter/arraylist-filter.js", 35); +items.push(item); + } + }, this); + + _yuitest_coverline("build/arraylist-filter/arraylist-filter.js", 39); +return new this.constructor(items); + } + +}); + + +}, '3.9.0', {"requires": ["arraylist"]}); diff --git a/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-debug.js b/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-debug.js new file mode 100644 index 00000000..9d94435b --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-debug.js @@ -0,0 +1,46 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('arraylist-filter', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist-filter + * @deprecated Use ModelList or a custom subclass implementation + */ + +/* + * Adds filter method to ArrayList prototype + */ +Y.mix(Y.ArrayList.prototype, { + + /** + *

Create a new ArrayList (or augmenting class instance) from a subset + * of items as determined by the boolean function passed as the + * argument. The original ArrayList is unchanged.

+ * + *

The validator signature is validator( item ).

+ * + * @method filter + * @param { Function } validator Boolean function to determine in or out. + * @return { ArrayList } New instance based on who passed the validator. + * @for ArrayList + * @deprecated Use ModelList or a custom subclass implementation + */ + filter: function(validator) { + var items = []; + + Y.Array.each(this._items, function(item, i) { + item = this.item(i); + + if (validator(item)) { + items.push(item); + } + }, this); + + return new this.constructor(items); + } + +}); + + +}, '3.9.0', {"requires": ["arraylist"]}); diff --git a/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-min.js b/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-min.js new file mode 100644 index 00000000..d346255f --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("arraylist-filter",function(e,t){e.mix(e.ArrayList.prototype,{filter:function(t){var n=[];return e.Array.each(this._items,function(e,r){e=this.item(r),t(e)&&n.push(e)},this),new this.constructor(n)}})},"3.9.0",{requires:["arraylist"]}); diff --git a/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter.js b/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter.js new file mode 100644 index 00000000..9d94435b --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist-filter/arraylist-filter.js @@ -0,0 +1,46 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('arraylist-filter', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist-filter + * @deprecated Use ModelList or a custom subclass implementation + */ + +/* + * Adds filter method to ArrayList prototype + */ +Y.mix(Y.ArrayList.prototype, { + + /** + *

Create a new ArrayList (or augmenting class instance) from a subset + * of items as determined by the boolean function passed as the + * argument. The original ArrayList is unchanged.

+ * + *

The validator signature is validator( item ).

+ * + * @method filter + * @param { Function } validator Boolean function to determine in or out. + * @return { ArrayList } New instance based on who passed the validator. + * @for ArrayList + * @deprecated Use ModelList or a custom subclass implementation + */ + filter: function(validator) { + var items = []; + + Y.Array.each(this._items, function(item, i) { + item = this.item(i); + + if (validator(item)) { + items.push(item); + } + }, this); + + return new this.constructor(items); + } + +}); + + +}, '3.9.0', {"requires": ["arraylist"]}); diff --git a/src/errors/static/js/yui/build/arraylist/arraylist-coverage.js b/src/errors/static/js/yui/build/arraylist/arraylist-coverage.js new file mode 100644 index 00000000..b13877a4 --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist/arraylist-coverage.js @@ -0,0 +1,296 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/arraylist/arraylist.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/arraylist/arraylist.js", + code: [] +}; +_yuitest_coverage["build/arraylist/arraylist.js"].code=["YUI.add('arraylist', function (Y, NAME) {","","/**"," * Collection utilities beyond what is provided in the YUI core"," * @module collection"," * @submodule arraylist"," */","","var YArray = Y.Array,"," YArray_each = YArray.each,"," ArrayListProto;","","/**"," * Generic ArrayList class for managing lists of items and iterating operations"," * over them. The targeted use for this class is for augmentation onto a"," * class that is responsible for managing multiple instances of another class"," * (e.g. NodeList for Nodes). The recommended use is to augment your class with"," * ArrayList, then use ArrayList.addMethod to mirror the API of the constituent"," * items on the list's API."," *"," * The default implementation creates immutable lists, but mutability can be"," * provided via the arraylist-add submodule or by implementing mutation methods"," * directly on the augmented class's prototype."," *"," * @class ArrayList"," * @constructor"," * @param items { Array } array of items this list will be responsible for"," */","function ArrayList( items ) {"," if ( items !== undefined ) {"," this._items = Y.Lang.isArray( items ) ? items : YArray( items );"," } else {"," // ||= to support lazy initialization from augment"," this._items = this._items || [];"," }","}","","ArrayListProto = {"," /**"," * Get an item by index from the list. Override this method if managing a"," * list of objects that have a different public representation (e.g. Node"," * instances vs DOM nodes). The iteration methods that accept a user"," * function will use this method for access list items for operation."," *"," * @method item"," * @param i { Integer } index to fetch"," * @return { mixed } the item at the requested index"," */"," item: function ( i ) {"," return this._items[i];"," },",""," /**"," *

Execute a function on each item of the list, optionally providing a"," * custom execution context. Default context is the item.

"," *"," *

The callback signature is callback( item, index ).

"," *"," * @method each"," * @param fn { Function } the function to execute"," * @param context { mixed } optional override 'this' in the function"," * @return { ArrayList } this instance"," * @chainable"," */"," each: function ( fn, context ) {"," YArray_each( this._items, function ( item, i ) {"," item = this.item( i );",""," fn.call( context || item, item, i, this );"," }, this);",""," return this;"," },",""," /**"," *

Execute a function on each item of the list, optionally providing a"," * custom execution context. Default context is the item.

"," *"," *

The callback signature is callback( item, index ).

"," *"," *

Unlike each, if the callback returns true, the"," * iteratation will stop.

"," *"," * @method some"," * @param fn { Function } the function to execute"," * @param context { mixed } optional override 'this' in the function"," * @return { Boolean } True if the function returned true on an item"," */"," some: function ( fn, context ) {"," return YArray.some( this._items, function ( item, i ) {"," item = this.item( i );",""," return fn.call( context || item, item, i, this );"," }, this);"," },",""," /**"," * Finds the first index of the needle in the managed array of items."," *"," * @method indexOf"," * @param needle { mixed } The item to search for"," * @return { Integer } Array index if found. Otherwise -1"," */"," indexOf: function ( needle ) {"," return YArray.indexOf( this._items, needle );"," },",""," /**"," * How many items are in this list?"," *"," * @method size"," * @return { Integer } Number of items in the list"," */"," size: function () {"," return this._items.length;"," },",""," /**"," * Is this instance managing any items?"," *"," * @method isEmpty"," * @return { Boolean } true if 1 or more items are being managed"," */"," isEmpty: function () {"," return !this.size();"," },",""," /**"," * Provides an array-like representation for JSON.stringify."," *"," * @method toJSON"," * @return { Array } an array representation of the ArrayList"," */"," toJSON: function () {"," return this._items;"," }","};","// Default implementation does not distinguish between public and private","// item getter","/**"," * Protected method for optimizations that may be appropriate for API"," * mirroring. Similar in functionality to item, but is used by"," * methods added with ArrayList.addMethod()."," *"," * @method _item"," * @protected"," * @param i { Integer } Index of item to fetch"," * @return { mixed } The item appropriate for pass through API methods"," */","ArrayListProto._item = ArrayListProto.item;","","// Mixed onto existing proto to preserve constructor NOT being an own property.","// This has bitten me when composing classes by enumerating, copying prototypes.","Y.mix(ArrayList.prototype, ArrayListProto);","","Y.mix( ArrayList, {",""," /**"," *

Adds a pass through method to dest (typically the prototype of a list"," * class) that calls the named method on each item in the list with"," * whatever parameters are passed in. Allows for API indirection via list"," * instances.

"," *"," *

Accepts a single string name or an array of string names.

"," *"," *
list.each( function ( item ) {","     *     item.methodName( 1, 2, 3 );","     * } );","     * // becomes","     * list.methodName( 1, 2, 3 );
"," *"," *

Additionally, the pass through methods use the item retrieved by the"," * _item method in case there is any special behavior that is"," * appropriate for API mirroring.

"," *"," *

If the iterated method returns a value, the return value from the"," * added method will be an array of values with each value being at the"," * corresponding index for that item. If the iterated method does not"," * return a value, the added method will be chainable."," *"," * @method addMethod"," * @static"," * @param dest {Object} Object or prototype to receive the iterator method"," * @param name {String|String[]} Name of method of methods to create"," */"," addMethod: function ( dest, names ) {",""," names = YArray( names );",""," YArray_each( names, function ( name ) {"," dest[ name ] = function () {"," var args = YArray( arguments, 0, true ),"," ret = [];",""," YArray_each( this._items, function ( item, i ) {"," item = this._item( i );",""," var result = item[ name ].apply( item, args );",""," if ( result !== undefined && result !== item ) {"," ret[i] = result;"," }"," }, this);",""," return ret.length ? ret : this;"," };"," } );"," }","} );","","Y.ArrayList = ArrayList;","","","}, '3.9.0', {\"requires\": [\"yui-base\"]});"]; +_yuitest_coverage["build/arraylist/arraylist.js"].lines = {"1":0,"9":0,"29":0,"30":0,"31":0,"34":0,"38":0,"50":0,"66":0,"67":0,"69":0,"72":0,"90":0,"91":0,"93":0,"105":0,"115":0,"125":0,"135":0,"150":0,"154":0,"156":0,"188":0,"190":0,"191":0,"192":0,"195":0,"196":0,"198":0,"200":0,"201":0,"205":0,"211":0}; +_yuitest_coverage["build/arraylist/arraylist.js"].functions = {"ArrayList:29":0,"item:49":0,"(anonymous 2):66":0,"each:65":0,"(anonymous 3):90":0,"some:89":0,"indexOf:104":0,"size:114":0,"isEmpty:124":0,"toJSON:134":0,"(anonymous 5):195":0,"]:191":0,"(anonymous 4):190":0,"addMethod:186":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/arraylist/arraylist.js"].coveredLines = 33; +_yuitest_coverage["build/arraylist/arraylist.js"].coveredFunctions = 15; +_yuitest_coverline("build/arraylist/arraylist.js", 1); +YUI.add('arraylist', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist + */ + +_yuitest_coverfunc("build/arraylist/arraylist.js", "(anonymous 1)", 1); +_yuitest_coverline("build/arraylist/arraylist.js", 9); +var YArray = Y.Array, + YArray_each = YArray.each, + ArrayListProto; + +/** + * Generic ArrayList class for managing lists of items and iterating operations + * over them. The targeted use for this class is for augmentation onto a + * class that is responsible for managing multiple instances of another class + * (e.g. NodeList for Nodes). The recommended use is to augment your class with + * ArrayList, then use ArrayList.addMethod to mirror the API of the constituent + * items on the list's API. + * + * The default implementation creates immutable lists, but mutability can be + * provided via the arraylist-add submodule or by implementing mutation methods + * directly on the augmented class's prototype. + * + * @class ArrayList + * @constructor + * @param items { Array } array of items this list will be responsible for + */ +_yuitest_coverline("build/arraylist/arraylist.js", 29); +function ArrayList( items ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "ArrayList", 29); +_yuitest_coverline("build/arraylist/arraylist.js", 30); +if ( items !== undefined ) { + _yuitest_coverline("build/arraylist/arraylist.js", 31); +this._items = Y.Lang.isArray( items ) ? items : YArray( items ); + } else { + // ||= to support lazy initialization from augment + _yuitest_coverline("build/arraylist/arraylist.js", 34); +this._items = this._items || []; + } +} + +_yuitest_coverline("build/arraylist/arraylist.js", 38); +ArrayListProto = { + /** + * Get an item by index from the list. Override this method if managing a + * list of objects that have a different public representation (e.g. Node + * instances vs DOM nodes). The iteration methods that accept a user + * function will use this method for access list items for operation. + * + * @method item + * @param i { Integer } index to fetch + * @return { mixed } the item at the requested index + */ + item: function ( i ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "item", 49); +_yuitest_coverline("build/arraylist/arraylist.js", 50); +return this._items[i]; + }, + + /** + *

Execute a function on each item of the list, optionally providing a + * custom execution context. Default context is the item.

+ * + *

The callback signature is callback( item, index ).

+ * + * @method each + * @param fn { Function } the function to execute + * @param context { mixed } optional override 'this' in the function + * @return { ArrayList } this instance + * @chainable + */ + each: function ( fn, context ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "each", 65); +_yuitest_coverline("build/arraylist/arraylist.js", 66); +YArray_each( this._items, function ( item, i ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "(anonymous 2)", 66); +_yuitest_coverline("build/arraylist/arraylist.js", 67); +item = this.item( i ); + + _yuitest_coverline("build/arraylist/arraylist.js", 69); +fn.call( context || item, item, i, this ); + }, this); + + _yuitest_coverline("build/arraylist/arraylist.js", 72); +return this; + }, + + /** + *

Execute a function on each item of the list, optionally providing a + * custom execution context. Default context is the item.

+ * + *

The callback signature is callback( item, index ).

+ * + *

Unlike each, if the callback returns true, the + * iteratation will stop.

+ * + * @method some + * @param fn { Function } the function to execute + * @param context { mixed } optional override 'this' in the function + * @return { Boolean } True if the function returned true on an item + */ + some: function ( fn, context ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "some", 89); +_yuitest_coverline("build/arraylist/arraylist.js", 90); +return YArray.some( this._items, function ( item, i ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "(anonymous 3)", 90); +_yuitest_coverline("build/arraylist/arraylist.js", 91); +item = this.item( i ); + + _yuitest_coverline("build/arraylist/arraylist.js", 93); +return fn.call( context || item, item, i, this ); + }, this); + }, + + /** + * Finds the first index of the needle in the managed array of items. + * + * @method indexOf + * @param needle { mixed } The item to search for + * @return { Integer } Array index if found. Otherwise -1 + */ + indexOf: function ( needle ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "indexOf", 104); +_yuitest_coverline("build/arraylist/arraylist.js", 105); +return YArray.indexOf( this._items, needle ); + }, + + /** + * How many items are in this list? + * + * @method size + * @return { Integer } Number of items in the list + */ + size: function () { + _yuitest_coverfunc("build/arraylist/arraylist.js", "size", 114); +_yuitest_coverline("build/arraylist/arraylist.js", 115); +return this._items.length; + }, + + /** + * Is this instance managing any items? + * + * @method isEmpty + * @return { Boolean } true if 1 or more items are being managed + */ + isEmpty: function () { + _yuitest_coverfunc("build/arraylist/arraylist.js", "isEmpty", 124); +_yuitest_coverline("build/arraylist/arraylist.js", 125); +return !this.size(); + }, + + /** + * Provides an array-like representation for JSON.stringify. + * + * @method toJSON + * @return { Array } an array representation of the ArrayList + */ + toJSON: function () { + _yuitest_coverfunc("build/arraylist/arraylist.js", "toJSON", 134); +_yuitest_coverline("build/arraylist/arraylist.js", 135); +return this._items; + } +}; +// Default implementation does not distinguish between public and private +// item getter +/** + * Protected method for optimizations that may be appropriate for API + * mirroring. Similar in functionality to item, but is used by + * methods added with ArrayList.addMethod(). + * + * @method _item + * @protected + * @param i { Integer } Index of item to fetch + * @return { mixed } The item appropriate for pass through API methods + */ +_yuitest_coverline("build/arraylist/arraylist.js", 150); +ArrayListProto._item = ArrayListProto.item; + +// Mixed onto existing proto to preserve constructor NOT being an own property. +// This has bitten me when composing classes by enumerating, copying prototypes. +_yuitest_coverline("build/arraylist/arraylist.js", 154); +Y.mix(ArrayList.prototype, ArrayListProto); + +_yuitest_coverline("build/arraylist/arraylist.js", 156); +Y.mix( ArrayList, { + + /** + *

Adds a pass through method to dest (typically the prototype of a list + * class) that calls the named method on each item in the list with + * whatever parameters are passed in. Allows for API indirection via list + * instances.

+ * + *

Accepts a single string name or an array of string names.

+ * + *
list.each( function ( item ) {
+     *     item.methodName( 1, 2, 3 );
+     * } );
+     * // becomes
+     * list.methodName( 1, 2, 3 );
+ * + *

Additionally, the pass through methods use the item retrieved by the + * _item method in case there is any special behavior that is + * appropriate for API mirroring.

+ * + *

If the iterated method returns a value, the return value from the + * added method will be an array of values with each value being at the + * corresponding index for that item. If the iterated method does not + * return a value, the added method will be chainable. + * + * @method addMethod + * @static + * @param dest {Object} Object or prototype to receive the iterator method + * @param name {String|String[]} Name of method of methods to create + */ + addMethod: function ( dest, names ) { + + _yuitest_coverfunc("build/arraylist/arraylist.js", "addMethod", 186); +_yuitest_coverline("build/arraylist/arraylist.js", 188); +names = YArray( names ); + + _yuitest_coverline("build/arraylist/arraylist.js", 190); +YArray_each( names, function ( name ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "(anonymous 4)", 190); +_yuitest_coverline("build/arraylist/arraylist.js", 191); +dest[ name ] = function () { + _yuitest_coverfunc("build/arraylist/arraylist.js", "]", 191); +_yuitest_coverline("build/arraylist/arraylist.js", 192); +var args = YArray( arguments, 0, true ), + ret = []; + + _yuitest_coverline("build/arraylist/arraylist.js", 195); +YArray_each( this._items, function ( item, i ) { + _yuitest_coverfunc("build/arraylist/arraylist.js", "(anonymous 5)", 195); +_yuitest_coverline("build/arraylist/arraylist.js", 196); +item = this._item( i ); + + _yuitest_coverline("build/arraylist/arraylist.js", 198); +var result = item[ name ].apply( item, args ); + + _yuitest_coverline("build/arraylist/arraylist.js", 200); +if ( result !== undefined && result !== item ) { + _yuitest_coverline("build/arraylist/arraylist.js", 201); +ret[i] = result; + } + }, this); + + _yuitest_coverline("build/arraylist/arraylist.js", 205); +return ret.length ? ret : this; + }; + } ); + } +} ); + +_yuitest_coverline("build/arraylist/arraylist.js", 211); +Y.ArrayList = ArrayList; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/arraylist/arraylist-debug.js b/src/errors/static/js/yui/build/arraylist/arraylist-debug.js new file mode 100644 index 00000000..e2afef96 --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist/arraylist-debug.js @@ -0,0 +1,215 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('arraylist', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist + */ + +var YArray = Y.Array, + YArray_each = YArray.each, + ArrayListProto; + +/** + * Generic ArrayList class for managing lists of items and iterating operations + * over them. The targeted use for this class is for augmentation onto a + * class that is responsible for managing multiple instances of another class + * (e.g. NodeList for Nodes). The recommended use is to augment your class with + * ArrayList, then use ArrayList.addMethod to mirror the API of the constituent + * items on the list's API. + * + * The default implementation creates immutable lists, but mutability can be + * provided via the arraylist-add submodule or by implementing mutation methods + * directly on the augmented class's prototype. + * + * @class ArrayList + * @constructor + * @param items { Array } array of items this list will be responsible for + */ +function ArrayList( items ) { + if ( items !== undefined ) { + this._items = Y.Lang.isArray( items ) ? items : YArray( items ); + } else { + // ||= to support lazy initialization from augment + this._items = this._items || []; + } +} + +ArrayListProto = { + /** + * Get an item by index from the list. Override this method if managing a + * list of objects that have a different public representation (e.g. Node + * instances vs DOM nodes). The iteration methods that accept a user + * function will use this method for access list items for operation. + * + * @method item + * @param i { Integer } index to fetch + * @return { mixed } the item at the requested index + */ + item: function ( i ) { + return this._items[i]; + }, + + /** + *

Execute a function on each item of the list, optionally providing a + * custom execution context. Default context is the item.

+ * + *

The callback signature is callback( item, index ).

+ * + * @method each + * @param fn { Function } the function to execute + * @param context { mixed } optional override 'this' in the function + * @return { ArrayList } this instance + * @chainable + */ + each: function ( fn, context ) { + YArray_each( this._items, function ( item, i ) { + item = this.item( i ); + + fn.call( context || item, item, i, this ); + }, this); + + return this; + }, + + /** + *

Execute a function on each item of the list, optionally providing a + * custom execution context. Default context is the item.

+ * + *

The callback signature is callback( item, index ).

+ * + *

Unlike each, if the callback returns true, the + * iteratation will stop.

+ * + * @method some + * @param fn { Function } the function to execute + * @param context { mixed } optional override 'this' in the function + * @return { Boolean } True if the function returned true on an item + */ + some: function ( fn, context ) { + return YArray.some( this._items, function ( item, i ) { + item = this.item( i ); + + return fn.call( context || item, item, i, this ); + }, this); + }, + + /** + * Finds the first index of the needle in the managed array of items. + * + * @method indexOf + * @param needle { mixed } The item to search for + * @return { Integer } Array index if found. Otherwise -1 + */ + indexOf: function ( needle ) { + return YArray.indexOf( this._items, needle ); + }, + + /** + * How many items are in this list? + * + * @method size + * @return { Integer } Number of items in the list + */ + size: function () { + return this._items.length; + }, + + /** + * Is this instance managing any items? + * + * @method isEmpty + * @return { Boolean } true if 1 or more items are being managed + */ + isEmpty: function () { + return !this.size(); + }, + + /** + * Provides an array-like representation for JSON.stringify. + * + * @method toJSON + * @return { Array } an array representation of the ArrayList + */ + toJSON: function () { + return this._items; + } +}; +// Default implementation does not distinguish between public and private +// item getter +/** + * Protected method for optimizations that may be appropriate for API + * mirroring. Similar in functionality to item, but is used by + * methods added with ArrayList.addMethod(). + * + * @method _item + * @protected + * @param i { Integer } Index of item to fetch + * @return { mixed } The item appropriate for pass through API methods + */ +ArrayListProto._item = ArrayListProto.item; + +// Mixed onto existing proto to preserve constructor NOT being an own property. +// This has bitten me when composing classes by enumerating, copying prototypes. +Y.mix(ArrayList.prototype, ArrayListProto); + +Y.mix( ArrayList, { + + /** + *

Adds a pass through method to dest (typically the prototype of a list + * class) that calls the named method on each item in the list with + * whatever parameters are passed in. Allows for API indirection via list + * instances.

+ * + *

Accepts a single string name or an array of string names.

+ * + *
list.each( function ( item ) {
+     *     item.methodName( 1, 2, 3 );
+     * } );
+     * // becomes
+     * list.methodName( 1, 2, 3 );
+ * + *

Additionally, the pass through methods use the item retrieved by the + * _item method in case there is any special behavior that is + * appropriate for API mirroring.

+ * + *

If the iterated method returns a value, the return value from the + * added method will be an array of values with each value being at the + * corresponding index for that item. If the iterated method does not + * return a value, the added method will be chainable. + * + * @method addMethod + * @static + * @param dest {Object} Object or prototype to receive the iterator method + * @param name {String|String[]} Name of method of methods to create + */ + addMethod: function ( dest, names ) { + + names = YArray( names ); + + YArray_each( names, function ( name ) { + dest[ name ] = function () { + var args = YArray( arguments, 0, true ), + ret = []; + + YArray_each( this._items, function ( item, i ) { + item = this._item( i ); + + var result = item[ name ].apply( item, args ); + + if ( result !== undefined && result !== item ) { + ret[i] = result; + } + }, this); + + return ret.length ? ret : this; + }; + } ); + } +} ); + +Y.ArrayList = ArrayList; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/arraylist/arraylist-min.js b/src/errors/static/js/yui/build/arraylist/arraylist-min.js new file mode 100644 index 00000000..8b786ab0 --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist/arraylist-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("arraylist",function(e,t){function s(t){t!==undefined?this._items=e.Lang.isArray(t)?t:n(t):this._items=this._items||[]}var n=e.Array,r=n.each,i;i={item:function(e){return this._items[e]},each:function(e,t){return r(this._items,function(n,r){n=this.item(r),e.call(t||n,n,r,this)},this),this},some:function(e,t){return n.some(this._items,function(n,r){return n=this.item(r),e.call(t||n,n,r,this)},this)},indexOf:function(e){return n.indexOf(this._items,e)},size:function(){return this._items.length},isEmpty:function(){return!this.size()},toJSON:function(){return this._items}},i._item=i.item,e.mix(s.prototype,i),e.mix(s,{addMethod:function(e,t){t=n(t),r(t,function(t){e[t]=function(){var e=n(arguments,0,!0),i=[];return r(this._items,function(n,r){n=this._item(r);var s=n[t].apply(n,e);s!==undefined&&s!==n&&(i[r]=s)},this),i.length?i:this}})}}),e.ArrayList=s},"3.9.0",{requires:["yui-base"]}); diff --git a/src/errors/static/js/yui/build/arraylist/arraylist.js b/src/errors/static/js/yui/build/arraylist/arraylist.js new file mode 100644 index 00000000..e2afef96 --- /dev/null +++ b/src/errors/static/js/yui/build/arraylist/arraylist.js @@ -0,0 +1,215 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('arraylist', function (Y, NAME) { + +/** + * Collection utilities beyond what is provided in the YUI core + * @module collection + * @submodule arraylist + */ + +var YArray = Y.Array, + YArray_each = YArray.each, + ArrayListProto; + +/** + * Generic ArrayList class for managing lists of items and iterating operations + * over them. The targeted use for this class is for augmentation onto a + * class that is responsible for managing multiple instances of another class + * (e.g. NodeList for Nodes). The recommended use is to augment your class with + * ArrayList, then use ArrayList.addMethod to mirror the API of the constituent + * items on the list's API. + * + * The default implementation creates immutable lists, but mutability can be + * provided via the arraylist-add submodule or by implementing mutation methods + * directly on the augmented class's prototype. + * + * @class ArrayList + * @constructor + * @param items { Array } array of items this list will be responsible for + */ +function ArrayList( items ) { + if ( items !== undefined ) { + this._items = Y.Lang.isArray( items ) ? items : YArray( items ); + } else { + // ||= to support lazy initialization from augment + this._items = this._items || []; + } +} + +ArrayListProto = { + /** + * Get an item by index from the list. Override this method if managing a + * list of objects that have a different public representation (e.g. Node + * instances vs DOM nodes). The iteration methods that accept a user + * function will use this method for access list items for operation. + * + * @method item + * @param i { Integer } index to fetch + * @return { mixed } the item at the requested index + */ + item: function ( i ) { + return this._items[i]; + }, + + /** + *

Execute a function on each item of the list, optionally providing a + * custom execution context. Default context is the item.

+ * + *

The callback signature is callback( item, index ).

+ * + * @method each + * @param fn { Function } the function to execute + * @param context { mixed } optional override 'this' in the function + * @return { ArrayList } this instance + * @chainable + */ + each: function ( fn, context ) { + YArray_each( this._items, function ( item, i ) { + item = this.item( i ); + + fn.call( context || item, item, i, this ); + }, this); + + return this; + }, + + /** + *

Execute a function on each item of the list, optionally providing a + * custom execution context. Default context is the item.

+ * + *

The callback signature is callback( item, index ).

+ * + *

Unlike each, if the callback returns true, the + * iteratation will stop.

+ * + * @method some + * @param fn { Function } the function to execute + * @param context { mixed } optional override 'this' in the function + * @return { Boolean } True if the function returned true on an item + */ + some: function ( fn, context ) { + return YArray.some( this._items, function ( item, i ) { + item = this.item( i ); + + return fn.call( context || item, item, i, this ); + }, this); + }, + + /** + * Finds the first index of the needle in the managed array of items. + * + * @method indexOf + * @param needle { mixed } The item to search for + * @return { Integer } Array index if found. Otherwise -1 + */ + indexOf: function ( needle ) { + return YArray.indexOf( this._items, needle ); + }, + + /** + * How many items are in this list? + * + * @method size + * @return { Integer } Number of items in the list + */ + size: function () { + return this._items.length; + }, + + /** + * Is this instance managing any items? + * + * @method isEmpty + * @return { Boolean } true if 1 or more items are being managed + */ + isEmpty: function () { + return !this.size(); + }, + + /** + * Provides an array-like representation for JSON.stringify. + * + * @method toJSON + * @return { Array } an array representation of the ArrayList + */ + toJSON: function () { + return this._items; + } +}; +// Default implementation does not distinguish between public and private +// item getter +/** + * Protected method for optimizations that may be appropriate for API + * mirroring. Similar in functionality to item, but is used by + * methods added with ArrayList.addMethod(). + * + * @method _item + * @protected + * @param i { Integer } Index of item to fetch + * @return { mixed } The item appropriate for pass through API methods + */ +ArrayListProto._item = ArrayListProto.item; + +// Mixed onto existing proto to preserve constructor NOT being an own property. +// This has bitten me when composing classes by enumerating, copying prototypes. +Y.mix(ArrayList.prototype, ArrayListProto); + +Y.mix( ArrayList, { + + /** + *

Adds a pass through method to dest (typically the prototype of a list + * class) that calls the named method on each item in the list with + * whatever parameters are passed in. Allows for API indirection via list + * instances.

+ * + *

Accepts a single string name or an array of string names.

+ * + *
list.each( function ( item ) {
+     *     item.methodName( 1, 2, 3 );
+     * } );
+     * // becomes
+     * list.methodName( 1, 2, 3 );
+ * + *

Additionally, the pass through methods use the item retrieved by the + * _item method in case there is any special behavior that is + * appropriate for API mirroring.

+ * + *

If the iterated method returns a value, the return value from the + * added method will be an array of values with each value being at the + * corresponding index for that item. If the iterated method does not + * return a value, the added method will be chainable. + * + * @method addMethod + * @static + * @param dest {Object} Object or prototype to receive the iterator method + * @param name {String|String[]} Name of method of methods to create + */ + addMethod: function ( dest, names ) { + + names = YArray( names ); + + YArray_each( names, function ( name ) { + dest[ name ] = function () { + var args = YArray( arguments, 0, true ), + ret = []; + + YArray_each( this._items, function ( item, i ) { + item = this._item( i ); + + var result = item[ name ].apply( item, args ); + + if ( result !== undefined && result !== item ) { + ret[i] = result; + } + }, this); + + return ret.length ? ret : this; + }; + } ); + } +} ); + +Y.ArrayList = ArrayList; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/arraysort/arraysort-coverage.js b/src/errors/static/js/yui/build/arraysort/arraysort-coverage.js new file mode 100644 index 00000000..61ae002f --- /dev/null +++ b/src/errors/static/js/yui/build/arraysort/arraysort-coverage.js @@ -0,0 +1,119 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/arraysort/arraysort.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/arraysort/arraysort.js", + code: [] +}; +_yuitest_coverage["build/arraysort/arraysort.js"].code=["YUI.add('arraysort', function (Y, NAME) {","","/**","Provides a case-insenstive comparator which can be used for array sorting.","","@module arraysort","*/","","var LANG = Y.Lang,"," ISVALUE = LANG.isValue,"," ISSTRING = LANG.isString;","","/**","Provides a case-insenstive comparator which can be used for array sorting.","","@class ArraySort","*/","","Y.ArraySort = {",""," /**"," Comparator function for simple case-insensitive sorting of an array of"," strings.",""," @method compare"," @param a {Object} First sort argument."," @param b {Object} Second sort argument."," @param desc {Boolean} `true` if sort direction is descending, `false` if"," sort direction is ascending."," @return {Boolean} -1 when a < b. 0 when a == b. 1 when a > b."," */"," compare: function(a, b, desc) {"," if(!ISVALUE(a)) {"," if(!ISVALUE(b)) {"," return 0;"," }"," else {"," return 1;"," }"," }"," else if(!ISVALUE(b)) {"," return -1;"," }",""," if(ISSTRING(a)) {"," a = a.toLowerCase();"," }"," if(ISSTRING(b)) {"," b = b.toLowerCase();"," }"," if(a < b) {"," return (desc) ? 1 : -1;"," }"," else if (a > b) {"," return (desc) ? -1 : 1;"," }"," else {"," return 0;"," }"," }","","};","","","}, '3.9.0', {\"requires\": [\"yui-base\"]});"]; +_yuitest_coverage["build/arraysort/arraysort.js"].lines = {"1":0,"9":0,"19":0,"33":0,"34":0,"35":0,"38":0,"41":0,"42":0,"45":0,"46":0,"48":0,"49":0,"51":0,"52":0,"54":0,"55":0,"58":0}; +_yuitest_coverage["build/arraysort/arraysort.js"].functions = {"compare:32":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/arraysort/arraysort.js"].coveredLines = 18; +_yuitest_coverage["build/arraysort/arraysort.js"].coveredFunctions = 2; +_yuitest_coverline("build/arraysort/arraysort.js", 1); +YUI.add('arraysort', function (Y, NAME) { + +/** +Provides a case-insenstive comparator which can be used for array sorting. + +@module arraysort +*/ + +_yuitest_coverfunc("build/arraysort/arraysort.js", "(anonymous 1)", 1); +_yuitest_coverline("build/arraysort/arraysort.js", 9); +var LANG = Y.Lang, + ISVALUE = LANG.isValue, + ISSTRING = LANG.isString; + +/** +Provides a case-insenstive comparator which can be used for array sorting. + +@class ArraySort +*/ + +_yuitest_coverline("build/arraysort/arraysort.js", 19); +Y.ArraySort = { + + /** + Comparator function for simple case-insensitive sorting of an array of + strings. + + @method compare + @param a {Object} First sort argument. + @param b {Object} Second sort argument. + @param desc {Boolean} `true` if sort direction is descending, `false` if + sort direction is ascending. + @return {Boolean} -1 when a < b. 0 when a == b. 1 when a > b. + */ + compare: function(a, b, desc) { + _yuitest_coverfunc("build/arraysort/arraysort.js", "compare", 32); +_yuitest_coverline("build/arraysort/arraysort.js", 33); +if(!ISVALUE(a)) { + _yuitest_coverline("build/arraysort/arraysort.js", 34); +if(!ISVALUE(b)) { + _yuitest_coverline("build/arraysort/arraysort.js", 35); +return 0; + } + else { + _yuitest_coverline("build/arraysort/arraysort.js", 38); +return 1; + } + } + else {_yuitest_coverline("build/arraysort/arraysort.js", 41); +if(!ISVALUE(b)) { + _yuitest_coverline("build/arraysort/arraysort.js", 42); +return -1; + }} + + _yuitest_coverline("build/arraysort/arraysort.js", 45); +if(ISSTRING(a)) { + _yuitest_coverline("build/arraysort/arraysort.js", 46); +a = a.toLowerCase(); + } + _yuitest_coverline("build/arraysort/arraysort.js", 48); +if(ISSTRING(b)) { + _yuitest_coverline("build/arraysort/arraysort.js", 49); +b = b.toLowerCase(); + } + _yuitest_coverline("build/arraysort/arraysort.js", 51); +if(a < b) { + _yuitest_coverline("build/arraysort/arraysort.js", 52); +return (desc) ? 1 : -1; + } + else {_yuitest_coverline("build/arraysort/arraysort.js", 54); +if (a > b) { + _yuitest_coverline("build/arraysort/arraysort.js", 55); +return (desc) ? -1 : 1; + } + else { + _yuitest_coverline("build/arraysort/arraysort.js", 58); +return 0; + }} + } + +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/arraysort/arraysort-debug.js b/src/errors/static/js/yui/build/arraysort/arraysort-debug.js new file mode 100644 index 00000000..83c77a10 --- /dev/null +++ b/src/errors/static/js/yui/build/arraysort/arraysort-debug.js @@ -0,0 +1,66 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('arraysort', function (Y, NAME) { + +/** +Provides a case-insenstive comparator which can be used for array sorting. + +@module arraysort +*/ + +var LANG = Y.Lang, + ISVALUE = LANG.isValue, + ISSTRING = LANG.isString; + +/** +Provides a case-insenstive comparator which can be used for array sorting. + +@class ArraySort +*/ + +Y.ArraySort = { + + /** + Comparator function for simple case-insensitive sorting of an array of + strings. + + @method compare + @param a {Object} First sort argument. + @param b {Object} Second sort argument. + @param desc {Boolean} `true` if sort direction is descending, `false` if + sort direction is ascending. + @return {Boolean} -1 when a < b. 0 when a == b. 1 when a > b. + */ + compare: function(a, b, desc) { + if(!ISVALUE(a)) { + if(!ISVALUE(b)) { + return 0; + } + else { + return 1; + } + } + else if(!ISVALUE(b)) { + return -1; + } + + if(ISSTRING(a)) { + a = a.toLowerCase(); + } + if(ISSTRING(b)) { + b = b.toLowerCase(); + } + if(a < b) { + return (desc) ? 1 : -1; + } + else if (a > b) { + return (desc) ? -1 : 1; + } + else { + return 0; + } + } + +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/arraysort/arraysort-min.js b/src/errors/static/js/yui/build/arraysort/arraysort-min.js new file mode 100644 index 00000000..6239a378 --- /dev/null +++ b/src/errors/static/js/yui/build/arraysort/arraysort-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("arraysort",function(e,t){var n=e.Lang,r=n.isValue,i=n.isString;e.ArraySort={compare:function(e,t,n){return r(e)?r(t)?(i(e)&&(e=e.toLowerCase()),i(t)&&(t=t.toLowerCase()),et?n?-1:1:0):-1:r(t)?1:0}}},"3.9.0",{requires:["yui-base"]}); diff --git a/src/errors/static/js/yui/build/arraysort/arraysort.js b/src/errors/static/js/yui/build/arraysort/arraysort.js new file mode 100644 index 00000000..83c77a10 --- /dev/null +++ b/src/errors/static/js/yui/build/arraysort/arraysort.js @@ -0,0 +1,66 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('arraysort', function (Y, NAME) { + +/** +Provides a case-insenstive comparator which can be used for array sorting. + +@module arraysort +*/ + +var LANG = Y.Lang, + ISVALUE = LANG.isValue, + ISSTRING = LANG.isString; + +/** +Provides a case-insenstive comparator which can be used for array sorting. + +@class ArraySort +*/ + +Y.ArraySort = { + + /** + Comparator function for simple case-insensitive sorting of an array of + strings. + + @method compare + @param a {Object} First sort argument. + @param b {Object} Second sort argument. + @param desc {Boolean} `true` if sort direction is descending, `false` if + sort direction is ascending. + @return {Boolean} -1 when a < b. 0 when a == b. 1 when a > b. + */ + compare: function(a, b, desc) { + if(!ISVALUE(a)) { + if(!ISVALUE(b)) { + return 0; + } + else { + return 1; + } + } + else if(!ISVALUE(b)) { + return -1; + } + + if(ISSTRING(a)) { + a = a.toLowerCase(); + } + if(ISSTRING(b)) { + b = b.toLowerCase(); + } + if(a < b) { + return (desc) ? 1 : -1; + } + else if (a > b) { + return (desc) ? -1 : 1; + } + else { + return 0; + } + } + +}; + + +}, '3.9.0', {"requires": ["yui-base"]}); diff --git a/src/errors/static/js/yui/build/assets/skins/sam/arrows.png b/src/errors/static/js/yui/build/assets/skins/sam/arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..2942681f4ee260f402a08dd74ba418fd971451d3 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^Q9#Vk!3-pWO*Kk@lw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JVjsTw!*Bv`{q@<)ICns;;z8$3Bo!=5jv6ck+1^)*EhTq%x zf`I}Ro-U3d6}O&*IPx_Za4_%szyGGLn}h4I)K0fump!}_Q?5*7t&NnDT^-}?E)^Da z;mHEWW1a2+rMXPblK<{4&3Gi$we!=uvkS|fM2XB>-^zNu?orIiuPd|N%(SPk-SIBw y)0gMv3Ga7rP`oL2XIs0^Z{F&^)9q7)6BukJiUe3qn4J!E1B0ilpUXO@geCwLtzz{6 literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/autocomplete-list.css b/src/errors/static/js/yui/build/assets/skins/sam/autocomplete-list.css new file mode 100644 index 00000000..f5ee83cb --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/autocomplete-list.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-aclist{position:absolute;z-index:1}.yui3-aclist-hidden{visibility:hidden}.yui3-aclist-aria{left:-9999px;position:absolute}.yui3-aclist-list{list-style:none;margin:0;overflow:hidden;padding:0}.yui3-aclist-item{cursor:pointer;list-style:none;padding:2px 5px}.yui3-aclist-item-active{outline:#afafaf dotted thin}.yui3-skin-sam .yui3-aclist-content{background:#fff;border:1px solid #afafaf;-moz-box-shadow:1px 1px 4px rgba(0,0,0,0.58);-webkit-box-shadow:1px 1px 4px rgba(0,0,0,0.58);box-shadow:1px 1px 4px rgba(0,0,0,0.58)}.yui3-skin-sam .yui3-aclist-item-hover{background:#bfdaff}.yui3-skin-sam .yui3-aclist-item-active{background:#2647a0;color:#fff;outline:0}#yui3-css-stamp.skin-sam-autocomplete-list{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/bg.png b/src/errors/static/js/yui/build/assets/skins/sam/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..fd11e03de2428deb360c1e3fad1ccd7f271ccce1 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^%s?E#!2~3O10ps8DF;s%$B>G+w_S=t42A;DR)78< z_q`-+T{usko|&iJ_1J&* w#1z9E30G$33EYQTOp-Db+?2z3TTGZ3!WgRm?u^q}4%Efq>FVdQ&MBb@0G4GM%K!iX literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/horizontal-menu-submenu-indicator.png b/src/errors/static/js/yui/build/assets/skins/sam/horizontal-menu-submenu-indicator.png new file mode 100644 index 0000000000000000000000000000000000000000..a2482ac792d9259db94b03aa68e24cb796a098da GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~d!3-ofWcl9%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jir4~tLR^9Ly*K~=?))?Z$YLr9@(cdY@N~O@7mz3K>Eakt zaVsgIfx%58A;IM-Gpj`44+TcI6gy>y21W+fO$>(LUl!~JDrN9=^>bP0l+XkK*R(D4 literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/horizontal-menu-submenu-toggle.png b/src/errors/static/js/yui/build/assets/skins/sam/horizontal-menu-submenu-toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..4379f817d22fde27b00307a587f70e0eb8762113 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^{6K8P!2~3E0>tuwRGp`bV@O3@@}1Jh_RJR>IyFKU zuW}Ea%oGtZ(B6aE.yui3-menu-content>ul:after{content:"";display:block;clear:both;line-height:0;font-size:0;visibility:hidden}.yui3-menu-content{*zoom:1}.yui3-menu-hidden .yui3-menu-content{*zoom:normal}.yui3-menuitem-content,.yui3-menu-label{_zoom:1}.yui3-menu-hidden .yui3-menuitem-content,.yui3-menu-hidden .yui3-menu-label{_zoom:normal}.yui3-skin-sam .yui3-menu-content,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content{font-size:93%;line-height:1.5;*line-height:1.45;border:solid 1px #808080;background:#fff;padding:3px 0}.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content{font-size:100%}.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-content{line-height:2;*line-height:1.9;background:url(sprite.png) repeat-x 0 0;padding:0}.yui3-skin-sam .yui3-menu ul,.yui3-skin-sam .yui3-menu ul ul{margin-top:3px;padding-top:3px;border-top:solid 1px #ccc}.yui3-skin-sam .yui3-menu ul.first-of-type{border:0;margin:0;padding:0}.yui3-skin-sam .yui3-menu-horizontal ul{padding:0;margin:0;border:0}.yui3-skin-sam .yui3-menu li,.yui3-skin-sam .yui3-menu .yui3-menu li{_border-bottom:solid 1px #fff}.yui3-skin-sam .yui3-menu-horizontal li{_border-bottom:0}.yui3-skin-sam .yui3-menubuttonnav li{border-right:solid 1px #ccc}.yui3-skin-sam .yui3-splitbuttonnav li{border-right:solid 1px #808080}.yui3-skin-sam .yui3-menubuttonnav li li,.yui3-skin-sam .yui3-splitbuttonnav li li{border-right:0}.yui3-skin-sam .yui3-menu-label,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label,.yui3-skin-sam .yui3-menuitem-content,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menuitem-content{padding:0 1em;color:#000;text-decoration:none;cursor:default;float:none;border:0;margin:0}.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label,.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content{padding:0 10px;border-style:solid;border-color:#808080;border-width:1px 0;margin:-1px 0;float:left;width:auto}.yui3-skin-sam .yui3-menu-label,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label{background:url(vertical-menu-submenu-indicator.png) right center no-repeat}.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label{background:url(sprite.png) repeat-x 0 0}.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label,.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label{background-image:none}.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label{padding-right:0}.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label em{font-style:normal;padding-right:20px;display:block;background:url(horizontal-menu-submenu-indicator.png) right center no-repeat}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label{padding:0}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label a{float:left;width:auto;color:#000;text-decoration:none;cursor:default;padding:0 5px 0 10px}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label .yui3-menu-toggle{padding:0;border-left:solid 1px #ccc;width:15px;overflow:hidden;text-indent:-1000px;background:url(horizontal-menu-submenu-indicator.png) 3px center no-repeat}.yui3-skin-sam .yui3-menu-label-active,.yui3-skin-sam .yui3-menu-label-menuvisible,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-active,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-menuvisible{background-color:#b3d4ff}.yui3-skin-sam .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content{background-image:none;background-color:#b3d4ff;border-left-width:0;margin-left:0}.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-active,.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-menuvisible{border-color:#7d98b8;background:url(sprite.png) repeat-x 0 -1700px}.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label-active,.yui3-skin-sam .yui3-menubuttonnav .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label-menuvisible,.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-active,.yui3-skin-sam .yui3-splitbuttonnav .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible{border-left-width:1px;margin-left:-1px}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible{border-color:#808080;background:transparent}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible .yui3-menu-toggle{border-color:#7d98b8;background:url(horizontal-menu-submenu-toggle.png) left center no-repeat}#yui3-css-stamp.skin-sam-node-menunav{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/overlay.css b/src/errors/static/js/yui/build/assets/skins/sam/overlay.css new file mode 100644 index 00000000..eaf388f6 --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/overlay.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-overlay{position:absolute}.yui3-overlay-hidden{visibility:hidden}.yui3-widget-tmp-forcesize .yui3-overlay-content{overflow:hidden!important}#yui3-css-stamp.skin-sam-overlay{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/panel.css b/src/errors/static/js/yui/build/assets/skins/sam/panel.css new file mode 100644 index 00000000..d3316c9d --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/panel.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-panel{position:absolute}.yui3-panel-hidden{visibility:hidden}.yui3-widget-tmp-forcesize .yui3-panel-content{overflow:hidden!important}.yui3-panel .yui3-widget-hd{position:relative}.yui3-panel .yui3-widget-hd .yui3-widget-buttons{position:absolute;top:0;right:0}.yui3-panel .yui3-widget-ft .yui3-widget-buttons{display:inline-block;*display:inline;zoom:1}.yui3-skin-sam .yui3-panel-content{-webkit-box-shadow:0 0 5px #333;-moz-box-shadow:0 0 5px #333;box-shadow:0 0 5px #333;border:1px solid black;background:white}.yui3-skin-sam .yui3-panel .yui3-widget-hd{padding:8px 28px 8px 8px;min-height:13px;_height:13px;color:white;background-color:#3961c5;background:-moz-linear-gradient(0% 100% 90deg,#2647a0 7%,#3d67ce 50%,#426fd9 100%);background:-webkit-gradient(linear,left bottom,left top,from(#2647a0),color-stop(0.07,#2647a0),color-stop(0.5,#3d67ce),to(#426fd9))}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-widget-buttons{padding:8px}.yui3-skin-sam .yui3-panel .yui3-widget-bd{padding:10px}.yui3-skin-sam .yui3-panel .yui3-widget-ft{background:#edf5ff;padding:8px;text-align:right}.yui3-skin-sam .yui3-panel .yui3-widget-ft .yui3-button{margin-left:8px}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-button-close{background:transparent;filter:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;width:13px;height:13px;padding:0;overflow:hidden;vertical-align:top;*font-size:0;*line-height:0;*letter-spacing:-1000px;*color:#86a5ec;*background:url(sprite_icons.png) no-repeat 1px 1px}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-button-close:before{content:url(sprite_icons.png);display:inline-block;text-align:center;font-size:0;line-height:0;width:13px;margin:1px 0 0 1px}.yui3-skin-sam .yui3-panel-hidden .yui3-widget-hd .yui3-button-close{display:none}#yui3-css-stamp.skin-sam-panel{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/rail-x-lines.png b/src/errors/static/js/yui/build/assets/skins/sam/rail-x-lines.png new file mode 100644 index 0000000000000000000000000000000000000000..45c84288feef64ec6f9ff1988dad84898298cb36 GIT binary patch literal 3656 zcmV-O4!7}%P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}00093P)t-s6ciK{6%`g178e&67#J8C85tTH z8XFrM92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021 zEG#T7EiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!- zJv}}?K0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)Wt zPESuyP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5d zU|?WjVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&O zadC2Ta&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8 zf`fyDgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@ zl$4Z}m6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*! zrKP5(rl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dk zwzs#pxVX5vxw*Q!y1To(yu7@dCU z$jHda$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~ z>g((4?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF) z{QUg={r&#_{{R2~VpjXw00007bW%=J|NsC0|Nj6QO9Ms#002ZuL_t(|+SHM;4ZtuA z!<0(Q|0j2F;2}$pt>r{`5I|V7kxn`zPd=4$L?`XtH9wC&OX@Xw&_Z==+KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}00093P)t-s_V)Jg@9*;R^2^K1;^N}}|NjOC1_uWR2nYxX z2?+`c3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH z8XFrM92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021 zEG#T7EiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!- zJv}}?K0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)Wt zPESuyP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5d zU|?WjVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&O zadC2Ta&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8 zf`fyDgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@ zl$4Z}m6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*! zrKP5(rl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dk zwzs#pxVX5vxw*Q!y1To(yu7@dCU z$jHda$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~ z>g((4?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF) z{QUg={r&#_{{R2~&kn&C00006bW%=J|NsC0{{XYUq`v?F05nNNK~#9!yv?xzfIt9) zzzE6yD_i^mYGHFFWZRbKsu}>&w$0nZH!sx)ko@>nO#phf_W;WO1eleFS-b!M002ov JPDHLkV1jPj-~a#s literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/rail-y-lines.png b/src/errors/static/js/yui/build/assets/skins/sam/rail-y-lines.png new file mode 100644 index 0000000000000000000000000000000000000000..841c970887139d3ccb6ef5dc10c60a2d177a1a3f GIT binary patch literal 3642 zcmV-A4#n|_P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}00093P)t-s6ciK{6%`g178e&67#J8C85tTH z8XFrM92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021 zEG#T7EiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!- zJv}}?K0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)Wt zPESuyP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5d zU|?WjVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&O zadC2Ta&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8 zf`fyDgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@ zl$4Z}m6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*! zrKP5(rl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dk zwzs#pxVX5vxw*Q!y1To(yu7@dCU z$jHda$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~ z>g((4?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF) z{QUg={r&#_{{R2~VpjXw00007bW%=J|NsC0|Nj6QO9Ms#001^gL_t(|+G1d1U|?Wl zV`F1sW@SSMjI4|pVl2$83`lHj@48~^|S M07*qoM6N<$f|}CWjsO4v literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/rail-y.png b/src/errors/static/js/yui/build/assets/skins/sam/rail-y.png new file mode 100644 index 0000000000000000000000000000000000000000..2bec78ab67abb148c5f037f680bebc88da58d522 GIT binary patch literal 3629 zcmV+|4$|?7P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}00093P)t-s_V)Jg@9*;R^2^K1;^N}}|NjOC1_uWR2nYxX z2?+`c3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH z8XFrM92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021 zEG#T7EiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!- zJv}}?K0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)Wt zPESuyP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5d zU|?WjVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&O zadC2Ta&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8 zf`fyDgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@ zl$4Z}m6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*! zrKP5(rl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dk zwzs#pxVX5vxw*Q!y1To(yu7@dCU z$jHda$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~ z>g((4?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF) z{QUg={r&#_{{R2~&kn&C00006bW%=J|NsC0{{XYUq`v?F04hmDK~#9!Vqk>=W+oO^ zbilyEfFZ`rgb>802Zz|8)x*fl00000|NjF3SGWY21;|CL00000NkvXXu0mjfyE53K literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/resize-base.css b/src/errors/static/js/yui/build/assets/skins/sam/resize-base.css new file mode 100644 index 00000000..774cc8bd --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/resize-base.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-resize,.yui3-resize-wrapper{z-index:0;zoom:1}.yui3-resize-handle{position:absolute;display:block;z-index:100;zoom:1}.yui3-resize-proxy{position:absolute;border:1px dashed #000;position:absolute;z-index:10000}.yui3-resize-hidden-handles .yui3-resize-handle{opacity:0;filter:alpha(opacity=0)}.yui3-resize-handle-t,.yui3-resize-handle-b{width:100%;left:0;height:6px}.yui3-resize-handle-l,.yui3-resize-handle-r{height:100%;top:0;width:6px}.yui3-resize-handle-t{cursor:n-resize;top:0}.yui3-resize-handle-b{cursor:s-resize;bottom:0}.yui3-resize-handle-l{cursor:w-resize;left:0}.yui3-resize-handle-r{cursor:e-resize;right:0}.yui3-resize-handle-inner{position:absolute;zoom:1}@media only screen and (min-device-width :320px) and (max-device-width :480px){.yui3-resize-handle-inner:after{content:"";width:40px;height:40px;position:absolute}.yui3-resize-handle-inner-r,.yui3-resize-handle-inner-l,.yui3-resize-handle-inner-t,.yui3-resize-handle-inner-b,.yui3-resize-handle-inner-tr,.yui3-resize-handle-inner-br,.yui3-resize-handle-inner-tl,.yui3-resize-handle-inner-bl{overflow:visible!important}.yui3-resize-handle-inner-r:after{top:-12px;right:0}.yui3-resize-handle-inner-l:after{top:-12px;left:0}.yui3-resize-handle-inner-t:after{top:0;left:-12px}.yui3-resize-handle-inner-b:after{bottom:0;left:-12px}.yui3-resize-handle-inner-tr:after{top:0;right:0}.yui3-resize-handle-inner-br:after{bottom:0;right:0}.yui3-resize-handle-inner-tl:after{top:0;left:0}.yui3-resize-handle-inner-bl:after{bottom:0;left:0}}@media only screen and (min-device-width :768px) and (max-device-width :1024px){.yui3-resize-handle-inner:after{content:"";width:30px;height:30px;position:absolute}.yui3-resize-handle-inner-r,.yui3-resize-handle-inner-l,.yui3-resize-handle-inner-t,.yui3-resize-handle-inner-b,.yui3-resize-handle-inner-tr,.yui3-resize-handle-inner-br,.yui3-resize-handle-inner-tl,.yui3-resize-handle-inner-bl{overflow:visible!important}.yui3-resize-handle-inner-r:after{top:-6px;right:0}.yui3-resize-handle-inner-l:after{top:-6px;left:0}.yui3-resize-handle-inner-t:after{top:0;left:-6px}.yui3-resize-handle-inner-b:after{bottom:0;left:-6px}.yui3-resize-handle-inner-tr:after{top:0;right:0}.yui3-resize-handle-inner-br:after{bottom:0;right:0}.yui3-resize-handle-inner-tl:after{top:0;left:0}.yui3-resize-handle-inner-bl:after{bottom:0;left:0}}.yui3-resize-handle-inner-t,.yui3-resize-handle-inner-b{margin-left:-8px;left:50%}.yui3-resize-handle-inner-l,.yui3-resize-handle-inner-r{margin-top:-8px;top:50%}.yui3-resize-handle-inner-t{top:-4px}.yui3-resize-handle-inner-b{bottom:-4px}.yui3-resize-handle-inner-l{left:-4px}.yui3-resize-handle-inner-r{right:-4px}.yui3-resize-handle-tr,.yui3-resize-handle-br,.yui3-resize-handle-tl,.yui3-resize-handle-bl{height:15px;width:15px;z-index:200}.yui3-resize-handle-tr{cursor:ne-resize;top:0;right:0}.yui3-resize-handle-tl{cursor:nw-resize;top:0;left:0}.yui3-resize-handle-br{cursor:se-resize;bottom:0;right:0}.yui3-resize-handle-bl{cursor:sw-resize;bottom:0;left:0}.yui3-resize-handle-inner-r,.yui3-resize-handle-inner-l,.yui3-resize-handle-inner-t,.yui3-resize-handle-inner-b,.yui3-resize-handle-inner-tr,.yui3-resize-handle-inner-br,.yui3-resize-handle-inner-tl,.yui3-resize-handle-inner-bl{background-repeat:no-repeat;background:url(arrows.png) no-repeat 0 0;display:block;height:15px;overflow:hidden;text-indent:-99999em;width:15px}.yui3-resize-handle-inner-br{background-position:-30px 0;bottom:-2px;right:-2px}.yui3-resize-handle-inner-tr{background-position:-58px 0;bottom:0;right:-2px}.yui3-resize-handle-inner-bl{background-position:-75px 0;bottom:-2px;right:-2px}.yui3-resize-handle-inner-tl{background-position:-47px 0;bottom:0;right:-2px}.yui3-resize-handle-inner-b,.yui3-resize-handle-inner-t{background-position:-15px 0}#yui3-css-stamp.skin-sam-resize-base{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/scrollview-base.css b/src/errors/static/js/yui/build/assets/skins/sam/scrollview-base.css new file mode 100644 index 00000000..6416b24a --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/scrollview-base.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-scrollview{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none}.yui3-scrollview-hidden{display:none}.yui3-scrollview-content{position:relative}.yui3-skin-sam .yui3-scrollview{-webkit-tap-highlight-color:rgba(255,255,255,0)}#yui3-css-stamp.skin-sam-scrollview-base{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/scrollview-list.css b/src/errors/static/js/yui/build/assets/skins/sam/scrollview-list.css new file mode 100644 index 00000000..58b1ead7 --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/scrollview-list.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-skin-sam .yui3-scrollview{-webkit-tap-highlight-color:rgba(255,255,255,0)}.yui3-skin-sam .yui3-scrollview{background-color:white}.yui3-skin-sam .yui3-scrollview-vert .yui3-scrollview-content .yui3-scrollview-item{*zoom:1}.yui3-skin-sam .yui3-scrollview-vert .yui3-scrollview-content .yui3-scrollview-list{*zoom:1;list-style:none;padding:0;margin:0}.yui3-skin-sam .yui3-scrollview-vert .yui3-scrollview-content{border-top:0;background-color:white;font-family:HelveticaNeue,arial,helvetica,clean,sans-serif;color:black}.yui3-skin-sam .yui3-scrollview-vert .yui3-scrollview-content .yui3-scrollview-item{border-bottom:1px solid #303030;padding:15px 20px 16px;font-size:100%;font-weight:bold;background-color:white;cursor:pointer}#yui3-css-stamp.skin-sam-scrollview-list{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/scrollview-scrollbars.css b/src/errors/static/js/yui/build/assets/skins/sam/scrollview-scrollbars.css new file mode 100644 index 00000000..8d21334c --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/scrollview-scrollbars.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-scrollview-scrollbar{opacity:1;position:absolute;width:6px;height:10px}.yui3-scrollview-scrollbar{top:0;right:1px}.yui3-scrollview-scrollbar-horiz{top:auto;height:8px;width:20px;bottom:1px;left:0}.yui3-scrollview-scrollbar .yui3-scrollview-child{position:absolute;right:0;display:block;width:100%;height:4px}.yui3-scrollview-scrollbar .yui3-scrollview-first{top:0}.yui3-scrollview-scrollbar .yui3-scrollview-last{top:0}.yui3-scrollview-scrollbar .yui3-scrollview-middle{position:absolute;top:4px;height:1px}.yui3-scrollview-scrollbar-horiz .yui3-scrollview-child{display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline;top:0;left:0;bottom:auto;right:auto}.yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{width:4px;height:6px}.yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{top:0;left:4px;width:1px;height:6px}.yui3-scrollview-scrollbar-vert-basic{height:auto}.yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child{position:static;_overflow:hidden;_line-height:4px}.yui3-scrollview-scrollbar-horiz-basic{width:auto;white-space:nowrap;line-height:6px;_overflow:hidden}.yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{position:static;padding:0;margin:0;top:auto;left:auto;right:auto;bottom:auto}.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}#yui3-css-stamp.skin-sam-scrollview-scrollbars{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/skin.css b/src/errors/static/js/yui/build/assets/skins/sam/skin.css new file mode 100644 index 00000000..44d097a4 --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/skin.css @@ -0,0 +1,29 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-aclist{position:absolute;z-index:1}.yui3-aclist-hidden{visibility:hidden}.yui3-aclist-aria{left:-9999px;position:absolute}.yui3-aclist-list{list-style:none;margin:0;overflow:hidden;padding:0}.yui3-aclist-item{cursor:pointer;list-style:none;padding:2px 5px}.yui3-aclist-item-active{outline:#afafaf dotted thin}.yui3-skin-sam .yui3-aclist-content{background:#fff;border:1px solid #afafaf;-moz-box-shadow:1px 1px 4px rgba(0,0,0,0.58);-webkit-box-shadow:1px 1px 4px rgba(0,0,0,0.58);box-shadow:1px 1px 4px rgba(0,0,0,0.58)}.yui3-skin-sam .yui3-aclist-item-hover{background:#bfdaff}.yui3-skin-sam .yui3-aclist-item-active{background:#2647a0;color:#fff;outline:0}#yui3-css-stamp.skin-sam-autocomplete-list{display:none} +.yui3-calendar-pane{width:100%}.yui3-calendar-grid{width:100%}.yui3-calendar-column-hidden,.yui3-calendar-hidden{display:none}.yui3-skin-sam .yui3-calendar-content{padding:10px;color:#000;border:1px solid gray;background:#f2f2f2;background:-moz-linear-gradient(top,#f9f9f9 0,#f2f2f2 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#f9f9f9),color-stop(100%,#f2f2f2));background:-webkit-linear-gradient(top,#f9f9f9 0,#f2f2f2 100%);background:-o-linear-gradient(top,#f9f9f9 0,#f2f2f2 100%);background:-ms-linear-gradient(top,#f9f9f9 0,#f2f2f2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9',endColorstr='#f2f2f2',GradientType=0);background:linear-gradient(top,#f9f9f9 0,#f2f2f2 100%);-moz-border-radius:5px;border-radius:5px}.yui3-skin-sam .yui3-calendar-grid{padding:5px;border-collapse:collapse}.yui3-skin-sam .yui3-calendar-header{padding-bottom:10px}.yui3-skin-sam .yui3-calendar-header-label{margin:0;font-size:1em;font-weight:bold}.yui3-skin-sam .yui3-calendar-day,.yui3-skin-sam .yui3-calendar-prevmonth-day,.yui3-skin-sam .yui3-calendar-nextmonth-day{padding:5px;border:1px solid #ccc;background:#fff;text-align:center}.yui3-skin-sam .yui3-calendar-day:hover{background:#06c;color:#fff}.yui3-skin-sam .yui3-calendar-selection-disabled,.yui3-skin-sam .yui3-calendar-selection-disabled:hover{color:#a6a6a6;background:#ccc}.yui3-skin-sam .yui3-calendar-weekday{font-weight:bold}.yui3-skin-sam .yui3-calendar-prevmonth-day,.yui3-skin-sam .yui3-calendar-nextmonth-day{color:#a6a6a6}.yui3-skin-sam .yui3-calendar-day{font-weight:bold}.yui3-skin-sam .yui3-calendar-day-selected{background-color:#b3d4ff;color:#000}.yui3-skin-sam .yui3-calendar-header-label{text-align:center}.yui3-skin-sam .yui3-calendar-left-grid{margin-right:1em}.yui3-skin-sam .yui3-calendar-right-grid{margin-left:1em}.yui3-skin-sam .yui3-calendar-day-highlighted{background-color:#dcdef5}.yui3-skin-sam .yui3-calendar-day-selected.yui3-calendar-day-highlighted{background-color:#758fbb}#yui3-css-stamp.skin-sam-calendar-base{display:none} +.yui3-calendar-column-hidden,.yui3-calendar-hidden{display:none}.yui3-calendar-day{cursor:pointer}.yui3-calendar-selection-disabled{cursor:default}.yui3-calendar-prevmonth-day{cursor:default}.yui3-calendar-nextmonth-day{cursor:default}.yui3-calendar-content:hover .yui3-calendar-day,.yui3-calendar-content:hover .yui3-calendar-prevmonth-day,.yui3-calendar-content:hover .yui3-calendar-nextmonth-day{-moz-user-select:none}.yui3-skin-sam .yui3-calendar-day-highlighted{background-color:#dcdef5}.yui3-skin-sam .yui3-calendar-day-selected.yui3-calendar-day-highlighted{background-color:#758fbb}#yui3-css-stamp.skin-sam-calendar{display:none} +.yui3-calendar-header{padding-left:15px;padding-right:15px}.yui3-calendar-header-label{width:100%}.yui3-calendarnav-prevmonth{cursor:pointer}.yui3-calendarnav-nextmonth{cursor:pointer}.yui3-skin-sam .yui3-calendarnav-prevmonth,.yui3-skin-sam .yui3-calendarnav-nextmonth{color:#000;width:12px;height:14px;background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAYAAAA1+Nx+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKNJREFUeNpiYCAeSAPxUiiWZqAi4ATiaiD+DMT/ofgzVIyTUsMDgfghksHo+CFUDcnAAIgP4DEYHR+A6iEIhIB4GgkGo+NpUDMwADMQFwHxBwoMh+EPULOYYYZ7APFVKhiMjkFmejBBLWFjoD5gQ+dQO4iwOloUiOdQYPgcqBkDl0zRQRQRGS2KGkVFHRB/QzL4G1SMk5qpQg6psJMjVhNAgAEAH+qPqeiPEUsAAAAASUVORK5CYII=);background-repeat:no-repeat}.yui3-skin-sam .yui3-calendarnav-prevmonth:hover,.yui3-skin-sam .yui3-calendarnav-nextmonth:hover{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAYAAAA1+Nx+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPpJREFUeNpi/P//PwMxQD9jszSQ6oJyyy7O8H1KjD5GQhYADeYEUkVAXAHEPFDhL0DcAcR9QIu+k20B0PBAIDUBiOVwKHkExAVAS9aTZAHQYAOowfYMxIGDUIsu4LUAaLAQkGoB4kwG8sB0IK4BWvQOxQKgwcxAdj4Q1wExPwNl4CMQNwHxRKBFfxn10jd5ADm9QKzFQF1wDYiLmaAcNgbqA7CZTEBv7ADS2iDboN5joEIQgczSBpmNHsmiQKodiJPJNHwuEFcCDX49MMkUi0VRUB/hy2ggFy+jtKgohRYVnFDh79CiopuiogLNIjmobxigrn5EjD6AAAMAok9vhfHG8wQAAAAASUVORK5CYII=);color:#06c}.yui3-skin-sam .yui3-calendarnav-month-disabled,.yui3-skin-sam .yui3-calendarnav-month-disabled:hover{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAYAAAA1+Nx+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQhJREFUeNqs0yGLAlEUhuHrKoIgCFbBJghb3F+g0WrVarEqLIhBEEFYWKNNMBktU4z6C5RNkwyCyWQSTPuOfCOCrHNnxwMPyOGe73DAiTmOYywrhy/9/sTBZujN4k0KPbioi6teKuqCmsKGSN/10+q5ehN6QQkrLJB/Mp/Xm5VmAhdkMcEGZWNfZc1MlPGwII42dmiZ/1dLGW1lXhdU8YNvZEz0yijLy6z6FyTN6yvpX7DEOzo4vSD4pCwvc+lfcMEYBUwjhE+VMVbmw7/oiCY+sA4RvNZMUxmB38EWFTSwfxK815uKZkJ/yXMU0cf5rn9Wr6g3f1bC4nwvbIAZRup1Ay671a8AAwC3OzOqxK+rkwAAAABJRU5ErkJggg==);cursor:default;color:#ccc}.yui3-skin-sam .yui3-calendarnav-prevmonth,.yui3-skin-sam .yui3-calendarnav-prevmonth:hover{background-position:0 0;margin-left:-12px}.yui3-skin-sam .yui3-calendarnav-nextmonth,.yui3-skin-sam .yui3-calendarnav-nextmonth:hover{background-position:-12px 0;margin-right:-12px}.yui3-skin-sam .yui3-calendarnav-prevmonth span,.yui3-skin-sam .yui3-calendarnav-nextmonth span{display:none;*display:block}#yui3-css-stamp.skin-sam-calendarnavigator{display:none} +.yui3-skin-sam .yui3-console-ft .yui3-console-filters-categories,.yui3-skin-sam .yui3-console-ft .yui3-console-filters-sources{text-align:left;padding:5px 0;border:1px inset;margin:0 2px}.yui3-skin-sam .yui3-console-ft .yui3-console-filters-categories{background:#fff;border-bottom:2px ridge}.yui3-skin-sam .yui3-console-ft .yui3-console-filters-sources{background:#fff;margin-bottom:2px;border-top:0 none;border-bottom-right-radius:10px;border-bottom-left-radius:10px;-moz-border-radius-bottomright:10px;-moz-border-radius-bottomleft:10px;-webkit-border-bottom-right-radius:10px;-webkit-border-bottom-left-radius:10px}.yui3-skin-sam .yui3-console-filter-label{white-space:nowrap;margin-left:1ex}#yui3-css-stamp.skin-sam-console-filters{display:none} +.yui3-skin-sam .yui3-console-separate{position:absolute;right:1em;top:1em;z-index:999}.yui3-skin-sam .yui3-console-inline{display:-moz-inline-stack;display:inline-block;*display:inline;zoom:1;vertical-align:top}.yui3-skin-sam .yui3-console-inline .yui3-console-content{position:relative}.yui3-skin-sam .yui3-console-content{background:#777;_background:#d8d8da url(bg.png) repeat-x 0 0;font:normal 13px/1.3 Arial,sans-serif;text-align:left;border:1px solid #777;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px}.yui3-skin-sam .yui3-console-hd,.yui3-skin-sam .yui3-console-bd,.yui3-skin-sam .yui3-console-ft{position:relative}.yui3-skin-sam .yui3-console-hd,.yui3-skin-sam .yui3-console-ft .yui3-console-controls{text-align:right}.yui3-skin-sam .yui3-console-hd{background:#d8d8da url(bg.png) repeat-x 0 0;padding:1ex;border:1px solid transparent;_border:0 none;border-top-right-radius:10px;border-top-left-radius:10px;-moz-border-radius-topright:10px;-moz-border-radius-topleft:10px;-webkit-border-top-right-radius:10px;-webkit-border-top-left-radius:10px}.yui3-skin-sam .yui3-console-bd{background:#fff;border-top:1px solid #777;border-bottom:1px solid #777;color:#000;font-size:11px;overflow:auto;overflow-x:auto;overflow-y:scroll;_width:100%}.yui3-skin-sam .yui3-console-ft{background:#d8d8da url(bg.png) repeat-x 0 0;border:1px solid transparent;_border:0 none;border-bottom-right-radius:10px;border-bottom-left-radius:10px;-moz-border-radius-bottomright:10px;-moz-border-radius-bottomleft:10px;-webkit-border-bottom-right-radius:10px;-webkit-border-bottom-left-radius:10px}.yui3-skin-sam .yui3-console-controls{padding:4px 1ex;zoom:1}.yui3-skin-sam .yui3-console-title{color:#000;display:inline;float:left;font-weight:bold;font-size:13px;height:24px;line-height:24px;margin:0;padding-left:1ex}.yui3-skin-sam .yui3-console-pause-label{float:left}.yui3-skin-sam .yui3-console-button{line-height:1.3}.yui3-skin-sam .yui3-console-collapsed .yui3-console-bd,.yui3-skin-sam .yui3-console-collapsed .yui3-console-ft{display:none}.yui3-skin-sam .yui3-console-content.yui3-console-collapsed{-webkit-border-radius:0}.yui3-skin-sam .yui3-console-collapsed .yui3-console-hd{border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:0}.yui3-skin-sam .yui3-console-entry{border-bottom:1px solid #aaa;min-height:32px;_height:32px}.yui3-skin-sam .yui3-console-entry-meta{margin:0;overflow:hidden}.yui3-skin-sam .yui3-console-entry-content{margin:0;padding:0 1ex;white-space:pre-wrap;word-wrap:break-word}.yui3-skin-sam .yui3-console-entry-meta .yui3-console-entry-src{color:#000;font-style:italic;font-weight:bold;float:right;margin:2px 5px 0 0}.yui3-skin-sam .yui3-console-entry-meta .yui3-console-entry-time{color:#777;padding-left:1ex}.yui3-skin-sam .yui3-console-entry-warn .yui3-console-entry-meta .yui3-console-entry-time{color:#555}.yui3-skin-sam .yui3-console-entry-info .yui3-console-entry-meta .yui3-console-entry-cat,.yui3-skin-sam .yui3-console-entry-warn .yui3-console-entry-meta .yui3-console-entry-cat,.yui3-skin-sam .yui3-console-entry-error .yui3-console-entry-meta .yui3-console-entry-cat{display:none}.yui3-skin-sam .yui3-console-entry-warn{background:#aee url(warn_error.png) no-repeat -15px 15px}.yui3-skin-sam .yui3-console-entry-error{background:#ffa url(warn_error.png) no-repeat 5px -24px;color:#900}.yui3-skin-sam .yui3-console-entry-warn .yui3-console-entry-content,.yui3-skin-sam .yui3-console-entry-error .yui3-console-entry-content{padding-left:24px}.yui3-skin-sam .yui3-console-entry-cat{text-transform:uppercase;padding:1px 4px;background-color:#ccc}.yui3-skin-sam .yui3-console-entry-info .yui3-console-entry-cat{background-color:#ac2}.yui3-skin-sam .yui3-console-entry-warn .yui3-console-entry-cat{background-color:#e81}.yui3-skin-sam .yui3-console-entry-error .yui3-console-entry-cat{background-color:#b00;color:#fff}.yui3-skin-sam .yui3-console-hidden{display:none}#yui3-css-stamp.skin-sam-console{display:none} +.yui3-skin-sam .yui3-datatable-mask{position:absolute;z-index:9500}.yui3-datatable-tmp{position:absolute;left:-9000px}.yui3-datatable-scrollable .yui3-datatable-bd{overflow:auto}.yui3-datatable-scrollable .yui3-datatable-hd{overflow:hidden;position:relative}.yui3-datatable-scrollable .yui3-datatable-bd thead tr,.yui3-datatable-scrollable .yui3-datatable-bd thead th{position:absolute;left:-1500px}.yui3-datatable-scrollable tbody{-moz-outline:0}.yui3-skin-sam thead .yui3-datatable-sortable{cursor:pointer}.yui3-skin-sam thead .yui3-datatable-draggable{cursor:move}.yui3-datatable-coltarget{position:absolute;z-index:999}.yui3-datatable-hd{zoom:1}th.yui3-datatable-resizeable .yui3-datatable-resizerliner{position:relative}.yui3-datatable-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0)}.yui3-datatable-resizerproxy{visibility:hidden;position:absolute;z-index:9000;background-color:#CCC;opacity:0;filter:alpha(opacity=0)}th.yui3-datatable-hidden .yui3-datatable-liner,td.yui3-datatable-hidden .yui3-datatable-liner,th.yui3-datatable-hidden .yui3-datatable-resizer{display:none}.yui3-datatable-editor,.yui3-datatable-editor-shim{position:absolute;z-index:9000}.yui3-skin-sam .yui3-datatable table{margin:0;padding:0;font-family:arial;font-size:inherit;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7f7f7f}.yui3-skin-sam .yui3-datatable thead{border-spacing:0}.yui3-skin-sam .yui3-datatable caption{color:#000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0;text-align:center}.yui3-skin-sam .yui3-datatable th{background:#d8d8da url(sprite.png) repeat-x 0 0}.yui3-skin-sam .yui3-datatable th,.yui3-skin-sam .yui3-datatable th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom}.yui3-skin-sam .yui3-datatable th{margin:0;padding:0;border:0;border-right:1px solid #cbcbcb}.yui3-skin-sam .yui3-datatable tr.yui3-datatable-first td{border-top:1px solid #7f7f7f}.yui3-skin-sam .yui3-datatable th .yui3-datatable-liner{white-space:nowrap}.yui3-skin-sam .yui3-datatable-liner{margin:0;padding:0;padding:4px 10px 4px 10px;overflow:visible;border:0 solid black}.yui3-skin-sam .yui3-datatable-coltarget{width:5px;background-color:red}.yui3-skin-sam .yui3-datatable td{margin:0;padding:0;border:0;border-right:1px solid #cbcbcb;text-align:left}.yui3-skin-sam .yui3-datatable-list td{border-right:0}.yui3-skin-sam .yui3-datatable-resizer{width:6px}.yui3-skin-sam .yui3-datatable-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25)}.yui3-skin-sam .yui3-datatable-message{background-color:#FFF}.yui3-skin-sam .yui3-datatable-scrollable table{border:0}.yui3-skin-sam .yui3-datatable-scrollable .yui3-datatable-hd{border-left:1px solid #7f7f7f;border-top:1px solid #7f7f7f;border-right:1px solid #7f7f7f}.yui3-skin-sam .yui3-datatable-scrollable .yui3-datatable-bd{border-left:1px solid #7f7f7f;border-bottom:1px solid #7f7f7f;border-right:1px solid #7f7f7f;background-color:#FFF}.yui3-skin-sam .yui3-datatable-scrollable .yui3-datatable-data tr.yui3-datatable-last td{border-bottom:1px solid #7f7f7f}.yui3-skin-sam th.yui3-datatable-asc,.yui3-skin-sam th.yui3-datatable-desc{background:url(sprite.png) repeat-x 0 -100px}.yui3-skin-sam th.yui3-datatable-sortable .yui3-datatable-liner{padding-right:20px}.yui3-skin-sam th.yui3-datatable-asc .yui3-datatable-liner{background:url(dt-arrow-up.png) no-repeat right}.yui3-skin-sam th.yui3-datatable-desc .yui3-datatable-liner{background:url(dt-arrow-dn.png) no-repeat right}tbody .yui3-datatable-editable{cursor:pointer}.yui3-datatable-editor{text-align:left;background-color:#f2f2f2;border:1px solid #808080;padding:6px}.yui3-datatable-editor label{padding-left:4px;padding-right:6px}.yui3-datatable-editor .yui3-datatable-button{padding-top:6px;text-align:right}.yui3-datatable-editor .yui3-datatable-button button{background:url(sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px}.yui3-datatable-editor .yui3-datatable-button button.yui3-datatable-default{background:url(sprite.png) repeat-x 0 -1400px;background-color:#5584e0;border:1px solid #304369;color:#FFF}.yui3-datatable-editor .yui3-datatable-button button:hover{background:url(sprite.png) repeat-x 0 -1300px;color:#000}.yui3-datatable-editor .yui3-datatable-button button:active{background:url(sprite.png) repeat-x 0 -1700px;color:#000}.yui3-skin-sam .yui3-datatable td{background-color:transparent}.yui3-skin-sam tr.yui3-datatable-even td{background-color:#FFF}.yui3-skin-sam tr.yui3-datatable-odd td{background-color:#edf5ff}.yui3-skin-sam tr.yui3-datatable-even td.yui3-datatable-asc,.yui3-skin-sam tr.yui3-datatable-even td.yui3-datatable-desc{background-color:#edf5ff}.yui3-skin-sam tr.yui3-datatable-odd td.yui3-datatable-asc,.yui3-skin-sam tr.yui3-datatable-odd td.yui3-datatable-desc{background-color:#dbeaff}.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-even{background-color:#FFF}.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-odd{background-color:#FFF}.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-even td.yui3-datatable-asc,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-even td.yui3-datatable-desc{background-color:#edf5ff}.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-odd td.yui3-datatable-asc,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-odd td.yui3-datatable-desc{background-color:#edf5ff}.yui3-skin-sam th.yui3-datatable-highlighted,.yui3-skin-sam th.yui3-datatable-highlighted a{background-color:#b2d2ff}.yui3-skin-sam tr.yui3-datatable-highlighted,.yui3-skin-sam tr.yui3-datatable-highlighted td.yui3-datatable-asc,.yui3-skin-sam tr.yui3-datatable-highlighted td.yui3-datatable-desc,.yui3-skin-sam tr.yui3-datatable-even td.yui3-datatable-highlighted,.yui3-skin-sam tr.yui3-datatable-odd td.yui3-datatable-highlighted{cursor:pointer;background-color:#b2d2ff} +.yui3-skin-sam .yui3-datatable-list th.yui3-datatable-highlighted,.yui3-skin-sam .yui3-datatable-list th.yui3-datatable-highlighted a{background-color:#b2d2ff}.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-highlighted,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-highlighted td.yui3-datatable-asc,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-highlighted td.yui3-datatable-desc,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-even td.yui3-datatable-highlighted,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-odd td.yui3-datatable-highlighted{cursor:pointer;background-color:#b2d2ff}.yui3-skin-sam th.yui3-datatable-selected,.yui3-skin-sam th.yui3-datatable-selected a{background-color:#446cd7}.yui3-skin-sam tr.yui3-datatable-selected td,.yui3-skin-sam tr.yui3-datatable-selected td.yui3-datatable-asc,.yui3-skin-sam tr.yui3-datatable-selected td.yui3-datatable-desc{background-color:#426fd9;color:#FFF}.yui3-skin-sam tr.yui3-datatable-even td.yui3-datatable-selected,.yui3-skin-sam tr.yui3-datatable-odd td.yui3-datatable-selected{background-color:#446cd7;color:#FFF}.yui3-skin-sam .yui3-datatable-list th.yui3-datatable-selected,.yui3-skin-sam .yui3-datatable-list th.yui3-datatable-selected a{background-color:#446cd7}.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-selected td,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-selected td.yui3-datatable-asc,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-selected td.yui3-datatable-desc{background-color:#426fd9;color:#FFF}.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-even td.yui3-datatable-selected,.yui3-skin-sam .yui3-datatable-list tr.yui3-datatable-odd td.yui3-datatable-selected{background-color:#446cd7;color:#FFF}.yui3-skin-sam .yui3-datatable-paginator{display:block;margin:6px 0;white-space:nowrap}.yui3-skin-sam .yui3-datatable-paginator .yui3-datatable-first,.yui3-skin-sam .yui3-datatable-paginator .yui3-datatable-last,.yui3-skin-sam .yui3-datatable-paginator .yui3-datatable-selected{padding:2px 6px}.yui3-skin-sam .yui3-datatable-paginator a.yui3-datatable-first,.yui3-skin-sam .yui3-datatable-paginator a.yui3-datatable-last{text-decoration:none}.yui3-skin-sam .yui3-datatable-paginator .yui3-datatable-previous,.yui3-skin-sam .yui3-datatable-paginator .yui3-datatable-next{display:none}.yui3-skin-sam a.yui3-datatable-page{border:1px solid #cbcbcb;padding:2px 6px;text-decoration:none;background-color:#fff}.yui3-skin-sam .yui3-datatable-selected{border:1px solid #fff;background-color:#fff}#yui3-css-stamp.skin-sam-datatable-base-deprecated{display:none} +.yui3-datatable-table{empty-cells:show}.yui3-skin-sam .yui3-datatable-table{margin:0;padding:0;font-family:arial,sans-serif;border-collapse:separate;border-spacing:0;border:1px solid #cbcbcb}.yui3-skin-sam .yui3-datatable-caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.yui3-skin-sam .yui3-datatable-cell,.yui3-skin-sam .yui3-datatable-header{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:4px 10px 4px 10px}.yui3-skin-sam .yui3-datatable-cell:first-child,.yui3-skin-sam .yui3-datatable-first-header{border-left-width:0}.yui3-skin-sam .yui3-datatable-header{background:#fff url(sprite.png) repeat-x 0 0;background-image:-webkit-linear-gradient(transparent 40%,rgba(0,0,0,0.21));background-image:-moz-linear-gradient(top,transparent 40%,rgba(0,0,0,0.21));background-image:-ms-linear-gradient(transparent 40%,rgba(0,0,0,0.21));background-image:-o-linear-gradient(transparent 40%,rgba(0,0,0,0.21));background-image:linear-gradient(transparent 40%,rgba(0,0,0,0.21));color:#000;font-weight:normal;text-align:left;text-shadow:0 1px 1px #fff;vertical-align:bottom;white-space:nowrap}.yui3-skin-sam .yui3-datatable-cell{background-color:transparent}.yui3-skin-sam .yui3-datatable-even .yui3-datatable-cell{background-color:#fff}.yui3-skin-sam .yui3-datatable-odd .yui3-datatable-cell{background-color:#edf5ff}#yui3-css-stamp.skin-sam-datatable-base{display:none} +.yui3-datatable-message{display:none}.yui3-datatable-message-visible .yui3-datatable-message{display:block;display:table-row-group}.yui3-skin-sam .yui3-datatable-message-content{border:0 none;border-bottom:1px solid #cbcbcb;padding:4px 10px}#yui3-css-stamp.skin-sam-datatable-message{display:none} +.yui3-datatable-scrollable-x{_overflow-x:hidden;_position:relative}.yui3-datatable-scrollable-y,.yui3-datatable-scrollable-y .yui3-datatable-x-scroller{_overflow-y:hidden;_position:relative}.yui3-datatable-y-scroller-container{overflow-x:hidden;position:relative}.yui3-datatable-scrollable-y .yui3-datatable-content{position:relative}.yui3-datatable-scrollable-y .yui3-datatable-table .yui3-datatable-columns{visibility:hidden}.yui3-datatable-scroll-columns{position:absolute;width:100%;z-index:2}.yui3-datatable-y-scroller,.yui3-datatable-scrollable-x .yui3-datatable-caption-table{width:100%}.yui3-datatable-x-scroller{position:relative;overflow-x:scroll;overflow-y:hidden}.yui3-datatable-scrollable-y .yui3-datatable-y-scroller{position:relative;overflow-x:hidden;overflow-y:scroll;z-index:1;-webkit-overflow-scrolling:touch}.yui3-datatable-scrollbar{position:absolute;overflow-x:hidden;overflow-y:scroll;z-index:2}.yui3-datatable-scrollbar div{position:absolute;width:1px;visibility:hidden}.yui3-skin-sam .yui3-datatable-scroll-columns{border-collapse:separate;border-spacing:0;font-family:arial,sans-serif;margin:0;padding:0;top:0;left:0}.yui3-skin-sam .yui3-datatable-scroll-columns .yui3-datatable-header{padding:0}.yui3-skin-sam .yui3-datatable-x-scroller,.yui3-skin-sam .yui3-datatable-y-scroller-container{border:1px solid #cbcbcb}.yui3-skin-sam .yui3-datatable-scrollable-x .yui3-datatable-y-scroller-container,.yui3-skin-sam .yui3-datatable-x-scroller .yui3-datatable-table,.yui3-skin-sam .yui3-datatable-y-scroller .yui3-datatable-table{border:0 none}#yui3-css-stamp.skin-sam-datatable-scroll{display:none} +.yui3-datatable-sortable-column{z-index:1}.yui3-datatable-sortable-column:focus,.yui3-datatable-sortable-column:active{z-index:2}.yui3-datatable-sort-liner{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.yui3-skin-sam .yui3-datatable-sortable-column{cursor:pointer}.yui3-skin-sam .yui3-datatable-columns .yui3-datatable-sorted,.yui3-skin-sam .yui3-datatable-sortable-column:hover{*background:#c1c4c8 url(sprite.png) repeat-x 0 -100px;background-color:#f1f2f3}.yui3-skin-sam .yui3-datatable-sort-liner{display:block;height:100%;position:relative;padding-right:15px;position:relative}.yui3-skin-sam .yui3-datatable-sort-indicator{position:absolute;right:0;bottom:.5ex;width:7px;height:10px;background:url(sort-arrow-sprite.png) no-repeat 0 0;_background:url(sort-arrow-sprite-ie.png) no-repeat 0 0;overflow:hidden}.yui3-skin-sam .yui3-datatable-sorted .yui3-datatable-sort-indicator{background-position:0 -10px}.yui3-skin-sam .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator{background-position:0 -20px}.yui3-skin-sam .yui3-datatable-data .yui3-datatable-even .yui3-datatable-sorted{background-color:#edf5ff}.yui3-skin-sam .yui3-datatable-data .yui3-datatable-odd .yui3-datatable-sorted{background-color:#dbeaff}#yui3-css-stamp.skin-sam-datatable-sort{display:none} +v\:oval,v\:shadow,v\:fill{behavior:url(#default#VML);display:inline-block;zoom:1;*display:inline}.yui3-dial{position:relative;display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline}.yui3-dial-content,.yui3-dial-ring{position:relative}.yui3-dial-handle,.yui3-dial-marker,.yui3-dial-center-button,.yui3-dial-reset-string,.yui3-dial-handle-vml,.yui3-dial-marker-vml,.yui3-dial-center-button-vml,.yui3-dial-ring-vml v\:oval,.yui3-dial-center-button-vml v\:oval{position:absolute}.yui3-dial-center-button-vml v\:oval{font-size:1px;top:0;left:0}.yui3-dial-content .yui3-dial-ring .yui3-dial-hidden v\:oval,.yui3-dial-content .yui3-dial-ring .yui3-dial-hidden{opacity:0;filter:alpha(opacity=0)}.yui3-skin-sam .yui3-dial-handle{background:#6c3a3a;opacity:.3;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.9) inset;cursor:pointer;font-size:1px}.yui3-skin-sam .yui3-dial-ring{background:#bebdb7;background:-moz-linear-gradient(100% 100% 135deg,#7b7a6d,#fff);background:-webkit-gradient(linear,left top,right bottom,from(#fff),to(#7b7a6d));box-shadow:1px 1px 5px rgba(0,0,0,0.4) inset;-webkit-box-shadow:1px 1px 5px rgba(0,0,0,0.4) inset;-moz-box-shadow:1px 1px 5px rgba(0,0,0,0.4) inset}.yui3-skin-sam .yui3-dial-center-button{box-shadow:-1px -1px 2px rgba(0,0,0,0.3) inset,1px 1px 2px rgba(0,0,0,0.5);-moz-box-shadow:-1px -1px 2px rgba(0,0,0,0.3) inset,1px 1px 2px rgba(0,0,0,0.5);background:#dddbd4;background:-moz-radial-gradient(30% 30% 0deg,circle farthest-side,#fbfbf9 24%,#f2f0ea 41%,#d3d0c3 83%) repeat scroll 0 0 transparent;background:-webkit-gradient(radial,15 15,15,30 30,40,from(#fbfbf9),to(#d3d0c3),color-stop(.2,#f2f0ea));cursor:pointer;opacity:.7}.yui3-skin-sam .yui3-dial-reset-string{color:#676767;font-size:85%;text-decoration:underline}.yui3-skin-sam .yui3-dial-label{color:#808080;margin-bottom:.8em}.yui3-skin-sam .yui3-dial-value-string{margin-left:.5em;color:#000;font-size:130%}.yui3-skin-sam .yui3-dial-value{visibility:hidden;position:absolute;top:0;left:102%;width:4em}.yui3-skin-sam .yui3-dial-north-mark{position:absolute;border-left:2px solid #ccc;height:5px;width:10px;left:50%;top:-7px;font-size:1px}.yui3-skin-sam .yui3-dial-marker{background-color:#000;opacity:.2;font-size:1px}.yui3-skin-sam .yui3-dial-marker-max-min{background-color:#ab3232;opacity:.6}.yui3-skin-sam .yui3-dial-ring-vml,.yui3-skin-sam .yui3-dial-center-button-vml,.yui3-skin-sam .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-sam v\:oval.yui3-dial-marker-max-min,.yui3-skin-sam .yui3-dial-marker-vml,.yui3-skin-sam .yui3-dial-handle-vml{background:0;opacity:1}#yui3-css-stamp.skin-sam-dial{display:none} +.yui3-flick{position:relative;overflow:hidden}.yui3-flick-content{position:relative}#yui3-css-stamp.skin-sam-node-flick{display:none} +.yui3-menu .yui3-menu{position:absolute;z-index:1}.yui3-menu .yui3-shim{position:absolute;top:0;left:0;z-index:-1;opacity:0;filter:alpha(opacity=0);border:0;margin:0;padding:0;height:100%;width:100%}.yui3-menu-hidden{top:-10000px;left:-10000px;visibility:hidden}.yui3-menu li{list-style-type:none}.yui3-menu ul,.yui3-menu li{margin:0;padding:0}.yui3-menu-label,.yui3-menuitem-content{text-align:left;white-space:nowrap;display:block}.yui3-menu-horizontal li{float:left;width:auto}.yui3-menu-horizontal li li{float:none}.yui3-menu-horizontal ul{*zoom:1}.yui3-menu-horizontal ul ul{*zoom:normal}.yui3-menu-horizontal>.yui3-menu-content>ul:after{content:"";display:block;clear:both;line-height:0;font-size:0;visibility:hidden}.yui3-menu-content{*zoom:1}.yui3-menu-hidden .yui3-menu-content{*zoom:normal}.yui3-menuitem-content,.yui3-menu-label{_zoom:1}.yui3-menu-hidden .yui3-menuitem-content,.yui3-menu-hidden .yui3-menu-label{_zoom:normal}.yui3-skin-sam .yui3-menu-content,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content{font-size:93%;line-height:1.5;*line-height:1.45;border:solid 1px #808080;background:#fff;padding:3px 0}.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content{font-size:100%}.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-content{line-height:2;*line-height:1.9;background:url(sprite.png) repeat-x 0 0;padding:0}.yui3-skin-sam .yui3-menu ul,.yui3-skin-sam .yui3-menu ul ul{margin-top:3px;padding-top:3px;border-top:solid 1px #ccc}.yui3-skin-sam .yui3-menu ul.first-of-type{border:0;margin:0;padding:0}.yui3-skin-sam .yui3-menu-horizontal ul{padding:0;margin:0;border:0}.yui3-skin-sam .yui3-menu li,.yui3-skin-sam .yui3-menu .yui3-menu li{_border-bottom:solid 1px #fff}.yui3-skin-sam .yui3-menu-horizontal li{_border-bottom:0}.yui3-skin-sam .yui3-menubuttonnav li{border-right:solid 1px #ccc}.yui3-skin-sam .yui3-splitbuttonnav li{border-right:solid 1px #808080}.yui3-skin-sam .yui3-menubuttonnav li li,.yui3-skin-sam .yui3-splitbuttonnav li li{border-right:0}.yui3-skin-sam .yui3-menu-label,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label,.yui3-skin-sam .yui3-menuitem-content,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menuitem-content{padding:0 1em;color:#000;text-decoration:none;cursor:default;float:none;border:0;margin:0}.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label,.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content{padding:0 10px;border-style:solid;border-color:#808080;border-width:1px 0;margin:-1px 0;float:left;width:auto}.yui3-skin-sam .yui3-menu-label,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label{background:url(vertical-menu-submenu-indicator.png) right center no-repeat}.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label{background:url(sprite.png) repeat-x 0 0}.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label,.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label{background-image:none}.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label{padding-right:0}.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label em{font-style:normal;padding-right:20px;display:block;background:url(horizontal-menu-submenu-indicator.png) right center no-repeat}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label{padding:0}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label a{float:left;width:auto;color:#000;text-decoration:none;cursor:default;padding:0 5px 0 10px}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label .yui3-menu-toggle{padding:0;border-left:solid 1px #ccc;width:15px;overflow:hidden;text-indent:-1000px;background:url(horizontal-menu-submenu-indicator.png) 3px center no-repeat}.yui3-skin-sam .yui3-menu-label-active,.yui3-skin-sam .yui3-menu-label-menuvisible,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-active,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-menuvisible{background-color:#b3d4ff}.yui3-skin-sam .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content{background-image:none;background-color:#b3d4ff;border-left-width:0;margin-left:0}.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-active,.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-menuvisible{border-color:#7d98b8;background:url(sprite.png) repeat-x 0 -1700px}.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label-active,.yui3-skin-sam .yui3-menubuttonnav .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label-menuvisible,.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-active,.yui3-skin-sam .yui3-splitbuttonnav .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible{border-left-width:1px;margin-left:-1px}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible{border-color:#808080;background:transparent}.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible .yui3-menu-toggle{border-color:#7d98b8;background:url(horizontal-menu-submenu-toggle.png) left center no-repeat}#yui3-css-stamp.skin-sam-node-menunav{display:none} +.yui3-overlay{position:absolute}.yui3-overlay-hidden{visibility:hidden}.yui3-widget-tmp-forcesize .yui3-overlay-content{overflow:hidden!important}#yui3-css-stamp.skin-sam-overlay{display:none} +.yui3-panel{position:absolute}.yui3-panel-hidden{visibility:hidden}.yui3-widget-tmp-forcesize .yui3-panel-content{overflow:hidden!important}.yui3-panel .yui3-widget-hd{position:relative}.yui3-panel .yui3-widget-hd .yui3-widget-buttons{position:absolute;top:0;right:0}.yui3-panel .yui3-widget-ft .yui3-widget-buttons{display:inline-block;*display:inline;zoom:1}.yui3-skin-sam .yui3-panel-content{-webkit-box-shadow:0 0 5px #333;-moz-box-shadow:0 0 5px #333;box-shadow:0 0 5px #333;border:1px solid black;background:white}.yui3-skin-sam .yui3-panel .yui3-widget-hd{padding:8px 28px 8px 8px;min-height:13px;_height:13px;color:white;background-color:#3961c5;background:-moz-linear-gradient(0% 100% 90deg,#2647a0 7%,#3d67ce 50%,#426fd9 100%);background:-webkit-gradient(linear,left bottom,left top,from(#2647a0),color-stop(0.07,#2647a0),color-stop(0.5,#3d67ce),to(#426fd9))}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-widget-buttons{padding:8px}.yui3-skin-sam .yui3-panel .yui3-widget-bd{padding:10px}.yui3-skin-sam .yui3-panel .yui3-widget-ft{background:#edf5ff;padding:8px;text-align:right}.yui3-skin-sam .yui3-panel .yui3-widget-ft .yui3-button{margin-left:8px}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-button-close{background:transparent;filter:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;width:13px;height:13px;padding:0;overflow:hidden;vertical-align:top;*font-size:0;*line-height:0;*letter-spacing:-1000px;*color:#86a5ec;*background:url(sprite_icons.png) no-repeat 1px 1px}.yui3-skin-sam .yui3-panel .yui3-widget-hd .yui3-button-close:before{content:url(sprite_icons.png);display:inline-block;text-align:center;font-size:0;line-height:0;width:13px;margin:1px 0 0 1px}.yui3-skin-sam .yui3-panel-hidden .yui3-widget-hd .yui3-button-close{display:none}#yui3-css-stamp.skin-sam-panel{display:none} +.yui3-resize,.yui3-resize-wrapper{z-index:0;zoom:1}.yui3-resize-handle{position:absolute;display:block;z-index:100;zoom:1}.yui3-resize-proxy{position:absolute;border:1px dashed #000;position:absolute;z-index:10000}.yui3-resize-hidden-handles .yui3-resize-handle{opacity:0;filter:alpha(opacity=0)}.yui3-resize-handle-t,.yui3-resize-handle-b{width:100%;left:0;height:6px}.yui3-resize-handle-l,.yui3-resize-handle-r{height:100%;top:0;width:6px}.yui3-resize-handle-t{cursor:n-resize;top:0}.yui3-resize-handle-b{cursor:s-resize;bottom:0}.yui3-resize-handle-l{cursor:w-resize;left:0}.yui3-resize-handle-r{cursor:e-resize;right:0}.yui3-resize-handle-inner{position:absolute;zoom:1}@media only screen and (min-device-width :320px) and (max-device-width :480px){.yui3-resize-handle-inner:after{content:"";width:40px;height:40px;position:absolute}.yui3-resize-handle-inner-r,.yui3-resize-handle-inner-l,.yui3-resize-handle-inner-t,.yui3-resize-handle-inner-b,.yui3-resize-handle-inner-tr,.yui3-resize-handle-inner-br,.yui3-resize-handle-inner-tl,.yui3-resize-handle-inner-bl{overflow:visible!important}.yui3-resize-handle-inner-r:after{top:-12px;right:0}.yui3-resize-handle-inner-l:after{top:-12px;left:0}.yui3-resize-handle-inner-t:after{top:0;left:-12px}.yui3-resize-handle-inner-b:after{bottom:0;left:-12px}.yui3-resize-handle-inner-tr:after{top:0;right:0}.yui3-resize-handle-inner-br:after{bottom:0;right:0}.yui3-resize-handle-inner-tl:after{top:0;left:0}.yui3-resize-handle-inner-bl:after{bottom:0;left:0}}@media only screen and (min-device-width :768px) and (max-device-width :1024px){.yui3-resize-handle-inner:after{content:"";width:30px;height:30px;position:absolute}.yui3-resize-handle-inner-r,.yui3-resize-handle-inner-l,.yui3-resize-handle-inner-t,.yui3-resize-handle-inner-b,.yui3-resize-handle-inner-tr,.yui3-resize-handle-inner-br,.yui3-resize-handle-inner-tl,.yui3-resize-handle-inner-bl{overflow:visible!important}.yui3-resize-handle-inner-r:after{top:-6px;right:0}.yui3-resize-handle-inner-l:after{top:-6px;left:0}.yui3-resize-handle-inner-t:after{top:0;left:-6px}.yui3-resize-handle-inner-b:after{bottom:0;left:-6px}.yui3-resize-handle-inner-tr:after{top:0;right:0}.yui3-resize-handle-inner-br:after{bottom:0;right:0}.yui3-resize-handle-inner-tl:after{top:0;left:0}.yui3-resize-handle-inner-bl:after{bottom:0;left:0}}.yui3-resize-handle-inner-t,.yui3-resize-handle-inner-b{margin-left:-8px;left:50%}.yui3-resize-handle-inner-l,.yui3-resize-handle-inner-r{margin-top:-8px;top:50%}.yui3-resize-handle-inner-t{top:-4px}.yui3-resize-handle-inner-b{bottom:-4px}.yui3-resize-handle-inner-l{left:-4px}.yui3-resize-handle-inner-r{right:-4px}.yui3-resize-handle-tr,.yui3-resize-handle-br,.yui3-resize-handle-tl,.yui3-resize-handle-bl{height:15px;width:15px;z-index:200}.yui3-resize-handle-tr{cursor:ne-resize;top:0;right:0}.yui3-resize-handle-tl{cursor:nw-resize;top:0;left:0}.yui3-resize-handle-br{cursor:se-resize;bottom:0;right:0}.yui3-resize-handle-bl{cursor:sw-resize;bottom:0;left:0}.yui3-resize-handle-inner-r,.yui3-resize-handle-inner-l,.yui3-resize-handle-inner-t,.yui3-resize-handle-inner-b,.yui3-resize-handle-inner-tr,.yui3-resize-handle-inner-br,.yui3-resize-handle-inner-tl,.yui3-resize-handle-inner-bl{background-repeat:no-repeat;background:url(arrows.png) no-repeat 0 0;display:block;height:15px;overflow:hidden;text-indent:-99999em;width:15px}.yui3-resize-handle-inner-br{background-position:-30px 0;bottom:-2px;right:-2px}.yui3-resize-handle-inner-tr{background-position:-58px 0;bottom:0;right:-2px}.yui3-resize-handle-inner-bl{background-position:-75px 0;bottom:-2px;right:-2px}.yui3-resize-handle-inner-tl{background-position:-47px 0;bottom:0;right:-2px}.yui3-resize-handle-inner-b,.yui3-resize-handle-inner-t{background-position:-15px 0}#yui3-css-stamp.skin-sam-resize-base{display:none} +.yui3-scrollview{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none}.yui3-scrollview-hidden{display:none}.yui3-scrollview-content{position:relative}.yui3-skin-sam .yui3-scrollview{-webkit-tap-highlight-color:rgba(255,255,255,0)}#yui3-css-stamp.skin-sam-scrollview-base{display:none} +.yui3-skin-sam .yui3-scrollview{-webkit-tap-highlight-color:rgba(255,255,255,0)}.yui3-skin-sam .yui3-scrollview{background-color:white}.yui3-skin-sam .yui3-scrollview-vert .yui3-scrollview-content .yui3-scrollview-item{*zoom:1}.yui3-skin-sam .yui3-scrollview-vert .yui3-scrollview-content .yui3-scrollview-list{*zoom:1;list-style:none;padding:0;margin:0}.yui3-skin-sam .yui3-scrollview-vert .yui3-scrollview-content{border-top:0;background-color:white;font-family:HelveticaNeue,arial,helvetica,clean,sans-serif;color:black}.yui3-skin-sam .yui3-scrollview-vert .yui3-scrollview-content .yui3-scrollview-item{border-bottom:1px solid #303030;padding:15px 20px 16px;font-size:100%;font-weight:bold;background-color:white;cursor:pointer}#yui3-css-stamp.skin-sam-scrollview-list{display:none} +.yui3-scrollview-scrollbar{opacity:1;position:absolute;width:6px;height:10px}.yui3-scrollview-scrollbar{top:0;right:1px}.yui3-scrollview-scrollbar-horiz{top:auto;height:8px;width:20px;bottom:1px;left:0}.yui3-scrollview-scrollbar .yui3-scrollview-child{position:absolute;right:0;display:block;width:100%;height:4px}.yui3-scrollview-scrollbar .yui3-scrollview-first{top:0}.yui3-scrollview-scrollbar .yui3-scrollview-last{top:0}.yui3-scrollview-scrollbar .yui3-scrollview-middle{position:absolute;top:4px;height:1px}.yui3-scrollview-scrollbar-horiz .yui3-scrollview-child{display:-moz-inline-stack;display:inline-block;zoom:1;*display:inline;top:0;left:0;bottom:auto;right:auto}.yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{width:4px;height:6px}.yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{top:0;left:4px;width:1px;height:6px}.yui3-scrollview-scrollbar-vert-basic{height:auto}.yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child{position:static;_overflow:hidden;_line-height:4px}.yui3-scrollview-scrollbar-horiz-basic{width:auto;white-space:nowrap;line-height:6px;_overflow:hidden}.yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{position:static;padding:0;margin:0;top:auto;left:auto;right:auto;bottom:auto}.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}#yui3-css-stamp.skin-sam-scrollview-scrollbars{display:none} +.yui3-slider,.yui3-slider-rail{display:-moz-inline-stack;display:inline-block;*display:inline;zoom:1;vertical-align:middle}.yui3-slider-content{position:relative;display:block}.yui3-slider-rail{position:relative}.yui3-slider-rail-cap-top,.yui3-slider-rail-cap-left,.yui3-slider-rail-cap-bottom,.yui3-slider-rail-cap-right,.yui3-slider-thumb,.yui3-slider-thumb-image,.yui3-slider-thumb-shadow{position:absolute}.yui3-slider-thumb{overflow:hidden}.yui3-skin-sam .yui3-slider-x .yui3-slider-rail,.yui3-skin-sam .yui3-slider-x .yui3-slider-rail-cap-left,.yui3-skin-sam .yui3-slider-x .yui3-slider-rail-cap-right{background-image:url(rail-x.png);background-repeat:repeat-x}.yui3-skin-sam .yui3-slider-x .yui3-slider-rail{height:26px}.yui3-skin-sam .yui3-slider-x .yui3-slider-thumb{height:26px;width:15px}.yui3-skin-sam .yui3-slider-x .yui3-slider-rail-cap-left{background-position:0 -20px;height:20px;left:-2px;width:5px}.yui3-skin-sam .yui3-slider-x .yui3-slider-rail-cap-right{background-position:0 -40px;height:20px;right:-2px;width:5px}.yui3-skin-sam .yui3-slider-x .yui3-slider-thumb-image{left:0;top:-10px}.yui3-skin-sam .yui3-slider-x .yui3-slider-thumb-shadow{left:0;opacity:.15;filter:alpha(opacity=15);top:-50px}.yui3-skin-sam .yui3-slider-y .yui3-slider-rail,.yui3-skin-sam .yui3-slider-y .yui3-slider-rail-cap-top,.yui3-skin-sam .yui3-slider-y .yui3-slider-rail-cap-bottom{background-image:url(rail-y.png);background-repeat:repeat-y}.yui3-skin-sam .yui3-slider-y .yui3-slider-rail{width:26px}.yui3-skin-sam .yui3-slider-y .yui3-slider-thumb{width:26px;height:15px}.yui3-skin-sam .yui3-slider-y .yui3-slider-rail-cap-top{background-position:-20px 0;width:20px;top:-2px;height:5px}.yui3-skin-sam .yui3-slider-y .yui3-slider-rail-cap-bottom{background-position:-40px 0;width:20px;bottom:-2px;height:5px}.yui3-skin-sam .yui3-slider-y .yui3-slider-thumb-image{left:-10px;top:0}.yui3-skin-sam .yui3-slider-y .yui3-slider-thumb-shadow{left:-50px;opacity:.15;filter:alpha(opacity=15);top:0}#yui3-css-stamp.skin-sam-slider-base{display:none} +.yui3-tab-panel{display:none}.yui3-tab-panel-selected{display:block}.yui3-tabview-list,.yui3-tab{margin:0;padding:0;list-style:none}.yui3-tabview{position:relative}.yui3-tabview,.yui3-tabview-list,.yui3-tabview-panel,.yui3-tab,.yui3-tab-panel{zoom:1}.yui3-tab{display:inline-block;*display:inline;vertical-align:bottom;cursor:pointer}.yui3-tab-label{display:block;display:inline-block;padding:6px 10px;position:relative;text-decoration:none;vertical-align:bottom}.yui3-skin-sam .yui3-tabview-list{border:solid #2647a0;border-width:0 0 5px;zoom:1}.yui3-skin-sam .yui3-tab{margin:0 .2em 0 0;padding:1px 0 0;zoom:1}.yui3-skin-sam .yui3-tab-selected{margin-bottom:-1px}.yui3-skin-sam .yui3-tab-label{background:#d8d8d8 url(sprite.png) repeat-x;border:solid #a3a3a3;border-width:1px 1px 0 1px;color:#000;cursor:pointer;font-size:85%;padding:.3em .75em;text-decoration:none}.yui3-skin-sam .yui3-tab-label:hover,.yui3-skin-sam .yui3-tab-label:focus{background:#bfdaff url(sprite.png) repeat-x left -1300px;outline:0}.yui3-skin-sam .yui3-tab-selected .yui3-tab-label,.yui3-skin-sam .yui3-tab-selected .yui3-tab-label:focus,.yui3-skin-sam .yui3-tab-selected .yui3-tab-label:hover{background:#2647a0 url(sprite.png) repeat-x left -1400px;color:#fff}.yui3-skin-sam .yui3-tab-selected .yui3-tab-label{padding:.4em .75em}.yui3-skin-sam .yui3-tab-selected .yui3-tab-label{border-color:#243356}.yui3-skin-sam .yui3-tabview-panel{background:#edf5ff}.yui3-skin-sam .yui3-tabview-panel{border:1px solid #808080;border-top-color:#243356;padding:.25em .5em}#yui3-css-stamp.skin-sam-tabview{display:none} +.yui3-testconsole .yui3-console-entry{min-height:inherit;padding:5px}.yui3-testconsole .yui3-console-controls{display:none}.yui3-skin-sam .yui3-testconsole .yui3-console-content,.yui3-skin-sam .yui3-testconsole .yui3-console-bd,.yui3-skin-sam .yui3-testconsole .yui3-console-entry,.yui3-skin-sam .yui3-testconsole .yui3-console-ft,.yui3-skin-sam .yui3-testconsole .yui3-console-ft .yui3-console-filters-categories,.yui3-skin-sam .yui3-testconsole .yui3-console-ft .yui3-console-filters-sources,.yui3-skin-sam .yui3-testconsole .yui3-console-hd{background:0;border:0;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.yui3-skin-sam .yui3-testconsole-content,.yui3-skin-sam .yui3-testconsole .yui3-console-bd{color:#333;font:13px/1.4 Helvetica,'DejaVu Sans','Bitstream Vera Sans',Arial,sans-serif}.yui3-skin-sam .yui3-testconsole-content{border:1px solid #afafaf}.yui3-skin-sam .yui3-testconsole .yui3-console-entry{border-bottom:1px solid #eaeaea;font-family:Menlo,Inconsolata,Consolas,'DejaVu Mono','Bitstream Vera Sans Mono',monospace;font-size:11px}.yui3-skin-sam .yui3-testconsole .yui3-console-ft{border-top:1px solid}.yui3-skin-sam .yui3-testconsole .yui3-console-hd{border-bottom:1px solid;*zoom:1}.yui3-skin-sam .yui3-testconsole.yui3-console-collapsed .yui3-console-hd{border:0}.yui3-skin-sam .yui3-testconsole .yui3-console-ft,.yui3-skin-sam .yui3-testconsole .yui3-console-hd{border-color:#cfcfcf}.yui3-skin-sam .yui3-testconsole .yui3-testconsole-entry-fail{background-color:#ffe0e0;border-bottom-color:#ffc5c4}.yui3-skin-sam .yui3-testconsole .yui3-testconsole-entry-pass{background-color:#ecffea;border-bottom-color:#d1ffcc}#yui3-css-stamp.skin-sam-test-console{display:none} +.yui3-widget-hidden{display:none}.yui3-widget-content{overflow:hidden}.yui3-widget-content-expanded{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;height:100%}.yui3-widget-tmp-forcesize{overflow:hidden!important}#yui3-css-stamp.skin-sam-widget-base{display:none} +.yui3-widget-buttons .yui3-button-close,.yui3-widget-buttons .yui3-button-close .yui3-button-content,.yui3-widget-buttons .yui3-button-close .yui3-button-icon{display:inline-block;*display:inline;zoom:1;width:13px;height:13px;line-height:13px;vertical-align:top}.yui3-widget-buttons .yui3-button-close .yui3-button-icon{background-repeat:no-repeat;background-position:1px 1px}.yui3-skin-sam .yui3-widget-buttons .yui3-button-icon{background-image:url(sprite_icons.gif)}#yui3-css-stamp.skin-sam-widget-buttons{display:none} +.yui3-skin-sam .yui3-widget-mask{background-color:black;zoom:1;-ms-filter:"alpha(opacity=40)";filter:alpha(opacity=40);opacity:.4}#yui3-css-stamp.skin-sam-widget-modality{display:none} +.yui3-widget-stacked .yui3-widget-shim{opacity:0;filter:alpha(opacity=0);position:absolute;border:0;top:0;left:0;padding:0;margin:0;z-index:-1;width:100%;height:100%;_width:0;_height:0}#yui3-css-stamp.skin-sam-widget-stack{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/slider-base.css b/src/errors/static/js/yui/build/assets/skins/sam/slider-base.css new file mode 100644 index 00000000..9fd859b3 --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/slider-base.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-slider,.yui3-slider-rail{display:-moz-inline-stack;display:inline-block;*display:inline;zoom:1;vertical-align:middle}.yui3-slider-content{position:relative;display:block}.yui3-slider-rail{position:relative}.yui3-slider-rail-cap-top,.yui3-slider-rail-cap-left,.yui3-slider-rail-cap-bottom,.yui3-slider-rail-cap-right,.yui3-slider-thumb,.yui3-slider-thumb-image,.yui3-slider-thumb-shadow{position:absolute}.yui3-slider-thumb{overflow:hidden}.yui3-skin-sam .yui3-slider-x .yui3-slider-rail,.yui3-skin-sam .yui3-slider-x .yui3-slider-rail-cap-left,.yui3-skin-sam .yui3-slider-x .yui3-slider-rail-cap-right{background-image:url(rail-x.png);background-repeat:repeat-x}.yui3-skin-sam .yui3-slider-x .yui3-slider-rail{height:26px}.yui3-skin-sam .yui3-slider-x .yui3-slider-thumb{height:26px;width:15px}.yui3-skin-sam .yui3-slider-x .yui3-slider-rail-cap-left{background-position:0 -20px;height:20px;left:-2px;width:5px}.yui3-skin-sam .yui3-slider-x .yui3-slider-rail-cap-right{background-position:0 -40px;height:20px;right:-2px;width:5px}.yui3-skin-sam .yui3-slider-x .yui3-slider-thumb-image{left:0;top:-10px}.yui3-skin-sam .yui3-slider-x .yui3-slider-thumb-shadow{left:0;opacity:.15;filter:alpha(opacity=15);top:-50px}.yui3-skin-sam .yui3-slider-y .yui3-slider-rail,.yui3-skin-sam .yui3-slider-y .yui3-slider-rail-cap-top,.yui3-skin-sam .yui3-slider-y .yui3-slider-rail-cap-bottom{background-image:url(rail-y.png);background-repeat:repeat-y}.yui3-skin-sam .yui3-slider-y .yui3-slider-rail{width:26px}.yui3-skin-sam .yui3-slider-y .yui3-slider-thumb{width:26px;height:15px}.yui3-skin-sam .yui3-slider-y .yui3-slider-rail-cap-top{background-position:-20px 0;width:20px;top:-2px;height:5px}.yui3-skin-sam .yui3-slider-y .yui3-slider-rail-cap-bottom{background-position:-40px 0;width:20px;bottom:-2px;height:5px}.yui3-skin-sam .yui3-slider-y .yui3-slider-thumb-image{left:-10px;top:0}.yui3-skin-sam .yui3-slider-y .yui3-slider-thumb-shadow{left:-50px;opacity:.15;filter:alpha(opacity=15);top:0}#yui3-css-stamp.skin-sam-slider-base{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/sort-arrow-sprite-ie.png b/src/errors/static/js/yui/build/assets/skins/sam/sort-arrow-sprite-ie.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f6576abe631264aa6c9af5df3d95f707dfbef3 GIT binary patch literal 3628 zcmV+{4%6|8P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00093P)t-s&(F^Q00960{{sU91Ox;H1qB8M1_uWR2nYxX2?+`c3JVJh3=9kn4Gj(s z4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM92^`S9UUGX9v>ec zARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7EiEoCE-x=HFfcGN zF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}?K0iM{KtMo2K|w-7 zLPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuyP*6}&QBhJ-Qd3h? zR8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?WjVPRroVq;@tWMpJz zWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2Ta&vQYbaZreb#-=j zc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyDgoK2Jg@uNOhKGlT zh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z}m6ev3mY0{8n3$NE znVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(rl+T;sHmu^si~@} zs;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#pxVX5vxw*Q!y1To( zyu7@dCU$jHda$;ryf%FD~k%*@Qq z&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4?Ck9A?d|UF?(gsK z@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg={r&#_{{R2~&>Z&> z00003bW%=J|Nj8j$_+sP002BmL_t(|+I)>c3IIV2!eaja=sj3Emz@zbP|%`M1Bw8X y09MPrPj2tn3sWXhOp-{dSMQhGo1NY5pKkzdPyriDuozST0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0001QNklrHR0Tuu`R05fN0Bi~`b?Vi1&~2nLb5vLYa|gdzef zRYZc)bSY9om0}1bJ&=SXkOci-_U(H!`_0_B=ggclr`&JOJt$9i2Pv2$3;+NrC&#m1 z!dnXfc8@_tg;It+y%GRK0Z&(NI}ilvD5bTVVvH9?#3TiL0-V{Lu|3m8zPpe8*B_)< z=_Nmrt-cga(}iV()OybG1vjxJI=I3BhnB%91IRc5T%dt7B(QH0#K-O>+|d(IaGMq8 zj6$91UsdT(ju2Vk8UtKj2S3h%b7YXf1V>lEFF0_D2;%6V;pI*am#gRXR@?mzlgaFu z1ua9z2?QdaFR+fBVK5kLYXqC9Z!8x3Oz?=7YZZgZJm&C<$LG^GHfCn$wzhaA7HAbV z`D0`Gq))3=#Pn%IpUJfzI(>sgqOjR)^T46g*Z;B#pJLV^D0zs8hzMc%+xz!x85F3g zsp*-N=v&lLdyILcw$jp4a>voa!oo+79u?O1QZOcjro&E7PG|j^&25XzW27sGKvI)g zU!gn^eP$bRm1|^#CvK45n9o&6MP}A*OGxlKJ2g(^adL9HySq2N9Pmgb8jW^PDKsV~ zX6wQQRgKh{W-aEV{ZZ`<@;g&@TpX!dNlw~j5(;5X1smGdF|odljg1@!2hNZyDc>eE zG*nkRj2jwCB9T};aQGf1tlrJ5)4~gctjhlIz}g%%m2* z<1U@&69-o_rCSOd2_=^3H}itzWGa>R>$$coNrU{c7bA_XX&K%1jeWfSe$G-BN7(&@ z1PV+78CwvOK0@`mxHjmvyt1;bp)vX{!|i4-fk5CAMJX-GZqp7K=q> zf`S>(;KH?xE4>3k!=I8yn57@9O@1yRx#j z!C(lZwSU0y`TXILvDw)<9*;*Lk^}<5;v$a6<5OugmsQJ9AtxZQUhd}sE5d9L06=A& z&RToNU!{FBb{7YLPh;P~Tew?DB+}_X(V&%u#{HNm&s|uf-nfAb0sK$6415&+1a1!B zgujCm;fZitRAXOVUjbXCx99)RcgjXzgKENe!_`qHC<)Y2lsL*5C5LiAxuN!>3{i3p;D)N(X5&W}nsc4=A(wEcVaG$xSDeEg?>Uw@>$r3}N*;~W_zagr znWOUh+Pt^j5dQ$L`GL!vaD?~Y?)=$%XCyUipgZ8?K#J(DV}z2J5ybV8ZtS7=v=Aex z3_Qa>M7lYnK8cH{-pxM~k|1vXaWvI>`l8(o^!3XcA7kKT%X^s*gM@So3mxw`Pu;hO z?#DjbQ#I$7Y!=Tt{Lv9)bHZ@4vH0M?fug;cH?+;TS>^l&TUus$C|z6O(ts^9%Hui& z_#_rE@0Tr7ZPPpZa;!!!!~CvcUurH-IDi0GKx&_vB_tdSQcM;R>I)*dq1OAb%7BWO zLOlzCkxM($+wO=8x6>@k8_df% z&jB&vd&!P3dfEm2wSBF}QoId1Q$Q_#^k;n`rlDy~9R@bW6XWjU{46RMbiqr?I{C5$ z>>5U&9F4gfXos)g!c1y+bp~4FiSlncuC(5>$K!mIu3p5l_C8Wq@pWqOwJ2xEKwu#J z6~h4nvy)^-Z8wMjDSJM>S}7|72K6>rVcM`F$fr{fUk4ykL^bM4!zw`zuoUrZ=K-HQ zfR7!WN^B`}$QUzcPXH1EZ0laXVUwxwwC=*R+PO9fyAxH=4?#gsds-zG6rU;fHttvF z1ZO=)etmKy%k`|WaGIx3F&KlqAY%g}`z;Y@7r!a|Hl71eONeZ@m}gZl=wDO}4DuP(2Crz7VpdTQ z(t0K741h0AQM$U39xmeR*Ddx|Ak6cP{Uzra?^BZz3cz;lKe8)P2e^f@4I$?jj(EsE zH=+O~7BOqp?JcoM54K58qC%Cjmh7z>ssu@yaKP;3z|PXW0aLd4(^%6nH`_%MU};Rj z2#dEeF{gDwRArZnTf8ocq{i>S?hhfE$E#>#{=fQWdbp9BY`?umMnn*Q!^C%bo%+xw z{)=Q`?DS%3P|xevI2SYOdO&ZR*8r{k8j1v7XbV&H59It*)1S-_E-u`Ihqg zG)sLxC;|Xm<-oKwyLs_ea4>Q9mci60^7_QYgq?r1KhscIvdXJ%?NQ}X%4Calbwm$d zg2QQXI4bm&(_t*3RqGn1J5i%Wu z!tkD?ck_!*f^}*!{h}*bPhRDAsh$8D=Xw_$q0veOlg9f1p#8na5blP#|NZyL$)+X2 z9i0us*}8F+PwuJZnSM^gzxDEdiD=6oEnXZR9@fls@V~mi3<}CV_r=V z){_F-k@}C!cLTtcu)_xq-0b=ssCloe%4IVNmqJXtZ!*T-+~E!0{fIM+yv%>`a{I?_ z?cF~*N?H=Tcte{>$rE|%NfA5S(}>M`1$yhs9l_}@`|EpCH`ou@6~?$4w|Jh{8Kbo} z=`WyCLU<2B-Gfp-x^g;nGwVySzTlpPaze|3e{1VNRZvc~d^X{?r*ai5heyjFW(==) zH0dfha6zradt1E^gS$~y+!G(ZKfLy!`WTl!+7-}4 zYhKz4IuJ?hL7lH2KG~fvICjjvOgc?2qlj_$7un~<5}I?@v_4OT$4BaoC;2osaEHHg z4*7IOCA2i>zqKn!D}(nZF67hm>f_rnn6<|In<3|6pq)9mR z-0E<&Vzm43MH2BuTVIbFu(i(r64=pHehS#=E~k%Z0`Bd+KGE1(ODA_4a zjuO}ogeYM5KF)ZOo35&Bt(evV36aFY(6=3_x%NluZ4}d6c7=#wPp!UvW}6|cY!*uz z! z$scm~#2N{_!sCp@+%8-G9`Y_UGPlbnL5wVgj>$c2HJ8ek#UA^Y*Ac)f=q1Ed7`Qw* zF)??xLI9#Xe1f3 zAFG9qb6m;wQGIGXmtq7B*@Klu+to-|8q;hprAUvfDE?Ddxv)S%c2U`ufI7au8|{&s zZOsSB8faZd^W3Y}W-?@B^t-Vmu>bbpZ(HS`Qielm2z#qvvVwYbpw!LE=<t_t$hXF7~LLAk*_)i^b2Q6mFM%zgRM1eWKv2T3JYXfwA(9 pTHiyCSw>T#F%(hZ_96sVX=yX@h;^W)x^RvHPIm5R8*Bm|{0AtJ{L%mb literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/sprite_icons.gif b/src/errors/static/js/yui/build/assets/skins/sam/sprite_icons.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa26094f60eef65b2c1ab2d07c640cd44140f701 GIT binary patch literal 142 zcmV;90CE3ENk%w1VGRIe0FeU#Om)^pYRHDA>;M1&A^8LW00093EC2ui01W_S0007C z95kr{E9hW)kg8}e)|X1{JzSPeVx$D$6maef$MQ_q_KoNI&iDQh3JQm-Q4w_PBptF7 w%=sdQe$=YSiB$6Hpu6h6zFR_6TSgi*$+!*kLWF1weWSWuR1cJ%D8nEU_VGTr;c V6fkSY!v>(~44$rjF6*2UngGkaL0kX; literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/tabview.css b/src/errors/static/js/yui/build/assets/skins/sam/tabview.css new file mode 100644 index 00000000..e353de7d --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/tabview.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-tab-panel{display:none}.yui3-tab-panel-selected{display:block}.yui3-tabview-list,.yui3-tab{margin:0;padding:0;list-style:none}.yui3-tabview{position:relative}.yui3-tabview,.yui3-tabview-list,.yui3-tabview-panel,.yui3-tab,.yui3-tab-panel{zoom:1}.yui3-tab{display:inline-block;*display:inline;vertical-align:bottom;cursor:pointer}.yui3-tab-label{display:block;display:inline-block;padding:6px 10px;position:relative;text-decoration:none;vertical-align:bottom}.yui3-skin-sam .yui3-tabview-list{border:solid #2647a0;border-width:0 0 5px;zoom:1}.yui3-skin-sam .yui3-tab{margin:0 .2em 0 0;padding:1px 0 0;zoom:1}.yui3-skin-sam .yui3-tab-selected{margin-bottom:-1px}.yui3-skin-sam .yui3-tab-label{background:#d8d8d8 url(sprite.png) repeat-x;border:solid #a3a3a3;border-width:1px 1px 0 1px;color:#000;cursor:pointer;font-size:85%;padding:.3em .75em;text-decoration:none}.yui3-skin-sam .yui3-tab-label:hover,.yui3-skin-sam .yui3-tab-label:focus{background:#bfdaff url(sprite.png) repeat-x left -1300px;outline:0}.yui3-skin-sam .yui3-tab-selected .yui3-tab-label,.yui3-skin-sam .yui3-tab-selected .yui3-tab-label:focus,.yui3-skin-sam .yui3-tab-selected .yui3-tab-label:hover{background:#2647a0 url(sprite.png) repeat-x left -1400px;color:#fff}.yui3-skin-sam .yui3-tab-selected .yui3-tab-label{padding:.4em .75em}.yui3-skin-sam .yui3-tab-selected .yui3-tab-label{border-color:#243356}.yui3-skin-sam .yui3-tabview-panel{background:#edf5ff}.yui3-skin-sam .yui3-tabview-panel{border:1px solid #808080;border-top-color:#243356;padding:.25em .5em}#yui3-css-stamp.skin-sam-tabview{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/test-console.css b/src/errors/static/js/yui/build/assets/skins/sam/test-console.css new file mode 100644 index 00000000..afbd4ee8 --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/test-console.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-testconsole .yui3-console-entry{min-height:inherit;padding:5px}.yui3-testconsole .yui3-console-controls{display:none}.yui3-skin-sam .yui3-testconsole .yui3-console-content,.yui3-skin-sam .yui3-testconsole .yui3-console-bd,.yui3-skin-sam .yui3-testconsole .yui3-console-entry,.yui3-skin-sam .yui3-testconsole .yui3-console-ft,.yui3-skin-sam .yui3-testconsole .yui3-console-ft .yui3-console-filters-categories,.yui3-skin-sam .yui3-testconsole .yui3-console-ft .yui3-console-filters-sources,.yui3-skin-sam .yui3-testconsole .yui3-console-hd{background:0;border:0;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.yui3-skin-sam .yui3-testconsole-content,.yui3-skin-sam .yui3-testconsole .yui3-console-bd{color:#333;font:13px/1.4 Helvetica,'DejaVu Sans','Bitstream Vera Sans',Arial,sans-serif}.yui3-skin-sam .yui3-testconsole-content{border:1px solid #afafaf}.yui3-skin-sam .yui3-testconsole .yui3-console-entry{border-bottom:1px solid #eaeaea;font-family:Menlo,Inconsolata,Consolas,'DejaVu Mono','Bitstream Vera Sans Mono',monospace;font-size:11px}.yui3-skin-sam .yui3-testconsole .yui3-console-ft{border-top:1px solid}.yui3-skin-sam .yui3-testconsole .yui3-console-hd{border-bottom:1px solid;*zoom:1}.yui3-skin-sam .yui3-testconsole.yui3-console-collapsed .yui3-console-hd{border:0}.yui3-skin-sam .yui3-testconsole .yui3-console-ft,.yui3-skin-sam .yui3-testconsole .yui3-console-hd{border-color:#cfcfcf}.yui3-skin-sam .yui3-testconsole .yui3-testconsole-entry-fail{background-color:#ffe0e0;border-bottom-color:#ffc5c4}.yui3-skin-sam .yui3-testconsole .yui3-testconsole-entry-pass{background-color:#ecffea;border-bottom-color:#d1ffcc}#yui3-css-stamp.skin-sam-test-console{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/thumb-x.png b/src/errors/static/js/yui/build/assets/skins/sam/thumb-x.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4bcbd48c849515b83613901a9b3b80c2ee52f0 GIT binary patch literal 3873 zcmb`~jAYCFU;sb(!NQ3Zz^pH{lgLKCb(nxogbmJf)-8Hmy!_YNDNDBxk z-Mr`dAKr6ad#`JsPkXK3{o$O*4=Qp*_|NbG03cG3msSTW3Ap5OF~R+XrcpUq@EqlJ zTmXRJ>3<6Y$oxtT0Qjob5XgrQRt~NXE>;eX^a>CNy`!^(rS&HZ0PsM;HDFMUT}si5 zl~XCjh=6282XzWudUdJj0P+N8HU>P>_Yn-aixg^IPh@1UXa{p5Fk@o_Vkp$u38U~A za5fq8VuSM|qK0qQyz_16+Ag-o?i=RCcFIrSb>ldlxP+C@^vo z0Q#pE5z>IwJD`00W0VY_%?*%SD)tHi3mgEqf|jK`P~8Z0B1s8q0bD|WTP-5=HGt&} z7!NWsdH^9A0J-e3mdM{Xm83gt;G{BYMVgs}WCHbYIh=5`v^Za|A{D6KkPDbRGRc(S z?Dou{;SJ;``FS!5067U1V7DiC9!TO!BvK$2L2Sga*Ma@;($sY0ervqUQ33$gT>U2R z*}3YT1-!!!u)EKDb%>fQ;DtJDgh!hjR+eq+mOE>+p zSHZMdn~i)!jm#-lIy2^kx8P-@RO0KtS5pt>>#OWHm}0AMfodBu4DSSvVgobGb43f7qlgoJp1XwC0Ist&8G!rLuxK4Zk7XYMl0@uJ0H@l0qEf5b&auD~a2?Htu!!$~pF&399BlMD?OCF0Xnu&fWf?VyT zV!~T_9`z_Fy{0_fv8eMSp>TcKmV|eM0B_K3SeqPAa$v2R=nP>4q`6q|S%_>N!GyUh zPi7otPS%8T{WH-Rf!v*mGAj~PoET()yYm+{4qxvlZqEK5shWS;@si9&YF?HTmi0fY z{#cIL8hK_mUgM5M7AVt+CxGQHMQ`##QeIn0TV+AMnEp8v{}U9RARcCjS~ttfq+-Q- z=9VW{z0{_>JmK2%?2L0{aZkBOy(1vKf=pzQ5MGw%_(uvg-=R}vQ?gU`>WsVWC0YFP z&lr=2Q0BI^I6}$n^lt`3H{qK-n|zzJn+(T#_;6DRr|*{<>#XX-Ht%V+NVoX6ur1Pg zB{lOi)t8HNp-sw6JugltA-Da|9Y!VyNL;DXYn+u~C9IlUk-(3jeUL zL8}2Pc~=}>3M+PiihuXhxr@Zs=~3!Yg?v}bsWIAU>!&9$qp9;?XRswI3;P`SwwJkP zY|+P!tu_6Qt~FY;v?Nyu!uOs}t4{qS*-{*5Bi-rptE&p$4r@``iC@$T`O)k3*R+NF zO3geL`nIL1X{p*}@?~mea{KK9l?O%e!giTfotr>n$$|GQ`Ydv=IOJpaj>e+KauI$J zrLw5-StVzwZ2@g=tF(KEebHfh_7B5=Y$b=H70>pa>*u~)chEb#>!LF`LT&6iLMCi9 zA(C38@2!)A2p!h|`mY+qphp5yV3J~zwic4mJSmbtEBi&3B*wa5e}iemuHUXdpBbB( zfmu;`Px&xYUAejNb>TaucS-|eqhonva~W^5M0w_Ucd~Y}=Cf8CjdeYA*%8HvCJTky zP2EDBLqwZ>sIHJsfwrcuL7i*`yyDedYej3(lcHvoB$cx4Iap8iU&Iiiq>-k2YXKWw ziLgWXn!rq{V2yp1J%>r{Nxm(9*X<+ou=+` z!L-Lo#~1iE5Kl*5_gcd>vZm!=RIp~3;FE~xNX4KL&NMO3EZY9%!S>Dfu4hgLYhF`l z@T|J5?t@}<)uF(l^miwtfR0ClRJB(ar zTnSng^VN+7?xhzdM^s|xV$R<-#5P0(S9n)+j79}J8wVRlRC^qao)pk$!lqnk@FABK)tabdK@dF|qXWK2%8B!y&LP({#IR|SLB;P3bfhKrqa zWCGHfIP`LF!5N&2<>N+JZW#;Czl{DtJ2rfsnRQ1FdkK* zDvtMW*~CgYZA4IlE&MIw{hXFMqqEv@ZG}&Y&xJVIDh2F6{aC#{I0;{euM=!|Q>Aka z8aR69BD+sRizrJt$=HQcC6ppm{!RWPNy=7C8T0D+sr#!~e9vyWZrDq%NrB0T1&BV| z3zcJeHf68G-wADRJ(>FW3fQ-rLs&}U+mwiuma~MjDKp*Z?RZ6n+j)W$6XKnuN*R=s z5U@Siwx!!hxkYI0eV=`FBiD-*oFUt~`0~d(9QX*S!e3Bb)_FFZT9}2FWye_Luuy7Q z_M5ST(Yj%Dyx`ZPZx07#-DGQth=MRhEe<;E?e=mTp;{3qPc;4p#p5?&AF<0tnxYVF zcC)Hw2U=;Be(lU&%C>=qUBf|L4H&lj1e*9;p}zY|^9Kg1+FUxT4JOxNa9S~n$f!zk zG*udf{{rih#};k4!*EB&QgVGsS#PuXxaE}P?)C~twjOb6Y1(!gu|3fus-9@|WBtL| zxeS^sZHyJ&8jOH6=XZ!SwOJGmA;;c{L%%~$q1RA>!>Q#4lle>g$wON2wsZd9vuM4x zi#xHQA81VsP32k3S&JKmo4O0}%E;2)%hVe?g9;Tpr-K2^Da<<@MqydV-rxy5*wui;Gp<3Ew}t;{N6BfCA@hhFUs-j)};wAq5l<s#g8EmJ|4r>;*J~wJf;F;b`UR@agyj}r7KrjGYJ%Du=06udAz@9Mx2&V%8l|!OY zpDX}i0w0v1GBID`E-x=9CZ|?^t{om8ot>R+Y;68LKHl5g-`V+9UthnpymE7Mvxq|X z4-9Va?7-phySux&`T3@nwugs@ipuK7rq+(muB)r7larHQySv>zz0S_g6ciNH)YSO} zMdK5b3yY|#>Y9VY!#{ui9{u^#(AaWuapB?NQCU^Jw6wg4LM<+$R)7ASo}M{4I9Og@ zIXgd3PEOt2+^TOtEG;kp{d>H>|9gIZerkFq>A&}z+uJ)o*VeADuM?9}Zf|ctfBt-V zbu~JM+}+!ootsZdO&=Z^{e5r%jsv`*qN1Xbl9IBrvWkj|s;cUT4l9H0r($ccB zvhwosii(QL%F3#$s_N?Mnwpy0+SU!XNG@V$Ky$8Rug(AVM75$NmBUr@~PF{ttM^c3`betr&m1CfJ7 zK{Fs`&9!7@_&|-|yg}g0v*m1GO|MC-q2@JY+2h zqh2m_H`2T>1b6$n8u{An9m(c8&(w;diC7!&i-vOniYRA zx*=;ii2fDuZ3bh69IyU_91mAe#wULL8gtpH7V~&;*FFBs&0THT?amuOy?(s!`x9CO PHVG)ms7O~z83+9jUC{MX literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/thumb-y.png b/src/errors/static/js/yui/build/assets/skins/sam/thumb-y.png new file mode 100644 index 0000000000000000000000000000000000000000..0b17a0ed218734ec8dc436d889d140958fb2d270 GIT binary patch literal 3860 zcmb`}pKTmH+D4$gx$@<)!y-~9RPUGq4Z%; z{Vhi6)5RkN^$2*9x~m=oDZ8FRG@L$xo0o%(_GJV|&Mbp&`)ws9BG$g_2*TJ{cnpIs zA7vEz49OZtZftN~MAX2=vR|IlRLkkc@OAyP%x2jks&<3~OG=rdDxxa}rz}>ufBQ#p zZ&%Oqnt)s&IhPwiOImBo@$QO~05}Vfl6vw0OY#jM@SdO`1+bb(?9+SUH#FM{>1G7* z5CW`c!gF;}I6WZe8>>(N$SD)RQEA-zKsFIzIcQ_O3h3|ymXAJdOaO4yS-KwqV4B3i zK#-jPu-~zZPy`$#fwGZTQA&W(Q-I!Hy-Na^;Rl|o8QQA?RSf_ZM@vxykWvCqbt6I_ z14Mp+WgjP}HxQBz&?_GpO8t3KLA%KdPAa`d3d1F#6lhAy?@nT9C~%(#r^fVzUfk** zs|-1T4xe-u;XqNEABRH#ke$E)c6)f`jiau>;lyLn)E4~PZNxVZtgTnC*GEd-e4YDnkI3OQMfUsCX!{x(xq2XbYtHb{?Z4S5<-}uVXV=%(W?ptF zm|6`O`d`C3EU<=GZ_fjyE>Dktd|TlP6gCf3Av*ifF?6Jne{Up_EW~<#BTnVAf#T+p zZQ?gRl92%Ev`2W6C{ zJ$I{Kl@T^a9@~smdlAtEDq+dQiM$lpt?tXK8fh45&8QZ!-{TU!JxBJ8j4(vE)9v#vW@}-ga3fVd&MCUMJA$-+5sizpFV9V$xa+{=aOzn3)3fRJ zLh^mB)KSCn!7Y`asXqyiyeO%{7=n8vU_2~HW)fx?ix+ccnnnT3L^Mk;^yxF9owUt# znsiqKBVIJ`M}~v}^5mDv+{vuGg3#iUf|A7&3WGy~L1Msx+G4e(hn>QPrPiB|!-=Xi?0ukE z7kBmW?8gth&1qL`&C${&#W@lXk(VNdwR(q1_Oc|aY3^s4o?2v^JcX%;0a1(e`;S*1 zvlfVIV1(?~G%*E_3nVopHF}4KhI5Cf(#4R{Les*V$W7!la;d@6#M^`qU4(A5 zQ>$4sDKOqcx449wNEqiE8JL*YDwm_mA5JxwHy7S6#AqS3O0%Y5omGF({pjKbma6p` zVtfVK8SQTcvu1)dbXRolAzBgsP5z&+q)Dj4XQ@lsOxOb6)p^jrc=cj21DClc>)(Bp zvLy&J8lfGT5m`mw8GPL3h|)(+sKA(Dn0LX45z&$AL4yLRG6G1}o`t^FwU?g9?&izB z`2w%A;zUR0XKL2G%^vmNcW07~GoqdoWy6a=I6kn2`IxUq2XhXCEVfCAw zf;NH)hUL>$4f$Rrr&jw+GAA+~Ush#SrJgMcFB)46J;OHiH4JKZx@K8~EW9aE{cWIsreYMoFwTtfD&uC?AD}hZ=^-#=1oq-5nE374sUKhrC--{HvIvxQK)a zX-ib{zZBz@DG_)hHTSGZv`Mx{z}|Rh(gvhNx$W3d5aih9v6`c~p+(Gxt6L->Ejf?3OVVjg-3&o_v+z)|0ST#AQ;A zQD|Q0N$t{I!_#X6f18wQ^Np;1gT^QRD`*HiNjYa+}Q|gqG)QwbX7pmF0I;y2t zb-TwWN_fH4VIF*QFdBl%Ym;hhu`BGy4NJ;Gze10of1%=g;|ujx(`PPYd#rvfC!)V5 z@un@OS2F$I@CF11nv?dEb{A?FwWqQbktJJaDHqP>fV39U8DBB_^HIH3_fS}tZ=$1`mAl8k}aLyr+P8>A;zz4nPlSM4{R_t z!8ZyS2N}vp{frA!Ytts}A(^qM?M2^975u+6nW9q0J}(cU{f={6K@$kr!AJ}$8RZ`! za6WH|&qe!f+TfPn(75h5(RwbAE8RqIO14Pi%nlko4{Gr1cMKa1Gb&$LIB$DyOI;%- zw0oN~n=>jfW=@zr-`09R`_nDftY^4|qgJ0kj5kx0SrXCGb`vYyLGNUX?uTy0$zLPl&yxU-n9bFT+0m>2~E&L(%Jabsy?IjIM!h&Jbs`B&T6 z9hORbPe;%FZ~fjPLa&crUF^1d&3m!!=Pl7_uYF|y#B<|tUVW@TT6lqAK_G632-6NP zZAAF-;QuBOOkPtS0IFj@Ug#pgJ-dyno+beJJ_G=GFaVt2fOQK1-aiF^ZA$=nkp=)v zu89`i$^bwJ=x9KdVm`;6ot=%2jW7LJ-rL(hK0aPuUHfxzu)V#rx%soMu5Nx|@#5lQ zb`Iau+qbc~i9(^SuCAu0ryHAEZfz*6Zrg^9u`q{v7P={Fzg&G(byn6M@(9qDx$jI2(*u=!d)YR0>%*@=}{PpYC78VwkmX=mlR@T@~E32xis;jGOYHDh0Yr*vE>+8{IbVEZ!V`C!*gK27NYHn_B zX=!O~ZTgww5?(XU7>Fw?9>+9?9?;jW#7#tiN8X6iN z9>(EtBO@cDqoZSEW8>rF6JXxozfVq1PECQDre|hmWpP)4`@a-KC$1gB#(AVDnKIrTBA5hG}0jTll=m_+Da&iKC z1CfJ7K{Fs`&S^hN+yB!846^(#13x>YrYH~fp39t=rVDyX zdux}AR-&ARDL8>sS4&LpRu?c&MD4hs zk8U``0XR@u!qj^W3Gom-R6B zjtV5V6Qh$6oySqisUY0MiR4sZw^@pil*7jBM?aUxiq1)v?rGJ!8LR%K8%^BRDkvAf z65rX-Zus6v;LyK#xz_5`ymGHfF9o|4`SEu4^P)NcPN0Nvd)nE(Kk0027x0C;#DRa8`{sHo%PG<|)2oB#mE#l=TPMT-CcD**wPmX@}* zDl01);o;%?`}<7*0GOB~XlG|XKM!L70Emc)TU!<`E)9JE05LEw)YR0+$1d{n^4q1Q z;^@RCr$Pl*MiYF${*sPBO^Mu*^*5zW-Zwwuhe9bM9e3MLvD9qd$rzlF-|yUMuy{ zPH$y-v#lOw6(ssjfnDX%g90BwsQ`}EiX4;x17+Kl-8_8k7{QTsP6>?ZpTsnEtKXdi zboH<&ob1;r`c7pE?AG5HwH1UFq`A*nKQF2*B=bClD^&Q!kl8TIz@F5>S#7hrQ_FTJ(L|a$Z&WR!gdg$&7~+8>q_+S7002ov JPDHLkV1fX+^ilu- literal 0 HcmV?d00001 diff --git a/src/errors/static/js/yui/build/assets/skins/sam/widget-base.css b/src/errors/static/js/yui/build/assets/skins/sam/widget-base.css new file mode 100644 index 00000000..a7264da2 --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/widget-base.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-widget-hidden{display:none}.yui3-widget-content{overflow:hidden}.yui3-widget-content-expanded{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;height:100%}.yui3-widget-tmp-forcesize{overflow:hidden!important}#yui3-css-stamp.skin-sam-widget-base{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/widget-buttons.css b/src/errors/static/js/yui/build/assets/skins/sam/widget-buttons.css new file mode 100644 index 00000000..76b58709 --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/widget-buttons.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-widget-buttons .yui3-button-close,.yui3-widget-buttons .yui3-button-close .yui3-button-content,.yui3-widget-buttons .yui3-button-close .yui3-button-icon{display:inline-block;*display:inline;zoom:1;width:13px;height:13px;line-height:13px;vertical-align:top}.yui3-widget-buttons .yui3-button-close .yui3-button-icon{background-repeat:no-repeat;background-position:1px 1px}.yui3-skin-sam .yui3-widget-buttons .yui3-button-icon{background-image:url(sprite_icons.gif)}#yui3-css-stamp.skin-sam-widget-buttons{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/widget-modality.css b/src/errors/static/js/yui/build/assets/skins/sam/widget-modality.css new file mode 100644 index 00000000..b6e1efc5 --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/widget-modality.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-skin-sam .yui3-widget-mask{background-color:black;zoom:1;-ms-filter:"alpha(opacity=40)";filter:alpha(opacity=40);opacity:.4}#yui3-css-stamp.skin-sam-widget-modality{display:none} diff --git a/src/errors/static/js/yui/build/assets/skins/sam/widget-stack.css b/src/errors/static/js/yui/build/assets/skins/sam/widget-stack.css new file mode 100644 index 00000000..9229266b --- /dev/null +++ b/src/errors/static/js/yui/build/assets/skins/sam/widget-stack.css @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +.yui3-widget-stacked .yui3-widget-shim{opacity:0;filter:alpha(opacity=0);position:absolute;border:0;top:0;left:0;padding:0;margin:0;z-index:-1;width:100%;height:100%;_width:0;_height:0}#yui3-css-stamp.skin-sam-widget-stack{display:none} diff --git a/src/errors/static/js/yui/build/async-queue/async-queue-coverage.js b/src/errors/static/js/yui/build/async-queue/async-queue-coverage.js new file mode 100644 index 00000000..72030a06 --- /dev/null +++ b/src/errors/static/js/yui/build/async-queue/async-queue-coverage.js @@ -0,0 +1,680 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/async-queue/async-queue.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/async-queue/async-queue.js", + code: [] +}; +_yuitest_coverage["build/async-queue/async-queue.js"].code=["YUI.add('async-queue', function (Y, NAME) {","","/**"," *

AsyncQueue allows you create a chain of function callbacks executed"," * via setTimeout (or synchronously) that are guaranteed to run in order."," * Items in the queue can be promoted or removed. Start or resume the"," * execution chain with run(). pause() to temporarily delay execution, or"," * stop() to halt and clear the queue.

"," *"," * @module async-queue"," */","","/**"," *

A specialized queue class that supports scheduling callbacks to execute"," * sequentially, iteratively, even asynchronously.

"," *"," *

Callbacks can be function refs or objects with the following keys. Only"," * the fn key is required.

"," *"," *
    "," *
  • fn -- The callback function
  • "," *
  • context -- The execution context for the callbackFn.
  • "," *
  • args -- Arguments to pass to callbackFn.
  • "," *
  • timeout -- Millisecond delay before executing callbackFn."," * (Applies to each iterative execution of callback)
  • "," *
  • iterations -- Number of times to repeat the callback."," *
  • until -- Repeat the callback until this function returns"," * true. This setting trumps iterations.
  • "," *
  • autoContinue -- Set to false to prevent the AsyncQueue from"," * executing the next callback in the Queue after"," * the callback completes.
  • "," *
  • id -- Name that can be used to get, promote, get the"," * indexOf, or delete this callback.
  • "," *
"," *"," * @class AsyncQueue"," * @extends EventTarget"," * @constructor"," * @param callback* {Function|Object} 0..n callbacks to seed the queue"," */","Y.AsyncQueue = function() {"," this._init();"," this.add.apply(this, arguments);","};","","var Queue = Y.AsyncQueue,"," EXECUTE = 'execute',"," SHIFT = 'shift',"," PROMOTE = 'promote',"," REMOVE = 'remove',",""," isObject = Y.Lang.isObject,"," isFunction = Y.Lang.isFunction;","","/**"," *

Static default values used to populate callback configuration properties."," * Preconfigured defaults include:

"," *"," *
    "," *
  • autoContinue: true
  • "," *
  • iterations: 1
  • "," *
  • timeout: 10 (10ms between callbacks)
  • "," *
  • until: (function to run until iterations <= 0)
  • "," *
"," *"," * @property defaults"," * @type {Object}"," * @static"," */","Queue.defaults = Y.mix({"," autoContinue : true,"," iterations : 1,"," timeout : 10,"," until : function () {"," this.iterations |= 0;"," return this.iterations <= 0;"," }","}, Y.config.queueDefaults || {});","","Y.extend(Queue, Y.EventTarget, {"," /**"," * Used to indicate the queue is currently executing a callback."," *"," * @property _running"," * @type {Boolean|Object} true for synchronous callback execution, the"," * return handle from Y.later for async callbacks."," * Otherwise false."," * @protected"," */"," _running : false,",""," /**"," * Initializes the AsyncQueue instance properties and events."," *"," * @method _init"," * @protected"," */"," _init : function () {"," Y.EventTarget.call(this, { prefix: 'queue', emitFacade: true });",""," this._q = [];",""," /** "," * Callback defaults for this instance. Static defaults that are not"," * overridden are also included."," *"," * @property defaults"," * @type {Object}"," */"," this.defaults = {};",""," this._initEvents();"," },",""," /**"," * Initializes the instance events."," *"," * @method _initEvents"," * @protected"," */"," _initEvents : function () {"," this.publish({"," 'execute' : { defaultFn : this._defExecFn, emitFacade: true },"," 'shift' : { defaultFn : this._defShiftFn, emitFacade: true },"," 'add' : { defaultFn : this._defAddFn, emitFacade: true },"," 'promote' : { defaultFn : this._defPromoteFn, emitFacade: true },"," 'remove' : { defaultFn : this._defRemoveFn, emitFacade: true }"," });"," },",""," /**"," * Returns the next callback needing execution. If a callback is"," * configured to repeat via iterations or until, it will be returned until"," * the completion criteria is met."," *"," * When the queue is empty, null is returned."," *"," * @method next"," * @return {Function} the callback to execute"," */"," next : function () {"," var callback;",""," while (this._q.length) {"," callback = this._q[0] = this._prepare(this._q[0]);"," if (callback && callback.until()) {"," this.fire(SHIFT, { callback: callback });"," callback = null;"," } else {"," break;"," }"," }",""," return callback || null;"," },",""," /**"," * Default functionality for the "shift" event. Shifts the"," * callback stored in the event object's callback property from"," * the queue if it is the first item."," *"," * @method _defShiftFn"," * @param e {Event} The event object"," * @protected"," */"," _defShiftFn : function (e) {"," if (this.indexOf(e.callback) === 0) {"," this._q.shift();"," }"," },",""," /**"," * Creates a wrapper function to execute the callback using the aggregated "," * configuration generated by combining the static AsyncQueue.defaults, the"," * instance defaults, and the specified callback settings."," *"," * The wrapper function is decorated with the callback configuration as"," * properties for runtime modification."," *"," * @method _prepare"," * @param callback {Object|Function} the raw callback"," * @return {Function} a decorated function wrapper to execute the callback"," * @protected"," */"," _prepare: function (callback) {"," if (isFunction(callback) && callback._prepared) {"," return callback;"," }",""," var config = Y.merge("," Queue.defaults,"," { context : this, args: [], _prepared: true },"," this.defaults,"," (isFunction(callback) ? { fn: callback } : callback)),"," "," wrapper = Y.bind(function () {"," if (!wrapper._running) {"," wrapper.iterations--;"," }"," if (isFunction(wrapper.fn)) {"," wrapper.fn.apply(wrapper.context || Y,"," Y.Array(wrapper.args));"," }"," }, this);"," "," return Y.mix(wrapper, config);"," },",""," /**"," * Sets the queue in motion. All queued callbacks will be executed in"," * order unless pause() or stop() is called or if one of the callbacks is"," * configured with autoContinue: false."," *"," * @method run"," * @return {AsyncQueue} the AsyncQueue instance"," * @chainable"," */"," run : function () {"," var callback,"," cont = true;",""," for (callback = this.next();"," cont && callback && !this.isRunning();"," callback = this.next())"," {"," cont = (callback.timeout < 0) ?"," this._execute(callback) :"," this._schedule(callback);"," }",""," if (!callback) {"," /**"," * Event fired after the last queued callback is executed."," * @event complete"," */"," this.fire('complete');"," }",""," return this;"," },",""," /**"," * Handles the execution of callbacks. Returns a boolean indicating"," * whether it is appropriate to continue running."," *"," * @method _execute"," * @param callback {Object} the callback object to execute"," * @return {Boolean} whether the run loop should continue"," * @protected"," */"," _execute : function (callback) {"," this._running = callback._running = true;",""," callback.iterations--;"," this.fire(EXECUTE, { callback: callback });",""," var cont = this._running && callback.autoContinue;",""," this._running = callback._running = false;",""," return cont;"," },",""," /**"," * Schedules the execution of asynchronous callbacks."," *"," * @method _schedule"," * @param callback {Object} the callback object to execute"," * @return {Boolean} whether the run loop should continue"," * @protected"," */"," _schedule : function (callback) {"," this._running = Y.later(callback.timeout, this, function () {"," if (this._execute(callback)) {"," this.run();"," }"," });",""," return false;"," },",""," /**"," * Determines if the queue is waiting for a callback to complete execution."," *"," * @method isRunning"," * @return {Boolean} true if queue is waiting for a "," * from any initiated transactions"," */"," isRunning : function () {"," return !!this._running;"," },",""," /**"," * Default functionality for the "execute" event. Executes the"," * callback function"," *"," * @method _defExecFn"," * @param e {Event} the event object"," * @protected"," */"," _defExecFn : function (e) {"," e.callback();"," },",""," /**"," * Add any number of callbacks to the end of the queue. Callbacks may be"," * provided as functions or objects."," *"," * @method add"," * @param callback* {Function|Object} 0..n callbacks"," * @return {AsyncQueue} the AsyncQueue instance"," * @chainable"," */"," add : function () {"," this.fire('add', { callbacks: Y.Array(arguments,0,true) });",""," return this;"," },",""," /**"," * Default functionality for the "add" event. Adds the callbacks"," * in the event facade to the queue. Callbacks successfully added to the"," * queue are present in the event's added property in the"," * after phase."," *"," * @method _defAddFn"," * @param e {Event} the event object"," * @protected"," */"," _defAddFn : function(e) {"," var _q = this._q,"," added = [];",""," Y.Array.each(e.callbacks, function (c) {"," if (isObject(c)) {"," _q.push(c);"," added.push(c);"," }"," });",""," e.added = added;"," },",""," /**"," * Pause the execution of the queue after the execution of the current"," * callback completes. If called from code outside of a queued callback,"," * clears the timeout for the pending callback. Paused queue can be"," * restarted with q.run()"," *"," * @method pause"," * @return {AsyncQueue} the AsyncQueue instance"," * @chainable"," */"," pause: function () {"," if (isObject(this._running)) {"," this._running.cancel();"," }",""," this._running = false;",""," return this;"," },",""," /**"," * Stop and clear the queue after the current execution of the"," * current callback completes."," *"," * @method stop"," * @return {AsyncQueue} the AsyncQueue instance"," * @chainable"," */"," stop : function () { "," this._q = [];",""," return this.pause();"," },",""," /** "," * Returns the current index of a callback. Pass in either the id or"," * callback function from getCallback."," *"," * @method indexOf"," * @param callback {String|Function} the callback or its specified id"," * @return {Number} index of the callback or -1 if not found"," */"," indexOf : function (callback) {"," var i = 0, len = this._q.length, c;",""," for (; i < len; ++i) {"," c = this._q[i];"," if (c === callback || c.id === callback) {"," return i;"," }"," }",""," return -1;"," },",""," /**"," * Retrieve a callback by its id. Useful to modify the configuration"," * while the queue is running."," *"," * @method getCallback"," * @param id {String} the id assigned to the callback"," * @return {Object} the callback object"," */"," getCallback : function (id) {"," var i = this.indexOf(id);",""," return (i > -1) ? this._q[i] : null;"," },",""," /**"," * Promotes the named callback to the top of the queue. If a callback is"," * currently executing or looping (via until or iterations), the promotion"," * is scheduled to occur after the current callback has completed."," *"," * @method promote"," * @param callback {String|Object} the callback object or a callback's id"," * @return {AsyncQueue} the AsyncQueue instance"," * @chainable"," */"," promote : function (callback) {"," var payload = { callback : callback },e;",""," if (this.isRunning()) {"," e = this.after(SHIFT, function () {"," this.fire(PROMOTE, payload);"," e.detach();"," }, this);"," } else {"," this.fire(PROMOTE, payload);"," }",""," return this;"," },",""," /**"," *

Default functionality for the "promote" event. Promotes the"," * named callback to the head of the queue.

"," *"," *

The event object will contain a property "callback", which"," * holds the id of a callback or the callback object itself.

"," *"," * @method _defPromoteFn"," * @param e {Event} the custom event"," * @protected"," */"," _defPromoteFn : function (e) {"," var i = this.indexOf(e.callback),"," promoted = (i > -1) ? this._q.splice(i,1)[0] : null;",""," e.promoted = promoted;",""," if (promoted) {"," this._q.unshift(promoted);"," }"," },",""," /**"," * Removes the callback from the queue. If the queue is active, the"," * removal is scheduled to occur after the current callback has completed."," *"," * @method remove"," * @param callback {String|Object} the callback object or a callback's id"," * @return {AsyncQueue} the AsyncQueue instance"," * @chainable"," */"," remove : function (callback) {"," var payload = { callback : callback },e;",""," // Can't return the removed callback because of the deferral until"," // current callback is complete"," if (this.isRunning()) {"," e = this.after(SHIFT, function () {"," this.fire(REMOVE, payload);"," e.detach();"," },this);"," } else {"," this.fire(REMOVE, payload);"," }",""," return this;"," },",""," /**"," *

Default functionality for the "remove" event. Removes the"," * callback from the queue.

"," *"," *

The event object will contain a property "callback", which"," * holds the id of a callback or the callback object itself.

"," *"," * @method _defRemoveFn"," * @param e {Event} the custom event"," * @protected"," */"," _defRemoveFn : function (e) {"," var i = this.indexOf(e.callback);",""," e.removed = (i > -1) ? this._q.splice(i,1)[0] : null;"," },",""," /**"," * Returns the number of callbacks in the queue."," *"," * @method size"," * @return {Number}"," */"," size : function () {"," // next() flushes callbacks that have met their until() criteria and"," // therefore shouldn't count since they wouldn't execute anyway."," if (!this.isRunning()) {"," this.next();"," }",""," return this._q.length;"," }","});","","","","}, '3.9.0', {\"requires\": [\"event-custom\"]});"]; +_yuitest_coverage["build/async-queue/async-queue.js"].lines = {"1":0,"41":0,"42":0,"43":0,"46":0,"70":0,"75":0,"76":0,"80":0,"99":0,"101":0,"110":0,"112":0,"122":0,"142":0,"144":0,"145":0,"146":0,"147":0,"148":0,"150":0,"154":0,"167":0,"168":0,"186":0,"187":0,"190":0,"197":0,"198":0,"200":0,"201":0,"206":0,"219":0,"222":0,"226":0,"231":0,"236":0,"239":0,"252":0,"254":0,"255":0,"257":0,"259":0,"261":0,"273":0,"274":0,"275":0,"279":0,"290":0,"302":0,"315":0,"317":0,"331":0,"334":0,"335":0,"336":0,"337":0,"341":0,"355":0,"356":0,"359":0,"361":0,"373":0,"375":0,"387":0,"389":0,"390":0,"391":0,"392":0,"396":0,"408":0,"410":0,"424":0,"426":0,"427":0,"428":0,"429":0,"432":0,"435":0,"450":0,"453":0,"455":0,"456":0,"470":0,"474":0,"475":0,"476":0,"477":0,"480":0,"483":0,"498":0,"500":0,"512":0,"513":0,"516":0}; +_yuitest_coverage["build/async-queue/async-queue.js"].functions = {"AsyncQueue:41":0,"until:74":0,"_init:98":0,"_initEvents:121":0,"next:141":0,"_defShiftFn:166":0,"(anonymous 2):196":0,"_prepare:185":0,"run:218":0,"_execute:251":0,"(anonymous 3):273":0,"_schedule:272":0,"isRunning:289":0,"_defExecFn:301":0,"add:314":0,"(anonymous 4):334":0,"_defAddFn:330":0,"pause:354":0,"stop:372":0,"indexOf:386":0,"getCallback:407":0,"(anonymous 5):427":0,"promote:423":0,"_defPromoteFn:449":0,"(anonymous 6):475":0,"remove:469":0,"_defRemoveFn:497":0,"size:509":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/async-queue/async-queue.js"].coveredLines = 95; +_yuitest_coverage["build/async-queue/async-queue.js"].coveredFunctions = 29; +_yuitest_coverline("build/async-queue/async-queue.js", 1); +YUI.add('async-queue', function (Y, NAME) { + +/** + *

AsyncQueue allows you create a chain of function callbacks executed + * via setTimeout (or synchronously) that are guaranteed to run in order. + * Items in the queue can be promoted or removed. Start or resume the + * execution chain with run(). pause() to temporarily delay execution, or + * stop() to halt and clear the queue.

+ * + * @module async-queue + */ + +/** + *

A specialized queue class that supports scheduling callbacks to execute + * sequentially, iteratively, even asynchronously.

+ * + *

Callbacks can be function refs or objects with the following keys. Only + * the fn key is required.

+ * + *
    + *
  • fn -- The callback function
  • + *
  • context -- The execution context for the callbackFn.
  • + *
  • args -- Arguments to pass to callbackFn.
  • + *
  • timeout -- Millisecond delay before executing callbackFn. + * (Applies to each iterative execution of callback)
  • + *
  • iterations -- Number of times to repeat the callback. + *
  • until -- Repeat the callback until this function returns + * true. This setting trumps iterations.
  • + *
  • autoContinue -- Set to false to prevent the AsyncQueue from + * executing the next callback in the Queue after + * the callback completes.
  • + *
  • id -- Name that can be used to get, promote, get the + * indexOf, or delete this callback.
  • + *
+ * + * @class AsyncQueue + * @extends EventTarget + * @constructor + * @param callback* {Function|Object} 0..n callbacks to seed the queue + */ +_yuitest_coverfunc("build/async-queue/async-queue.js", "(anonymous 1)", 1); +_yuitest_coverline("build/async-queue/async-queue.js", 41); +Y.AsyncQueue = function() { + _yuitest_coverfunc("build/async-queue/async-queue.js", "AsyncQueue", 41); +_yuitest_coverline("build/async-queue/async-queue.js", 42); +this._init(); + _yuitest_coverline("build/async-queue/async-queue.js", 43); +this.add.apply(this, arguments); +}; + +_yuitest_coverline("build/async-queue/async-queue.js", 46); +var Queue = Y.AsyncQueue, + EXECUTE = 'execute', + SHIFT = 'shift', + PROMOTE = 'promote', + REMOVE = 'remove', + + isObject = Y.Lang.isObject, + isFunction = Y.Lang.isFunction; + +/** + *

Static default values used to populate callback configuration properties. + * Preconfigured defaults include:

+ * + *
    + *
  • autoContinue: true
  • + *
  • iterations: 1
  • + *
  • timeout: 10 (10ms between callbacks)
  • + *
  • until: (function to run until iterations <= 0)
  • + *
+ * + * @property defaults + * @type {Object} + * @static + */ +_yuitest_coverline("build/async-queue/async-queue.js", 70); +Queue.defaults = Y.mix({ + autoContinue : true, + iterations : 1, + timeout : 10, + until : function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "until", 74); +_yuitest_coverline("build/async-queue/async-queue.js", 75); +this.iterations |= 0; + _yuitest_coverline("build/async-queue/async-queue.js", 76); +return this.iterations <= 0; + } +}, Y.config.queueDefaults || {}); + +_yuitest_coverline("build/async-queue/async-queue.js", 80); +Y.extend(Queue, Y.EventTarget, { + /** + * Used to indicate the queue is currently executing a callback. + * + * @property _running + * @type {Boolean|Object} true for synchronous callback execution, the + * return handle from Y.later for async callbacks. + * Otherwise false. + * @protected + */ + _running : false, + + /** + * Initializes the AsyncQueue instance properties and events. + * + * @method _init + * @protected + */ + _init : function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_init", 98); +_yuitest_coverline("build/async-queue/async-queue.js", 99); +Y.EventTarget.call(this, { prefix: 'queue', emitFacade: true }); + + _yuitest_coverline("build/async-queue/async-queue.js", 101); +this._q = []; + + /** + * Callback defaults for this instance. Static defaults that are not + * overridden are also included. + * + * @property defaults + * @type {Object} + */ + _yuitest_coverline("build/async-queue/async-queue.js", 110); +this.defaults = {}; + + _yuitest_coverline("build/async-queue/async-queue.js", 112); +this._initEvents(); + }, + + /** + * Initializes the instance events. + * + * @method _initEvents + * @protected + */ + _initEvents : function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_initEvents", 121); +_yuitest_coverline("build/async-queue/async-queue.js", 122); +this.publish({ + 'execute' : { defaultFn : this._defExecFn, emitFacade: true }, + 'shift' : { defaultFn : this._defShiftFn, emitFacade: true }, + 'add' : { defaultFn : this._defAddFn, emitFacade: true }, + 'promote' : { defaultFn : this._defPromoteFn, emitFacade: true }, + 'remove' : { defaultFn : this._defRemoveFn, emitFacade: true } + }); + }, + + /** + * Returns the next callback needing execution. If a callback is + * configured to repeat via iterations or until, it will be returned until + * the completion criteria is met. + * + * When the queue is empty, null is returned. + * + * @method next + * @return {Function} the callback to execute + */ + next : function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "next", 141); +_yuitest_coverline("build/async-queue/async-queue.js", 142); +var callback; + + _yuitest_coverline("build/async-queue/async-queue.js", 144); +while (this._q.length) { + _yuitest_coverline("build/async-queue/async-queue.js", 145); +callback = this._q[0] = this._prepare(this._q[0]); + _yuitest_coverline("build/async-queue/async-queue.js", 146); +if (callback && callback.until()) { + _yuitest_coverline("build/async-queue/async-queue.js", 147); +this.fire(SHIFT, { callback: callback }); + _yuitest_coverline("build/async-queue/async-queue.js", 148); +callback = null; + } else { + _yuitest_coverline("build/async-queue/async-queue.js", 150); +break; + } + } + + _yuitest_coverline("build/async-queue/async-queue.js", 154); +return callback || null; + }, + + /** + * Default functionality for the "shift" event. Shifts the + * callback stored in the event object's callback property from + * the queue if it is the first item. + * + * @method _defShiftFn + * @param e {Event} The event object + * @protected + */ + _defShiftFn : function (e) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_defShiftFn", 166); +_yuitest_coverline("build/async-queue/async-queue.js", 167); +if (this.indexOf(e.callback) === 0) { + _yuitest_coverline("build/async-queue/async-queue.js", 168); +this._q.shift(); + } + }, + + /** + * Creates a wrapper function to execute the callback using the aggregated + * configuration generated by combining the static AsyncQueue.defaults, the + * instance defaults, and the specified callback settings. + * + * The wrapper function is decorated with the callback configuration as + * properties for runtime modification. + * + * @method _prepare + * @param callback {Object|Function} the raw callback + * @return {Function} a decorated function wrapper to execute the callback + * @protected + */ + _prepare: function (callback) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_prepare", 185); +_yuitest_coverline("build/async-queue/async-queue.js", 186); +if (isFunction(callback) && callback._prepared) { + _yuitest_coverline("build/async-queue/async-queue.js", 187); +return callback; + } + + _yuitest_coverline("build/async-queue/async-queue.js", 190); +var config = Y.merge( + Queue.defaults, + { context : this, args: [], _prepared: true }, + this.defaults, + (isFunction(callback) ? { fn: callback } : callback)), + + wrapper = Y.bind(function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "(anonymous 2)", 196); +_yuitest_coverline("build/async-queue/async-queue.js", 197); +if (!wrapper._running) { + _yuitest_coverline("build/async-queue/async-queue.js", 198); +wrapper.iterations--; + } + _yuitest_coverline("build/async-queue/async-queue.js", 200); +if (isFunction(wrapper.fn)) { + _yuitest_coverline("build/async-queue/async-queue.js", 201); +wrapper.fn.apply(wrapper.context || Y, + Y.Array(wrapper.args)); + } + }, this); + + _yuitest_coverline("build/async-queue/async-queue.js", 206); +return Y.mix(wrapper, config); + }, + + /** + * Sets the queue in motion. All queued callbacks will be executed in + * order unless pause() or stop() is called or if one of the callbacks is + * configured with autoContinue: false. + * + * @method run + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + run : function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "run", 218); +_yuitest_coverline("build/async-queue/async-queue.js", 219); +var callback, + cont = true; + + _yuitest_coverline("build/async-queue/async-queue.js", 222); +for (callback = this.next(); + cont && callback && !this.isRunning(); + callback = this.next()) + { + _yuitest_coverline("build/async-queue/async-queue.js", 226); +cont = (callback.timeout < 0) ? + this._execute(callback) : + this._schedule(callback); + } + + _yuitest_coverline("build/async-queue/async-queue.js", 231); +if (!callback) { + /** + * Event fired after the last queued callback is executed. + * @event complete + */ + _yuitest_coverline("build/async-queue/async-queue.js", 236); +this.fire('complete'); + } + + _yuitest_coverline("build/async-queue/async-queue.js", 239); +return this; + }, + + /** + * Handles the execution of callbacks. Returns a boolean indicating + * whether it is appropriate to continue running. + * + * @method _execute + * @param callback {Object} the callback object to execute + * @return {Boolean} whether the run loop should continue + * @protected + */ + _execute : function (callback) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_execute", 251); +_yuitest_coverline("build/async-queue/async-queue.js", 252); +this._running = callback._running = true; + + _yuitest_coverline("build/async-queue/async-queue.js", 254); +callback.iterations--; + _yuitest_coverline("build/async-queue/async-queue.js", 255); +this.fire(EXECUTE, { callback: callback }); + + _yuitest_coverline("build/async-queue/async-queue.js", 257); +var cont = this._running && callback.autoContinue; + + _yuitest_coverline("build/async-queue/async-queue.js", 259); +this._running = callback._running = false; + + _yuitest_coverline("build/async-queue/async-queue.js", 261); +return cont; + }, + + /** + * Schedules the execution of asynchronous callbacks. + * + * @method _schedule + * @param callback {Object} the callback object to execute + * @return {Boolean} whether the run loop should continue + * @protected + */ + _schedule : function (callback) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_schedule", 272); +_yuitest_coverline("build/async-queue/async-queue.js", 273); +this._running = Y.later(callback.timeout, this, function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "(anonymous 3)", 273); +_yuitest_coverline("build/async-queue/async-queue.js", 274); +if (this._execute(callback)) { + _yuitest_coverline("build/async-queue/async-queue.js", 275); +this.run(); + } + }); + + _yuitest_coverline("build/async-queue/async-queue.js", 279); +return false; + }, + + /** + * Determines if the queue is waiting for a callback to complete execution. + * + * @method isRunning + * @return {Boolean} true if queue is waiting for a + * from any initiated transactions + */ + isRunning : function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "isRunning", 289); +_yuitest_coverline("build/async-queue/async-queue.js", 290); +return !!this._running; + }, + + /** + * Default functionality for the "execute" event. Executes the + * callback function + * + * @method _defExecFn + * @param e {Event} the event object + * @protected + */ + _defExecFn : function (e) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_defExecFn", 301); +_yuitest_coverline("build/async-queue/async-queue.js", 302); +e.callback(); + }, + + /** + * Add any number of callbacks to the end of the queue. Callbacks may be + * provided as functions or objects. + * + * @method add + * @param callback* {Function|Object} 0..n callbacks + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + add : function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "add", 314); +_yuitest_coverline("build/async-queue/async-queue.js", 315); +this.fire('add', { callbacks: Y.Array(arguments,0,true) }); + + _yuitest_coverline("build/async-queue/async-queue.js", 317); +return this; + }, + + /** + * Default functionality for the "add" event. Adds the callbacks + * in the event facade to the queue. Callbacks successfully added to the + * queue are present in the event's added property in the + * after phase. + * + * @method _defAddFn + * @param e {Event} the event object + * @protected + */ + _defAddFn : function(e) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_defAddFn", 330); +_yuitest_coverline("build/async-queue/async-queue.js", 331); +var _q = this._q, + added = []; + + _yuitest_coverline("build/async-queue/async-queue.js", 334); +Y.Array.each(e.callbacks, function (c) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "(anonymous 4)", 334); +_yuitest_coverline("build/async-queue/async-queue.js", 335); +if (isObject(c)) { + _yuitest_coverline("build/async-queue/async-queue.js", 336); +_q.push(c); + _yuitest_coverline("build/async-queue/async-queue.js", 337); +added.push(c); + } + }); + + _yuitest_coverline("build/async-queue/async-queue.js", 341); +e.added = added; + }, + + /** + * Pause the execution of the queue after the execution of the current + * callback completes. If called from code outside of a queued callback, + * clears the timeout for the pending callback. Paused queue can be + * restarted with q.run() + * + * @method pause + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + pause: function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "pause", 354); +_yuitest_coverline("build/async-queue/async-queue.js", 355); +if (isObject(this._running)) { + _yuitest_coverline("build/async-queue/async-queue.js", 356); +this._running.cancel(); + } + + _yuitest_coverline("build/async-queue/async-queue.js", 359); +this._running = false; + + _yuitest_coverline("build/async-queue/async-queue.js", 361); +return this; + }, + + /** + * Stop and clear the queue after the current execution of the + * current callback completes. + * + * @method stop + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + stop : function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "stop", 372); +_yuitest_coverline("build/async-queue/async-queue.js", 373); +this._q = []; + + _yuitest_coverline("build/async-queue/async-queue.js", 375); +return this.pause(); + }, + + /** + * Returns the current index of a callback. Pass in either the id or + * callback function from getCallback. + * + * @method indexOf + * @param callback {String|Function} the callback or its specified id + * @return {Number} index of the callback or -1 if not found + */ + indexOf : function (callback) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "indexOf", 386); +_yuitest_coverline("build/async-queue/async-queue.js", 387); +var i = 0, len = this._q.length, c; + + _yuitest_coverline("build/async-queue/async-queue.js", 389); +for (; i < len; ++i) { + _yuitest_coverline("build/async-queue/async-queue.js", 390); +c = this._q[i]; + _yuitest_coverline("build/async-queue/async-queue.js", 391); +if (c === callback || c.id === callback) { + _yuitest_coverline("build/async-queue/async-queue.js", 392); +return i; + } + } + + _yuitest_coverline("build/async-queue/async-queue.js", 396); +return -1; + }, + + /** + * Retrieve a callback by its id. Useful to modify the configuration + * while the queue is running. + * + * @method getCallback + * @param id {String} the id assigned to the callback + * @return {Object} the callback object + */ + getCallback : function (id) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "getCallback", 407); +_yuitest_coverline("build/async-queue/async-queue.js", 408); +var i = this.indexOf(id); + + _yuitest_coverline("build/async-queue/async-queue.js", 410); +return (i > -1) ? this._q[i] : null; + }, + + /** + * Promotes the named callback to the top of the queue. If a callback is + * currently executing or looping (via until or iterations), the promotion + * is scheduled to occur after the current callback has completed. + * + * @method promote + * @param callback {String|Object} the callback object or a callback's id + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + promote : function (callback) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "promote", 423); +_yuitest_coverline("build/async-queue/async-queue.js", 424); +var payload = { callback : callback },e; + + _yuitest_coverline("build/async-queue/async-queue.js", 426); +if (this.isRunning()) { + _yuitest_coverline("build/async-queue/async-queue.js", 427); +e = this.after(SHIFT, function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "(anonymous 5)", 427); +_yuitest_coverline("build/async-queue/async-queue.js", 428); +this.fire(PROMOTE, payload); + _yuitest_coverline("build/async-queue/async-queue.js", 429); +e.detach(); + }, this); + } else { + _yuitest_coverline("build/async-queue/async-queue.js", 432); +this.fire(PROMOTE, payload); + } + + _yuitest_coverline("build/async-queue/async-queue.js", 435); +return this; + }, + + /** + *

Default functionality for the "promote" event. Promotes the + * named callback to the head of the queue.

+ * + *

The event object will contain a property "callback", which + * holds the id of a callback or the callback object itself.

+ * + * @method _defPromoteFn + * @param e {Event} the custom event + * @protected + */ + _defPromoteFn : function (e) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_defPromoteFn", 449); +_yuitest_coverline("build/async-queue/async-queue.js", 450); +var i = this.indexOf(e.callback), + promoted = (i > -1) ? this._q.splice(i,1)[0] : null; + + _yuitest_coverline("build/async-queue/async-queue.js", 453); +e.promoted = promoted; + + _yuitest_coverline("build/async-queue/async-queue.js", 455); +if (promoted) { + _yuitest_coverline("build/async-queue/async-queue.js", 456); +this._q.unshift(promoted); + } + }, + + /** + * Removes the callback from the queue. If the queue is active, the + * removal is scheduled to occur after the current callback has completed. + * + * @method remove + * @param callback {String|Object} the callback object or a callback's id + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + remove : function (callback) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "remove", 469); +_yuitest_coverline("build/async-queue/async-queue.js", 470); +var payload = { callback : callback },e; + + // Can't return the removed callback because of the deferral until + // current callback is complete + _yuitest_coverline("build/async-queue/async-queue.js", 474); +if (this.isRunning()) { + _yuitest_coverline("build/async-queue/async-queue.js", 475); +e = this.after(SHIFT, function () { + _yuitest_coverfunc("build/async-queue/async-queue.js", "(anonymous 6)", 475); +_yuitest_coverline("build/async-queue/async-queue.js", 476); +this.fire(REMOVE, payload); + _yuitest_coverline("build/async-queue/async-queue.js", 477); +e.detach(); + },this); + } else { + _yuitest_coverline("build/async-queue/async-queue.js", 480); +this.fire(REMOVE, payload); + } + + _yuitest_coverline("build/async-queue/async-queue.js", 483); +return this; + }, + + /** + *

Default functionality for the "remove" event. Removes the + * callback from the queue.

+ * + *

The event object will contain a property "callback", which + * holds the id of a callback or the callback object itself.

+ * + * @method _defRemoveFn + * @param e {Event} the custom event + * @protected + */ + _defRemoveFn : function (e) { + _yuitest_coverfunc("build/async-queue/async-queue.js", "_defRemoveFn", 497); +_yuitest_coverline("build/async-queue/async-queue.js", 498); +var i = this.indexOf(e.callback); + + _yuitest_coverline("build/async-queue/async-queue.js", 500); +e.removed = (i > -1) ? this._q.splice(i,1)[0] : null; + }, + + /** + * Returns the number of callbacks in the queue. + * + * @method size + * @return {Number} + */ + size : function () { + // next() flushes callbacks that have met their until() criteria and + // therefore shouldn't count since they wouldn't execute anyway. + _yuitest_coverfunc("build/async-queue/async-queue.js", "size", 509); +_yuitest_coverline("build/async-queue/async-queue.js", 512); +if (!this.isRunning()) { + _yuitest_coverline("build/async-queue/async-queue.js", 513); +this.next(); + } + + _yuitest_coverline("build/async-queue/async-queue.js", 516); +return this._q.length; + } +}); + + + +}, '3.9.0', {"requires": ["event-custom"]}); diff --git a/src/errors/static/js/yui/build/async-queue/async-queue-debug.js b/src/errors/static/js/yui/build/async-queue/async-queue-debug.js new file mode 100644 index 00000000..04bb1d8b --- /dev/null +++ b/src/errors/static/js/yui/build/async-queue/async-queue-debug.js @@ -0,0 +1,523 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('async-queue', function (Y, NAME) { + +/** + *

AsyncQueue allows you create a chain of function callbacks executed + * via setTimeout (or synchronously) that are guaranteed to run in order. + * Items in the queue can be promoted or removed. Start or resume the + * execution chain with run(). pause() to temporarily delay execution, or + * stop() to halt and clear the queue.

+ * + * @module async-queue + */ + +/** + *

A specialized queue class that supports scheduling callbacks to execute + * sequentially, iteratively, even asynchronously.

+ * + *

Callbacks can be function refs or objects with the following keys. Only + * the fn key is required.

+ * + *
    + *
  • fn -- The callback function
  • + *
  • context -- The execution context for the callbackFn.
  • + *
  • args -- Arguments to pass to callbackFn.
  • + *
  • timeout -- Millisecond delay before executing callbackFn. + * (Applies to each iterative execution of callback)
  • + *
  • iterations -- Number of times to repeat the callback. + *
  • until -- Repeat the callback until this function returns + * true. This setting trumps iterations.
  • + *
  • autoContinue -- Set to false to prevent the AsyncQueue from + * executing the next callback in the Queue after + * the callback completes.
  • + *
  • id -- Name that can be used to get, promote, get the + * indexOf, or delete this callback.
  • + *
+ * + * @class AsyncQueue + * @extends EventTarget + * @constructor + * @param callback* {Function|Object} 0..n callbacks to seed the queue + */ +Y.AsyncQueue = function() { + this._init(); + this.add.apply(this, arguments); +}; + +var Queue = Y.AsyncQueue, + EXECUTE = 'execute', + SHIFT = 'shift', + PROMOTE = 'promote', + REMOVE = 'remove', + + isObject = Y.Lang.isObject, + isFunction = Y.Lang.isFunction; + +/** + *

Static default values used to populate callback configuration properties. + * Preconfigured defaults include:

+ * + *
    + *
  • autoContinue: true
  • + *
  • iterations: 1
  • + *
  • timeout: 10 (10ms between callbacks)
  • + *
  • until: (function to run until iterations <= 0)
  • + *
+ * + * @property defaults + * @type {Object} + * @static + */ +Queue.defaults = Y.mix({ + autoContinue : true, + iterations : 1, + timeout : 10, + until : function () { + this.iterations |= 0; + return this.iterations <= 0; + } +}, Y.config.queueDefaults || {}); + +Y.extend(Queue, Y.EventTarget, { + /** + * Used to indicate the queue is currently executing a callback. + * + * @property _running + * @type {Boolean|Object} true for synchronous callback execution, the + * return handle from Y.later for async callbacks. + * Otherwise false. + * @protected + */ + _running : false, + + /** + * Initializes the AsyncQueue instance properties and events. + * + * @method _init + * @protected + */ + _init : function () { + Y.EventTarget.call(this, { prefix: 'queue', emitFacade: true }); + + this._q = []; + + /** + * Callback defaults for this instance. Static defaults that are not + * overridden are also included. + * + * @property defaults + * @type {Object} + */ + this.defaults = {}; + + this._initEvents(); + }, + + /** + * Initializes the instance events. + * + * @method _initEvents + * @protected + */ + _initEvents : function () { + this.publish({ + 'execute' : { defaultFn : this._defExecFn, emitFacade: true }, + 'shift' : { defaultFn : this._defShiftFn, emitFacade: true }, + 'add' : { defaultFn : this._defAddFn, emitFacade: true }, + 'promote' : { defaultFn : this._defPromoteFn, emitFacade: true }, + 'remove' : { defaultFn : this._defRemoveFn, emitFacade: true } + }); + }, + + /** + * Returns the next callback needing execution. If a callback is + * configured to repeat via iterations or until, it will be returned until + * the completion criteria is met. + * + * When the queue is empty, null is returned. + * + * @method next + * @return {Function} the callback to execute + */ + next : function () { + var callback; + + while (this._q.length) { + callback = this._q[0] = this._prepare(this._q[0]); + if (callback && callback.until()) { + this.fire(SHIFT, { callback: callback }); + callback = null; + } else { + break; + } + } + + return callback || null; + }, + + /** + * Default functionality for the "shift" event. Shifts the + * callback stored in the event object's callback property from + * the queue if it is the first item. + * + * @method _defShiftFn + * @param e {Event} The event object + * @protected + */ + _defShiftFn : function (e) { + if (this.indexOf(e.callback) === 0) { + this._q.shift(); + } + }, + + /** + * Creates a wrapper function to execute the callback using the aggregated + * configuration generated by combining the static AsyncQueue.defaults, the + * instance defaults, and the specified callback settings. + * + * The wrapper function is decorated with the callback configuration as + * properties for runtime modification. + * + * @method _prepare + * @param callback {Object|Function} the raw callback + * @return {Function} a decorated function wrapper to execute the callback + * @protected + */ + _prepare: function (callback) { + if (isFunction(callback) && callback._prepared) { + return callback; + } + + var config = Y.merge( + Queue.defaults, + { context : this, args: [], _prepared: true }, + this.defaults, + (isFunction(callback) ? { fn: callback } : callback)), + + wrapper = Y.bind(function () { + if (!wrapper._running) { + wrapper.iterations--; + } + if (isFunction(wrapper.fn)) { + wrapper.fn.apply(wrapper.context || Y, + Y.Array(wrapper.args)); + } + }, this); + + return Y.mix(wrapper, config); + }, + + /** + * Sets the queue in motion. All queued callbacks will be executed in + * order unless pause() or stop() is called or if one of the callbacks is + * configured with autoContinue: false. + * + * @method run + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + run : function () { + var callback, + cont = true; + + for (callback = this.next(); + cont && callback && !this.isRunning(); + callback = this.next()) + { + cont = (callback.timeout < 0) ? + this._execute(callback) : + this._schedule(callback); + } + + if (!callback) { + /** + * Event fired after the last queued callback is executed. + * @event complete + */ + this.fire('complete'); + } + + return this; + }, + + /** + * Handles the execution of callbacks. Returns a boolean indicating + * whether it is appropriate to continue running. + * + * @method _execute + * @param callback {Object} the callback object to execute + * @return {Boolean} whether the run loop should continue + * @protected + */ + _execute : function (callback) { + this._running = callback._running = true; + + callback.iterations--; + this.fire(EXECUTE, { callback: callback }); + + var cont = this._running && callback.autoContinue; + + this._running = callback._running = false; + + return cont; + }, + + /** + * Schedules the execution of asynchronous callbacks. + * + * @method _schedule + * @param callback {Object} the callback object to execute + * @return {Boolean} whether the run loop should continue + * @protected + */ + _schedule : function (callback) { + this._running = Y.later(callback.timeout, this, function () { + if (this._execute(callback)) { + this.run(); + } + }); + + return false; + }, + + /** + * Determines if the queue is waiting for a callback to complete execution. + * + * @method isRunning + * @return {Boolean} true if queue is waiting for a + * from any initiated transactions + */ + isRunning : function () { + return !!this._running; + }, + + /** + * Default functionality for the "execute" event. Executes the + * callback function + * + * @method _defExecFn + * @param e {Event} the event object + * @protected + */ + _defExecFn : function (e) { + e.callback(); + }, + + /** + * Add any number of callbacks to the end of the queue. Callbacks may be + * provided as functions or objects. + * + * @method add + * @param callback* {Function|Object} 0..n callbacks + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + add : function () { + this.fire('add', { callbacks: Y.Array(arguments,0,true) }); + + return this; + }, + + /** + * Default functionality for the "add" event. Adds the callbacks + * in the event facade to the queue. Callbacks successfully added to the + * queue are present in the event's added property in the + * after phase. + * + * @method _defAddFn + * @param e {Event} the event object + * @protected + */ + _defAddFn : function(e) { + var _q = this._q, + added = []; + + Y.Array.each(e.callbacks, function (c) { + if (isObject(c)) { + _q.push(c); + added.push(c); + } + }); + + e.added = added; + }, + + /** + * Pause the execution of the queue after the execution of the current + * callback completes. If called from code outside of a queued callback, + * clears the timeout for the pending callback. Paused queue can be + * restarted with q.run() + * + * @method pause + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + pause: function () { + if (isObject(this._running)) { + this._running.cancel(); + } + + this._running = false; + + return this; + }, + + /** + * Stop and clear the queue after the current execution of the + * current callback completes. + * + * @method stop + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + stop : function () { + this._q = []; + + return this.pause(); + }, + + /** + * Returns the current index of a callback. Pass in either the id or + * callback function from getCallback. + * + * @method indexOf + * @param callback {String|Function} the callback or its specified id + * @return {Number} index of the callback or -1 if not found + */ + indexOf : function (callback) { + var i = 0, len = this._q.length, c; + + for (; i < len; ++i) { + c = this._q[i]; + if (c === callback || c.id === callback) { + return i; + } + } + + return -1; + }, + + /** + * Retrieve a callback by its id. Useful to modify the configuration + * while the queue is running. + * + * @method getCallback + * @param id {String} the id assigned to the callback + * @return {Object} the callback object + */ + getCallback : function (id) { + var i = this.indexOf(id); + + return (i > -1) ? this._q[i] : null; + }, + + /** + * Promotes the named callback to the top of the queue. If a callback is + * currently executing or looping (via until or iterations), the promotion + * is scheduled to occur after the current callback has completed. + * + * @method promote + * @param callback {String|Object} the callback object or a callback's id + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + promote : function (callback) { + var payload = { callback : callback },e; + + if (this.isRunning()) { + e = this.after(SHIFT, function () { + this.fire(PROMOTE, payload); + e.detach(); + }, this); + } else { + this.fire(PROMOTE, payload); + } + + return this; + }, + + /** + *

Default functionality for the "promote" event. Promotes the + * named callback to the head of the queue.

+ * + *

The event object will contain a property "callback", which + * holds the id of a callback or the callback object itself.

+ * + * @method _defPromoteFn + * @param e {Event} the custom event + * @protected + */ + _defPromoteFn : function (e) { + var i = this.indexOf(e.callback), + promoted = (i > -1) ? this._q.splice(i,1)[0] : null; + + e.promoted = promoted; + + if (promoted) { + this._q.unshift(promoted); + } + }, + + /** + * Removes the callback from the queue. If the queue is active, the + * removal is scheduled to occur after the current callback has completed. + * + * @method remove + * @param callback {String|Object} the callback object or a callback's id + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + remove : function (callback) { + var payload = { callback : callback },e; + + // Can't return the removed callback because of the deferral until + // current callback is complete + if (this.isRunning()) { + e = this.after(SHIFT, function () { + this.fire(REMOVE, payload); + e.detach(); + },this); + } else { + this.fire(REMOVE, payload); + } + + return this; + }, + + /** + *

Default functionality for the "remove" event. Removes the + * callback from the queue.

+ * + *

The event object will contain a property "callback", which + * holds the id of a callback or the callback object itself.

+ * + * @method _defRemoveFn + * @param e {Event} the custom event + * @protected + */ + _defRemoveFn : function (e) { + var i = this.indexOf(e.callback); + + e.removed = (i > -1) ? this._q.splice(i,1)[0] : null; + }, + + /** + * Returns the number of callbacks in the queue. + * + * @method size + * @return {Number} + */ + size : function () { + // next() flushes callbacks that have met their until() criteria and + // therefore shouldn't count since they wouldn't execute anyway. + if (!this.isRunning()) { + this.next(); + } + + return this._q.length; + } +}); + + + +}, '3.9.0', {"requires": ["event-custom"]}); diff --git a/src/errors/static/js/yui/build/async-queue/async-queue-min.js b/src/errors/static/js/yui/build/async-queue/async-queue-min.js new file mode 100644 index 00000000..4d357b69 --- /dev/null +++ b/src/errors/static/js/yui/build/async-queue/async-queue-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("async-queue",function(e,t){e.AsyncQueue=function(){this._init(),this.add.apply(this,arguments)};var n=e.AsyncQueue,r="execute",i="shift",s="promote",o="remove",u=e.Lang.isObject,a=e.Lang.isFunction;n.defaults=e.mix({autoContinue:!0,iterations:1,timeout:10,until:function(){return this.iterations|=0,this.iterations<=0}},e.config.queueDefaults||{}),e.extend(n,e.EventTarget,{_running:!1,_init:function(){e.EventTarget.call(this,{prefix:"queue",emitFacade:!0}),this._q=[],this.defaults={},this._initEvents()},_initEvents:function(){this.publish({execute:{defaultFn:this._defExecFn,emitFacade:!0},shift:{defaultFn:this._defShiftFn,emitFacade:!0},add:{defaultFn:this._defAddFn,emitFacade:!0},promote:{defaultFn:this._defPromoteFn,emitFacade:!0},remove:{defaultFn:this._defRemoveFn,emitFacade:!0}})},next:function(){var e;while(this._q.length){e=this._q[0]=this._prepare(this._q[0]);if(!e||!e.until())break;this.fire(i,{callback:e}),e=null}return e||null},_defShiftFn:function(e){this.indexOf(e.callback)===0&&this._q.shift()},_prepare:function(t){if(a(t)&&t._prepared)return t;var r=e.merge(n.defaults,{context:this,args:[],_prepared:!0},this.defaults,a(t)?{fn:t}:t),i=e.bind(function(){i._running||i.iterations--,a(i.fn)&&i.fn.apply(i.context||e,e.Array(i.args))},this);return e.mix(i,r)},run:function(){var e,t=!0;for(e=this.next();t&&e&&!this.isRunning();e=this.next())t=e.timeout<0?this._execute(e):this._schedule(e);return e||this.fire("complete"),this},_execute:function(e){this._running=e._running=!0,e.iterations--,this.fire(r,{callback:e});var t=this._running&&e.autoContinue;return this._running=e._running=!1,t},_schedule:function(t){return this._running=e.later(t.timeout,this,function(){this._execute(t)&&this.run()}),!1},isRunning:function(){return!!this._running},_defExecFn:function(e){e.callback()},add:function(){return this.fire("add",{callbacks:e.Array(arguments,0,!0)}),this},_defAddFn:function(t){var n=this._q,r=[];e.Array.each(t.callbacks,function(e){u(e)&&(n.push(e),r.push(e))}),t.added=r},pause:function(){return u(this._running)&&this._running.cancel(),this._running=!1,this},stop:function(){return this._q=[],this.pause()},indexOf:function(e){var t=0,n=this._q.length,r;for(;t-1?this._q[t]:null},promote:function(e){var t={callback:e},n;return this.isRunning()?n=this.after(i,function(){this.fire(s,t),n.detach()},this):this.fire(s,t),this},_defPromoteFn:function(e){var t=this.indexOf(e.callback),n=t>-1?this._q.splice(t,1)[0]:null;e.promoted=n,n&&this._q.unshift(n)},remove:function(e){var t={callback:e},n;return this.isRunning()?n=this.after(i,function(){this.fire(o,t),n.detach()},this):this.fire(o,t),this},_defRemoveFn:function(e){var t=this.indexOf(e.callback);e.removed=t>-1?this._q.splice(t,1)[0]:null},size:function(){return this.isRunning()||this.next(),this._q.length}})},"3.9.0",{requires:["event-custom"]}); diff --git a/src/errors/static/js/yui/build/async-queue/async-queue.js b/src/errors/static/js/yui/build/async-queue/async-queue.js new file mode 100644 index 00000000..04bb1d8b --- /dev/null +++ b/src/errors/static/js/yui/build/async-queue/async-queue.js @@ -0,0 +1,523 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('async-queue', function (Y, NAME) { + +/** + *

AsyncQueue allows you create a chain of function callbacks executed + * via setTimeout (or synchronously) that are guaranteed to run in order. + * Items in the queue can be promoted or removed. Start or resume the + * execution chain with run(). pause() to temporarily delay execution, or + * stop() to halt and clear the queue.

+ * + * @module async-queue + */ + +/** + *

A specialized queue class that supports scheduling callbacks to execute + * sequentially, iteratively, even asynchronously.

+ * + *

Callbacks can be function refs or objects with the following keys. Only + * the fn key is required.

+ * + *
    + *
  • fn -- The callback function
  • + *
  • context -- The execution context for the callbackFn.
  • + *
  • args -- Arguments to pass to callbackFn.
  • + *
  • timeout -- Millisecond delay before executing callbackFn. + * (Applies to each iterative execution of callback)
  • + *
  • iterations -- Number of times to repeat the callback. + *
  • until -- Repeat the callback until this function returns + * true. This setting trumps iterations.
  • + *
  • autoContinue -- Set to false to prevent the AsyncQueue from + * executing the next callback in the Queue after + * the callback completes.
  • + *
  • id -- Name that can be used to get, promote, get the + * indexOf, or delete this callback.
  • + *
+ * + * @class AsyncQueue + * @extends EventTarget + * @constructor + * @param callback* {Function|Object} 0..n callbacks to seed the queue + */ +Y.AsyncQueue = function() { + this._init(); + this.add.apply(this, arguments); +}; + +var Queue = Y.AsyncQueue, + EXECUTE = 'execute', + SHIFT = 'shift', + PROMOTE = 'promote', + REMOVE = 'remove', + + isObject = Y.Lang.isObject, + isFunction = Y.Lang.isFunction; + +/** + *

Static default values used to populate callback configuration properties. + * Preconfigured defaults include:

+ * + *
    + *
  • autoContinue: true
  • + *
  • iterations: 1
  • + *
  • timeout: 10 (10ms between callbacks)
  • + *
  • until: (function to run until iterations <= 0)
  • + *
+ * + * @property defaults + * @type {Object} + * @static + */ +Queue.defaults = Y.mix({ + autoContinue : true, + iterations : 1, + timeout : 10, + until : function () { + this.iterations |= 0; + return this.iterations <= 0; + } +}, Y.config.queueDefaults || {}); + +Y.extend(Queue, Y.EventTarget, { + /** + * Used to indicate the queue is currently executing a callback. + * + * @property _running + * @type {Boolean|Object} true for synchronous callback execution, the + * return handle from Y.later for async callbacks. + * Otherwise false. + * @protected + */ + _running : false, + + /** + * Initializes the AsyncQueue instance properties and events. + * + * @method _init + * @protected + */ + _init : function () { + Y.EventTarget.call(this, { prefix: 'queue', emitFacade: true }); + + this._q = []; + + /** + * Callback defaults for this instance. Static defaults that are not + * overridden are also included. + * + * @property defaults + * @type {Object} + */ + this.defaults = {}; + + this._initEvents(); + }, + + /** + * Initializes the instance events. + * + * @method _initEvents + * @protected + */ + _initEvents : function () { + this.publish({ + 'execute' : { defaultFn : this._defExecFn, emitFacade: true }, + 'shift' : { defaultFn : this._defShiftFn, emitFacade: true }, + 'add' : { defaultFn : this._defAddFn, emitFacade: true }, + 'promote' : { defaultFn : this._defPromoteFn, emitFacade: true }, + 'remove' : { defaultFn : this._defRemoveFn, emitFacade: true } + }); + }, + + /** + * Returns the next callback needing execution. If a callback is + * configured to repeat via iterations or until, it will be returned until + * the completion criteria is met. + * + * When the queue is empty, null is returned. + * + * @method next + * @return {Function} the callback to execute + */ + next : function () { + var callback; + + while (this._q.length) { + callback = this._q[0] = this._prepare(this._q[0]); + if (callback && callback.until()) { + this.fire(SHIFT, { callback: callback }); + callback = null; + } else { + break; + } + } + + return callback || null; + }, + + /** + * Default functionality for the "shift" event. Shifts the + * callback stored in the event object's callback property from + * the queue if it is the first item. + * + * @method _defShiftFn + * @param e {Event} The event object + * @protected + */ + _defShiftFn : function (e) { + if (this.indexOf(e.callback) === 0) { + this._q.shift(); + } + }, + + /** + * Creates a wrapper function to execute the callback using the aggregated + * configuration generated by combining the static AsyncQueue.defaults, the + * instance defaults, and the specified callback settings. + * + * The wrapper function is decorated with the callback configuration as + * properties for runtime modification. + * + * @method _prepare + * @param callback {Object|Function} the raw callback + * @return {Function} a decorated function wrapper to execute the callback + * @protected + */ + _prepare: function (callback) { + if (isFunction(callback) && callback._prepared) { + return callback; + } + + var config = Y.merge( + Queue.defaults, + { context : this, args: [], _prepared: true }, + this.defaults, + (isFunction(callback) ? { fn: callback } : callback)), + + wrapper = Y.bind(function () { + if (!wrapper._running) { + wrapper.iterations--; + } + if (isFunction(wrapper.fn)) { + wrapper.fn.apply(wrapper.context || Y, + Y.Array(wrapper.args)); + } + }, this); + + return Y.mix(wrapper, config); + }, + + /** + * Sets the queue in motion. All queued callbacks will be executed in + * order unless pause() or stop() is called or if one of the callbacks is + * configured with autoContinue: false. + * + * @method run + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + run : function () { + var callback, + cont = true; + + for (callback = this.next(); + cont && callback && !this.isRunning(); + callback = this.next()) + { + cont = (callback.timeout < 0) ? + this._execute(callback) : + this._schedule(callback); + } + + if (!callback) { + /** + * Event fired after the last queued callback is executed. + * @event complete + */ + this.fire('complete'); + } + + return this; + }, + + /** + * Handles the execution of callbacks. Returns a boolean indicating + * whether it is appropriate to continue running. + * + * @method _execute + * @param callback {Object} the callback object to execute + * @return {Boolean} whether the run loop should continue + * @protected + */ + _execute : function (callback) { + this._running = callback._running = true; + + callback.iterations--; + this.fire(EXECUTE, { callback: callback }); + + var cont = this._running && callback.autoContinue; + + this._running = callback._running = false; + + return cont; + }, + + /** + * Schedules the execution of asynchronous callbacks. + * + * @method _schedule + * @param callback {Object} the callback object to execute + * @return {Boolean} whether the run loop should continue + * @protected + */ + _schedule : function (callback) { + this._running = Y.later(callback.timeout, this, function () { + if (this._execute(callback)) { + this.run(); + } + }); + + return false; + }, + + /** + * Determines if the queue is waiting for a callback to complete execution. + * + * @method isRunning + * @return {Boolean} true if queue is waiting for a + * from any initiated transactions + */ + isRunning : function () { + return !!this._running; + }, + + /** + * Default functionality for the "execute" event. Executes the + * callback function + * + * @method _defExecFn + * @param e {Event} the event object + * @protected + */ + _defExecFn : function (e) { + e.callback(); + }, + + /** + * Add any number of callbacks to the end of the queue. Callbacks may be + * provided as functions or objects. + * + * @method add + * @param callback* {Function|Object} 0..n callbacks + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + add : function () { + this.fire('add', { callbacks: Y.Array(arguments,0,true) }); + + return this; + }, + + /** + * Default functionality for the "add" event. Adds the callbacks + * in the event facade to the queue. Callbacks successfully added to the + * queue are present in the event's added property in the + * after phase. + * + * @method _defAddFn + * @param e {Event} the event object + * @protected + */ + _defAddFn : function(e) { + var _q = this._q, + added = []; + + Y.Array.each(e.callbacks, function (c) { + if (isObject(c)) { + _q.push(c); + added.push(c); + } + }); + + e.added = added; + }, + + /** + * Pause the execution of the queue after the execution of the current + * callback completes. If called from code outside of a queued callback, + * clears the timeout for the pending callback. Paused queue can be + * restarted with q.run() + * + * @method pause + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + pause: function () { + if (isObject(this._running)) { + this._running.cancel(); + } + + this._running = false; + + return this; + }, + + /** + * Stop and clear the queue after the current execution of the + * current callback completes. + * + * @method stop + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + stop : function () { + this._q = []; + + return this.pause(); + }, + + /** + * Returns the current index of a callback. Pass in either the id or + * callback function from getCallback. + * + * @method indexOf + * @param callback {String|Function} the callback or its specified id + * @return {Number} index of the callback or -1 if not found + */ + indexOf : function (callback) { + var i = 0, len = this._q.length, c; + + for (; i < len; ++i) { + c = this._q[i]; + if (c === callback || c.id === callback) { + return i; + } + } + + return -1; + }, + + /** + * Retrieve a callback by its id. Useful to modify the configuration + * while the queue is running. + * + * @method getCallback + * @param id {String} the id assigned to the callback + * @return {Object} the callback object + */ + getCallback : function (id) { + var i = this.indexOf(id); + + return (i > -1) ? this._q[i] : null; + }, + + /** + * Promotes the named callback to the top of the queue. If a callback is + * currently executing or looping (via until or iterations), the promotion + * is scheduled to occur after the current callback has completed. + * + * @method promote + * @param callback {String|Object} the callback object or a callback's id + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + promote : function (callback) { + var payload = { callback : callback },e; + + if (this.isRunning()) { + e = this.after(SHIFT, function () { + this.fire(PROMOTE, payload); + e.detach(); + }, this); + } else { + this.fire(PROMOTE, payload); + } + + return this; + }, + + /** + *

Default functionality for the "promote" event. Promotes the + * named callback to the head of the queue.

+ * + *

The event object will contain a property "callback", which + * holds the id of a callback or the callback object itself.

+ * + * @method _defPromoteFn + * @param e {Event} the custom event + * @protected + */ + _defPromoteFn : function (e) { + var i = this.indexOf(e.callback), + promoted = (i > -1) ? this._q.splice(i,1)[0] : null; + + e.promoted = promoted; + + if (promoted) { + this._q.unshift(promoted); + } + }, + + /** + * Removes the callback from the queue. If the queue is active, the + * removal is scheduled to occur after the current callback has completed. + * + * @method remove + * @param callback {String|Object} the callback object or a callback's id + * @return {AsyncQueue} the AsyncQueue instance + * @chainable + */ + remove : function (callback) { + var payload = { callback : callback },e; + + // Can't return the removed callback because of the deferral until + // current callback is complete + if (this.isRunning()) { + e = this.after(SHIFT, function () { + this.fire(REMOVE, payload); + e.detach(); + },this); + } else { + this.fire(REMOVE, payload); + } + + return this; + }, + + /** + *

Default functionality for the "remove" event. Removes the + * callback from the queue.

+ * + *

The event object will contain a property "callback", which + * holds the id of a callback or the callback object itself.

+ * + * @method _defRemoveFn + * @param e {Event} the custom event + * @protected + */ + _defRemoveFn : function (e) { + var i = this.indexOf(e.callback); + + e.removed = (i > -1) ? this._q.splice(i,1)[0] : null; + }, + + /** + * Returns the number of callbacks in the queue. + * + * @method size + * @return {Number} + */ + size : function () { + // next() flushes callbacks that have met their until() criteria and + // therefore shouldn't count since they wouldn't execute anyway. + if (!this.isRunning()) { + this.next(); + } + + return this._q.length; + } +}); + + + +}, '3.9.0', {"requires": ["event-custom"]}); diff --git a/src/errors/static/js/yui/build/attribute-base/attribute-base-coverage.js b/src/errors/static/js/yui/build/attribute-base/attribute-base-coverage.js new file mode 100644 index 00000000..8f30588f --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-base/attribute-base-coverage.js @@ -0,0 +1,158 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/attribute-base/attribute-base.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/attribute-base/attribute-base.js", + code: [] +}; +_yuitest_coverage["build/attribute-base/attribute-base.js"].code=["YUI.add('attribute-base', function (Y, NAME) {",""," /**"," * The attribute module provides an augmentable Attribute implementation, which"," * adds configurable attributes and attribute change events to the class being"," * augmented. It also provides a State class, which is used internally by Attribute,"," * but can also be used independently to provide a name/property/value data structure to"," * store state."," *"," * @module attribute"," */",""," /**"," * The attribute-base submodule provides core attribute handling support, with everything"," * aside from complex attribute handling in the provider's constructor."," *"," * @module attribute"," * @submodule attribute-base"," */",""," /**"," *

"," * Attribute provides configurable attribute support along with attribute change events. It is designed to be"," * augmented on to a host class, and provides the host with the ability to configure attributes to store and retrieve state,"," * along with attribute change events."," *

"," *

For example, attributes added to the host can be configured:

"," *
    "," *
  • As read only.
  • "," *
  • As write once.
  • "," *
  • With a setter function, which can be used to manipulate"," * values passed to Attribute's set method, before they are stored.
  • "," *
  • With a getter function, which can be used to manipulate stored values,"," * before they are returned by Attribute's get method.
  • "," *
  • With a validator function, to validate values before they are stored.
  • "," *
"," *"," *

See the addAttr method, for the complete set of configuration"," * options available for attributes.

"," *"," *

NOTE: Most implementations will be better off extending the Base class,"," * instead of augmenting Attribute directly. Base augments Attribute and will handle the initial configuration"," * of attributes for derived classes, accounting for values passed into the constructor.

"," *"," * @class Attribute"," * @param attrs {Object} The attributes to add during construction (passed through to addAttrs)."," * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor."," * @param values {Object} The initial attribute values to apply (passed through to addAttrs)."," * These are not merged/cloned. The caller is responsible for isolating user provided values if required."," * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs)."," * @uses AttributeCore"," * @uses AttributeObservable"," * @uses EventTarget"," * @uses AttributeExtras"," */"," function Attribute() {"," Y.AttributeCore.apply(this, arguments);"," Y.AttributeObservable.apply(this, arguments);"," Y.AttributeExtras.apply(this, arguments);"," }",""," Y.mix(Attribute, Y.AttributeCore, false, null, 1);"," Y.mix(Attribute, Y.AttributeExtras, false, null, 1);",""," // Needs to be `true`, to overwrite methods from AttributeCore"," Y.mix(Attribute, Y.AttributeObservable, true, null, 1);",""," /**"," *

The value to return from an attribute setter in order to prevent the set from going through.

"," *"," *

You can return this value from your setter if you wish to combine validator and setter"," * functionality into a single setter function, which either returns the massaged value to be stored or"," * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.

"," *"," * @property INVALID_VALUE"," * @type Object"," * @static"," * @final"," */"," Attribute.INVALID_VALUE = Y.AttributeCore.INVALID_VALUE;",""," /**"," * The list of properties which can be configured for"," * each attribute (e.g. setter, getter, writeOnce etc.)."," *"," * This property is used internally as a whitelist for faster"," * Y.mix operations."," *"," * @property _ATTR_CFG"," * @type Array"," * @static"," * @protected"," */"," Attribute._ATTR_CFG = Y.AttributeCore._ATTR_CFG.concat(Y.AttributeObservable._ATTR_CFG);",""," /**"," * Utility method to protect an attribute configuration hash, by merging the"," * entire object and the individual attr config objects."," *"," * @method protectAttrs"," * @static"," * @param {Object} attrs A hash of attribute to configuration object pairs."," * @return {Object} A protected version of the `attrs` argument."," */"," Attribute.protectAttrs = Y.AttributeCore.protectAttrs;",""," Y.Attribute = Attribute;","","","}, '3.9.0', {\"requires\": [\"attribute-core\", \"attribute-observable\", \"attribute-extras\"]});"]; +_yuitest_coverage["build/attribute-base/attribute-base.js"].lines = {"1":0,"56":0,"57":0,"58":0,"59":0,"62":0,"63":0,"66":0,"80":0,"94":0,"105":0,"107":0}; +_yuitest_coverage["build/attribute-base/attribute-base.js"].functions = {"Attribute:56":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/attribute-base/attribute-base.js"].coveredLines = 12; +_yuitest_coverage["build/attribute-base/attribute-base.js"].coveredFunctions = 2; +_yuitest_coverline("build/attribute-base/attribute-base.js", 1); +YUI.add('attribute-base', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The attribute-base submodule provides core attribute handling support, with everything + * aside from complex attribute handling in the provider's constructor. + * + * @module attribute + * @submodule attribute-base + */ + + /** + *

+ * Attribute provides configurable attribute support along with attribute change events. It is designed to be + * augmented on to a host class, and provides the host with the ability to configure attributes to store and retrieve state, + * along with attribute change events. + *

+ *

For example, attributes added to the host can be configured:

+ *
    + *
  • As read only.
  • + *
  • As write once.
  • + *
  • With a setter function, which can be used to manipulate + * values passed to Attribute's set method, before they are stored.
  • + *
  • With a getter function, which can be used to manipulate stored values, + * before they are returned by Attribute's get method.
  • + *
  • With a validator function, to validate values before they are stored.
  • + *
+ * + *

See the addAttr method, for the complete set of configuration + * options available for attributes.

+ * + *

NOTE: Most implementations will be better off extending the Base class, + * instead of augmenting Attribute directly. Base augments Attribute and will handle the initial configuration + * of attributes for derived classes, accounting for values passed into the constructor.

+ * + * @class Attribute + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + * @uses AttributeCore + * @uses AttributeObservable + * @uses EventTarget + * @uses AttributeExtras + */ + _yuitest_coverfunc("build/attribute-base/attribute-base.js", "(anonymous 1)", 1); +_yuitest_coverline("build/attribute-base/attribute-base.js", 56); +function Attribute() { + _yuitest_coverfunc("build/attribute-base/attribute-base.js", "Attribute", 56); +_yuitest_coverline("build/attribute-base/attribute-base.js", 57); +Y.AttributeCore.apply(this, arguments); + _yuitest_coverline("build/attribute-base/attribute-base.js", 58); +Y.AttributeObservable.apply(this, arguments); + _yuitest_coverline("build/attribute-base/attribute-base.js", 59); +Y.AttributeExtras.apply(this, arguments); + } + + _yuitest_coverline("build/attribute-base/attribute-base.js", 62); +Y.mix(Attribute, Y.AttributeCore, false, null, 1); + _yuitest_coverline("build/attribute-base/attribute-base.js", 63); +Y.mix(Attribute, Y.AttributeExtras, false, null, 1); + + // Needs to be `true`, to overwrite methods from AttributeCore + _yuitest_coverline("build/attribute-base/attribute-base.js", 66); +Y.mix(Attribute, Y.AttributeObservable, true, null, 1); + + /** + *

The value to return from an attribute setter in order to prevent the set from going through.

+ * + *

You can return this value from your setter if you wish to combine validator and setter + * functionality into a single setter function, which either returns the massaged value to be stored or + * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.

+ * + * @property INVALID_VALUE + * @type Object + * @static + * @final + */ + _yuitest_coverline("build/attribute-base/attribute-base.js", 80); +Attribute.INVALID_VALUE = Y.AttributeCore.INVALID_VALUE; + + /** + * The list of properties which can be configured for + * each attribute (e.g. setter, getter, writeOnce etc.). + * + * This property is used internally as a whitelist for faster + * Y.mix operations. + * + * @property _ATTR_CFG + * @type Array + * @static + * @protected + */ + _yuitest_coverline("build/attribute-base/attribute-base.js", 94); +Attribute._ATTR_CFG = Y.AttributeCore._ATTR_CFG.concat(Y.AttributeObservable._ATTR_CFG); + + /** + * Utility method to protect an attribute configuration hash, by merging the + * entire object and the individual attr config objects. + * + * @method protectAttrs + * @static + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the `attrs` argument. + */ + _yuitest_coverline("build/attribute-base/attribute-base.js", 105); +Attribute.protectAttrs = Y.AttributeCore.protectAttrs; + + _yuitest_coverline("build/attribute-base/attribute-base.js", 107); +Y.Attribute = Attribute; + + +}, '3.9.0', {"requires": ["attribute-core", "attribute-observable", "attribute-extras"]}); diff --git a/src/errors/static/js/yui/build/attribute-base/attribute-base-debug.js b/src/errors/static/js/yui/build/attribute-base/attribute-base-debug.js new file mode 100644 index 00000000..f315f0d3 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-base/attribute-base-debug.js @@ -0,0 +1,111 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-base', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The attribute-base submodule provides core attribute handling support, with everything + * aside from complex attribute handling in the provider's constructor. + * + * @module attribute + * @submodule attribute-base + */ + + /** + *

+ * Attribute provides configurable attribute support along with attribute change events. It is designed to be + * augmented on to a host class, and provides the host with the ability to configure attributes to store and retrieve state, + * along with attribute change events. + *

+ *

For example, attributes added to the host can be configured:

+ *
    + *
  • As read only.
  • + *
  • As write once.
  • + *
  • With a setter function, which can be used to manipulate + * values passed to Attribute's set method, before they are stored.
  • + *
  • With a getter function, which can be used to manipulate stored values, + * before they are returned by Attribute's get method.
  • + *
  • With a validator function, to validate values before they are stored.
  • + *
+ * + *

See the addAttr method, for the complete set of configuration + * options available for attributes.

+ * + *

NOTE: Most implementations will be better off extending the Base class, + * instead of augmenting Attribute directly. Base augments Attribute and will handle the initial configuration + * of attributes for derived classes, accounting for values passed into the constructor.

+ * + * @class Attribute + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + * @uses AttributeCore + * @uses AttributeObservable + * @uses EventTarget + * @uses AttributeExtras + */ + function Attribute() { + Y.AttributeCore.apply(this, arguments); + Y.AttributeObservable.apply(this, arguments); + Y.AttributeExtras.apply(this, arguments); + } + + Y.mix(Attribute, Y.AttributeCore, false, null, 1); + Y.mix(Attribute, Y.AttributeExtras, false, null, 1); + + // Needs to be `true`, to overwrite methods from AttributeCore + Y.mix(Attribute, Y.AttributeObservable, true, null, 1); + + /** + *

The value to return from an attribute setter in order to prevent the set from going through.

+ * + *

You can return this value from your setter if you wish to combine validator and setter + * functionality into a single setter function, which either returns the massaged value to be stored or + * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.

+ * + * @property INVALID_VALUE + * @type Object + * @static + * @final + */ + Attribute.INVALID_VALUE = Y.AttributeCore.INVALID_VALUE; + + /** + * The list of properties which can be configured for + * each attribute (e.g. setter, getter, writeOnce etc.). + * + * This property is used internally as a whitelist for faster + * Y.mix operations. + * + * @property _ATTR_CFG + * @type Array + * @static + * @protected + */ + Attribute._ATTR_CFG = Y.AttributeCore._ATTR_CFG.concat(Y.AttributeObservable._ATTR_CFG); + + /** + * Utility method to protect an attribute configuration hash, by merging the + * entire object and the individual attr config objects. + * + * @method protectAttrs + * @static + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the `attrs` argument. + */ + Attribute.protectAttrs = Y.AttributeCore.protectAttrs; + + Y.Attribute = Attribute; + + +}, '3.9.0', {"requires": ["attribute-core", "attribute-observable", "attribute-extras"]}); diff --git a/src/errors/static/js/yui/build/attribute-base/attribute-base-min.js b/src/errors/static/js/yui/build/attribute-base/attribute-base-min.js new file mode 100644 index 00000000..6da64abd --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-base/attribute-base-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("attribute-base",function(e,t){function n(){e.AttributeCore.apply(this,arguments),e.AttributeObservable.apply(this,arguments),e.AttributeExtras.apply(this,arguments)}e.mix(n,e.AttributeCore,!1,null,1),e.mix(n,e.AttributeExtras,!1,null,1),e.mix(n,e.AttributeObservable,!0,null,1),n.INVALID_VALUE=e.AttributeCore.INVALID_VALUE,n._ATTR_CFG=e.AttributeCore._ATTR_CFG.concat(e.AttributeObservable._ATTR_CFG),n.protectAttrs=e.AttributeCore.protectAttrs,e.Attribute=n},"3.9.0",{requires:["attribute-core","attribute-observable","attribute-extras"]}); diff --git a/src/errors/static/js/yui/build/attribute-base/attribute-base.js b/src/errors/static/js/yui/build/attribute-base/attribute-base.js new file mode 100644 index 00000000..f315f0d3 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-base/attribute-base.js @@ -0,0 +1,111 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-base', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The attribute-base submodule provides core attribute handling support, with everything + * aside from complex attribute handling in the provider's constructor. + * + * @module attribute + * @submodule attribute-base + */ + + /** + *

+ * Attribute provides configurable attribute support along with attribute change events. It is designed to be + * augmented on to a host class, and provides the host with the ability to configure attributes to store and retrieve state, + * along with attribute change events. + *

+ *

For example, attributes added to the host can be configured:

+ *
    + *
  • As read only.
  • + *
  • As write once.
  • + *
  • With a setter function, which can be used to manipulate + * values passed to Attribute's set method, before they are stored.
  • + *
  • With a getter function, which can be used to manipulate stored values, + * before they are returned by Attribute's get method.
  • + *
  • With a validator function, to validate values before they are stored.
  • + *
+ * + *

See the addAttr method, for the complete set of configuration + * options available for attributes.

+ * + *

NOTE: Most implementations will be better off extending the Base class, + * instead of augmenting Attribute directly. Base augments Attribute and will handle the initial configuration + * of attributes for derived classes, accounting for values passed into the constructor.

+ * + * @class Attribute + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + * @uses AttributeCore + * @uses AttributeObservable + * @uses EventTarget + * @uses AttributeExtras + */ + function Attribute() { + Y.AttributeCore.apply(this, arguments); + Y.AttributeObservable.apply(this, arguments); + Y.AttributeExtras.apply(this, arguments); + } + + Y.mix(Attribute, Y.AttributeCore, false, null, 1); + Y.mix(Attribute, Y.AttributeExtras, false, null, 1); + + // Needs to be `true`, to overwrite methods from AttributeCore + Y.mix(Attribute, Y.AttributeObservable, true, null, 1); + + /** + *

The value to return from an attribute setter in order to prevent the set from going through.

+ * + *

You can return this value from your setter if you wish to combine validator and setter + * functionality into a single setter function, which either returns the massaged value to be stored or + * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.

+ * + * @property INVALID_VALUE + * @type Object + * @static + * @final + */ + Attribute.INVALID_VALUE = Y.AttributeCore.INVALID_VALUE; + + /** + * The list of properties which can be configured for + * each attribute (e.g. setter, getter, writeOnce etc.). + * + * This property is used internally as a whitelist for faster + * Y.mix operations. + * + * @property _ATTR_CFG + * @type Array + * @static + * @protected + */ + Attribute._ATTR_CFG = Y.AttributeCore._ATTR_CFG.concat(Y.AttributeObservable._ATTR_CFG); + + /** + * Utility method to protect an attribute configuration hash, by merging the + * entire object and the individual attr config objects. + * + * @method protectAttrs + * @static + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the `attrs` argument. + */ + Attribute.protectAttrs = Y.AttributeCore.protectAttrs; + + Y.Attribute = Attribute; + + +}, '3.9.0', {"requires": ["attribute-core", "attribute-observable", "attribute-extras"]}); diff --git a/src/errors/static/js/yui/build/attribute-complex/attribute-complex-coverage.js b/src/errors/static/js/yui/build/attribute-complex/attribute-complex-coverage.js new file mode 100644 index 00000000..53e1d287 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-complex/attribute-complex-coverage.js @@ -0,0 +1,96 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/attribute-complex/attribute-complex.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/attribute-complex/attribute-complex.js", + code: [] +}; +_yuitest_coverage["build/attribute-complex/attribute-complex.js"].code=["YUI.add('attribute-complex', function (Y, NAME) {",""," /**"," * Adds support for attribute providers to handle complex attributes in the constructor"," *"," * @module attribute"," * @submodule attribute-complex"," * @for Attribute"," * @deprecated AttributeComplex's overrides are now part of AttributeCore."," */",""," var Attribute = Y.Attribute;",""," Attribute.Complex = function() {};"," Attribute.Complex.prototype = {",""," /**"," * Utility method to split out simple attribute name/value pairs (\"x\")"," * from complex attribute name/value pairs (\"x.y.z\"), so that complex"," * attributes can be keyed by the top level attribute name."," *"," * @method _normAttrVals"," * @param {Object} valueHash An object with attribute name/value pairs"," *"," * @return {Object} An object literal with 2 properties - \"simple\" and \"complex\","," * containing simple and complex attribute values respectively keyed"," * by the top level attribute name, or null, if valueHash is falsey."," *"," * @private"," */"," _normAttrVals : Attribute.prototype._normAttrVals,",""," /**"," * Returns the initial value of the given attribute from"," * either the default configuration provided, or the"," * over-ridden value if it exists in the set of initValues"," * provided and the attribute is not read-only."," *"," * @param {String} attr The name of the attribute"," * @param {Object} cfg The attribute configuration object"," * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals"," *"," * @return {Any} The initial value of the attribute."," *"," * @method _getAttrInitVal"," * @private"," */"," _getAttrInitVal : Attribute.prototype._getAttrInitVal",""," };",""," // Consistency with the rest of the Attribute addons for now."," Y.AttributeComplex = Attribute.Complex;","","","}, '3.9.0', {\"requires\": [\"attribute-base\"]});"]; +_yuitest_coverage["build/attribute-complex/attribute-complex.js"].lines = {"1":0,"12":0,"14":0,"15":0,"53":0}; +_yuitest_coverage["build/attribute-complex/attribute-complex.js"].functions = {"(anonymous 1):1":0}; +_yuitest_coverage["build/attribute-complex/attribute-complex.js"].coveredLines = 5; +_yuitest_coverage["build/attribute-complex/attribute-complex.js"].coveredFunctions = 1; +_yuitest_coverline("build/attribute-complex/attribute-complex.js", 1); +YUI.add('attribute-complex', function (Y, NAME) { + + /** + * Adds support for attribute providers to handle complex attributes in the constructor + * + * @module attribute + * @submodule attribute-complex + * @for Attribute + * @deprecated AttributeComplex's overrides are now part of AttributeCore. + */ + + _yuitest_coverfunc("build/attribute-complex/attribute-complex.js", "(anonymous 1)", 1); +_yuitest_coverline("build/attribute-complex/attribute-complex.js", 12); +var Attribute = Y.Attribute; + + _yuitest_coverline("build/attribute-complex/attribute-complex.js", 14); +Attribute.Complex = function() {}; + _yuitest_coverline("build/attribute-complex/attribute-complex.js", 15); +Attribute.Complex.prototype = { + + /** + * Utility method to split out simple attribute name/value pairs ("x") + * from complex attribute name/value pairs ("x.y.z"), so that complex + * attributes can be keyed by the top level attribute name. + * + * @method _normAttrVals + * @param {Object} valueHash An object with attribute name/value pairs + * + * @return {Object} An object literal with 2 properties - "simple" and "complex", + * containing simple and complex attribute values respectively keyed + * by the top level attribute name, or null, if valueHash is falsey. + * + * @private + */ + _normAttrVals : Attribute.prototype._normAttrVals, + + /** + * Returns the initial value of the given attribute from + * either the default configuration provided, or the + * over-ridden value if it exists in the set of initValues + * provided and the attribute is not read-only. + * + * @param {String} attr The name of the attribute + * @param {Object} cfg The attribute configuration object + * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals + * + * @return {Any} The initial value of the attribute. + * + * @method _getAttrInitVal + * @private + */ + _getAttrInitVal : Attribute.prototype._getAttrInitVal + + }; + + // Consistency with the rest of the Attribute addons for now. + _yuitest_coverline("build/attribute-complex/attribute-complex.js", 53); +Y.AttributeComplex = Attribute.Complex; + + +}, '3.9.0', {"requires": ["attribute-base"]}); diff --git a/src/errors/static/js/yui/build/attribute-complex/attribute-complex-debug.js b/src/errors/static/js/yui/build/attribute-complex/attribute-complex-debug.js new file mode 100644 index 00000000..26b946a1 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-complex/attribute-complex-debug.js @@ -0,0 +1,57 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-complex', function (Y, NAME) { + + /** + * Adds support for attribute providers to handle complex attributes in the constructor + * + * @module attribute + * @submodule attribute-complex + * @for Attribute + * @deprecated AttributeComplex's overrides are now part of AttributeCore. + */ + + var Attribute = Y.Attribute; + + Attribute.Complex = function() {}; + Attribute.Complex.prototype = { + + /** + * Utility method to split out simple attribute name/value pairs ("x") + * from complex attribute name/value pairs ("x.y.z"), so that complex + * attributes can be keyed by the top level attribute name. + * + * @method _normAttrVals + * @param {Object} valueHash An object with attribute name/value pairs + * + * @return {Object} An object literal with 2 properties - "simple" and "complex", + * containing simple and complex attribute values respectively keyed + * by the top level attribute name, or null, if valueHash is falsey. + * + * @private + */ + _normAttrVals : Attribute.prototype._normAttrVals, + + /** + * Returns the initial value of the given attribute from + * either the default configuration provided, or the + * over-ridden value if it exists in the set of initValues + * provided and the attribute is not read-only. + * + * @param {String} attr The name of the attribute + * @param {Object} cfg The attribute configuration object + * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals + * + * @return {Any} The initial value of the attribute. + * + * @method _getAttrInitVal + * @private + */ + _getAttrInitVal : Attribute.prototype._getAttrInitVal + + }; + + // Consistency with the rest of the Attribute addons for now. + Y.AttributeComplex = Attribute.Complex; + + +}, '3.9.0', {"requires": ["attribute-base"]}); diff --git a/src/errors/static/js/yui/build/attribute-complex/attribute-complex-min.js b/src/errors/static/js/yui/build/attribute-complex/attribute-complex-min.js new file mode 100644 index 00000000..dfac3264 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-complex/attribute-complex-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("attribute-complex",function(e,t){var n=e.Attribute;n.Complex=function(){},n.Complex.prototype={_normAttrVals:n.prototype._normAttrVals,_getAttrInitVal:n.prototype._getAttrInitVal},e.AttributeComplex=n.Complex},"3.9.0",{requires:["attribute-base"]}); diff --git a/src/errors/static/js/yui/build/attribute-complex/attribute-complex.js b/src/errors/static/js/yui/build/attribute-complex/attribute-complex.js new file mode 100644 index 00000000..26b946a1 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-complex/attribute-complex.js @@ -0,0 +1,57 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-complex', function (Y, NAME) { + + /** + * Adds support for attribute providers to handle complex attributes in the constructor + * + * @module attribute + * @submodule attribute-complex + * @for Attribute + * @deprecated AttributeComplex's overrides are now part of AttributeCore. + */ + + var Attribute = Y.Attribute; + + Attribute.Complex = function() {}; + Attribute.Complex.prototype = { + + /** + * Utility method to split out simple attribute name/value pairs ("x") + * from complex attribute name/value pairs ("x.y.z"), so that complex + * attributes can be keyed by the top level attribute name. + * + * @method _normAttrVals + * @param {Object} valueHash An object with attribute name/value pairs + * + * @return {Object} An object literal with 2 properties - "simple" and "complex", + * containing simple and complex attribute values respectively keyed + * by the top level attribute name, or null, if valueHash is falsey. + * + * @private + */ + _normAttrVals : Attribute.prototype._normAttrVals, + + /** + * Returns the initial value of the given attribute from + * either the default configuration provided, or the + * over-ridden value if it exists in the set of initValues + * provided and the attribute is not read-only. + * + * @param {String} attr The name of the attribute + * @param {Object} cfg The attribute configuration object + * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals + * + * @return {Any} The initial value of the attribute. + * + * @method _getAttrInitVal + * @private + */ + _getAttrInitVal : Attribute.prototype._getAttrInitVal + + }; + + // Consistency with the rest of the Attribute addons for now. + Y.AttributeComplex = Attribute.Complex; + + +}, '3.9.0', {"requires": ["attribute-base"]}); diff --git a/src/errors/static/js/yui/build/attribute-core/attribute-core-coverage.js b/src/errors/static/js/yui/build/attribute-core/attribute-core-coverage.js new file mode 100644 index 00000000..0aa0bfe9 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-core/attribute-core-coverage.js @@ -0,0 +1,1413 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/attribute-core/attribute-core.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/attribute-core/attribute-core.js", + code: [] +}; +_yuitest_coverage["build/attribute-core/attribute-core.js"].code=["YUI.add('attribute-core', function (Y, NAME) {",""," /**"," * The State class maintains state for a collection of named items, with"," * a varying number of properties defined."," *"," * It avoids the need to create a separate class for the item, and separate instances"," * of these classes for each item, by storing the state in a 2 level hash table,"," * improving performance when the number of items is likely to be large."," *"," * @constructor"," * @class State"," */"," Y.State = function() {"," /**"," * Hash of attributes"," * @property data"," */"," this.data = {};"," };",""," Y.State.prototype = {",""," /**"," * Adds a property to an item."," *"," * @method add"," * @param name {String} The name of the item."," * @param key {String} The name of the property."," * @param val {Any} The value of the property."," */"," add: function(name, key, val) {"," var item = this.data[name];",""," if (!item) {"," item = this.data[name] = {};"," }",""," item[key] = val;"," },",""," /**"," * Adds multiple properties to an item."," *"," * @method addAll"," * @param name {String} The name of the item."," * @param obj {Object} A hash of property/value pairs."," */"," addAll: function(name, obj) {"," var item = this.data[name],"," key;",""," if (!item) {"," item = this.data[name] = {};"," }",""," for (key in obj) {"," if (obj.hasOwnProperty(key)) {"," item[key] = obj[key];"," }"," }"," },",""," /**"," * Removes a property from an item."," *"," * @method remove"," * @param name {String} The name of the item."," * @param key {String} The property to remove."," */"," remove: function(name, key) {"," var item = this.data[name];",""," if (item) {"," delete item[key];"," }"," },",""," /**"," * Removes multiple properties from an item, or removes the item completely."," *"," * @method removeAll"," * @param name {String} The name of the item."," * @param obj {Object|Array} Collection of properties to delete. If not provided, the entire item is removed."," */"," removeAll: function(name, obj) {"," var data;",""," if (!obj) {"," data = this.data;",""," if (name in data) {"," delete data[name];"," }"," } else {"," Y.each(obj, function(value, key) {"," this.remove(name, typeof key === 'string' ? key : value);"," }, this);"," }"," },",""," /**"," * For a given item, returns the value of the property requested, or undefined if not found."," *"," * @method get"," * @param name {String} The name of the item"," * @param key {String} Optional. The property value to retrieve."," * @return {Any} The value of the supplied property."," */"," get: function(name, key) {"," var item = this.data[name];",""," if (item) {"," return item[key];"," }"," },",""," /**"," * For the given item, returns an object with all of the"," * item's property/value pairs. By default the object returned"," * is a shallow copy of the stored data, but passing in true"," * as the second parameter will return a reference to the stored"," * data."," *"," * @method getAll"," * @param name {String} The name of the item"," * @param reference {boolean} true, if you want a reference to the stored"," * object"," * @return {Object} An object with property/value pairs for the item."," */"," getAll : function(name, reference) {"," var item = this.data[name],"," key, obj;",""," if (reference) {"," obj = item;"," } else if (item) {"," obj = {};",""," for (key in item) {"," if (item.hasOwnProperty(key)) {"," obj[key] = item[key];"," }"," }"," }",""," return obj;"," }"," };"," /**"," * The attribute module provides an augmentable Attribute implementation, which"," * adds configurable attributes and attribute change events to the class being"," * augmented. It also provides a State class, which is used internally by Attribute,"," * but can also be used independently to provide a name/property/value data structure to"," * store state."," *"," * @module attribute"," */",""," /**"," * The attribute-core submodule provides the lightest level of attribute handling support"," * without Attribute change events, or lesser used methods such as reset(), modifyAttrs(),"," * and removeAttr()."," *"," * @module attribute"," * @submodule attribute-core"," */"," var O = Y.Object,"," Lang = Y.Lang,",""," DOT = \".\",",""," // Externally configurable props"," GETTER = \"getter\","," SETTER = \"setter\","," READ_ONLY = \"readOnly\","," WRITE_ONCE = \"writeOnce\","," INIT_ONLY = \"initOnly\","," VALIDATOR = \"validator\","," VALUE = \"value\","," VALUE_FN = \"valueFn\","," LAZY_ADD = \"lazyAdd\",",""," // Used for internal state management"," ADDED = \"added\","," BYPASS_PROXY = \"_bypassProxy\","," INITIALIZING = \"initializing\","," INIT_VALUE = \"initValue\","," LAZY = \"lazy\","," IS_LAZY_ADD = \"isLazyAdd\",",""," INVALID_VALUE;",""," /**"," *

"," * AttributeCore provides the lightest level of configurable attribute support. It is designed to be"," * augmented on to a host class, and provides the host with the ability to configure"," * attributes to store and retrieve state, but without support for attribute change events."," *

"," *

For example, attributes added to the host can be configured:

"," *
    "," *
  • As read only.
  • "," *
  • As write once.
  • "," *
  • With a setter function, which can be used to manipulate"," * values passed to Attribute's set method, before they are stored.
  • "," *
  • With a getter function, which can be used to manipulate stored values,"," * before they are returned by Attribute's get method.
  • "," *
  • With a validator function, to validate values before they are stored.
  • "," *
"," *"," *

See the addAttr method, for the complete set of configuration"," * options available for attributes.

"," *"," *

Object/Classes based on AttributeCore can augment AttributeObservable"," * (with true for overwrite) and AttributeExtras to add attribute event and"," * additional, less commonly used attribute methods, such as `modifyAttr`, `removeAttr` and `reset`.

"," *"," * @class AttributeCore"," * @param attrs {Object} The attributes to add during construction (passed through to addAttrs)."," * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor."," * @param values {Object} The initial attribute values to apply (passed through to addAttrs)."," * These are not merged/cloned. The caller is responsible for isolating user provided values if required."," * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs)."," */"," function AttributeCore(attrs, values, lazy) {"," // HACK: Fix #2531929"," // Complete hack, to make sure the first clone of a node value in IE doesn't doesn't hurt state - maintains 3.4.1 behavior."," // Too late in the release cycle to do anything about the core problem."," // The root issue is that cloning a Y.Node instance results in an object which barfs in IE, when you access it's properties (since 3.3.0)."," this._yuievt = null;",""," this._initAttrHost(attrs, values, lazy);"," }",""," /**"," *

The value to return from an attribute setter in order to prevent the set from going through.

"," *"," *

You can return this value from your setter if you wish to combine validator and setter"," * functionality into a single setter function, which either returns the massaged value to be stored or"," * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.

"," *"," * @property INVALID_VALUE"," * @type Object"," * @static"," * @final"," */"," AttributeCore.INVALID_VALUE = {};"," INVALID_VALUE = AttributeCore.INVALID_VALUE;",""," /**"," * The list of properties which can be configured for"," * each attribute (e.g. setter, getter, writeOnce etc.)."," *"," * This property is used internally as a whitelist for faster"," * Y.mix operations."," *"," * @property _ATTR_CFG"," * @type Array"," * @static"," * @protected"," */"," AttributeCore._ATTR_CFG = [SETTER, GETTER, VALIDATOR, VALUE, VALUE_FN, WRITE_ONCE, READ_ONLY, LAZY_ADD, BYPASS_PROXY];",""," /**"," * Utility method to protect an attribute configuration hash, by merging the"," * entire object and the individual attr config objects."," *"," * @method protectAttrs"," * @static"," * @param {Object} attrs A hash of attribute to configuration object pairs."," * @return {Object} A protected version of the `attrs` argument."," */"," AttributeCore.protectAttrs = function (attrs) {"," if (attrs) {"," attrs = Y.merge(attrs);"," for (var attr in attrs) {"," if (attrs.hasOwnProperty(attr)) {"," attrs[attr] = Y.merge(attrs[attr]);"," }"," }"," }",""," return attrs;"," };",""," AttributeCore.prototype = {",""," /**"," * Constructor logic for attributes. Initializes the host state, and sets up the inital attributes passed to the"," * constructor."," *"," * @method _initAttrHost"," * @param attrs {Object} The attributes to add during construction (passed through to addAttrs)."," * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor."," * @param values {Object} The initial attribute values to apply (passed through to addAttrs)."," * These are not merged/cloned. The caller is responsible for isolating user provided values if required."," * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs)."," * @private"," */"," _initAttrHost : function(attrs, values, lazy) {"," this._state = new Y.State();"," this._initAttrs(attrs, values, lazy);"," },",""," /**"," *

"," * Adds an attribute with the provided configuration to the host object."," *

"," *

"," * The config argument object supports the following properties:"," *

"," *"," *
"," *
value <Any>
"," *
The initial value to set on the attribute
"," *"," *
valueFn <Function | String>
"," *
"," *

A function, which will return the initial value to set on the attribute. This is useful"," * for cases where the attribute configuration is defined statically, but needs to"," * reference the host instance (\"this\") to obtain an initial value. If both the value and valueFn properties are defined,"," * the value returned by the valueFn has precedence over the value property, unless it returns undefined, in which"," * case the value property is used.

"," *"," *

valueFn can also be set to a string, representing the name of the instance method to be used to retrieve the value.

"," *
"," *"," *
readOnly <boolean>
"," *
Whether or not the attribute is read only. Attributes having readOnly set to true"," * cannot be modified by invoking the set method.
"," *"," *
writeOnce <boolean> or <string>
"," *
"," * Whether or not the attribute is \"write once\". Attributes having writeOnce set to true,"," * can only have their values set once, be it through the default configuration,"," * constructor configuration arguments, or by invoking set."," *

The writeOnce attribute can also be set to the string \"initOnly\","," * in which case the attribute can only be set during initialization"," * (when used with Base, this means it can only be set during construction)

"," *
"," *"," *
setter <Function | String>
"," *
"," *

The setter function used to massage or normalize the value passed to the set method for the attribute."," * The value returned by the setter will be the final stored value. Returning"," * Attribute.INVALID_VALUE, from the setter will prevent"," * the value from being stored."," *

"," *"," *

setter can also be set to a string, representing the name of the instance method to be used as the setter function.

"," *
"," *"," *
getter <Function | String>
"," *
"," *

"," * The getter function used to massage or normalize the value returned by the get method for the attribute."," * The value returned by the getter function is the value which will be returned to the user when they"," * invoke get."," *

"," *"," *

getter can also be set to a string, representing the name of the instance method to be used as the getter function.

"," *
"," *"," *
validator <Function | String>
"," *
"," *

"," * The validator function invoked prior to setting the stored value. Returning"," * false from the validator function will prevent the value from being stored."," *

"," *"," *

validator can also be set to a string, representing the name of the instance method to be used as the validator function.

"," *
"," *"," *
lazyAdd <boolean>
"," *
Whether or not to delay initialization of the attribute until the first call to get/set it."," * This flag can be used to over-ride lazy initialization on a per attribute basis, when adding multiple attributes through"," * the addAttrs method.
"," *"," *
"," *"," *

The setter, getter and validator are invoked with the value and name passed in as the first and second arguments, and with"," * the context (\"this\") set to the host object.

"," *"," *

Configuration properties outside of the list mentioned above are considered private properties used internally by attribute,"," * and are not intended for public use.

"," *"," * @method addAttr"," *"," * @param {String} name The name of the attribute."," * @param {Object} config An object with attribute configuration property/value pairs, specifying the configuration for the attribute."," *"," *

"," * NOTE: The configuration object is modified when adding an attribute, so if you need"," * to protect the original values, you will need to merge the object."," *

"," *"," * @param {boolean} lazy (optional) Whether or not to add this attribute lazily (on the first call to get/set)."," *"," * @return {Object} A reference to the host object."," *"," * @chainable"," */"," addAttr: function(name, config, lazy) {","",""," var host = this, // help compression"," state = host._state,"," value,"," hasValue;",""," config = config || {};",""," lazy = (LAZY_ADD in config) ? config[LAZY_ADD] : lazy;",""," if (lazy && !host.attrAdded(name)) {"," state.addAll(name, {"," lazy : config,"," added : true"," });"," } else {"," /*jshint maxlen:200*/",""," if (!host.attrAdded(name) || state.get(name, IS_LAZY_ADD)) {",""," hasValue = (VALUE in config);",""," /*jshint maxlen:150*/",""," if (hasValue) {"," // We'll go through set, don't want to set value in config directly"," value = config.value;"," delete config.value;"," }",""," config.added = true;"," config.initializing = true;",""," state.addAll(name, config);",""," if (hasValue) {"," // Go through set, so that raw values get normalized/validated"," host.set(name, value);"," }",""," state.remove(name, INITIALIZING);"," }"," }",""," return host;"," },",""," /**"," * Checks if the given attribute has been added to the host"," *"," * @method attrAdded"," * @param {String} name The name of the attribute to check."," * @return {boolean} true if an attribute with the given name has been added, false if it hasn't."," * This method will return true for lazily added attributes."," */"," attrAdded: function(name) {"," return !!this._state.get(name, ADDED);"," },",""," /**"," * Returns the current value of the attribute. If the attribute"," * has been configured with a 'getter' function, this method will delegate"," * to the 'getter' to obtain the value of the attribute."," *"," * @method get"," *"," * @param {String} name The name of the attribute. If the value of the attribute is an Object,"," * dot notation can be used to obtain the value of a property of the object (e.g. get(\"x.y.z\"))"," *"," * @return {Any} The value of the attribute"," */"," get : function(name) {"," return this._getAttr(name);"," },",""," /**"," * Checks whether or not the attribute is one which has been"," * added lazily and still requires initialization."," *"," * @method _isLazyAttr"," * @private"," * @param {String} name The name of the attribute"," * @return {boolean} true if it's a lazily added attribute, false otherwise."," */"," _isLazyAttr: function(name) {"," return this._state.get(name, LAZY);"," },",""," /**"," * Finishes initializing an attribute which has been lazily added."," *"," * @method _addLazyAttr"," * @private"," * @param {Object} name The name of the attribute"," */"," _addLazyAttr: function(name) {"," var state = this._state,"," lazyCfg = state.get(name, LAZY);",""," state.add(name, IS_LAZY_ADD, true);"," state.remove(name, LAZY);"," this.addAttr(name, lazyCfg);"," },",""," /**"," * Sets the value of an attribute."," *"," * @method set"," * @chainable"," *"," * @param {String} name The name of the attribute. If the"," * current value of the attribute is an Object, dot notation can be used"," * to set the value of a property within the object (e.g. set(\"x.y.z\", 5))."," * @param {Any} value The value to set the attribute to."," * @param {Object} [opts] Optional data providing the circumstances for the change."," * @return {Object} A reference to the host object."," */"," set : function(name, val, opts) {"," return this._setAttr(name, val, opts);"," },",""," /**"," * Allows setting of readOnly/writeOnce attributes. See set for argument details."," *"," * @method _set"," * @protected"," * @chainable"," *"," * @param {String} name The name of the attribute."," * @param {Any} val The value to set the attribute to."," * @param {Object} [opts] Optional data providing the circumstances for the change."," * @return {Object} A reference to the host object."," */"," _set : function(name, val, opts) {"," return this._setAttr(name, val, opts, true);"," },",""," /**"," * Provides the common implementation for the public set and protected _set methods."," *"," * See set for argument details."," *"," * @method _setAttr"," * @protected"," * @chainable"," *"," * @param {String} name The name of the attribute."," * @param {Any} value The value to set the attribute to."," * @param {Object} [opts] Optional data providing the circumstances for the change."," * @param {boolean} force If true, allows the caller to set values for"," * readOnly or writeOnce attributes which have already been set."," *"," * @return {Object} A reference to the host object."," */"," _setAttr : function(name, val, opts, force) {"," var allowSet = true,"," state = this._state,"," stateProxy = this._stateProxy,"," cfg,"," initialSet,"," strPath,"," path,"," currVal,"," writeOnce,"," initializing;",""," if (name.indexOf(DOT) !== -1) {"," strPath = name;"," path = name.split(DOT);"," name = path.shift();"," }",""," if (this._isLazyAttr(name)) {"," this._addLazyAttr(name);"," }",""," cfg = state.getAll(name, true) || {};",""," initialSet = (!(VALUE in cfg));",""," if (stateProxy && name in stateProxy && !cfg._bypassProxy) {"," // TODO: Value is always set for proxy. Can we do any better? Maybe take a snapshot as the initial value for the first call to set?"," initialSet = false;"," }",""," writeOnce = cfg.writeOnce;"," initializing = cfg.initializing;",""," if (!initialSet && !force) {",""," if (writeOnce) {"," allowSet = false;"," }",""," if (cfg.readOnly) {"," allowSet = false;"," }"," }",""," if (!initializing && !force && writeOnce === INIT_ONLY) {"," allowSet = false;"," }",""," if (allowSet) {"," // Don't need currVal if initialSet (might fail in custom getter if it always expects a non-undefined/non-null value)"," if (!initialSet) {"," currVal = this.get(name);"," }",""," if (path) {"," val = O.setValue(Y.clone(currVal), path, val);",""," if (val === undefined) {"," allowSet = false;"," }"," }",""," if (allowSet) {"," opts = opts || {};"," if (!this._fireAttrChange || initializing) {"," this._setAttrVal(name, strPath, currVal, val, opts);"," } else {"," // HACK - no real reason core needs to know about _fireAttrChange, but"," // it adds fn hops if we want to break it out. Not sure it's worth it for this critical path"," this._fireAttrChange(name, strPath, currVal, val, opts);"," }"," }"," }",""," return this;"," },",""," /**"," * Provides the common implementation for the public get method,"," * allowing Attribute hosts to over-ride either method."," *"," * See get for argument details."," *"," * @method _getAttr"," * @protected"," * @chainable"," *"," * @param {String} name The name of the attribute."," * @return {Any} The value of the attribute."," */"," _getAttr : function(name) {"," var host = this, // help compression"," fullName = name,"," state = host._state,"," path,"," getter,"," val,"," cfg;",""," if (name.indexOf(DOT) !== -1) {"," path = name.split(DOT);"," name = path.shift();"," }",""," // On Demand - Should be rare - handles out of order valueFn references"," if (host._tCfgs && host._tCfgs[name]) {"," cfg = {};"," cfg[name] = host._tCfgs[name];"," delete host._tCfgs[name];"," host._addAttrs(cfg, host._tVals);"," }",""," // Lazy Init"," if (host._isLazyAttr(name)) {"," host._addLazyAttr(name);"," }",""," val = host._getStateVal(name);",""," getter = state.get(name, GETTER);",""," if (getter && !getter.call) {"," getter = this[getter];"," }",""," val = (getter) ? getter.call(host, val, fullName) : val;"," val = (path) ? O.getValue(val, path) : val;",""," return val;"," },",""," /**"," * Gets the stored value for the attribute, from either the"," * internal state object, or the state proxy if it exits"," *"," * @method _getStateVal"," * @private"," * @param {String} name The name of the attribute"," * @return {Any} The stored value of the attribute"," */"," _getStateVal : function(name) {"," var stateProxy = this._stateProxy;"," return stateProxy && (name in stateProxy) && !this._state.get(name, BYPASS_PROXY) ? stateProxy[name] : this._state.get(name, VALUE);"," },",""," /**"," * Sets the stored value for the attribute, in either the"," * internal state object, or the state proxy if it exits"," *"," * @method _setStateVal"," * @private"," * @param {String} name The name of the attribute"," * @param {Any} value The value of the attribute"," */"," _setStateVal : function(name, value) {"," var stateProxy = this._stateProxy;"," if (stateProxy && (name in stateProxy) && !this._state.get(name, BYPASS_PROXY)) {"," stateProxy[name] = value;"," } else {"," this._state.add(name, VALUE, value);"," }"," },",""," /**"," * Updates the stored value of the attribute in the privately held State object,"," * if validation and setter passes."," *"," * @method _setAttrVal"," * @private"," * @param {String} attrName The attribute name."," * @param {String} subAttrName The sub-attribute name, if setting a sub-attribute property (\"x.y.z\")."," * @param {Any} prevVal The currently stored value of the attribute."," * @param {Any} newVal The value which is going to be stored."," * @param {Object} [opts] Optional data providing the circumstances for the change."," *"," * @return {booolean} true if the new attribute value was stored, false if not."," */"," _setAttrVal : function(attrName, subAttrName, prevVal, newVal, opts) {",""," var host = this,"," allowSet = true,"," cfg = this._state.getAll(attrName, true) || {},"," validator = cfg.validator,"," setter = cfg.setter,"," initializing = cfg.initializing,"," prevRawVal = this._getStateVal(attrName),"," name = subAttrName || attrName,"," retVal,"," valid;",""," if (validator) {"," if (!validator.call) {"," // Assume string - trying to keep critical path tight, so avoiding Lang check"," validator = this[validator];"," }"," if (validator) {"," valid = validator.call(host, newVal, name, opts);",""," if (!valid && initializing) {"," newVal = cfg.defaultValue;"," valid = true; // Assume it's valid, for perf."," }"," }"," }",""," if (!validator || valid) {"," if (setter) {"," if (!setter.call) {"," // Assume string - trying to keep critical path tight, so avoiding Lang check"," setter = this[setter];"," }"," if (setter) {"," retVal = setter.call(host, newVal, name, opts);",""," if (retVal === INVALID_VALUE) {"," if (initializing) {"," newVal = cfg.defaultValue;"," } else {"," allowSet = false;"," }"," } else if (retVal !== undefined){"," newVal = retVal;"," }"," }"," }",""," if (allowSet) {"," if(!subAttrName && (newVal === prevRawVal) && !Lang.isObject(newVal)) {"," allowSet = false;"," } else {"," // Store value"," if (!(INIT_VALUE in cfg)) {"," cfg.initValue = newVal;"," }"," host._setStateVal(attrName, newVal);"," }"," }",""," } else {"," allowSet = false;"," }",""," return allowSet;"," },",""," /**"," * Sets multiple attribute values."," *"," * @method setAttrs"," * @param {Object} attrs An object with attributes name/value pairs."," * @param {Object} [opts] Optional data providing the circumstances for the change."," * @return {Object} A reference to the host object."," * @chainable"," */"," setAttrs : function(attrs, opts) {"," return this._setAttrs(attrs, opts);"," },",""," /**"," * Implementation behind the public setAttrs method, to set multiple attribute values."," *"," * @method _setAttrs"," * @protected"," * @param {Object} attrs An object with attributes name/value pairs."," * @param {Object} [opts] Optional data providing the circumstances for the change"," * @return {Object} A reference to the host object."," * @chainable"," */"," _setAttrs : function(attrs, opts) {"," var attr;"," for (attr in attrs) {"," if ( attrs.hasOwnProperty(attr) ) {"," this.set(attr, attrs[attr], opts);"," }"," }"," return this;"," },",""," /**"," * Gets multiple attribute values."," *"," * @method getAttrs"," * @param {Array | boolean} attrs Optional. An array of attribute names. If omitted, all attribute values are"," * returned. If set to true, all attributes modified from their initial values are returned."," * @return {Object} An object with attribute name/value pairs."," */"," getAttrs : function(attrs) {"," return this._getAttrs(attrs);"," },",""," /**"," * Implementation behind the public getAttrs method, to get multiple attribute values."," *"," * @method _getAttrs"," * @protected"," * @param {Array | boolean} attrs Optional. An array of attribute names. If omitted, all attribute values are"," * returned. If set to true, all attributes modified from their initial values are returned."," * @return {Object} An object with attribute name/value pairs."," */"," _getAttrs : function(attrs) {"," var obj = {},"," attr, i, len,"," modifiedOnly = (attrs === true);",""," // TODO - figure out how to get all \"added\""," if (!attrs || modifiedOnly) {"," attrs = O.keys(this._state.data);"," }",""," for (i = 0, len = attrs.length; i < len; i++) {"," attr = attrs[i];",""," if (!modifiedOnly || this._getStateVal(attr) != this._state.get(attr, INIT_VALUE)) {"," // Go through get, to honor cloning/normalization"," obj[attr] = this.get(attr);"," }"," }",""," return obj;"," },",""," /**"," * Configures a group of attributes, and sets initial values."," *"," *

"," * NOTE: This method does not isolate the configuration object by merging/cloning."," * The caller is responsible for merging/cloning the configuration object if required."," *

"," *"," * @method addAttrs"," * @chainable"," *"," * @param {Object} cfgs An object with attribute name/configuration pairs."," * @param {Object} values An object with attribute name/value pairs, defining the initial values to apply."," * Values defined in the cfgs argument will be over-written by values in this argument unless defined as read only."," * @param {boolean} lazy Whether or not to delay the intialization of these attributes until the first call to get/set."," * Individual attributes can over-ride this behavior by defining a lazyAdd configuration property in their configuration."," * See addAttr."," *"," * @return {Object} A reference to the host object."," */"," addAttrs : function(cfgs, values, lazy) {"," var host = this; // help compression"," if (cfgs) {"," host._tCfgs = cfgs;"," host._tVals = host._normAttrVals(values);"," host._addAttrs(cfgs, host._tVals, lazy);"," host._tCfgs = host._tVals = null;"," }",""," return host;"," },",""," /**"," * Implementation behind the public addAttrs method."," *"," * This method is invoked directly by get if it encounters a scenario"," * in which an attribute's valueFn attempts to obtain the"," * value an attribute in the same group of attributes, which has not yet"," * been added (on demand initialization)."," *"," * @method _addAttrs"," * @private"," * @param {Object} cfgs An object with attribute name/configuration pairs."," * @param {Object} values An object with attribute name/value pairs, defining the initial values to apply."," * Values defined in the cfgs argument will be over-written by values in this argument unless defined as read only."," * @param {boolean} lazy Whether or not to delay the intialization of these attributes until the first call to get/set."," * Individual attributes can over-ride this behavior by defining a lazyAdd configuration property in their configuration."," * See addAttr."," */"," _addAttrs : function(cfgs, values, lazy) {"," var host = this, // help compression"," attr,"," attrCfg,"," value;",""," for (attr in cfgs) {"," if (cfgs.hasOwnProperty(attr)) {",""," // Not Merging. Caller is responsible for isolating configs"," attrCfg = cfgs[attr];"," attrCfg.defaultValue = attrCfg.value;",""," // Handle simple, complex and user values, accounting for read-only"," value = host._getAttrInitVal(attr, attrCfg, host._tVals);",""," if (value !== undefined) {"," attrCfg.value = value;"," }",""," if (host._tCfgs[attr]) {"," delete host._tCfgs[attr];"," }",""," host.addAttr(attr, attrCfg, lazy);"," }"," }"," },",""," /**"," * Utility method to protect an attribute configuration"," * hash, by merging the entire object and the individual"," * attr config objects."," *"," * @method _protectAttrs"," * @protected"," * @param {Object} attrs A hash of attribute to configuration object pairs."," * @return {Object} A protected version of the attrs argument."," * @deprecated Use `AttributeCore.protectAttrs()` or"," * `Attribute.protectAttrs()` which are the same static utility method."," */"," _protectAttrs : AttributeCore.protectAttrs,",""," /**"," * Utility method to normalize attribute values. The base implementation"," * simply merges the hash to protect the original."," *"," * @method _normAttrVals"," * @param {Object} valueHash An object with attribute name/value pairs"," *"," * @return {Object} An object literal with 2 properties - \"simple\" and \"complex\","," * containing simple and complex attribute values respectively keyed"," * by the top level attribute name, or null, if valueHash is falsey."," *"," * @private"," */"," _normAttrVals : function(valueHash) {"," var vals = {},"," subvals = {},"," path,"," attr,"," v, k;",""," if (valueHash) {"," for (k in valueHash) {"," if (valueHash.hasOwnProperty(k)) {"," if (k.indexOf(DOT) !== -1) {"," path = k.split(DOT);"," attr = path.shift();"," v = subvals[attr] = subvals[attr] || [];"," v[v.length] = {"," path : path,"," value: valueHash[k]"," };"," } else {"," vals[k] = valueHash[k];"," }"," }"," }"," return { simple:vals, complex:subvals };"," } else {"," return null;"," }"," },",""," /**"," * Returns the initial value of the given attribute from"," * either the default configuration provided, or the"," * over-ridden value if it exists in the set of initValues"," * provided and the attribute is not read-only."," *"," * @param {String} attr The name of the attribute"," * @param {Object} cfg The attribute configuration object"," * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals"," *"," * @return {Any} The initial value of the attribute."," *"," * @method _getAttrInitVal"," * @private"," */"," _getAttrInitVal : function(attr, cfg, initValues) {"," var val = cfg.value,"," valFn = cfg.valueFn,"," tmpVal,"," initValSet = false,"," simple,"," complex,"," i,"," l,"," path,"," subval,"," subvals;",""," if (!cfg.readOnly && initValues) {"," // Simple Attributes"," simple = initValues.simple;"," if (simple && simple.hasOwnProperty(attr)) {"," val = simple[attr];"," initValSet = true;"," }"," }",""," if (valFn && !initValSet) {"," if (!valFn.call) {"," valFn = this[valFn];"," }"," if (valFn) {"," tmpVal = valFn.call(this, attr);"," val = tmpVal;"," }"," }",""," if (!cfg.readOnly && initValues) {",""," // Complex Attributes (complex values applied, after simple, in case both are set)"," complex = initValues.complex;",""," if (complex && complex.hasOwnProperty(attr) && (val !== undefined) && (val !== null)) {"," subvals = complex[attr];"," for (i = 0, l = subvals.length; i < l; ++i) {"," path = subvals[i].path;"," subval = subvals[i].value;"," O.setValue(val, path, subval);"," }"," }"," }",""," return val;"," },",""," /**"," * Utility method to set up initial attributes defined during construction,"," * either through the constructor.ATTRS property, or explicitly passed in."," *"," * @method _initAttrs"," * @protected"," * @param attrs {Object} The attributes to add during construction (passed through to addAttrs)."," * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor."," * @param values {Object} The initial attribute values to apply (passed through to addAttrs)."," * These are not merged/cloned. The caller is responsible for isolating user provided values if required."," * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs)."," */"," _initAttrs : function(attrs, values, lazy) {"," // ATTRS support for Node, which is not Base based"," attrs = attrs || this.constructor.ATTRS;",""," var Base = Y.Base,"," BaseCore = Y.BaseCore,"," baseInst = (Base && Y.instanceOf(this, Base)),"," baseCoreInst = (!baseInst && BaseCore && Y.instanceOf(this, BaseCore));",""," if (attrs && !baseInst && !baseCoreInst) {"," this.addAttrs(Y.AttributeCore.protectAttrs(attrs), values, lazy);"," }"," }"," };",""," Y.AttributeCore = AttributeCore;","","","}, '3.9.0', {\"requires\": [\"oop\"]});"]; +_yuitest_coverage["build/attribute-core/attribute-core.js"].lines = {"1":0,"14":0,"19":0,"22":0,"33":0,"35":0,"36":0,"39":0,"50":0,"53":0,"54":0,"57":0,"58":0,"59":0,"72":0,"74":0,"75":0,"87":0,"89":0,"90":0,"92":0,"93":0,"96":0,"97":0,"111":0,"113":0,"114":0,"132":0,"135":0,"136":0,"137":0,"138":0,"140":0,"141":0,"142":0,"147":0,"168":0,"225":0,"230":0,"232":0,"247":0,"248":0,"262":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"283":0,"286":0,"301":0,"302":0,"406":0,"411":0,"413":0,"415":0,"416":0,"423":0,"425":0,"429":0,"431":0,"432":0,"435":0,"436":0,"438":0,"440":0,"442":0,"445":0,"449":0,"461":0,"477":0,"490":0,"501":0,"504":0,"505":0,"506":0,"523":0,"539":0,"560":0,"571":0,"572":0,"573":0,"574":0,"577":0,"578":0,"581":0,"583":0,"585":0,"587":0,"590":0,"591":0,"593":0,"595":0,"596":0,"599":0,"600":0,"604":0,"605":0,"608":0,"610":0,"611":0,"614":0,"615":0,"617":0,"618":0,"622":0,"623":0,"624":0,"625":0,"629":0,"634":0,"651":0,"659":0,"660":0,"661":0,"665":0,"666":0,"667":0,"668":0,"669":0,"673":0,"674":0,"677":0,"679":0,"681":0,"682":0,"685":0,"686":0,"688":0,"701":0,"702":0,"715":0,"716":0,"717":0,"719":0,"739":0,"750":0,"751":0,"753":0,"755":0,"756":0,"758":0,"759":0,"760":0,"765":0,"766":0,"767":0,"769":0,"771":0,"772":0,"774":0,"775":0,"776":0,"778":0,"780":0,"781":0,"786":0,"787":0,"788":0,"791":0,"792":0,"794":0,"799":0,"802":0,"815":0,"829":0,"830":0,"831":0,"832":0,"835":0,"847":0,"860":0,"865":0,"866":0,"869":0,"870":0,"872":0,"874":0,"878":0,"902":0,"903":0,"904":0,"905":0,"906":0,"907":0,"910":0,"931":0,"936":0,"937":0,"940":0,"941":0,"944":0,"946":0,"947":0,"950":0,"951":0,"954":0,"987":0,"993":0,"994":0,"995":0,"996":0,"997":0,"998":0,"999":0,"1000":0,"1005":0,"1009":0,"1011":0,"1031":0,"1043":0,"1045":0,"1046":0,"1047":0,"1048":0,"1052":0,"1053":0,"1054":0,"1056":0,"1057":0,"1058":0,"1062":0,"1065":0,"1067":0,"1068":0,"1069":0,"1070":0,"1071":0,"1072":0,"1077":0,"1094":0,"1096":0,"1101":0,"1102":0,"1107":0}; +_yuitest_coverage["build/attribute-core/attribute-core.js"].functions = {"State:14":0,"add:32":0,"addAll:49":0,"remove:71":0,"(anonymous 2):96":0,"removeAll:86":0,"get:110":0,"getAll:131":0,"AttributeCore:225":0,"protectAttrs:273":0,"_initAttrHost:300":0,"addAttr:403":0,"attrAdded:460":0,"get:476":0,"_isLazyAttr:489":0,"_addLazyAttr:500":0,"set:522":0,"_set:538":0,"_setAttr:559":0,"_getAttr:650":0,"_getStateVal:700":0,"_setStateVal:714":0,"_setAttrVal:737":0,"setAttrs:814":0,"_setAttrs:828":0,"getAttrs:846":0,"_getAttrs:859":0,"addAttrs:901":0,"_addAttrs:930":0,"_normAttrVals:986":0,"_getAttrInitVal:1030":0,"_initAttrs:1092":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/attribute-core/attribute-core.js"].coveredLines = 236; +_yuitest_coverage["build/attribute-core/attribute-core.js"].coveredFunctions = 33; +_yuitest_coverline("build/attribute-core/attribute-core.js", 1); +YUI.add('attribute-core', function (Y, NAME) { + + /** + * The State class maintains state for a collection of named items, with + * a varying number of properties defined. + * + * It avoids the need to create a separate class for the item, and separate instances + * of these classes for each item, by storing the state in a 2 level hash table, + * improving performance when the number of items is likely to be large. + * + * @constructor + * @class State + */ + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "(anonymous 1)", 1); +_yuitest_coverline("build/attribute-core/attribute-core.js", 14); +Y.State = function() { + /** + * Hash of attributes + * @property data + */ + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "State", 14); +_yuitest_coverline("build/attribute-core/attribute-core.js", 19); +this.data = {}; + }; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 22); +Y.State.prototype = { + + /** + * Adds a property to an item. + * + * @method add + * @param name {String} The name of the item. + * @param key {String} The name of the property. + * @param val {Any} The value of the property. + */ + add: function(name, key, val) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "add", 32); +_yuitest_coverline("build/attribute-core/attribute-core.js", 33); +var item = this.data[name]; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 35); +if (!item) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 36); +item = this.data[name] = {}; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 39); +item[key] = val; + }, + + /** + * Adds multiple properties to an item. + * + * @method addAll + * @param name {String} The name of the item. + * @param obj {Object} A hash of property/value pairs. + */ + addAll: function(name, obj) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "addAll", 49); +_yuitest_coverline("build/attribute-core/attribute-core.js", 50); +var item = this.data[name], + key; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 53); +if (!item) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 54); +item = this.data[name] = {}; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 57); +for (key in obj) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 58); +if (obj.hasOwnProperty(key)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 59); +item[key] = obj[key]; + } + } + }, + + /** + * Removes a property from an item. + * + * @method remove + * @param name {String} The name of the item. + * @param key {String} The property to remove. + */ + remove: function(name, key) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "remove", 71); +_yuitest_coverline("build/attribute-core/attribute-core.js", 72); +var item = this.data[name]; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 74); +if (item) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 75); +delete item[key]; + } + }, + + /** + * Removes multiple properties from an item, or removes the item completely. + * + * @method removeAll + * @param name {String} The name of the item. + * @param obj {Object|Array} Collection of properties to delete. If not provided, the entire item is removed. + */ + removeAll: function(name, obj) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "removeAll", 86); +_yuitest_coverline("build/attribute-core/attribute-core.js", 87); +var data; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 89); +if (!obj) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 90); +data = this.data; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 92); +if (name in data) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 93); +delete data[name]; + } + } else { + _yuitest_coverline("build/attribute-core/attribute-core.js", 96); +Y.each(obj, function(value, key) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "(anonymous 2)", 96); +_yuitest_coverline("build/attribute-core/attribute-core.js", 97); +this.remove(name, typeof key === 'string' ? key : value); + }, this); + } + }, + + /** + * For a given item, returns the value of the property requested, or undefined if not found. + * + * @method get + * @param name {String} The name of the item + * @param key {String} Optional. The property value to retrieve. + * @return {Any} The value of the supplied property. + */ + get: function(name, key) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "get", 110); +_yuitest_coverline("build/attribute-core/attribute-core.js", 111); +var item = this.data[name]; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 113); +if (item) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 114); +return item[key]; + } + }, + + /** + * For the given item, returns an object with all of the + * item's property/value pairs. By default the object returned + * is a shallow copy of the stored data, but passing in true + * as the second parameter will return a reference to the stored + * data. + * + * @method getAll + * @param name {String} The name of the item + * @param reference {boolean} true, if you want a reference to the stored + * object + * @return {Object} An object with property/value pairs for the item. + */ + getAll : function(name, reference) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "getAll", 131); +_yuitest_coverline("build/attribute-core/attribute-core.js", 132); +var item = this.data[name], + key, obj; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 135); +if (reference) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 136); +obj = item; + } else {_yuitest_coverline("build/attribute-core/attribute-core.js", 137); +if (item) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 138); +obj = {}; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 140); +for (key in item) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 141); +if (item.hasOwnProperty(key)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 142); +obj[key] = item[key]; + } + } + }} + + _yuitest_coverline("build/attribute-core/attribute-core.js", 147); +return obj; + } + }; + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The attribute-core submodule provides the lightest level of attribute handling support + * without Attribute change events, or lesser used methods such as reset(), modifyAttrs(), + * and removeAttr(). + * + * @module attribute + * @submodule attribute-core + */ + _yuitest_coverline("build/attribute-core/attribute-core.js", 168); +var O = Y.Object, + Lang = Y.Lang, + + DOT = ".", + + // Externally configurable props + GETTER = "getter", + SETTER = "setter", + READ_ONLY = "readOnly", + WRITE_ONCE = "writeOnce", + INIT_ONLY = "initOnly", + VALIDATOR = "validator", + VALUE = "value", + VALUE_FN = "valueFn", + LAZY_ADD = "lazyAdd", + + // Used for internal state management + ADDED = "added", + BYPASS_PROXY = "_bypassProxy", + INITIALIZING = "initializing", + INIT_VALUE = "initValue", + LAZY = "lazy", + IS_LAZY_ADD = "isLazyAdd", + + INVALID_VALUE; + + /** + *

+ * AttributeCore provides the lightest level of configurable attribute support. It is designed to be + * augmented on to a host class, and provides the host with the ability to configure + * attributes to store and retrieve state, but without support for attribute change events. + *

+ *

For example, attributes added to the host can be configured:

+ *
    + *
  • As read only.
  • + *
  • As write once.
  • + *
  • With a setter function, which can be used to manipulate + * values passed to Attribute's set method, before they are stored.
  • + *
  • With a getter function, which can be used to manipulate stored values, + * before they are returned by Attribute's get method.
  • + *
  • With a validator function, to validate values before they are stored.
  • + *
+ * + *

See the addAttr method, for the complete set of configuration + * options available for attributes.

+ * + *

Object/Classes based on AttributeCore can augment AttributeObservable + * (with true for overwrite) and AttributeExtras to add attribute event and + * additional, less commonly used attribute methods, such as `modifyAttr`, `removeAttr` and `reset`.

+ * + * @class AttributeCore + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + */ + _yuitest_coverline("build/attribute-core/attribute-core.js", 225); +function AttributeCore(attrs, values, lazy) { + // HACK: Fix #2531929 + // Complete hack, to make sure the first clone of a node value in IE doesn't doesn't hurt state - maintains 3.4.1 behavior. + // Too late in the release cycle to do anything about the core problem. + // The root issue is that cloning a Y.Node instance results in an object which barfs in IE, when you access it's properties (since 3.3.0). + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "AttributeCore", 225); +_yuitest_coverline("build/attribute-core/attribute-core.js", 230); +this._yuievt = null; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 232); +this._initAttrHost(attrs, values, lazy); + } + + /** + *

The value to return from an attribute setter in order to prevent the set from going through.

+ * + *

You can return this value from your setter if you wish to combine validator and setter + * functionality into a single setter function, which either returns the massaged value to be stored or + * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.

+ * + * @property INVALID_VALUE + * @type Object + * @static + * @final + */ + _yuitest_coverline("build/attribute-core/attribute-core.js", 247); +AttributeCore.INVALID_VALUE = {}; + _yuitest_coverline("build/attribute-core/attribute-core.js", 248); +INVALID_VALUE = AttributeCore.INVALID_VALUE; + + /** + * The list of properties which can be configured for + * each attribute (e.g. setter, getter, writeOnce etc.). + * + * This property is used internally as a whitelist for faster + * Y.mix operations. + * + * @property _ATTR_CFG + * @type Array + * @static + * @protected + */ + _yuitest_coverline("build/attribute-core/attribute-core.js", 262); +AttributeCore._ATTR_CFG = [SETTER, GETTER, VALIDATOR, VALUE, VALUE_FN, WRITE_ONCE, READ_ONLY, LAZY_ADD, BYPASS_PROXY]; + + /** + * Utility method to protect an attribute configuration hash, by merging the + * entire object and the individual attr config objects. + * + * @method protectAttrs + * @static + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the `attrs` argument. + */ + _yuitest_coverline("build/attribute-core/attribute-core.js", 273); +AttributeCore.protectAttrs = function (attrs) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "protectAttrs", 273); +_yuitest_coverline("build/attribute-core/attribute-core.js", 274); +if (attrs) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 275); +attrs = Y.merge(attrs); + _yuitest_coverline("build/attribute-core/attribute-core.js", 276); +for (var attr in attrs) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 277); +if (attrs.hasOwnProperty(attr)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 278); +attrs[attr] = Y.merge(attrs[attr]); + } + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 283); +return attrs; + }; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 286); +AttributeCore.prototype = { + + /** + * Constructor logic for attributes. Initializes the host state, and sets up the inital attributes passed to the + * constructor. + * + * @method _initAttrHost + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + * @private + */ + _initAttrHost : function(attrs, values, lazy) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_initAttrHost", 300); +_yuitest_coverline("build/attribute-core/attribute-core.js", 301); +this._state = new Y.State(); + _yuitest_coverline("build/attribute-core/attribute-core.js", 302); +this._initAttrs(attrs, values, lazy); + }, + + /** + *

+ * Adds an attribute with the provided configuration to the host object. + *

+ *

+ * The config argument object supports the following properties: + *

+ * + *
+ *
value <Any>
+ *
The initial value to set on the attribute
+ * + *
valueFn <Function | String>
+ *
+ *

A function, which will return the initial value to set on the attribute. This is useful + * for cases where the attribute configuration is defined statically, but needs to + * reference the host instance ("this") to obtain an initial value. If both the value and valueFn properties are defined, + * the value returned by the valueFn has precedence over the value property, unless it returns undefined, in which + * case the value property is used.

+ * + *

valueFn can also be set to a string, representing the name of the instance method to be used to retrieve the value.

+ *
+ * + *
readOnly <boolean>
+ *
Whether or not the attribute is read only. Attributes having readOnly set to true + * cannot be modified by invoking the set method.
+ * + *
writeOnce <boolean> or <string>
+ *
+ * Whether or not the attribute is "write once". Attributes having writeOnce set to true, + * can only have their values set once, be it through the default configuration, + * constructor configuration arguments, or by invoking set. + *

The writeOnce attribute can also be set to the string "initOnly", + * in which case the attribute can only be set during initialization + * (when used with Base, this means it can only be set during construction)

+ *
+ * + *
setter <Function | String>
+ *
+ *

The setter function used to massage or normalize the value passed to the set method for the attribute. + * The value returned by the setter will be the final stored value. Returning + * Attribute.INVALID_VALUE, from the setter will prevent + * the value from being stored. + *

+ * + *

setter can also be set to a string, representing the name of the instance method to be used as the setter function.

+ *
+ * + *
getter <Function | String>
+ *
+ *

+ * The getter function used to massage or normalize the value returned by the get method for the attribute. + * The value returned by the getter function is the value which will be returned to the user when they + * invoke get. + *

+ * + *

getter can also be set to a string, representing the name of the instance method to be used as the getter function.

+ *
+ * + *
validator <Function | String>
+ *
+ *

+ * The validator function invoked prior to setting the stored value. Returning + * false from the validator function will prevent the value from being stored. + *

+ * + *

validator can also be set to a string, representing the name of the instance method to be used as the validator function.

+ *
+ * + *
lazyAdd <boolean>
+ *
Whether or not to delay initialization of the attribute until the first call to get/set it. + * This flag can be used to over-ride lazy initialization on a per attribute basis, when adding multiple attributes through + * the addAttrs method.
+ * + *
+ * + *

The setter, getter and validator are invoked with the value and name passed in as the first and second arguments, and with + * the context ("this") set to the host object.

+ * + *

Configuration properties outside of the list mentioned above are considered private properties used internally by attribute, + * and are not intended for public use.

+ * + * @method addAttr + * + * @param {String} name The name of the attribute. + * @param {Object} config An object with attribute configuration property/value pairs, specifying the configuration for the attribute. + * + *

+ * NOTE: The configuration object is modified when adding an attribute, so if you need + * to protect the original values, you will need to merge the object. + *

+ * + * @param {boolean} lazy (optional) Whether or not to add this attribute lazily (on the first call to get/set). + * + * @return {Object} A reference to the host object. + * + * @chainable + */ + addAttr: function(name, config, lazy) { + + + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "addAttr", 403); +_yuitest_coverline("build/attribute-core/attribute-core.js", 406); +var host = this, // help compression + state = host._state, + value, + hasValue; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 411); +config = config || {}; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 413); +lazy = (LAZY_ADD in config) ? config[LAZY_ADD] : lazy; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 415); +if (lazy && !host.attrAdded(name)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 416); +state.addAll(name, { + lazy : config, + added : true + }); + } else { + /*jshint maxlen:200*/ + + _yuitest_coverline("build/attribute-core/attribute-core.js", 423); +if (!host.attrAdded(name) || state.get(name, IS_LAZY_ADD)) { + + _yuitest_coverline("build/attribute-core/attribute-core.js", 425); +hasValue = (VALUE in config); + + /*jshint maxlen:150*/ + + _yuitest_coverline("build/attribute-core/attribute-core.js", 429); +if (hasValue) { + // We'll go through set, don't want to set value in config directly + _yuitest_coverline("build/attribute-core/attribute-core.js", 431); +value = config.value; + _yuitest_coverline("build/attribute-core/attribute-core.js", 432); +delete config.value; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 435); +config.added = true; + _yuitest_coverline("build/attribute-core/attribute-core.js", 436); +config.initializing = true; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 438); +state.addAll(name, config); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 440); +if (hasValue) { + // Go through set, so that raw values get normalized/validated + _yuitest_coverline("build/attribute-core/attribute-core.js", 442); +host.set(name, value); + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 445); +state.remove(name, INITIALIZING); + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 449); +return host; + }, + + /** + * Checks if the given attribute has been added to the host + * + * @method attrAdded + * @param {String} name The name of the attribute to check. + * @return {boolean} true if an attribute with the given name has been added, false if it hasn't. + * This method will return true for lazily added attributes. + */ + attrAdded: function(name) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "attrAdded", 460); +_yuitest_coverline("build/attribute-core/attribute-core.js", 461); +return !!this._state.get(name, ADDED); + }, + + /** + * Returns the current value of the attribute. If the attribute + * has been configured with a 'getter' function, this method will delegate + * to the 'getter' to obtain the value of the attribute. + * + * @method get + * + * @param {String} name The name of the attribute. If the value of the attribute is an Object, + * dot notation can be used to obtain the value of a property of the object (e.g. get("x.y.z")) + * + * @return {Any} The value of the attribute + */ + get : function(name) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "get", 476); +_yuitest_coverline("build/attribute-core/attribute-core.js", 477); +return this._getAttr(name); + }, + + /** + * Checks whether or not the attribute is one which has been + * added lazily and still requires initialization. + * + * @method _isLazyAttr + * @private + * @param {String} name The name of the attribute + * @return {boolean} true if it's a lazily added attribute, false otherwise. + */ + _isLazyAttr: function(name) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_isLazyAttr", 489); +_yuitest_coverline("build/attribute-core/attribute-core.js", 490); +return this._state.get(name, LAZY); + }, + + /** + * Finishes initializing an attribute which has been lazily added. + * + * @method _addLazyAttr + * @private + * @param {Object} name The name of the attribute + */ + _addLazyAttr: function(name) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_addLazyAttr", 500); +_yuitest_coverline("build/attribute-core/attribute-core.js", 501); +var state = this._state, + lazyCfg = state.get(name, LAZY); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 504); +state.add(name, IS_LAZY_ADD, true); + _yuitest_coverline("build/attribute-core/attribute-core.js", 505); +state.remove(name, LAZY); + _yuitest_coverline("build/attribute-core/attribute-core.js", 506); +this.addAttr(name, lazyCfg); + }, + + /** + * Sets the value of an attribute. + * + * @method set + * @chainable + * + * @param {String} name The name of the attribute. If the + * current value of the attribute is an Object, dot notation can be used + * to set the value of a property within the object (e.g. set("x.y.z", 5)). + * @param {Any} value The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + */ + set : function(name, val, opts) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "set", 522); +_yuitest_coverline("build/attribute-core/attribute-core.js", 523); +return this._setAttr(name, val, opts); + }, + + /** + * Allows setting of readOnly/writeOnce attributes. See set for argument details. + * + * @method _set + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} val The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + */ + _set : function(name, val, opts) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_set", 538); +_yuitest_coverline("build/attribute-core/attribute-core.js", 539); +return this._setAttr(name, val, opts, true); + }, + + /** + * Provides the common implementation for the public set and protected _set methods. + * + * See set for argument details. + * + * @method _setAttr + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} value The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @param {boolean} force If true, allows the caller to set values for + * readOnly or writeOnce attributes which have already been set. + * + * @return {Object} A reference to the host object. + */ + _setAttr : function(name, val, opts, force) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_setAttr", 559); +_yuitest_coverline("build/attribute-core/attribute-core.js", 560); +var allowSet = true, + state = this._state, + stateProxy = this._stateProxy, + cfg, + initialSet, + strPath, + path, + currVal, + writeOnce, + initializing; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 571); +if (name.indexOf(DOT) !== -1) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 572); +strPath = name; + _yuitest_coverline("build/attribute-core/attribute-core.js", 573); +path = name.split(DOT); + _yuitest_coverline("build/attribute-core/attribute-core.js", 574); +name = path.shift(); + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 577); +if (this._isLazyAttr(name)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 578); +this._addLazyAttr(name); + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 581); +cfg = state.getAll(name, true) || {}; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 583); +initialSet = (!(VALUE in cfg)); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 585); +if (stateProxy && name in stateProxy && !cfg._bypassProxy) { + // TODO: Value is always set for proxy. Can we do any better? Maybe take a snapshot as the initial value for the first call to set? + _yuitest_coverline("build/attribute-core/attribute-core.js", 587); +initialSet = false; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 590); +writeOnce = cfg.writeOnce; + _yuitest_coverline("build/attribute-core/attribute-core.js", 591); +initializing = cfg.initializing; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 593); +if (!initialSet && !force) { + + _yuitest_coverline("build/attribute-core/attribute-core.js", 595); +if (writeOnce) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 596); +allowSet = false; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 599); +if (cfg.readOnly) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 600); +allowSet = false; + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 604); +if (!initializing && !force && writeOnce === INIT_ONLY) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 605); +allowSet = false; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 608); +if (allowSet) { + // Don't need currVal if initialSet (might fail in custom getter if it always expects a non-undefined/non-null value) + _yuitest_coverline("build/attribute-core/attribute-core.js", 610); +if (!initialSet) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 611); +currVal = this.get(name); + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 614); +if (path) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 615); +val = O.setValue(Y.clone(currVal), path, val); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 617); +if (val === undefined) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 618); +allowSet = false; + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 622); +if (allowSet) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 623); +opts = opts || {}; + _yuitest_coverline("build/attribute-core/attribute-core.js", 624); +if (!this._fireAttrChange || initializing) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 625); +this._setAttrVal(name, strPath, currVal, val, opts); + } else { + // HACK - no real reason core needs to know about _fireAttrChange, but + // it adds fn hops if we want to break it out. Not sure it's worth it for this critical path + _yuitest_coverline("build/attribute-core/attribute-core.js", 629); +this._fireAttrChange(name, strPath, currVal, val, opts); + } + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 634); +return this; + }, + + /** + * Provides the common implementation for the public get method, + * allowing Attribute hosts to over-ride either method. + * + * See get for argument details. + * + * @method _getAttr + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @return {Any} The value of the attribute. + */ + _getAttr : function(name) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_getAttr", 650); +_yuitest_coverline("build/attribute-core/attribute-core.js", 651); +var host = this, // help compression + fullName = name, + state = host._state, + path, + getter, + val, + cfg; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 659); +if (name.indexOf(DOT) !== -1) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 660); +path = name.split(DOT); + _yuitest_coverline("build/attribute-core/attribute-core.js", 661); +name = path.shift(); + } + + // On Demand - Should be rare - handles out of order valueFn references + _yuitest_coverline("build/attribute-core/attribute-core.js", 665); +if (host._tCfgs && host._tCfgs[name]) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 666); +cfg = {}; + _yuitest_coverline("build/attribute-core/attribute-core.js", 667); +cfg[name] = host._tCfgs[name]; + _yuitest_coverline("build/attribute-core/attribute-core.js", 668); +delete host._tCfgs[name]; + _yuitest_coverline("build/attribute-core/attribute-core.js", 669); +host._addAttrs(cfg, host._tVals); + } + + // Lazy Init + _yuitest_coverline("build/attribute-core/attribute-core.js", 673); +if (host._isLazyAttr(name)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 674); +host._addLazyAttr(name); + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 677); +val = host._getStateVal(name); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 679); +getter = state.get(name, GETTER); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 681); +if (getter && !getter.call) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 682); +getter = this[getter]; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 685); +val = (getter) ? getter.call(host, val, fullName) : val; + _yuitest_coverline("build/attribute-core/attribute-core.js", 686); +val = (path) ? O.getValue(val, path) : val; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 688); +return val; + }, + + /** + * Gets the stored value for the attribute, from either the + * internal state object, or the state proxy if it exits + * + * @method _getStateVal + * @private + * @param {String} name The name of the attribute + * @return {Any} The stored value of the attribute + */ + _getStateVal : function(name) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_getStateVal", 700); +_yuitest_coverline("build/attribute-core/attribute-core.js", 701); +var stateProxy = this._stateProxy; + _yuitest_coverline("build/attribute-core/attribute-core.js", 702); +return stateProxy && (name in stateProxy) && !this._state.get(name, BYPASS_PROXY) ? stateProxy[name] : this._state.get(name, VALUE); + }, + + /** + * Sets the stored value for the attribute, in either the + * internal state object, or the state proxy if it exits + * + * @method _setStateVal + * @private + * @param {String} name The name of the attribute + * @param {Any} value The value of the attribute + */ + _setStateVal : function(name, value) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_setStateVal", 714); +_yuitest_coverline("build/attribute-core/attribute-core.js", 715); +var stateProxy = this._stateProxy; + _yuitest_coverline("build/attribute-core/attribute-core.js", 716); +if (stateProxy && (name in stateProxy) && !this._state.get(name, BYPASS_PROXY)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 717); +stateProxy[name] = value; + } else { + _yuitest_coverline("build/attribute-core/attribute-core.js", 719); +this._state.add(name, VALUE, value); + } + }, + + /** + * Updates the stored value of the attribute in the privately held State object, + * if validation and setter passes. + * + * @method _setAttrVal + * @private + * @param {String} attrName The attribute name. + * @param {String} subAttrName The sub-attribute name, if setting a sub-attribute property ("x.y.z"). + * @param {Any} prevVal The currently stored value of the attribute. + * @param {Any} newVal The value which is going to be stored. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * + * @return {booolean} true if the new attribute value was stored, false if not. + */ + _setAttrVal : function(attrName, subAttrName, prevVal, newVal, opts) { + + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_setAttrVal", 737); +_yuitest_coverline("build/attribute-core/attribute-core.js", 739); +var host = this, + allowSet = true, + cfg = this._state.getAll(attrName, true) || {}, + validator = cfg.validator, + setter = cfg.setter, + initializing = cfg.initializing, + prevRawVal = this._getStateVal(attrName), + name = subAttrName || attrName, + retVal, + valid; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 750); +if (validator) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 751); +if (!validator.call) { + // Assume string - trying to keep critical path tight, so avoiding Lang check + _yuitest_coverline("build/attribute-core/attribute-core.js", 753); +validator = this[validator]; + } + _yuitest_coverline("build/attribute-core/attribute-core.js", 755); +if (validator) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 756); +valid = validator.call(host, newVal, name, opts); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 758); +if (!valid && initializing) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 759); +newVal = cfg.defaultValue; + _yuitest_coverline("build/attribute-core/attribute-core.js", 760); +valid = true; // Assume it's valid, for perf. + } + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 765); +if (!validator || valid) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 766); +if (setter) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 767); +if (!setter.call) { + // Assume string - trying to keep critical path tight, so avoiding Lang check + _yuitest_coverline("build/attribute-core/attribute-core.js", 769); +setter = this[setter]; + } + _yuitest_coverline("build/attribute-core/attribute-core.js", 771); +if (setter) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 772); +retVal = setter.call(host, newVal, name, opts); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 774); +if (retVal === INVALID_VALUE) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 775); +if (initializing) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 776); +newVal = cfg.defaultValue; + } else { + _yuitest_coverline("build/attribute-core/attribute-core.js", 778); +allowSet = false; + } + } else {_yuitest_coverline("build/attribute-core/attribute-core.js", 780); +if (retVal !== undefined){ + _yuitest_coverline("build/attribute-core/attribute-core.js", 781); +newVal = retVal; + }} + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 786); +if (allowSet) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 787); +if(!subAttrName && (newVal === prevRawVal) && !Lang.isObject(newVal)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 788); +allowSet = false; + } else { + // Store value + _yuitest_coverline("build/attribute-core/attribute-core.js", 791); +if (!(INIT_VALUE in cfg)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 792); +cfg.initValue = newVal; + } + _yuitest_coverline("build/attribute-core/attribute-core.js", 794); +host._setStateVal(attrName, newVal); + } + } + + } else { + _yuitest_coverline("build/attribute-core/attribute-core.js", 799); +allowSet = false; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 802); +return allowSet; + }, + + /** + * Sets multiple attribute values. + * + * @method setAttrs + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + * @chainable + */ + setAttrs : function(attrs, opts) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "setAttrs", 814); +_yuitest_coverline("build/attribute-core/attribute-core.js", 815); +return this._setAttrs(attrs, opts); + }, + + /** + * Implementation behind the public setAttrs method, to set multiple attribute values. + * + * @method _setAttrs + * @protected + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} [opts] Optional data providing the circumstances for the change + * @return {Object} A reference to the host object. + * @chainable + */ + _setAttrs : function(attrs, opts) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_setAttrs", 828); +_yuitest_coverline("build/attribute-core/attribute-core.js", 829); +var attr; + _yuitest_coverline("build/attribute-core/attribute-core.js", 830); +for (attr in attrs) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 831); +if ( attrs.hasOwnProperty(attr) ) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 832); +this.set(attr, attrs[attr], opts); + } + } + _yuitest_coverline("build/attribute-core/attribute-core.js", 835); +return this; + }, + + /** + * Gets multiple attribute values. + * + * @method getAttrs + * @param {Array | boolean} attrs Optional. An array of attribute names. If omitted, all attribute values are + * returned. If set to true, all attributes modified from their initial values are returned. + * @return {Object} An object with attribute name/value pairs. + */ + getAttrs : function(attrs) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "getAttrs", 846); +_yuitest_coverline("build/attribute-core/attribute-core.js", 847); +return this._getAttrs(attrs); + }, + + /** + * Implementation behind the public getAttrs method, to get multiple attribute values. + * + * @method _getAttrs + * @protected + * @param {Array | boolean} attrs Optional. An array of attribute names. If omitted, all attribute values are + * returned. If set to true, all attributes modified from their initial values are returned. + * @return {Object} An object with attribute name/value pairs. + */ + _getAttrs : function(attrs) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_getAttrs", 859); +_yuitest_coverline("build/attribute-core/attribute-core.js", 860); +var obj = {}, + attr, i, len, + modifiedOnly = (attrs === true); + + // TODO - figure out how to get all "added" + _yuitest_coverline("build/attribute-core/attribute-core.js", 865); +if (!attrs || modifiedOnly) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 866); +attrs = O.keys(this._state.data); + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 869); +for (i = 0, len = attrs.length; i < len; i++) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 870); +attr = attrs[i]; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 872); +if (!modifiedOnly || this._getStateVal(attr) != this._state.get(attr, INIT_VALUE)) { + // Go through get, to honor cloning/normalization + _yuitest_coverline("build/attribute-core/attribute-core.js", 874); +obj[attr] = this.get(attr); + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 878); +return obj; + }, + + /** + * Configures a group of attributes, and sets initial values. + * + *

+ * NOTE: This method does not isolate the configuration object by merging/cloning. + * The caller is responsible for merging/cloning the configuration object if required. + *

+ * + * @method addAttrs + * @chainable + * + * @param {Object} cfgs An object with attribute name/configuration pairs. + * @param {Object} values An object with attribute name/value pairs, defining the initial values to apply. + * Values defined in the cfgs argument will be over-written by values in this argument unless defined as read only. + * @param {boolean} lazy Whether or not to delay the intialization of these attributes until the first call to get/set. + * Individual attributes can over-ride this behavior by defining a lazyAdd configuration property in their configuration. + * See addAttr. + * + * @return {Object} A reference to the host object. + */ + addAttrs : function(cfgs, values, lazy) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "addAttrs", 901); +_yuitest_coverline("build/attribute-core/attribute-core.js", 902); +var host = this; // help compression + _yuitest_coverline("build/attribute-core/attribute-core.js", 903); +if (cfgs) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 904); +host._tCfgs = cfgs; + _yuitest_coverline("build/attribute-core/attribute-core.js", 905); +host._tVals = host._normAttrVals(values); + _yuitest_coverline("build/attribute-core/attribute-core.js", 906); +host._addAttrs(cfgs, host._tVals, lazy); + _yuitest_coverline("build/attribute-core/attribute-core.js", 907); +host._tCfgs = host._tVals = null; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 910); +return host; + }, + + /** + * Implementation behind the public addAttrs method. + * + * This method is invoked directly by get if it encounters a scenario + * in which an attribute's valueFn attempts to obtain the + * value an attribute in the same group of attributes, which has not yet + * been added (on demand initialization). + * + * @method _addAttrs + * @private + * @param {Object} cfgs An object with attribute name/configuration pairs. + * @param {Object} values An object with attribute name/value pairs, defining the initial values to apply. + * Values defined in the cfgs argument will be over-written by values in this argument unless defined as read only. + * @param {boolean} lazy Whether or not to delay the intialization of these attributes until the first call to get/set. + * Individual attributes can over-ride this behavior by defining a lazyAdd configuration property in their configuration. + * See addAttr. + */ + _addAttrs : function(cfgs, values, lazy) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_addAttrs", 930); +_yuitest_coverline("build/attribute-core/attribute-core.js", 931); +var host = this, // help compression + attr, + attrCfg, + value; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 936); +for (attr in cfgs) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 937); +if (cfgs.hasOwnProperty(attr)) { + + // Not Merging. Caller is responsible for isolating configs + _yuitest_coverline("build/attribute-core/attribute-core.js", 940); +attrCfg = cfgs[attr]; + _yuitest_coverline("build/attribute-core/attribute-core.js", 941); +attrCfg.defaultValue = attrCfg.value; + + // Handle simple, complex and user values, accounting for read-only + _yuitest_coverline("build/attribute-core/attribute-core.js", 944); +value = host._getAttrInitVal(attr, attrCfg, host._tVals); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 946); +if (value !== undefined) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 947); +attrCfg.value = value; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 950); +if (host._tCfgs[attr]) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 951); +delete host._tCfgs[attr]; + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 954); +host.addAttr(attr, attrCfg, lazy); + } + } + }, + + /** + * Utility method to protect an attribute configuration + * hash, by merging the entire object and the individual + * attr config objects. + * + * @method _protectAttrs + * @protected + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the attrs argument. + * @deprecated Use `AttributeCore.protectAttrs()` or + * `Attribute.protectAttrs()` which are the same static utility method. + */ + _protectAttrs : AttributeCore.protectAttrs, + + /** + * Utility method to normalize attribute values. The base implementation + * simply merges the hash to protect the original. + * + * @method _normAttrVals + * @param {Object} valueHash An object with attribute name/value pairs + * + * @return {Object} An object literal with 2 properties - "simple" and "complex", + * containing simple and complex attribute values respectively keyed + * by the top level attribute name, or null, if valueHash is falsey. + * + * @private + */ + _normAttrVals : function(valueHash) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_normAttrVals", 986); +_yuitest_coverline("build/attribute-core/attribute-core.js", 987); +var vals = {}, + subvals = {}, + path, + attr, + v, k; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 993); +if (valueHash) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 994); +for (k in valueHash) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 995); +if (valueHash.hasOwnProperty(k)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 996); +if (k.indexOf(DOT) !== -1) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 997); +path = k.split(DOT); + _yuitest_coverline("build/attribute-core/attribute-core.js", 998); +attr = path.shift(); + _yuitest_coverline("build/attribute-core/attribute-core.js", 999); +v = subvals[attr] = subvals[attr] || []; + _yuitest_coverline("build/attribute-core/attribute-core.js", 1000); +v[v.length] = { + path : path, + value: valueHash[k] + }; + } else { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1005); +vals[k] = valueHash[k]; + } + } + } + _yuitest_coverline("build/attribute-core/attribute-core.js", 1009); +return { simple:vals, complex:subvals }; + } else { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1011); +return null; + } + }, + + /** + * Returns the initial value of the given attribute from + * either the default configuration provided, or the + * over-ridden value if it exists in the set of initValues + * provided and the attribute is not read-only. + * + * @param {String} attr The name of the attribute + * @param {Object} cfg The attribute configuration object + * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals + * + * @return {Any} The initial value of the attribute. + * + * @method _getAttrInitVal + * @private + */ + _getAttrInitVal : function(attr, cfg, initValues) { + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_getAttrInitVal", 1030); +_yuitest_coverline("build/attribute-core/attribute-core.js", 1031); +var val = cfg.value, + valFn = cfg.valueFn, + tmpVal, + initValSet = false, + simple, + complex, + i, + l, + path, + subval, + subvals; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 1043); +if (!cfg.readOnly && initValues) { + // Simple Attributes + _yuitest_coverline("build/attribute-core/attribute-core.js", 1045); +simple = initValues.simple; + _yuitest_coverline("build/attribute-core/attribute-core.js", 1046); +if (simple && simple.hasOwnProperty(attr)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1047); +val = simple[attr]; + _yuitest_coverline("build/attribute-core/attribute-core.js", 1048); +initValSet = true; + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 1052); +if (valFn && !initValSet) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1053); +if (!valFn.call) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1054); +valFn = this[valFn]; + } + _yuitest_coverline("build/attribute-core/attribute-core.js", 1056); +if (valFn) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1057); +tmpVal = valFn.call(this, attr); + _yuitest_coverline("build/attribute-core/attribute-core.js", 1058); +val = tmpVal; + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 1062); +if (!cfg.readOnly && initValues) { + + // Complex Attributes (complex values applied, after simple, in case both are set) + _yuitest_coverline("build/attribute-core/attribute-core.js", 1065); +complex = initValues.complex; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 1067); +if (complex && complex.hasOwnProperty(attr) && (val !== undefined) && (val !== null)) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1068); +subvals = complex[attr]; + _yuitest_coverline("build/attribute-core/attribute-core.js", 1069); +for (i = 0, l = subvals.length; i < l; ++i) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1070); +path = subvals[i].path; + _yuitest_coverline("build/attribute-core/attribute-core.js", 1071); +subval = subvals[i].value; + _yuitest_coverline("build/attribute-core/attribute-core.js", 1072); +O.setValue(val, path, subval); + } + } + } + + _yuitest_coverline("build/attribute-core/attribute-core.js", 1077); +return val; + }, + + /** + * Utility method to set up initial attributes defined during construction, + * either through the constructor.ATTRS property, or explicitly passed in. + * + * @method _initAttrs + * @protected + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + */ + _initAttrs : function(attrs, values, lazy) { + // ATTRS support for Node, which is not Base based + _yuitest_coverfunc("build/attribute-core/attribute-core.js", "_initAttrs", 1092); +_yuitest_coverline("build/attribute-core/attribute-core.js", 1094); +attrs = attrs || this.constructor.ATTRS; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 1096); +var Base = Y.Base, + BaseCore = Y.BaseCore, + baseInst = (Base && Y.instanceOf(this, Base)), + baseCoreInst = (!baseInst && BaseCore && Y.instanceOf(this, BaseCore)); + + _yuitest_coverline("build/attribute-core/attribute-core.js", 1101); +if (attrs && !baseInst && !baseCoreInst) { + _yuitest_coverline("build/attribute-core/attribute-core.js", 1102); +this.addAttrs(Y.AttributeCore.protectAttrs(attrs), values, lazy); + } + } + }; + + _yuitest_coverline("build/attribute-core/attribute-core.js", 1107); +Y.AttributeCore = AttributeCore; + + +}, '3.9.0', {"requires": ["oop"]}); diff --git a/src/errors/static/js/yui/build/attribute-core/attribute-core-debug.js b/src/errors/static/js/yui/build/attribute-core/attribute-core-debug.js new file mode 100644 index 00000000..111b0e0b --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-core/attribute-core-debug.js @@ -0,0 +1,1123 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-core', function (Y, NAME) { + + /** + * The State class maintains state for a collection of named items, with + * a varying number of properties defined. + * + * It avoids the need to create a separate class for the item, and separate instances + * of these classes for each item, by storing the state in a 2 level hash table, + * improving performance when the number of items is likely to be large. + * + * @constructor + * @class State + */ + Y.State = function() { + /** + * Hash of attributes + * @property data + */ + this.data = {}; + }; + + Y.State.prototype = { + + /** + * Adds a property to an item. + * + * @method add + * @param name {String} The name of the item. + * @param key {String} The name of the property. + * @param val {Any} The value of the property. + */ + add: function(name, key, val) { + var item = this.data[name]; + + if (!item) { + item = this.data[name] = {}; + } + + item[key] = val; + }, + + /** + * Adds multiple properties to an item. + * + * @method addAll + * @param name {String} The name of the item. + * @param obj {Object} A hash of property/value pairs. + */ + addAll: function(name, obj) { + var item = this.data[name], + key; + + if (!item) { + item = this.data[name] = {}; + } + + for (key in obj) { + if (obj.hasOwnProperty(key)) { + item[key] = obj[key]; + } + } + }, + + /** + * Removes a property from an item. + * + * @method remove + * @param name {String} The name of the item. + * @param key {String} The property to remove. + */ + remove: function(name, key) { + var item = this.data[name]; + + if (item) { + delete item[key]; + } + }, + + /** + * Removes multiple properties from an item, or removes the item completely. + * + * @method removeAll + * @param name {String} The name of the item. + * @param obj {Object|Array} Collection of properties to delete. If not provided, the entire item is removed. + */ + removeAll: function(name, obj) { + var data; + + if (!obj) { + data = this.data; + + if (name in data) { + delete data[name]; + } + } else { + Y.each(obj, function(value, key) { + this.remove(name, typeof key === 'string' ? key : value); + }, this); + } + }, + + /** + * For a given item, returns the value of the property requested, or undefined if not found. + * + * @method get + * @param name {String} The name of the item + * @param key {String} Optional. The property value to retrieve. + * @return {Any} The value of the supplied property. + */ + get: function(name, key) { + var item = this.data[name]; + + if (item) { + return item[key]; + } + }, + + /** + * For the given item, returns an object with all of the + * item's property/value pairs. By default the object returned + * is a shallow copy of the stored data, but passing in true + * as the second parameter will return a reference to the stored + * data. + * + * @method getAll + * @param name {String} The name of the item + * @param reference {boolean} true, if you want a reference to the stored + * object + * @return {Object} An object with property/value pairs for the item. + */ + getAll : function(name, reference) { + var item = this.data[name], + key, obj; + + if (reference) { + obj = item; + } else if (item) { + obj = {}; + + for (key in item) { + if (item.hasOwnProperty(key)) { + obj[key] = item[key]; + } + } + } + + return obj; + } + }; + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The attribute-core submodule provides the lightest level of attribute handling support + * without Attribute change events, or lesser used methods such as reset(), modifyAttrs(), + * and removeAttr(). + * + * @module attribute + * @submodule attribute-core + */ + var O = Y.Object, + Lang = Y.Lang, + + DOT = ".", + + // Externally configurable props + GETTER = "getter", + SETTER = "setter", + READ_ONLY = "readOnly", + WRITE_ONCE = "writeOnce", + INIT_ONLY = "initOnly", + VALIDATOR = "validator", + VALUE = "value", + VALUE_FN = "valueFn", + LAZY_ADD = "lazyAdd", + + // Used for internal state management + ADDED = "added", + BYPASS_PROXY = "_bypassProxy", + INITIALIZING = "initializing", + INIT_VALUE = "initValue", + LAZY = "lazy", + IS_LAZY_ADD = "isLazyAdd", + + INVALID_VALUE; + + /** + *

+ * AttributeCore provides the lightest level of configurable attribute support. It is designed to be + * augmented on to a host class, and provides the host with the ability to configure + * attributes to store and retrieve state, but without support for attribute change events. + *

+ *

For example, attributes added to the host can be configured:

+ *
    + *
  • As read only.
  • + *
  • As write once.
  • + *
  • With a setter function, which can be used to manipulate + * values passed to Attribute's set method, before they are stored.
  • + *
  • With a getter function, which can be used to manipulate stored values, + * before they are returned by Attribute's get method.
  • + *
  • With a validator function, to validate values before they are stored.
  • + *
+ * + *

See the addAttr method, for the complete set of configuration + * options available for attributes.

+ * + *

Object/Classes based on AttributeCore can augment AttributeObservable + * (with true for overwrite) and AttributeExtras to add attribute event and + * additional, less commonly used attribute methods, such as `modifyAttr`, `removeAttr` and `reset`.

+ * + * @class AttributeCore + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + */ + function AttributeCore(attrs, values, lazy) { + // HACK: Fix #2531929 + // Complete hack, to make sure the first clone of a node value in IE doesn't doesn't hurt state - maintains 3.4.1 behavior. + // Too late in the release cycle to do anything about the core problem. + // The root issue is that cloning a Y.Node instance results in an object which barfs in IE, when you access it's properties (since 3.3.0). + this._yuievt = null; + + this._initAttrHost(attrs, values, lazy); + } + + /** + *

The value to return from an attribute setter in order to prevent the set from going through.

+ * + *

You can return this value from your setter if you wish to combine validator and setter + * functionality into a single setter function, which either returns the massaged value to be stored or + * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.

+ * + * @property INVALID_VALUE + * @type Object + * @static + * @final + */ + AttributeCore.INVALID_VALUE = {}; + INVALID_VALUE = AttributeCore.INVALID_VALUE; + + /** + * The list of properties which can be configured for + * each attribute (e.g. setter, getter, writeOnce etc.). + * + * This property is used internally as a whitelist for faster + * Y.mix operations. + * + * @property _ATTR_CFG + * @type Array + * @static + * @protected + */ + AttributeCore._ATTR_CFG = [SETTER, GETTER, VALIDATOR, VALUE, VALUE_FN, WRITE_ONCE, READ_ONLY, LAZY_ADD, BYPASS_PROXY]; + + /** + * Utility method to protect an attribute configuration hash, by merging the + * entire object and the individual attr config objects. + * + * @method protectAttrs + * @static + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the `attrs` argument. + */ + AttributeCore.protectAttrs = function (attrs) { + if (attrs) { + attrs = Y.merge(attrs); + for (var attr in attrs) { + if (attrs.hasOwnProperty(attr)) { + attrs[attr] = Y.merge(attrs[attr]); + } + } + } + + return attrs; + }; + + AttributeCore.prototype = { + + /** + * Constructor logic for attributes. Initializes the host state, and sets up the inital attributes passed to the + * constructor. + * + * @method _initAttrHost + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + * @private + */ + _initAttrHost : function(attrs, values, lazy) { + this._state = new Y.State(); + this._initAttrs(attrs, values, lazy); + }, + + /** + *

+ * Adds an attribute with the provided configuration to the host object. + *

+ *

+ * The config argument object supports the following properties: + *

+ * + *
+ *
value <Any>
+ *
The initial value to set on the attribute
+ * + *
valueFn <Function | String>
+ *
+ *

A function, which will return the initial value to set on the attribute. This is useful + * for cases where the attribute configuration is defined statically, but needs to + * reference the host instance ("this") to obtain an initial value. If both the value and valueFn properties are defined, + * the value returned by the valueFn has precedence over the value property, unless it returns undefined, in which + * case the value property is used.

+ * + *

valueFn can also be set to a string, representing the name of the instance method to be used to retrieve the value.

+ *
+ * + *
readOnly <boolean>
+ *
Whether or not the attribute is read only. Attributes having readOnly set to true + * cannot be modified by invoking the set method.
+ * + *
writeOnce <boolean> or <string>
+ *
+ * Whether or not the attribute is "write once". Attributes having writeOnce set to true, + * can only have their values set once, be it through the default configuration, + * constructor configuration arguments, or by invoking set. + *

The writeOnce attribute can also be set to the string "initOnly", + * in which case the attribute can only be set during initialization + * (when used with Base, this means it can only be set during construction)

+ *
+ * + *
setter <Function | String>
+ *
+ *

The setter function used to massage or normalize the value passed to the set method for the attribute. + * The value returned by the setter will be the final stored value. Returning + * Attribute.INVALID_VALUE, from the setter will prevent + * the value from being stored. + *

+ * + *

setter can also be set to a string, representing the name of the instance method to be used as the setter function.

+ *
+ * + *
getter <Function | String>
+ *
+ *

+ * The getter function used to massage or normalize the value returned by the get method for the attribute. + * The value returned by the getter function is the value which will be returned to the user when they + * invoke get. + *

+ * + *

getter can also be set to a string, representing the name of the instance method to be used as the getter function.

+ *
+ * + *
validator <Function | String>
+ *
+ *

+ * The validator function invoked prior to setting the stored value. Returning + * false from the validator function will prevent the value from being stored. + *

+ * + *

validator can also be set to a string, representing the name of the instance method to be used as the validator function.

+ *
+ * + *
lazyAdd <boolean>
+ *
Whether or not to delay initialization of the attribute until the first call to get/set it. + * This flag can be used to over-ride lazy initialization on a per attribute basis, when adding multiple attributes through + * the addAttrs method.
+ * + *
+ * + *

The setter, getter and validator are invoked with the value and name passed in as the first and second arguments, and with + * the context ("this") set to the host object.

+ * + *

Configuration properties outside of the list mentioned above are considered private properties used internally by attribute, + * and are not intended for public use.

+ * + * @method addAttr + * + * @param {String} name The name of the attribute. + * @param {Object} config An object with attribute configuration property/value pairs, specifying the configuration for the attribute. + * + *

+ * NOTE: The configuration object is modified when adding an attribute, so if you need + * to protect the original values, you will need to merge the object. + *

+ * + * @param {boolean} lazy (optional) Whether or not to add this attribute lazily (on the first call to get/set). + * + * @return {Object} A reference to the host object. + * + * @chainable + */ + addAttr: function(name, config, lazy) { + + Y.log('Adding attribute: ' + name, 'info', 'attribute'); + + var host = this, // help compression + state = host._state, + value, + hasValue; + + config = config || {}; + + lazy = (LAZY_ADD in config) ? config[LAZY_ADD] : lazy; + + if (lazy && !host.attrAdded(name)) { + state.addAll(name, { + lazy : config, + added : true + }); + } else { + /*jshint maxlen:200*/ + if (host.attrAdded(name) && !state.get(name, IS_LAZY_ADD)) { Y.log('Attribute: ' + name + ' already exists. Cannot add it again without removing it first', 'warn', 'attribute'); } + + if (!host.attrAdded(name) || state.get(name, IS_LAZY_ADD)) { + + hasValue = (VALUE in config); + + if (config.readOnly && !hasValue) { Y.log('readOnly attribute: ' + name + ', added without an initial value. Value will be set on initial call to set', 'warn', 'attribute');} + /*jshint maxlen:150*/ + + if (hasValue) { + // We'll go through set, don't want to set value in config directly + value = config.value; + delete config.value; + } + + config.added = true; + config.initializing = true; + + state.addAll(name, config); + + if (hasValue) { + // Go through set, so that raw values get normalized/validated + host.set(name, value); + } + + state.remove(name, INITIALIZING); + } + } + + return host; + }, + + /** + * Checks if the given attribute has been added to the host + * + * @method attrAdded + * @param {String} name The name of the attribute to check. + * @return {boolean} true if an attribute with the given name has been added, false if it hasn't. + * This method will return true for lazily added attributes. + */ + attrAdded: function(name) { + return !!this._state.get(name, ADDED); + }, + + /** + * Returns the current value of the attribute. If the attribute + * has been configured with a 'getter' function, this method will delegate + * to the 'getter' to obtain the value of the attribute. + * + * @method get + * + * @param {String} name The name of the attribute. If the value of the attribute is an Object, + * dot notation can be used to obtain the value of a property of the object (e.g. get("x.y.z")) + * + * @return {Any} The value of the attribute + */ + get : function(name) { + return this._getAttr(name); + }, + + /** + * Checks whether or not the attribute is one which has been + * added lazily and still requires initialization. + * + * @method _isLazyAttr + * @private + * @param {String} name The name of the attribute + * @return {boolean} true if it's a lazily added attribute, false otherwise. + */ + _isLazyAttr: function(name) { + return this._state.get(name, LAZY); + }, + + /** + * Finishes initializing an attribute which has been lazily added. + * + * @method _addLazyAttr + * @private + * @param {Object} name The name of the attribute + */ + _addLazyAttr: function(name) { + var state = this._state, + lazyCfg = state.get(name, LAZY); + + state.add(name, IS_LAZY_ADD, true); + state.remove(name, LAZY); + this.addAttr(name, lazyCfg); + }, + + /** + * Sets the value of an attribute. + * + * @method set + * @chainable + * + * @param {String} name The name of the attribute. If the + * current value of the attribute is an Object, dot notation can be used + * to set the value of a property within the object (e.g. set("x.y.z", 5)). + * @param {Any} value The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + */ + set : function(name, val, opts) { + return this._setAttr(name, val, opts); + }, + + /** + * Allows setting of readOnly/writeOnce attributes. See set for argument details. + * + * @method _set + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} val The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + */ + _set : function(name, val, opts) { + return this._setAttr(name, val, opts, true); + }, + + /** + * Provides the common implementation for the public set and protected _set methods. + * + * See set for argument details. + * + * @method _setAttr + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} value The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @param {boolean} force If true, allows the caller to set values for + * readOnly or writeOnce attributes which have already been set. + * + * @return {Object} A reference to the host object. + */ + _setAttr : function(name, val, opts, force) { + var allowSet = true, + state = this._state, + stateProxy = this._stateProxy, + cfg, + initialSet, + strPath, + path, + currVal, + writeOnce, + initializing; + + if (name.indexOf(DOT) !== -1) { + strPath = name; + path = name.split(DOT); + name = path.shift(); + } + + if (this._isLazyAttr(name)) { + this._addLazyAttr(name); + } + + cfg = state.getAll(name, true) || {}; + + initialSet = (!(VALUE in cfg)); + + if (stateProxy && name in stateProxy && !cfg._bypassProxy) { + // TODO: Value is always set for proxy. Can we do any better? Maybe take a snapshot as the initial value for the first call to set? + initialSet = false; + } + + writeOnce = cfg.writeOnce; + initializing = cfg.initializing; + + if (!initialSet && !force) { + + if (writeOnce) { + Y.log('Set attribute:' + name + ', aborted; Attribute is writeOnce', 'warn', 'attribute'); + allowSet = false; + } + + if (cfg.readOnly) { + Y.log('Set attribute:' + name + ', aborted; Attribute is readOnly', 'warn', 'attribute'); + allowSet = false; + } + } + + if (!initializing && !force && writeOnce === INIT_ONLY) { + Y.log('Set attribute:' + name + ', aborted; Attribute is writeOnce: "initOnly"', 'warn', 'attribute'); + allowSet = false; + } + + if (allowSet) { + // Don't need currVal if initialSet (might fail in custom getter if it always expects a non-undefined/non-null value) + if (!initialSet) { + currVal = this.get(name); + } + + if (path) { + val = O.setValue(Y.clone(currVal), path, val); + + if (val === undefined) { + Y.log('Set attribute path:' + strPath + ', aborted; Path is invalid', 'warn', 'attribute'); + allowSet = false; + } + } + + if (allowSet) { + opts = opts || {}; + if (!this._fireAttrChange || initializing) { + this._setAttrVal(name, strPath, currVal, val, opts); + } else { + // HACK - no real reason core needs to know about _fireAttrChange, but + // it adds fn hops if we want to break it out. Not sure it's worth it for this critical path + this._fireAttrChange(name, strPath, currVal, val, opts); + } + } + } + + return this; + }, + + /** + * Provides the common implementation for the public get method, + * allowing Attribute hosts to over-ride either method. + * + * See get for argument details. + * + * @method _getAttr + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @return {Any} The value of the attribute. + */ + _getAttr : function(name) { + var host = this, // help compression + fullName = name, + state = host._state, + path, + getter, + val, + cfg; + + if (name.indexOf(DOT) !== -1) { + path = name.split(DOT); + name = path.shift(); + } + + // On Demand - Should be rare - handles out of order valueFn references + if (host._tCfgs && host._tCfgs[name]) { + cfg = {}; + cfg[name] = host._tCfgs[name]; + delete host._tCfgs[name]; + host._addAttrs(cfg, host._tVals); + } + + // Lazy Init + if (host._isLazyAttr(name)) { + host._addLazyAttr(name); + } + + val = host._getStateVal(name); + + getter = state.get(name, GETTER); + + if (getter && !getter.call) { + getter = this[getter]; + } + + val = (getter) ? getter.call(host, val, fullName) : val; + val = (path) ? O.getValue(val, path) : val; + + return val; + }, + + /** + * Gets the stored value for the attribute, from either the + * internal state object, or the state proxy if it exits + * + * @method _getStateVal + * @private + * @param {String} name The name of the attribute + * @return {Any} The stored value of the attribute + */ + _getStateVal : function(name) { + var stateProxy = this._stateProxy; + return stateProxy && (name in stateProxy) && !this._state.get(name, BYPASS_PROXY) ? stateProxy[name] : this._state.get(name, VALUE); + }, + + /** + * Sets the stored value for the attribute, in either the + * internal state object, or the state proxy if it exits + * + * @method _setStateVal + * @private + * @param {String} name The name of the attribute + * @param {Any} value The value of the attribute + */ + _setStateVal : function(name, value) { + var stateProxy = this._stateProxy; + if (stateProxy && (name in stateProxy) && !this._state.get(name, BYPASS_PROXY)) { + stateProxy[name] = value; + } else { + this._state.add(name, VALUE, value); + } + }, + + /** + * Updates the stored value of the attribute in the privately held State object, + * if validation and setter passes. + * + * @method _setAttrVal + * @private + * @param {String} attrName The attribute name. + * @param {String} subAttrName The sub-attribute name, if setting a sub-attribute property ("x.y.z"). + * @param {Any} prevVal The currently stored value of the attribute. + * @param {Any} newVal The value which is going to be stored. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * + * @return {booolean} true if the new attribute value was stored, false if not. + */ + _setAttrVal : function(attrName, subAttrName, prevVal, newVal, opts) { + + var host = this, + allowSet = true, + cfg = this._state.getAll(attrName, true) || {}, + validator = cfg.validator, + setter = cfg.setter, + initializing = cfg.initializing, + prevRawVal = this._getStateVal(attrName), + name = subAttrName || attrName, + retVal, + valid; + + if (validator) { + if (!validator.call) { + // Assume string - trying to keep critical path tight, so avoiding Lang check + validator = this[validator]; + } + if (validator) { + valid = validator.call(host, newVal, name, opts); + + if (!valid && initializing) { + newVal = cfg.defaultValue; + valid = true; // Assume it's valid, for perf. + } + } + } + + if (!validator || valid) { + if (setter) { + if (!setter.call) { + // Assume string - trying to keep critical path tight, so avoiding Lang check + setter = this[setter]; + } + if (setter) { + retVal = setter.call(host, newVal, name, opts); + + if (retVal === INVALID_VALUE) { + if (initializing) { + Y.log('Attribute: ' + attrName + ', setter returned Attribute.INVALID_VALUE for value:' + newVal + ', initializing to default value', 'warn', 'attribute'); + newVal = cfg.defaultValue; + } else { + Y.log('Attribute: ' + attrName + ', setter returned Attribute.INVALID_VALUE for value:' + newVal, 'warn', 'attribute'); + allowSet = false; + } + } else if (retVal !== undefined){ + Y.log('Attribute: ' + attrName + ', raw value: ' + newVal + ' modified by setter to:' + retVal, 'info', 'attribute'); + newVal = retVal; + } + } + } + + if (allowSet) { + if(!subAttrName && (newVal === prevRawVal) && !Lang.isObject(newVal)) { + Y.log('Attribute: ' + attrName + ', value unchanged:' + newVal, 'warn', 'attribute'); + allowSet = false; + } else { + // Store value + if (!(INIT_VALUE in cfg)) { + cfg.initValue = newVal; + } + host._setStateVal(attrName, newVal); + } + } + + } else { + Y.log('Attribute:' + attrName + ', Validation failed for value:' + newVal, 'warn', 'attribute'); + allowSet = false; + } + + return allowSet; + }, + + /** + * Sets multiple attribute values. + * + * @method setAttrs + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + * @chainable + */ + setAttrs : function(attrs, opts) { + return this._setAttrs(attrs, opts); + }, + + /** + * Implementation behind the public setAttrs method, to set multiple attribute values. + * + * @method _setAttrs + * @protected + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} [opts] Optional data providing the circumstances for the change + * @return {Object} A reference to the host object. + * @chainable + */ + _setAttrs : function(attrs, opts) { + var attr; + for (attr in attrs) { + if ( attrs.hasOwnProperty(attr) ) { + this.set(attr, attrs[attr], opts); + } + } + return this; + }, + + /** + * Gets multiple attribute values. + * + * @method getAttrs + * @param {Array | boolean} attrs Optional. An array of attribute names. If omitted, all attribute values are + * returned. If set to true, all attributes modified from their initial values are returned. + * @return {Object} An object with attribute name/value pairs. + */ + getAttrs : function(attrs) { + return this._getAttrs(attrs); + }, + + /** + * Implementation behind the public getAttrs method, to get multiple attribute values. + * + * @method _getAttrs + * @protected + * @param {Array | boolean} attrs Optional. An array of attribute names. If omitted, all attribute values are + * returned. If set to true, all attributes modified from their initial values are returned. + * @return {Object} An object with attribute name/value pairs. + */ + _getAttrs : function(attrs) { + var obj = {}, + attr, i, len, + modifiedOnly = (attrs === true); + + // TODO - figure out how to get all "added" + if (!attrs || modifiedOnly) { + attrs = O.keys(this._state.data); + } + + for (i = 0, len = attrs.length; i < len; i++) { + attr = attrs[i]; + + if (!modifiedOnly || this._getStateVal(attr) != this._state.get(attr, INIT_VALUE)) { + // Go through get, to honor cloning/normalization + obj[attr] = this.get(attr); + } + } + + return obj; + }, + + /** + * Configures a group of attributes, and sets initial values. + * + *

+ * NOTE: This method does not isolate the configuration object by merging/cloning. + * The caller is responsible for merging/cloning the configuration object if required. + *

+ * + * @method addAttrs + * @chainable + * + * @param {Object} cfgs An object with attribute name/configuration pairs. + * @param {Object} values An object with attribute name/value pairs, defining the initial values to apply. + * Values defined in the cfgs argument will be over-written by values in this argument unless defined as read only. + * @param {boolean} lazy Whether or not to delay the intialization of these attributes until the first call to get/set. + * Individual attributes can over-ride this behavior by defining a lazyAdd configuration property in their configuration. + * See addAttr. + * + * @return {Object} A reference to the host object. + */ + addAttrs : function(cfgs, values, lazy) { + var host = this; // help compression + if (cfgs) { + host._tCfgs = cfgs; + host._tVals = host._normAttrVals(values); + host._addAttrs(cfgs, host._tVals, lazy); + host._tCfgs = host._tVals = null; + } + + return host; + }, + + /** + * Implementation behind the public addAttrs method. + * + * This method is invoked directly by get if it encounters a scenario + * in which an attribute's valueFn attempts to obtain the + * value an attribute in the same group of attributes, which has not yet + * been added (on demand initialization). + * + * @method _addAttrs + * @private + * @param {Object} cfgs An object with attribute name/configuration pairs. + * @param {Object} values An object with attribute name/value pairs, defining the initial values to apply. + * Values defined in the cfgs argument will be over-written by values in this argument unless defined as read only. + * @param {boolean} lazy Whether or not to delay the intialization of these attributes until the first call to get/set. + * Individual attributes can over-ride this behavior by defining a lazyAdd configuration property in their configuration. + * See addAttr. + */ + _addAttrs : function(cfgs, values, lazy) { + var host = this, // help compression + attr, + attrCfg, + value; + + for (attr in cfgs) { + if (cfgs.hasOwnProperty(attr)) { + + // Not Merging. Caller is responsible for isolating configs + attrCfg = cfgs[attr]; + attrCfg.defaultValue = attrCfg.value; + + // Handle simple, complex and user values, accounting for read-only + value = host._getAttrInitVal(attr, attrCfg, host._tVals); + + if (value !== undefined) { + attrCfg.value = value; + } + + if (host._tCfgs[attr]) { + delete host._tCfgs[attr]; + } + + host.addAttr(attr, attrCfg, lazy); + } + } + }, + + /** + * Utility method to protect an attribute configuration + * hash, by merging the entire object and the individual + * attr config objects. + * + * @method _protectAttrs + * @protected + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the attrs argument. + * @deprecated Use `AttributeCore.protectAttrs()` or + * `Attribute.protectAttrs()` which are the same static utility method. + */ + _protectAttrs : AttributeCore.protectAttrs, + + /** + * Utility method to normalize attribute values. The base implementation + * simply merges the hash to protect the original. + * + * @method _normAttrVals + * @param {Object} valueHash An object with attribute name/value pairs + * + * @return {Object} An object literal with 2 properties - "simple" and "complex", + * containing simple and complex attribute values respectively keyed + * by the top level attribute name, or null, if valueHash is falsey. + * + * @private + */ + _normAttrVals : function(valueHash) { + var vals = {}, + subvals = {}, + path, + attr, + v, k; + + if (valueHash) { + for (k in valueHash) { + if (valueHash.hasOwnProperty(k)) { + if (k.indexOf(DOT) !== -1) { + path = k.split(DOT); + attr = path.shift(); + v = subvals[attr] = subvals[attr] || []; + v[v.length] = { + path : path, + value: valueHash[k] + }; + } else { + vals[k] = valueHash[k]; + } + } + } + return { simple:vals, complex:subvals }; + } else { + return null; + } + }, + + /** + * Returns the initial value of the given attribute from + * either the default configuration provided, or the + * over-ridden value if it exists in the set of initValues + * provided and the attribute is not read-only. + * + * @param {String} attr The name of the attribute + * @param {Object} cfg The attribute configuration object + * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals + * + * @return {Any} The initial value of the attribute. + * + * @method _getAttrInitVal + * @private + */ + _getAttrInitVal : function(attr, cfg, initValues) { + var val = cfg.value, + valFn = cfg.valueFn, + tmpVal, + initValSet = false, + simple, + complex, + i, + l, + path, + subval, + subvals; + + if (!cfg.readOnly && initValues) { + // Simple Attributes + simple = initValues.simple; + if (simple && simple.hasOwnProperty(attr)) { + val = simple[attr]; + initValSet = true; + } + } + + if (valFn && !initValSet) { + if (!valFn.call) { + valFn = this[valFn]; + } + if (valFn) { + tmpVal = valFn.call(this, attr); + val = tmpVal; + } + } + + if (!cfg.readOnly && initValues) { + + // Complex Attributes (complex values applied, after simple, in case both are set) + complex = initValues.complex; + + if (complex && complex.hasOwnProperty(attr) && (val !== undefined) && (val !== null)) { + subvals = complex[attr]; + for (i = 0, l = subvals.length; i < l; ++i) { + path = subvals[i].path; + subval = subvals[i].value; + O.setValue(val, path, subval); + } + } + } + + return val; + }, + + /** + * Utility method to set up initial attributes defined during construction, + * either through the constructor.ATTRS property, or explicitly passed in. + * + * @method _initAttrs + * @protected + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + */ + _initAttrs : function(attrs, values, lazy) { + // ATTRS support for Node, which is not Base based + attrs = attrs || this.constructor.ATTRS; + + var Base = Y.Base, + BaseCore = Y.BaseCore, + baseInst = (Base && Y.instanceOf(this, Base)), + baseCoreInst = (!baseInst && BaseCore && Y.instanceOf(this, BaseCore)); + + if (attrs && !baseInst && !baseCoreInst) { + this.addAttrs(Y.AttributeCore.protectAttrs(attrs), values, lazy); + } + } + }; + + Y.AttributeCore = AttributeCore; + + +}, '3.9.0', {"requires": ["oop"]}); diff --git a/src/errors/static/js/yui/build/attribute-core/attribute-core-min.js b/src/errors/static/js/yui/build/attribute-core/attribute-core-min.js new file mode 100644 index 00000000..592cba72 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-core/attribute-core-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("attribute-core",function(e,t){function E(e,t,n){this._yuievt=null,this._initAttrHost(e,t,n)}e.State=function(){this.data={}},e.State.prototype={add:function(e,t,n){var r=this.data[e];r||(r=this.data[e]={}),r[t]=n},addAll:function(e,t){var n=this.data[e],r;n||(n=this.data[e]={});for(r in t)t.hasOwnProperty(r)&&(n[r]=t[r])},remove:function(e,t){var n=this.data[e];n&&delete n[t]},removeAll:function(t,n){var r;n?e.each(n,function(e,n){this.remove(t,typeof n=="string"?n:e)},this):(r=this.data,t in r&&delete r[t])},get:function(e,t){var n=this.data[e];if(n)return n[t]},getAll:function(e,t){var n=this.data[e],r,i;if(t)i=n;else if(n){i={};for(r in n)n.hasOwnProperty(r)&&(i[r]=n[r])}return i}};var n=e.Object,r=e.Lang,i=".",s="getter",o="setter",u="readOnly",a="writeOnce",f="initOnly",l="validator",c="value",h="valueFn",p="lazyAdd",d="added",v="_bypassProxy",m="initializing",g="initValue",y="lazy",b="isLazyAdd",w;E.INVALID_VALUE={},w=E.INVALID_VALUE,E._ATTR_CFG=[o,s,l,c,h,a,u,p,v],E.protectAttrs=function(t){if(t){t=e.merge(t);for(var n in t)t.hasOwnProperty(n)&&(t[n]=e.merge(t[n]))}return t},E.prototype={_initAttrHost:function(t,n,r){this._state=new e.State,this._initAttrs(t,n,r)},addAttr:function(e,t,n){var r=this,i=r._state,s,o;t=t||{},n=p in t?t[p]:n;if(n&&!r.attrAdded(e))i.addAll(e,{lazy:t,added:!0});else if(!r.attrAdded(e)||i.get(e,b))o=c in t,o&&(s=t.value,delete t.value),t.added=!0,t.initializing=!0,i.addAll(e,t),o&&r.set(e,s),i.remove(e,m);return r},attrAdded:function(e){return!!this._state.get(e,d)},get:function(e){return this._getAttr(e)},_isLazyAttr:function(e){return this._state.get(e,y)},_addLazyAttr:function(e){var t=this._state,n=t.get(e,y);t.add(e,b,!0),t.remove(e,y),this.addAttr(e,n)},set:function(e,t,n){return this._setAttr(e,t,n)},_set:function(e,t,n){return this._setAttr(e,t,n,!0)},_setAttr:function(t,r,s,o){var u=!0,a=this._state,l=this._stateProxy,h,p,d,v,m,g,y;return t.indexOf(i)!==-1&&(d=t,v=t.split(i),t=v.shift()),this._isLazyAttr(t)&&this._addLazyAttr(t),h=a.getAll(t,!0)||{},p=!(c in h),l&&t in l&&!h._bypassProxy&&(p=!1),g=h.writeOnce,y=h.initializing,!p&&!o&&(g&&(u=!1),h.readOnly&&(u=!1)),!y&&!o&&g===f&&(u=!1),u&&(p||(m=this.get(t)),v&&(r=n.setValue(e.clone(m),v,r),r===undefined&&(u=!1)),u&&(s=s||{},!this._fireAttrChange||y?this._setAttrVal(t,d,m,r,s):this._fireAttrChange(t,d,m,r,s))),this},_getAttr:function(e){var t=this,r=e,o=t._state,u,a,f,l;return e.indexOf(i)!==-1&&(u=e.split(i),e=u.shift()),t._tCfgs&&t._tCfgs[e]&&(l={},l[e]=t._tCfgs[e],delete t._tCfgs[e],t._addAttrs(l,t._tVals)),t._isLazyAttr(e)&&t._addLazyAttr(e),f=t._getStateVal(e),a=o.get(e,s),a&&!a.call&&(a=this[a]),f=a?a.call(t,f,r):f,f=u?n.getValue(f,u):f,f},_getStateVal:function(e){var t=this._stateProxy;return t&&e in t&&!this._state.get(e,v)?t[e]:this._state.get(e,c)},_setStateVal:function(e,t){var n=this._stateProxy;n&&e in n&&!this._state.get(e,v)?n[e]=t:this._state.add(e,c,t)},_setAttrVal:function(e,t,n,i,s){var o=this,u=!0,a=this._state.getAll(e,!0)||{},f=a.validator,l=a.setter,c=a.initializing,h=this._getStateVal(e),p=t||e,d,v;return f&&(f.call||(f=this[f]),f&&(v=f.call(o,i,p,s),!v&&c&&(i=a.defaultValue,v=!0))),!f||v?(l&&(l.call||(l=this[l]),l&&(d=l.call(o,i,p,s),d===w?c?i=a.defaultValue:u=!1:d!==undefined&&(i=d))),u&&(!t&&i===h&&!r.isObject(i)?u=!1:(g in a||(a.initValue=i),o._setStateVal(e,i)))):u=!1,u},setAttrs:function(e,t){return this._setAttrs(e,t)},_setAttrs:function(e,t){var n;for(n in e)e.hasOwnProperty(n)&&this.set(n,e[n],t);return this},getAttrs:function(e){return this._getAttrs(e)},_getAttrs:function(e){var t={},r,i,s,o=e===!0;if(!e||o)e=n.keys(this._state.data);for(i=0,s=e.length;i + * AttributeCore provides the lightest level of configurable attribute support. It is designed to be + * augmented on to a host class, and provides the host with the ability to configure + * attributes to store and retrieve state, but without support for attribute change events. + *

+ *

For example, attributes added to the host can be configured:

+ *
    + *
  • As read only.
  • + *
  • As write once.
  • + *
  • With a setter function, which can be used to manipulate + * values passed to Attribute's set method, before they are stored.
  • + *
  • With a getter function, which can be used to manipulate stored values, + * before they are returned by Attribute's get method.
  • + *
  • With a validator function, to validate values before they are stored.
  • + *
+ * + *

See the addAttr method, for the complete set of configuration + * options available for attributes.

+ * + *

Object/Classes based on AttributeCore can augment AttributeObservable + * (with true for overwrite) and AttributeExtras to add attribute event and + * additional, less commonly used attribute methods, such as `modifyAttr`, `removeAttr` and `reset`.

+ * + * @class AttributeCore + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + */ + function AttributeCore(attrs, values, lazy) { + // HACK: Fix #2531929 + // Complete hack, to make sure the first clone of a node value in IE doesn't doesn't hurt state - maintains 3.4.1 behavior. + // Too late in the release cycle to do anything about the core problem. + // The root issue is that cloning a Y.Node instance results in an object which barfs in IE, when you access it's properties (since 3.3.0). + this._yuievt = null; + + this._initAttrHost(attrs, values, lazy); + } + + /** + *

The value to return from an attribute setter in order to prevent the set from going through.

+ * + *

You can return this value from your setter if you wish to combine validator and setter + * functionality into a single setter function, which either returns the massaged value to be stored or + * AttributeCore.INVALID_VALUE to prevent invalid values from being stored.

+ * + * @property INVALID_VALUE + * @type Object + * @static + * @final + */ + AttributeCore.INVALID_VALUE = {}; + INVALID_VALUE = AttributeCore.INVALID_VALUE; + + /** + * The list of properties which can be configured for + * each attribute (e.g. setter, getter, writeOnce etc.). + * + * This property is used internally as a whitelist for faster + * Y.mix operations. + * + * @property _ATTR_CFG + * @type Array + * @static + * @protected + */ + AttributeCore._ATTR_CFG = [SETTER, GETTER, VALIDATOR, VALUE, VALUE_FN, WRITE_ONCE, READ_ONLY, LAZY_ADD, BYPASS_PROXY]; + + /** + * Utility method to protect an attribute configuration hash, by merging the + * entire object and the individual attr config objects. + * + * @method protectAttrs + * @static + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the `attrs` argument. + */ + AttributeCore.protectAttrs = function (attrs) { + if (attrs) { + attrs = Y.merge(attrs); + for (var attr in attrs) { + if (attrs.hasOwnProperty(attr)) { + attrs[attr] = Y.merge(attrs[attr]); + } + } + } + + return attrs; + }; + + AttributeCore.prototype = { + + /** + * Constructor logic for attributes. Initializes the host state, and sets up the inital attributes passed to the + * constructor. + * + * @method _initAttrHost + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + * @private + */ + _initAttrHost : function(attrs, values, lazy) { + this._state = new Y.State(); + this._initAttrs(attrs, values, lazy); + }, + + /** + *

+ * Adds an attribute with the provided configuration to the host object. + *

+ *

+ * The config argument object supports the following properties: + *

+ * + *
+ *
value <Any>
+ *
The initial value to set on the attribute
+ * + *
valueFn <Function | String>
+ *
+ *

A function, which will return the initial value to set on the attribute. This is useful + * for cases where the attribute configuration is defined statically, but needs to + * reference the host instance ("this") to obtain an initial value. If both the value and valueFn properties are defined, + * the value returned by the valueFn has precedence over the value property, unless it returns undefined, in which + * case the value property is used.

+ * + *

valueFn can also be set to a string, representing the name of the instance method to be used to retrieve the value.

+ *
+ * + *
readOnly <boolean>
+ *
Whether or not the attribute is read only. Attributes having readOnly set to true + * cannot be modified by invoking the set method.
+ * + *
writeOnce <boolean> or <string>
+ *
+ * Whether or not the attribute is "write once". Attributes having writeOnce set to true, + * can only have their values set once, be it through the default configuration, + * constructor configuration arguments, or by invoking set. + *

The writeOnce attribute can also be set to the string "initOnly", + * in which case the attribute can only be set during initialization + * (when used with Base, this means it can only be set during construction)

+ *
+ * + *
setter <Function | String>
+ *
+ *

The setter function used to massage or normalize the value passed to the set method for the attribute. + * The value returned by the setter will be the final stored value. Returning + * Attribute.INVALID_VALUE, from the setter will prevent + * the value from being stored. + *

+ * + *

setter can also be set to a string, representing the name of the instance method to be used as the setter function.

+ *
+ * + *
getter <Function | String>
+ *
+ *

+ * The getter function used to massage or normalize the value returned by the get method for the attribute. + * The value returned by the getter function is the value which will be returned to the user when they + * invoke get. + *

+ * + *

getter can also be set to a string, representing the name of the instance method to be used as the getter function.

+ *
+ * + *
validator <Function | String>
+ *
+ *

+ * The validator function invoked prior to setting the stored value. Returning + * false from the validator function will prevent the value from being stored. + *

+ * + *

validator can also be set to a string, representing the name of the instance method to be used as the validator function.

+ *
+ * + *
lazyAdd <boolean>
+ *
Whether or not to delay initialization of the attribute until the first call to get/set it. + * This flag can be used to over-ride lazy initialization on a per attribute basis, when adding multiple attributes through + * the addAttrs method.
+ * + *
+ * + *

The setter, getter and validator are invoked with the value and name passed in as the first and second arguments, and with + * the context ("this") set to the host object.

+ * + *

Configuration properties outside of the list mentioned above are considered private properties used internally by attribute, + * and are not intended for public use.

+ * + * @method addAttr + * + * @param {String} name The name of the attribute. + * @param {Object} config An object with attribute configuration property/value pairs, specifying the configuration for the attribute. + * + *

+ * NOTE: The configuration object is modified when adding an attribute, so if you need + * to protect the original values, you will need to merge the object. + *

+ * + * @param {boolean} lazy (optional) Whether or not to add this attribute lazily (on the first call to get/set). + * + * @return {Object} A reference to the host object. + * + * @chainable + */ + addAttr: function(name, config, lazy) { + + + var host = this, // help compression + state = host._state, + value, + hasValue; + + config = config || {}; + + lazy = (LAZY_ADD in config) ? config[LAZY_ADD] : lazy; + + if (lazy && !host.attrAdded(name)) { + state.addAll(name, { + lazy : config, + added : true + }); + } else { + /*jshint maxlen:200*/ + + if (!host.attrAdded(name) || state.get(name, IS_LAZY_ADD)) { + + hasValue = (VALUE in config); + + /*jshint maxlen:150*/ + + if (hasValue) { + // We'll go through set, don't want to set value in config directly + value = config.value; + delete config.value; + } + + config.added = true; + config.initializing = true; + + state.addAll(name, config); + + if (hasValue) { + // Go through set, so that raw values get normalized/validated + host.set(name, value); + } + + state.remove(name, INITIALIZING); + } + } + + return host; + }, + + /** + * Checks if the given attribute has been added to the host + * + * @method attrAdded + * @param {String} name The name of the attribute to check. + * @return {boolean} true if an attribute with the given name has been added, false if it hasn't. + * This method will return true for lazily added attributes. + */ + attrAdded: function(name) { + return !!this._state.get(name, ADDED); + }, + + /** + * Returns the current value of the attribute. If the attribute + * has been configured with a 'getter' function, this method will delegate + * to the 'getter' to obtain the value of the attribute. + * + * @method get + * + * @param {String} name The name of the attribute. If the value of the attribute is an Object, + * dot notation can be used to obtain the value of a property of the object (e.g. get("x.y.z")) + * + * @return {Any} The value of the attribute + */ + get : function(name) { + return this._getAttr(name); + }, + + /** + * Checks whether or not the attribute is one which has been + * added lazily and still requires initialization. + * + * @method _isLazyAttr + * @private + * @param {String} name The name of the attribute + * @return {boolean} true if it's a lazily added attribute, false otherwise. + */ + _isLazyAttr: function(name) { + return this._state.get(name, LAZY); + }, + + /** + * Finishes initializing an attribute which has been lazily added. + * + * @method _addLazyAttr + * @private + * @param {Object} name The name of the attribute + */ + _addLazyAttr: function(name) { + var state = this._state, + lazyCfg = state.get(name, LAZY); + + state.add(name, IS_LAZY_ADD, true); + state.remove(name, LAZY); + this.addAttr(name, lazyCfg); + }, + + /** + * Sets the value of an attribute. + * + * @method set + * @chainable + * + * @param {String} name The name of the attribute. If the + * current value of the attribute is an Object, dot notation can be used + * to set the value of a property within the object (e.g. set("x.y.z", 5)). + * @param {Any} value The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + */ + set : function(name, val, opts) { + return this._setAttr(name, val, opts); + }, + + /** + * Allows setting of readOnly/writeOnce attributes. See set for argument details. + * + * @method _set + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} val The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + */ + _set : function(name, val, opts) { + return this._setAttr(name, val, opts, true); + }, + + /** + * Provides the common implementation for the public set and protected _set methods. + * + * See set for argument details. + * + * @method _setAttr + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} value The value to set the attribute to. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @param {boolean} force If true, allows the caller to set values for + * readOnly or writeOnce attributes which have already been set. + * + * @return {Object} A reference to the host object. + */ + _setAttr : function(name, val, opts, force) { + var allowSet = true, + state = this._state, + stateProxy = this._stateProxy, + cfg, + initialSet, + strPath, + path, + currVal, + writeOnce, + initializing; + + if (name.indexOf(DOT) !== -1) { + strPath = name; + path = name.split(DOT); + name = path.shift(); + } + + if (this._isLazyAttr(name)) { + this._addLazyAttr(name); + } + + cfg = state.getAll(name, true) || {}; + + initialSet = (!(VALUE in cfg)); + + if (stateProxy && name in stateProxy && !cfg._bypassProxy) { + // TODO: Value is always set for proxy. Can we do any better? Maybe take a snapshot as the initial value for the first call to set? + initialSet = false; + } + + writeOnce = cfg.writeOnce; + initializing = cfg.initializing; + + if (!initialSet && !force) { + + if (writeOnce) { + allowSet = false; + } + + if (cfg.readOnly) { + allowSet = false; + } + } + + if (!initializing && !force && writeOnce === INIT_ONLY) { + allowSet = false; + } + + if (allowSet) { + // Don't need currVal if initialSet (might fail in custom getter if it always expects a non-undefined/non-null value) + if (!initialSet) { + currVal = this.get(name); + } + + if (path) { + val = O.setValue(Y.clone(currVal), path, val); + + if (val === undefined) { + allowSet = false; + } + } + + if (allowSet) { + opts = opts || {}; + if (!this._fireAttrChange || initializing) { + this._setAttrVal(name, strPath, currVal, val, opts); + } else { + // HACK - no real reason core needs to know about _fireAttrChange, but + // it adds fn hops if we want to break it out. Not sure it's worth it for this critical path + this._fireAttrChange(name, strPath, currVal, val, opts); + } + } + } + + return this; + }, + + /** + * Provides the common implementation for the public get method, + * allowing Attribute hosts to over-ride either method. + * + * See get for argument details. + * + * @method _getAttr + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @return {Any} The value of the attribute. + */ + _getAttr : function(name) { + var host = this, // help compression + fullName = name, + state = host._state, + path, + getter, + val, + cfg; + + if (name.indexOf(DOT) !== -1) { + path = name.split(DOT); + name = path.shift(); + } + + // On Demand - Should be rare - handles out of order valueFn references + if (host._tCfgs && host._tCfgs[name]) { + cfg = {}; + cfg[name] = host._tCfgs[name]; + delete host._tCfgs[name]; + host._addAttrs(cfg, host._tVals); + } + + // Lazy Init + if (host._isLazyAttr(name)) { + host._addLazyAttr(name); + } + + val = host._getStateVal(name); + + getter = state.get(name, GETTER); + + if (getter && !getter.call) { + getter = this[getter]; + } + + val = (getter) ? getter.call(host, val, fullName) : val; + val = (path) ? O.getValue(val, path) : val; + + return val; + }, + + /** + * Gets the stored value for the attribute, from either the + * internal state object, or the state proxy if it exits + * + * @method _getStateVal + * @private + * @param {String} name The name of the attribute + * @return {Any} The stored value of the attribute + */ + _getStateVal : function(name) { + var stateProxy = this._stateProxy; + return stateProxy && (name in stateProxy) && !this._state.get(name, BYPASS_PROXY) ? stateProxy[name] : this._state.get(name, VALUE); + }, + + /** + * Sets the stored value for the attribute, in either the + * internal state object, or the state proxy if it exits + * + * @method _setStateVal + * @private + * @param {String} name The name of the attribute + * @param {Any} value The value of the attribute + */ + _setStateVal : function(name, value) { + var stateProxy = this._stateProxy; + if (stateProxy && (name in stateProxy) && !this._state.get(name, BYPASS_PROXY)) { + stateProxy[name] = value; + } else { + this._state.add(name, VALUE, value); + } + }, + + /** + * Updates the stored value of the attribute in the privately held State object, + * if validation and setter passes. + * + * @method _setAttrVal + * @private + * @param {String} attrName The attribute name. + * @param {String} subAttrName The sub-attribute name, if setting a sub-attribute property ("x.y.z"). + * @param {Any} prevVal The currently stored value of the attribute. + * @param {Any} newVal The value which is going to be stored. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * + * @return {booolean} true if the new attribute value was stored, false if not. + */ + _setAttrVal : function(attrName, subAttrName, prevVal, newVal, opts) { + + var host = this, + allowSet = true, + cfg = this._state.getAll(attrName, true) || {}, + validator = cfg.validator, + setter = cfg.setter, + initializing = cfg.initializing, + prevRawVal = this._getStateVal(attrName), + name = subAttrName || attrName, + retVal, + valid; + + if (validator) { + if (!validator.call) { + // Assume string - trying to keep critical path tight, so avoiding Lang check + validator = this[validator]; + } + if (validator) { + valid = validator.call(host, newVal, name, opts); + + if (!valid && initializing) { + newVal = cfg.defaultValue; + valid = true; // Assume it's valid, for perf. + } + } + } + + if (!validator || valid) { + if (setter) { + if (!setter.call) { + // Assume string - trying to keep critical path tight, so avoiding Lang check + setter = this[setter]; + } + if (setter) { + retVal = setter.call(host, newVal, name, opts); + + if (retVal === INVALID_VALUE) { + if (initializing) { + newVal = cfg.defaultValue; + } else { + allowSet = false; + } + } else if (retVal !== undefined){ + newVal = retVal; + } + } + } + + if (allowSet) { + if(!subAttrName && (newVal === prevRawVal) && !Lang.isObject(newVal)) { + allowSet = false; + } else { + // Store value + if (!(INIT_VALUE in cfg)) { + cfg.initValue = newVal; + } + host._setStateVal(attrName, newVal); + } + } + + } else { + allowSet = false; + } + + return allowSet; + }, + + /** + * Sets multiple attribute values. + * + * @method setAttrs + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} [opts] Optional data providing the circumstances for the change. + * @return {Object} A reference to the host object. + * @chainable + */ + setAttrs : function(attrs, opts) { + return this._setAttrs(attrs, opts); + }, + + /** + * Implementation behind the public setAttrs method, to set multiple attribute values. + * + * @method _setAttrs + * @protected + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} [opts] Optional data providing the circumstances for the change + * @return {Object} A reference to the host object. + * @chainable + */ + _setAttrs : function(attrs, opts) { + var attr; + for (attr in attrs) { + if ( attrs.hasOwnProperty(attr) ) { + this.set(attr, attrs[attr], opts); + } + } + return this; + }, + + /** + * Gets multiple attribute values. + * + * @method getAttrs + * @param {Array | boolean} attrs Optional. An array of attribute names. If omitted, all attribute values are + * returned. If set to true, all attributes modified from their initial values are returned. + * @return {Object} An object with attribute name/value pairs. + */ + getAttrs : function(attrs) { + return this._getAttrs(attrs); + }, + + /** + * Implementation behind the public getAttrs method, to get multiple attribute values. + * + * @method _getAttrs + * @protected + * @param {Array | boolean} attrs Optional. An array of attribute names. If omitted, all attribute values are + * returned. If set to true, all attributes modified from their initial values are returned. + * @return {Object} An object with attribute name/value pairs. + */ + _getAttrs : function(attrs) { + var obj = {}, + attr, i, len, + modifiedOnly = (attrs === true); + + // TODO - figure out how to get all "added" + if (!attrs || modifiedOnly) { + attrs = O.keys(this._state.data); + } + + for (i = 0, len = attrs.length; i < len; i++) { + attr = attrs[i]; + + if (!modifiedOnly || this._getStateVal(attr) != this._state.get(attr, INIT_VALUE)) { + // Go through get, to honor cloning/normalization + obj[attr] = this.get(attr); + } + } + + return obj; + }, + + /** + * Configures a group of attributes, and sets initial values. + * + *

+ * NOTE: This method does not isolate the configuration object by merging/cloning. + * The caller is responsible for merging/cloning the configuration object if required. + *

+ * + * @method addAttrs + * @chainable + * + * @param {Object} cfgs An object with attribute name/configuration pairs. + * @param {Object} values An object with attribute name/value pairs, defining the initial values to apply. + * Values defined in the cfgs argument will be over-written by values in this argument unless defined as read only. + * @param {boolean} lazy Whether or not to delay the intialization of these attributes until the first call to get/set. + * Individual attributes can over-ride this behavior by defining a lazyAdd configuration property in their configuration. + * See addAttr. + * + * @return {Object} A reference to the host object. + */ + addAttrs : function(cfgs, values, lazy) { + var host = this; // help compression + if (cfgs) { + host._tCfgs = cfgs; + host._tVals = host._normAttrVals(values); + host._addAttrs(cfgs, host._tVals, lazy); + host._tCfgs = host._tVals = null; + } + + return host; + }, + + /** + * Implementation behind the public addAttrs method. + * + * This method is invoked directly by get if it encounters a scenario + * in which an attribute's valueFn attempts to obtain the + * value an attribute in the same group of attributes, which has not yet + * been added (on demand initialization). + * + * @method _addAttrs + * @private + * @param {Object} cfgs An object with attribute name/configuration pairs. + * @param {Object} values An object with attribute name/value pairs, defining the initial values to apply. + * Values defined in the cfgs argument will be over-written by values in this argument unless defined as read only. + * @param {boolean} lazy Whether or not to delay the intialization of these attributes until the first call to get/set. + * Individual attributes can over-ride this behavior by defining a lazyAdd configuration property in their configuration. + * See addAttr. + */ + _addAttrs : function(cfgs, values, lazy) { + var host = this, // help compression + attr, + attrCfg, + value; + + for (attr in cfgs) { + if (cfgs.hasOwnProperty(attr)) { + + // Not Merging. Caller is responsible for isolating configs + attrCfg = cfgs[attr]; + attrCfg.defaultValue = attrCfg.value; + + // Handle simple, complex and user values, accounting for read-only + value = host._getAttrInitVal(attr, attrCfg, host._tVals); + + if (value !== undefined) { + attrCfg.value = value; + } + + if (host._tCfgs[attr]) { + delete host._tCfgs[attr]; + } + + host.addAttr(attr, attrCfg, lazy); + } + } + }, + + /** + * Utility method to protect an attribute configuration + * hash, by merging the entire object and the individual + * attr config objects. + * + * @method _protectAttrs + * @protected + * @param {Object} attrs A hash of attribute to configuration object pairs. + * @return {Object} A protected version of the attrs argument. + * @deprecated Use `AttributeCore.protectAttrs()` or + * `Attribute.protectAttrs()` which are the same static utility method. + */ + _protectAttrs : AttributeCore.protectAttrs, + + /** + * Utility method to normalize attribute values. The base implementation + * simply merges the hash to protect the original. + * + * @method _normAttrVals + * @param {Object} valueHash An object with attribute name/value pairs + * + * @return {Object} An object literal with 2 properties - "simple" and "complex", + * containing simple and complex attribute values respectively keyed + * by the top level attribute name, or null, if valueHash is falsey. + * + * @private + */ + _normAttrVals : function(valueHash) { + var vals = {}, + subvals = {}, + path, + attr, + v, k; + + if (valueHash) { + for (k in valueHash) { + if (valueHash.hasOwnProperty(k)) { + if (k.indexOf(DOT) !== -1) { + path = k.split(DOT); + attr = path.shift(); + v = subvals[attr] = subvals[attr] || []; + v[v.length] = { + path : path, + value: valueHash[k] + }; + } else { + vals[k] = valueHash[k]; + } + } + } + return { simple:vals, complex:subvals }; + } else { + return null; + } + }, + + /** + * Returns the initial value of the given attribute from + * either the default configuration provided, or the + * over-ridden value if it exists in the set of initValues + * provided and the attribute is not read-only. + * + * @param {String} attr The name of the attribute + * @param {Object} cfg The attribute configuration object + * @param {Object} initValues The object with simple and complex attribute name/value pairs returned from _normAttrVals + * + * @return {Any} The initial value of the attribute. + * + * @method _getAttrInitVal + * @private + */ + _getAttrInitVal : function(attr, cfg, initValues) { + var val = cfg.value, + valFn = cfg.valueFn, + tmpVal, + initValSet = false, + simple, + complex, + i, + l, + path, + subval, + subvals; + + if (!cfg.readOnly && initValues) { + // Simple Attributes + simple = initValues.simple; + if (simple && simple.hasOwnProperty(attr)) { + val = simple[attr]; + initValSet = true; + } + } + + if (valFn && !initValSet) { + if (!valFn.call) { + valFn = this[valFn]; + } + if (valFn) { + tmpVal = valFn.call(this, attr); + val = tmpVal; + } + } + + if (!cfg.readOnly && initValues) { + + // Complex Attributes (complex values applied, after simple, in case both are set) + complex = initValues.complex; + + if (complex && complex.hasOwnProperty(attr) && (val !== undefined) && (val !== null)) { + subvals = complex[attr]; + for (i = 0, l = subvals.length; i < l; ++i) { + path = subvals[i].path; + subval = subvals[i].value; + O.setValue(val, path, subval); + } + } + } + + return val; + }, + + /** + * Utility method to set up initial attributes defined during construction, + * either through the constructor.ATTRS property, or explicitly passed in. + * + * @method _initAttrs + * @protected + * @param attrs {Object} The attributes to add during construction (passed through to addAttrs). + * These can also be defined on the constructor being augmented with Attribute by defining the ATTRS property on the constructor. + * @param values {Object} The initial attribute values to apply (passed through to addAttrs). + * These are not merged/cloned. The caller is responsible for isolating user provided values if required. + * @param lazy {boolean} Whether or not to add attributes lazily (passed through to addAttrs). + */ + _initAttrs : function(attrs, values, lazy) { + // ATTRS support for Node, which is not Base based + attrs = attrs || this.constructor.ATTRS; + + var Base = Y.Base, + BaseCore = Y.BaseCore, + baseInst = (Base && Y.instanceOf(this, Base)), + baseCoreInst = (!baseInst && BaseCore && Y.instanceOf(this, BaseCore)); + + if (attrs && !baseInst && !baseCoreInst) { + this.addAttrs(Y.AttributeCore.protectAttrs(attrs), values, lazy); + } + } + }; + + Y.AttributeCore = AttributeCore; + + +}, '3.9.0', {"requires": ["oop"]}); diff --git a/src/errors/static/js/yui/build/attribute-extras/attribute-extras-coverage.js b/src/errors/static/js/yui/build/attribute-extras/attribute-extras-coverage.js new file mode 100644 index 00000000..f1f120ed --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-extras/attribute-extras-coverage.js @@ -0,0 +1,217 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/attribute-extras/attribute-extras.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/attribute-extras/attribute-extras.js", + code: [] +}; +_yuitest_coverage["build/attribute-extras/attribute-extras.js"].code=["YUI.add('attribute-extras', function (Y, NAME) {",""," /**"," * The attribute module provides an augmentable Attribute implementation, which"," * adds configurable attributes and attribute change events to the class being"," * augmented. It also provides a State class, which is used internally by Attribute,"," * but can also be used independently to provide a name/property/value data structure to"," * store state."," *"," * @module attribute"," */",""," /**"," * The attribute-extras submodule provides less commonly used attribute methods, and can"," * be augmented/mixed into an implemention which used attribute-core."," *"," * @module attribute"," * @submodule attribute-extras"," */"," var BROADCAST = \"broadcast\","," PUBLISHED = \"published\","," INIT_VALUE = \"initValue\",",""," MODIFIABLE = {"," readOnly:1,"," writeOnce:1,"," getter:1,"," broadcast:1"," };",""," /**"," * A augmentable implementation for AttributeCore, providing less frequently used"," * methods for Attribute management such as modifyAttrs(), removeAttr and reset()"," *"," * @class AttributeExtras"," * @extensionfor AttributeCore"," */"," function AttributeExtras() {}",""," AttributeExtras.prototype = {",""," /**"," * Updates the configuration of an attribute which has already been added."," *

"," * The properties which can be modified through this interface are limited"," * to the following subset of attributes, which can be safely modified"," * after a value has already been set on the attribute: readOnly, writeOnce,"," * broadcast and getter."," *

"," * @method modifyAttr"," * @param {String} name The name of the attribute whose configuration is to be updated."," * @param {Object} config An object with configuration property/value pairs, specifying the configuration properties to modify."," */"," modifyAttr: function(name, config) {"," var host = this, // help compression"," prop, state;",""," if (host.attrAdded(name)) {",""," if (host._isLazyAttr(name)) {"," host._addLazyAttr(name);"," }",""," state = host._state;"," for (prop in config) {"," if (MODIFIABLE[prop] && config.hasOwnProperty(prop)) {"," state.add(name, prop, config[prop]);",""," // If we reconfigured broadcast, need to republish"," if (prop === BROADCAST) {"," state.remove(name, PUBLISHED);"," }"," }"," }"," }"," /*jshint maxlen:200*/"," /*jshint maxlen:150 */"," },",""," /**"," * Removes an attribute from the host object"," *"," * @method removeAttr"," * @param {String} name The name of the attribute to be removed."," */"," removeAttr: function(name) {"," this._state.removeAll(name);"," },",""," /**"," * Resets the attribute (or all attributes) to its initial value, as long as"," * the attribute is not readOnly, or writeOnce."," *"," * @method reset"," * @param {String} name Optional. The name of the attribute to reset. If omitted, all attributes are reset."," * @return {Object} A reference to the host object."," * @chainable"," */"," reset : function(name) {"," var host = this; // help compression",""," if (name) {"," if (host._isLazyAttr(name)) {"," host._addLazyAttr(name);"," }"," host.set(name, host._state.get(name, INIT_VALUE));"," } else {"," Y.each(host._state.data, function(v, n) {"," host.reset(n);"," });"," }"," return host;"," },",""," /**"," * Returns an object with the configuration properties (and value)"," * for the given attribute. If attrName is not provided, returns the"," * configuration properties for all attributes."," *"," * @method _getAttrCfg"," * @protected"," * @param {String} name Optional. The attribute name. If not provided, the method will return the configuration for all attributes."," * @return {Object} The configuration properties for the given attribute, or all attributes."," */"," _getAttrCfg : function(name) {"," var o,"," state = this._state;",""," if (name) {"," o = state.getAll(name) || {};"," } else {"," o = {};"," Y.each(state.data, function(v, n) {"," o[n] = state.getAll(n);"," });"," }",""," return o;"," }"," };",""," Y.AttributeExtras = AttributeExtras;","","","}, '3.9.0', {\"requires\": [\"oop\"]});"]; +_yuitest_coverage["build/attribute-extras/attribute-extras.js"].lines = {"1":0,"20":0,"38":0,"40":0,"55":0,"58":0,"60":0,"61":0,"64":0,"65":0,"66":0,"67":0,"70":0,"71":0,"87":0,"100":0,"102":0,"103":0,"104":0,"106":0,"108":0,"109":0,"112":0,"126":0,"129":0,"130":0,"132":0,"133":0,"134":0,"138":0,"142":0}; +_yuitest_coverage["build/attribute-extras/attribute-extras.js"].functions = {"AttributeExtras:38":0,"modifyAttr:54":0,"removeAttr:86":0,"(anonymous 2):108":0,"reset:99":0,"(anonymous 3):133":0,"_getAttrCfg:125":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/attribute-extras/attribute-extras.js"].coveredLines = 31; +_yuitest_coverage["build/attribute-extras/attribute-extras.js"].coveredFunctions = 8; +_yuitest_coverline("build/attribute-extras/attribute-extras.js", 1); +YUI.add('attribute-extras', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The attribute-extras submodule provides less commonly used attribute methods, and can + * be augmented/mixed into an implemention which used attribute-core. + * + * @module attribute + * @submodule attribute-extras + */ + _yuitest_coverfunc("build/attribute-extras/attribute-extras.js", "(anonymous 1)", 1); +_yuitest_coverline("build/attribute-extras/attribute-extras.js", 20); +var BROADCAST = "broadcast", + PUBLISHED = "published", + INIT_VALUE = "initValue", + + MODIFIABLE = { + readOnly:1, + writeOnce:1, + getter:1, + broadcast:1 + }; + + /** + * A augmentable implementation for AttributeCore, providing less frequently used + * methods for Attribute management such as modifyAttrs(), removeAttr and reset() + * + * @class AttributeExtras + * @extensionfor AttributeCore + */ + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 38); +function AttributeExtras() {} + + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 40); +AttributeExtras.prototype = { + + /** + * Updates the configuration of an attribute which has already been added. + *

+ * The properties which can be modified through this interface are limited + * to the following subset of attributes, which can be safely modified + * after a value has already been set on the attribute: readOnly, writeOnce, + * broadcast and getter. + *

+ * @method modifyAttr + * @param {String} name The name of the attribute whose configuration is to be updated. + * @param {Object} config An object with configuration property/value pairs, specifying the configuration properties to modify. + */ + modifyAttr: function(name, config) { + _yuitest_coverfunc("build/attribute-extras/attribute-extras.js", "modifyAttr", 54); +_yuitest_coverline("build/attribute-extras/attribute-extras.js", 55); +var host = this, // help compression + prop, state; + + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 58); +if (host.attrAdded(name)) { + + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 60); +if (host._isLazyAttr(name)) { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 61); +host._addLazyAttr(name); + } + + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 64); +state = host._state; + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 65); +for (prop in config) { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 66); +if (MODIFIABLE[prop] && config.hasOwnProperty(prop)) { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 67); +state.add(name, prop, config[prop]); + + // If we reconfigured broadcast, need to republish + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 70); +if (prop === BROADCAST) { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 71); +state.remove(name, PUBLISHED); + } + } + } + } + /*jshint maxlen:200*/ + /*jshint maxlen:150 */ + }, + + /** + * Removes an attribute from the host object + * + * @method removeAttr + * @param {String} name The name of the attribute to be removed. + */ + removeAttr: function(name) { + _yuitest_coverfunc("build/attribute-extras/attribute-extras.js", "removeAttr", 86); +_yuitest_coverline("build/attribute-extras/attribute-extras.js", 87); +this._state.removeAll(name); + }, + + /** + * Resets the attribute (or all attributes) to its initial value, as long as + * the attribute is not readOnly, or writeOnce. + * + * @method reset + * @param {String} name Optional. The name of the attribute to reset. If omitted, all attributes are reset. + * @return {Object} A reference to the host object. + * @chainable + */ + reset : function(name) { + _yuitest_coverfunc("build/attribute-extras/attribute-extras.js", "reset", 99); +_yuitest_coverline("build/attribute-extras/attribute-extras.js", 100); +var host = this; // help compression + + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 102); +if (name) { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 103); +if (host._isLazyAttr(name)) { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 104); +host._addLazyAttr(name); + } + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 106); +host.set(name, host._state.get(name, INIT_VALUE)); + } else { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 108); +Y.each(host._state.data, function(v, n) { + _yuitest_coverfunc("build/attribute-extras/attribute-extras.js", "(anonymous 2)", 108); +_yuitest_coverline("build/attribute-extras/attribute-extras.js", 109); +host.reset(n); + }); + } + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 112); +return host; + }, + + /** + * Returns an object with the configuration properties (and value) + * for the given attribute. If attrName is not provided, returns the + * configuration properties for all attributes. + * + * @method _getAttrCfg + * @protected + * @param {String} name Optional. The attribute name. If not provided, the method will return the configuration for all attributes. + * @return {Object} The configuration properties for the given attribute, or all attributes. + */ + _getAttrCfg : function(name) { + _yuitest_coverfunc("build/attribute-extras/attribute-extras.js", "_getAttrCfg", 125); +_yuitest_coverline("build/attribute-extras/attribute-extras.js", 126); +var o, + state = this._state; + + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 129); +if (name) { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 130); +o = state.getAll(name) || {}; + } else { + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 132); +o = {}; + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 133); +Y.each(state.data, function(v, n) { + _yuitest_coverfunc("build/attribute-extras/attribute-extras.js", "(anonymous 3)", 133); +_yuitest_coverline("build/attribute-extras/attribute-extras.js", 134); +o[n] = state.getAll(n); + }); + } + + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 138); +return o; + } + }; + + _yuitest_coverline("build/attribute-extras/attribute-extras.js", 142); +Y.AttributeExtras = AttributeExtras; + + +}, '3.9.0', {"requires": ["oop"]}); diff --git a/src/errors/static/js/yui/build/attribute-extras/attribute-extras-debug.js b/src/errors/static/js/yui/build/attribute-extras/attribute-extras-debug.js new file mode 100644 index 00000000..0724ce6b --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-extras/attribute-extras-debug.js @@ -0,0 +1,147 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-extras', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The attribute-extras submodule provides less commonly used attribute methods, and can + * be augmented/mixed into an implemention which used attribute-core. + * + * @module attribute + * @submodule attribute-extras + */ + var BROADCAST = "broadcast", + PUBLISHED = "published", + INIT_VALUE = "initValue", + + MODIFIABLE = { + readOnly:1, + writeOnce:1, + getter:1, + broadcast:1 + }; + + /** + * A augmentable implementation for AttributeCore, providing less frequently used + * methods for Attribute management such as modifyAttrs(), removeAttr and reset() + * + * @class AttributeExtras + * @extensionfor AttributeCore + */ + function AttributeExtras() {} + + AttributeExtras.prototype = { + + /** + * Updates the configuration of an attribute which has already been added. + *

+ * The properties which can be modified through this interface are limited + * to the following subset of attributes, which can be safely modified + * after a value has already been set on the attribute: readOnly, writeOnce, + * broadcast and getter. + *

+ * @method modifyAttr + * @param {String} name The name of the attribute whose configuration is to be updated. + * @param {Object} config An object with configuration property/value pairs, specifying the configuration properties to modify. + */ + modifyAttr: function(name, config) { + var host = this, // help compression + prop, state; + + if (host.attrAdded(name)) { + + if (host._isLazyAttr(name)) { + host._addLazyAttr(name); + } + + state = host._state; + for (prop in config) { + if (MODIFIABLE[prop] && config.hasOwnProperty(prop)) { + state.add(name, prop, config[prop]); + + // If we reconfigured broadcast, need to republish + if (prop === BROADCAST) { + state.remove(name, PUBLISHED); + } + } + } + } + /*jshint maxlen:200*/ + if (!host.attrAdded(name)) {Y.log('Attribute modifyAttr:' + name + ' has not been added. Use addAttr to add the attribute', 'warn', 'attribute');} + /*jshint maxlen:150 */ + }, + + /** + * Removes an attribute from the host object + * + * @method removeAttr + * @param {String} name The name of the attribute to be removed. + */ + removeAttr: function(name) { + this._state.removeAll(name); + }, + + /** + * Resets the attribute (or all attributes) to its initial value, as long as + * the attribute is not readOnly, or writeOnce. + * + * @method reset + * @param {String} name Optional. The name of the attribute to reset. If omitted, all attributes are reset. + * @return {Object} A reference to the host object. + * @chainable + */ + reset : function(name) { + var host = this; // help compression + + if (name) { + if (host._isLazyAttr(name)) { + host._addLazyAttr(name); + } + host.set(name, host._state.get(name, INIT_VALUE)); + } else { + Y.each(host._state.data, function(v, n) { + host.reset(n); + }); + } + return host; + }, + + /** + * Returns an object with the configuration properties (and value) + * for the given attribute. If attrName is not provided, returns the + * configuration properties for all attributes. + * + * @method _getAttrCfg + * @protected + * @param {String} name Optional. The attribute name. If not provided, the method will return the configuration for all attributes. + * @return {Object} The configuration properties for the given attribute, or all attributes. + */ + _getAttrCfg : function(name) { + var o, + state = this._state; + + if (name) { + o = state.getAll(name) || {}; + } else { + o = {}; + Y.each(state.data, function(v, n) { + o[n] = state.getAll(n); + }); + } + + return o; + } + }; + + Y.AttributeExtras = AttributeExtras; + + +}, '3.9.0', {"requires": ["oop"]}); diff --git a/src/errors/static/js/yui/build/attribute-extras/attribute-extras-min.js b/src/errors/static/js/yui/build/attribute-extras/attribute-extras-min.js new file mode 100644 index 00000000..105f3a80 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-extras/attribute-extras-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("attribute-extras",function(e,t){function o(){}var n="broadcast",r="published",i="initValue",s={readOnly:1,writeOnce:1,getter:1,broadcast:1};o.prototype={modifyAttr:function(e,t){var i=this,o,u;if(i.attrAdded(e)){i._isLazyAttr(e)&&i._addLazyAttr(e),u=i._state;for(o in t)s[o]&&t.hasOwnProperty(o)&&(u.add(e,o,t[o]),o===n&&u.remove(e,r))}},removeAttr:function(e){this._state.removeAll(e)},reset:function(t){var n=this;return t?(n._isLazyAttr(t)&&n._addLazyAttr(t),n.set(t,n._state.get(t,i))):e.each(n._state.data,function(e,t){n.reset(t)}),n},_getAttrCfg:function(t){var n,r=this._state;return t?n=r.getAll(t)||{}:(n={},e.each(r.data,function(e,t){n[t]=r.getAll(t)})),n}},e.AttributeExtras=o},"3.9.0",{requires:["oop"]}); diff --git a/src/errors/static/js/yui/build/attribute-extras/attribute-extras.js b/src/errors/static/js/yui/build/attribute-extras/attribute-extras.js new file mode 100644 index 00000000..71888c63 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-extras/attribute-extras.js @@ -0,0 +1,146 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-extras', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The attribute-extras submodule provides less commonly used attribute methods, and can + * be augmented/mixed into an implemention which used attribute-core. + * + * @module attribute + * @submodule attribute-extras + */ + var BROADCAST = "broadcast", + PUBLISHED = "published", + INIT_VALUE = "initValue", + + MODIFIABLE = { + readOnly:1, + writeOnce:1, + getter:1, + broadcast:1 + }; + + /** + * A augmentable implementation for AttributeCore, providing less frequently used + * methods for Attribute management such as modifyAttrs(), removeAttr and reset() + * + * @class AttributeExtras + * @extensionfor AttributeCore + */ + function AttributeExtras() {} + + AttributeExtras.prototype = { + + /** + * Updates the configuration of an attribute which has already been added. + *

+ * The properties which can be modified through this interface are limited + * to the following subset of attributes, which can be safely modified + * after a value has already been set on the attribute: readOnly, writeOnce, + * broadcast and getter. + *

+ * @method modifyAttr + * @param {String} name The name of the attribute whose configuration is to be updated. + * @param {Object} config An object with configuration property/value pairs, specifying the configuration properties to modify. + */ + modifyAttr: function(name, config) { + var host = this, // help compression + prop, state; + + if (host.attrAdded(name)) { + + if (host._isLazyAttr(name)) { + host._addLazyAttr(name); + } + + state = host._state; + for (prop in config) { + if (MODIFIABLE[prop] && config.hasOwnProperty(prop)) { + state.add(name, prop, config[prop]); + + // If we reconfigured broadcast, need to republish + if (prop === BROADCAST) { + state.remove(name, PUBLISHED); + } + } + } + } + /*jshint maxlen:200*/ + /*jshint maxlen:150 */ + }, + + /** + * Removes an attribute from the host object + * + * @method removeAttr + * @param {String} name The name of the attribute to be removed. + */ + removeAttr: function(name) { + this._state.removeAll(name); + }, + + /** + * Resets the attribute (or all attributes) to its initial value, as long as + * the attribute is not readOnly, or writeOnce. + * + * @method reset + * @param {String} name Optional. The name of the attribute to reset. If omitted, all attributes are reset. + * @return {Object} A reference to the host object. + * @chainable + */ + reset : function(name) { + var host = this; // help compression + + if (name) { + if (host._isLazyAttr(name)) { + host._addLazyAttr(name); + } + host.set(name, host._state.get(name, INIT_VALUE)); + } else { + Y.each(host._state.data, function(v, n) { + host.reset(n); + }); + } + return host; + }, + + /** + * Returns an object with the configuration properties (and value) + * for the given attribute. If attrName is not provided, returns the + * configuration properties for all attributes. + * + * @method _getAttrCfg + * @protected + * @param {String} name Optional. The attribute name. If not provided, the method will return the configuration for all attributes. + * @return {Object} The configuration properties for the given attribute, or all attributes. + */ + _getAttrCfg : function(name) { + var o, + state = this._state; + + if (name) { + o = state.getAll(name) || {}; + } else { + o = {}; + Y.each(state.data, function(v, n) { + o[n] = state.getAll(n); + }); + } + + return o; + } + }; + + Y.AttributeExtras = AttributeExtras; + + +}, '3.9.0', {"requires": ["oop"]}); diff --git a/src/errors/static/js/yui/build/attribute-observable/attribute-observable-coverage.js b/src/errors/static/js/yui/build/attribute-observable/attribute-observable-coverage.js new file mode 100644 index 00000000..9301bea0 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-observable/attribute-observable-coverage.js @@ -0,0 +1,287 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/attribute-observable/attribute-observable.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/attribute-observable/attribute-observable.js", + code: [] +}; +_yuitest_coverage["build/attribute-observable/attribute-observable.js"].code=["YUI.add('attribute-observable', function (Y, NAME) {",""," /**"," * The attribute module provides an augmentable Attribute implementation, which"," * adds configurable attributes and attribute change events to the class being"," * augmented. It also provides a State class, which is used internally by Attribute,"," * but can also be used independently to provide a name/property/value data structure to"," * store state."," *"," * @module attribute"," */",""," /**"," * The `attribute-observable` submodule provides augmentable attribute change event support"," * for AttributeCore based implementations."," *"," * @module attribute"," * @submodule attribute-observable"," */"," var EventTarget = Y.EventTarget,",""," CHANGE = \"Change\","," BROADCAST = \"broadcast\","," PUBLISHED = \"published\";",""," /**"," * Provides an augmentable implementation of attribute change events for"," * AttributeCore."," *"," * @class AttributeObservable"," * @extensionfor AttributeCore"," * @uses EventTarget"," */"," function AttributeObservable() {"," // Perf tweak - avoid creating event literals if not required."," this._ATTR_E_FACADE = {};",""," EventTarget.call(this, {emitFacade:true});"," }",""," AttributeObservable._ATTR_CFG = [BROADCAST];",""," AttributeObservable.prototype = {",""," /**"," * Sets the value of an attribute."," *"," * @method set"," * @chainable"," *"," * @param {String} name The name of the attribute. If the"," * current value of the attribute is an Object, dot notation can be used"," * to set the value of a property within the object (e.g. set(\"x.y.z\", 5))."," *"," * @param {Any} value The value to set the attribute to."," *"," * @param {Object} opts (Optional) Optional event data to be mixed into"," * the event facade passed to subscribers of the attribute's change event. This"," * can be used as a flexible way to identify the source of a call to set, allowing"," * the developer to distinguish between set called internally by the host, vs."," * set called externally by the application developer."," *"," * @return {Object} A reference to the host object."," */"," set : function(name, val, opts) {"," return this._setAttr(name, val, opts);"," },",""," /**"," * Allows setting of readOnly/writeOnce attributes. See set for argument details."," *"," * @method _set"," * @protected"," * @chainable"," *"," * @param {String} name The name of the attribute."," * @param {Any} val The value to set the attribute to."," * @param {Object} opts (Optional) Optional event data to be mixed into"," * the event facade passed to subscribers of the attribute's change event."," * @return {Object} A reference to the host object."," */"," _set : function(name, val, opts) {"," return this._setAttr(name, val, opts, true);"," },",""," /**"," * Sets multiple attribute values."," *"," * @method setAttrs"," * @param {Object} attrs An object with attributes name/value pairs."," * @param {Object} opts Properties to mix into the event payload. These are shared and mixed into each set"," * @return {Object} A reference to the host object."," * @chainable"," */"," setAttrs : function(attrs, opts) {"," return this._setAttrs(attrs, opts);"," },",""," /**"," * Implementation behind the public setAttrs method, to set multiple attribute values."," *"," * @method _setAttrs"," * @protected"," * @param {Object} attrs An object with attributes name/value pairs."," * @param {Object} opts Properties to mix into the event payload. These are shared and mixed into each set"," * @return {Object} A reference to the host object."," * @chainable"," */"," _setAttrs : function(attrs, opts) {"," var attr;"," for (attr in attrs) {"," if ( attrs.hasOwnProperty(attr) ) {"," this.set(attr, attrs[attr], opts);"," }"," }"," return this;"," },",""," /**"," * Utility method to help setup the event payload and fire the attribute change event."," *"," * @method _fireAttrChange"," * @private"," * @param {String} attrName The name of the attribute"," * @param {String} subAttrName The full path of the property being changed,"," * if this is a sub-attribute value being change. Otherwise null."," * @param {Any} currVal The current value of the attribute"," * @param {Any} newVal The new value of the attribute"," * @param {Object} opts Any additional event data to mix into the attribute change event's event facade."," */"," _fireAttrChange : function(attrName, subAttrName, currVal, newVal, opts) {"," var host = this,"," eventName = attrName + CHANGE,"," state = host._state,"," facade,"," broadcast,"," evtCfg;",""," if (!state.get(attrName, PUBLISHED)) {",""," evtCfg = {"," queuable:false,"," defaultTargetOnly: true,"," defaultFn:host._defAttrChangeFn,"," silent:true"," };",""," broadcast = state.get(attrName, BROADCAST);"," if (broadcast !== undefined) {"," evtCfg.broadcast = broadcast;"," }",""," host.publish(eventName, evtCfg);",""," state.add(attrName, PUBLISHED, true);"," }",""," facade = (opts) ? Y.merge(opts) : host._ATTR_E_FACADE;",""," // Not using the single object signature for fire({type:..., newVal:...}), since"," // we don't want to override type. Changed to the fire(type, {newVal:...}) signature.",""," // facade.type = eventName;"," facade.attrName = attrName;"," facade.subAttrName = subAttrName;"," facade.prevVal = currVal;"," facade.newVal = newVal;",""," // host.fire(facade);"," host.fire(eventName, facade);"," },",""," /**"," * Default function for attribute change events."," *"," * @private"," * @method _defAttrChangeFn"," * @param {EventFacade} e The event object for attribute change events."," */"," _defAttrChangeFn : function(e) {"," if (!this._setAttrVal(e.attrName, e.subAttrName, e.prevVal, e.newVal, e.opts)) {"," /*jshint maxlen:200*/"," /*jshint maxlen:150*/"," // Prevent \"after\" listeners from being invoked since nothing changed."," e.stopImmediatePropagation();"," } else {"," e.newVal = this.get(e.attrName);"," }"," }"," };",""," // Basic prototype augment - no lazy constructor invocation."," Y.mix(AttributeObservable, EventTarget, false, null, 1);",""," Y.AttributeObservable = AttributeObservable;",""," /**"," The `AttributeEvents` class extension was deprecated in YUI 3.8.0 and is now"," an alias for the `AttributeObservable` class extension. Use that class"," extnesion instead. This alias will be removed in a future version of YUI.",""," @class AttributeEvents"," @uses EventTarget"," @deprecated Use `AttributeObservable` instead."," @see AttributeObservable"," **/"," Y.AttributeEvents = AttributeObservable;","","","}, '3.9.0', {\"requires\": [\"event-custom\"]});"]; +_yuitest_coverage["build/attribute-observable/attribute-observable.js"].lines = {"1":0,"20":0,"34":0,"36":0,"38":0,"41":0,"43":0,"66":0,"83":0,"96":0,"110":0,"111":0,"112":0,"113":0,"116":0,"132":0,"139":0,"141":0,"148":0,"149":0,"150":0,"153":0,"155":0,"158":0,"164":0,"165":0,"166":0,"167":0,"170":0,"181":0,"185":0,"187":0,"193":0,"195":0,"207":0}; +_yuitest_coverage["build/attribute-observable/attribute-observable.js"].functions = {"AttributeObservable:34":0,"set:65":0,"_set:82":0,"setAttrs:95":0,"_setAttrs:109":0,"_fireAttrChange:131":0,"_defAttrChangeFn:180":0,"(anonymous 1):1":0}; +_yuitest_coverage["build/attribute-observable/attribute-observable.js"].coveredLines = 35; +_yuitest_coverage["build/attribute-observable/attribute-observable.js"].coveredFunctions = 8; +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 1); +YUI.add('attribute-observable', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The `attribute-observable` submodule provides augmentable attribute change event support + * for AttributeCore based implementations. + * + * @module attribute + * @submodule attribute-observable + */ + _yuitest_coverfunc("build/attribute-observable/attribute-observable.js", "(anonymous 1)", 1); +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 20); +var EventTarget = Y.EventTarget, + + CHANGE = "Change", + BROADCAST = "broadcast", + PUBLISHED = "published"; + + /** + * Provides an augmentable implementation of attribute change events for + * AttributeCore. + * + * @class AttributeObservable + * @extensionfor AttributeCore + * @uses EventTarget + */ + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 34); +function AttributeObservable() { + // Perf tweak - avoid creating event literals if not required. + _yuitest_coverfunc("build/attribute-observable/attribute-observable.js", "AttributeObservable", 34); +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 36); +this._ATTR_E_FACADE = {}; + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 38); +EventTarget.call(this, {emitFacade:true}); + } + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 41); +AttributeObservable._ATTR_CFG = [BROADCAST]; + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 43); +AttributeObservable.prototype = { + + /** + * Sets the value of an attribute. + * + * @method set + * @chainable + * + * @param {String} name The name of the attribute. If the + * current value of the attribute is an Object, dot notation can be used + * to set the value of a property within the object (e.g. set("x.y.z", 5)). + * + * @param {Any} value The value to set the attribute to. + * + * @param {Object} opts (Optional) Optional event data to be mixed into + * the event facade passed to subscribers of the attribute's change event. This + * can be used as a flexible way to identify the source of a call to set, allowing + * the developer to distinguish between set called internally by the host, vs. + * set called externally by the application developer. + * + * @return {Object} A reference to the host object. + */ + set : function(name, val, opts) { + _yuitest_coverfunc("build/attribute-observable/attribute-observable.js", "set", 65); +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 66); +return this._setAttr(name, val, opts); + }, + + /** + * Allows setting of readOnly/writeOnce attributes. See set for argument details. + * + * @method _set + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} val The value to set the attribute to. + * @param {Object} opts (Optional) Optional event data to be mixed into + * the event facade passed to subscribers of the attribute's change event. + * @return {Object} A reference to the host object. + */ + _set : function(name, val, opts) { + _yuitest_coverfunc("build/attribute-observable/attribute-observable.js", "_set", 82); +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 83); +return this._setAttr(name, val, opts, true); + }, + + /** + * Sets multiple attribute values. + * + * @method setAttrs + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} opts Properties to mix into the event payload. These are shared and mixed into each set + * @return {Object} A reference to the host object. + * @chainable + */ + setAttrs : function(attrs, opts) { + _yuitest_coverfunc("build/attribute-observable/attribute-observable.js", "setAttrs", 95); +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 96); +return this._setAttrs(attrs, opts); + }, + + /** + * Implementation behind the public setAttrs method, to set multiple attribute values. + * + * @method _setAttrs + * @protected + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} opts Properties to mix into the event payload. These are shared and mixed into each set + * @return {Object} A reference to the host object. + * @chainable + */ + _setAttrs : function(attrs, opts) { + _yuitest_coverfunc("build/attribute-observable/attribute-observable.js", "_setAttrs", 109); +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 110); +var attr; + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 111); +for (attr in attrs) { + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 112); +if ( attrs.hasOwnProperty(attr) ) { + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 113); +this.set(attr, attrs[attr], opts); + } + } + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 116); +return this; + }, + + /** + * Utility method to help setup the event payload and fire the attribute change event. + * + * @method _fireAttrChange + * @private + * @param {String} attrName The name of the attribute + * @param {String} subAttrName The full path of the property being changed, + * if this is a sub-attribute value being change. Otherwise null. + * @param {Any} currVal The current value of the attribute + * @param {Any} newVal The new value of the attribute + * @param {Object} opts Any additional event data to mix into the attribute change event's event facade. + */ + _fireAttrChange : function(attrName, subAttrName, currVal, newVal, opts) { + _yuitest_coverfunc("build/attribute-observable/attribute-observable.js", "_fireAttrChange", 131); +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 132); +var host = this, + eventName = attrName + CHANGE, + state = host._state, + facade, + broadcast, + evtCfg; + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 139); +if (!state.get(attrName, PUBLISHED)) { + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 141); +evtCfg = { + queuable:false, + defaultTargetOnly: true, + defaultFn:host._defAttrChangeFn, + silent:true + }; + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 148); +broadcast = state.get(attrName, BROADCAST); + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 149); +if (broadcast !== undefined) { + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 150); +evtCfg.broadcast = broadcast; + } + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 153); +host.publish(eventName, evtCfg); + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 155); +state.add(attrName, PUBLISHED, true); + } + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 158); +facade = (opts) ? Y.merge(opts) : host._ATTR_E_FACADE; + + // Not using the single object signature for fire({type:..., newVal:...}), since + // we don't want to override type. Changed to the fire(type, {newVal:...}) signature. + + // facade.type = eventName; + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 164); +facade.attrName = attrName; + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 165); +facade.subAttrName = subAttrName; + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 166); +facade.prevVal = currVal; + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 167); +facade.newVal = newVal; + + // host.fire(facade); + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 170); +host.fire(eventName, facade); + }, + + /** + * Default function for attribute change events. + * + * @private + * @method _defAttrChangeFn + * @param {EventFacade} e The event object for attribute change events. + */ + _defAttrChangeFn : function(e) { + _yuitest_coverfunc("build/attribute-observable/attribute-observable.js", "_defAttrChangeFn", 180); +_yuitest_coverline("build/attribute-observable/attribute-observable.js", 181); +if (!this._setAttrVal(e.attrName, e.subAttrName, e.prevVal, e.newVal, e.opts)) { + /*jshint maxlen:200*/ + /*jshint maxlen:150*/ + // Prevent "after" listeners from being invoked since nothing changed. + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 185); +e.stopImmediatePropagation(); + } else { + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 187); +e.newVal = this.get(e.attrName); + } + } + }; + + // Basic prototype augment - no lazy constructor invocation. + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 193); +Y.mix(AttributeObservable, EventTarget, false, null, 1); + + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 195); +Y.AttributeObservable = AttributeObservable; + + /** + The `AttributeEvents` class extension was deprecated in YUI 3.8.0 and is now + an alias for the `AttributeObservable` class extension. Use that class + extnesion instead. This alias will be removed in a future version of YUI. + + @class AttributeEvents + @uses EventTarget + @deprecated Use `AttributeObservable` instead. + @see AttributeObservable + **/ + _yuitest_coverline("build/attribute-observable/attribute-observable.js", 207); +Y.AttributeEvents = AttributeObservable; + + +}, '3.9.0', {"requires": ["event-custom"]}); diff --git a/src/errors/static/js/yui/build/attribute-observable/attribute-observable-debug.js b/src/errors/static/js/yui/build/attribute-observable/attribute-observable-debug.js new file mode 100644 index 00000000..3d4d9e77 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-observable/attribute-observable-debug.js @@ -0,0 +1,212 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-observable', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The `attribute-observable` submodule provides augmentable attribute change event support + * for AttributeCore based implementations. + * + * @module attribute + * @submodule attribute-observable + */ + var EventTarget = Y.EventTarget, + + CHANGE = "Change", + BROADCAST = "broadcast", + PUBLISHED = "published"; + + /** + * Provides an augmentable implementation of attribute change events for + * AttributeCore. + * + * @class AttributeObservable + * @extensionfor AttributeCore + * @uses EventTarget + */ + function AttributeObservable() { + // Perf tweak - avoid creating event literals if not required. + this._ATTR_E_FACADE = {}; + + EventTarget.call(this, {emitFacade:true}); + } + + AttributeObservable._ATTR_CFG = [BROADCAST]; + + AttributeObservable.prototype = { + + /** + * Sets the value of an attribute. + * + * @method set + * @chainable + * + * @param {String} name The name of the attribute. If the + * current value of the attribute is an Object, dot notation can be used + * to set the value of a property within the object (e.g. set("x.y.z", 5)). + * + * @param {Any} value The value to set the attribute to. + * + * @param {Object} opts (Optional) Optional event data to be mixed into + * the event facade passed to subscribers of the attribute's change event. This + * can be used as a flexible way to identify the source of a call to set, allowing + * the developer to distinguish between set called internally by the host, vs. + * set called externally by the application developer. + * + * @return {Object} A reference to the host object. + */ + set : function(name, val, opts) { + return this._setAttr(name, val, opts); + }, + + /** + * Allows setting of readOnly/writeOnce attributes. See set for argument details. + * + * @method _set + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} val The value to set the attribute to. + * @param {Object} opts (Optional) Optional event data to be mixed into + * the event facade passed to subscribers of the attribute's change event. + * @return {Object} A reference to the host object. + */ + _set : function(name, val, opts) { + return this._setAttr(name, val, opts, true); + }, + + /** + * Sets multiple attribute values. + * + * @method setAttrs + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} opts Properties to mix into the event payload. These are shared and mixed into each set + * @return {Object} A reference to the host object. + * @chainable + */ + setAttrs : function(attrs, opts) { + return this._setAttrs(attrs, opts); + }, + + /** + * Implementation behind the public setAttrs method, to set multiple attribute values. + * + * @method _setAttrs + * @protected + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} opts Properties to mix into the event payload. These are shared and mixed into each set + * @return {Object} A reference to the host object. + * @chainable + */ + _setAttrs : function(attrs, opts) { + var attr; + for (attr in attrs) { + if ( attrs.hasOwnProperty(attr) ) { + this.set(attr, attrs[attr], opts); + } + } + return this; + }, + + /** + * Utility method to help setup the event payload and fire the attribute change event. + * + * @method _fireAttrChange + * @private + * @param {String} attrName The name of the attribute + * @param {String} subAttrName The full path of the property being changed, + * if this is a sub-attribute value being change. Otherwise null. + * @param {Any} currVal The current value of the attribute + * @param {Any} newVal The new value of the attribute + * @param {Object} opts Any additional event data to mix into the attribute change event's event facade. + */ + _fireAttrChange : function(attrName, subAttrName, currVal, newVal, opts) { + var host = this, + eventName = attrName + CHANGE, + state = host._state, + facade, + broadcast, + evtCfg; + + if (!state.get(attrName, PUBLISHED)) { + + evtCfg = { + queuable:false, + defaultTargetOnly: true, + defaultFn:host._defAttrChangeFn, + silent:true + }; + + broadcast = state.get(attrName, BROADCAST); + if (broadcast !== undefined) { + evtCfg.broadcast = broadcast; + } + + host.publish(eventName, evtCfg); + + state.add(attrName, PUBLISHED, true); + } + + facade = (opts) ? Y.merge(opts) : host._ATTR_E_FACADE; + + // Not using the single object signature for fire({type:..., newVal:...}), since + // we don't want to override type. Changed to the fire(type, {newVal:...}) signature. + + // facade.type = eventName; + facade.attrName = attrName; + facade.subAttrName = subAttrName; + facade.prevVal = currVal; + facade.newVal = newVal; + + // host.fire(facade); + host.fire(eventName, facade); + }, + + /** + * Default function for attribute change events. + * + * @private + * @method _defAttrChangeFn + * @param {EventFacade} e The event object for attribute change events. + */ + _defAttrChangeFn : function(e) { + if (!this._setAttrVal(e.attrName, e.subAttrName, e.prevVal, e.newVal, e.opts)) { + /*jshint maxlen:200*/ + Y.log('State not updated and stopImmediatePropagation called for attribute: ' + e.attrName + ' , value:' + e.newVal, 'warn', 'attribute'); + /*jshint maxlen:150*/ + // Prevent "after" listeners from being invoked since nothing changed. + e.stopImmediatePropagation(); + } else { + e.newVal = this.get(e.attrName); + } + } + }; + + // Basic prototype augment - no lazy constructor invocation. + Y.mix(AttributeObservable, EventTarget, false, null, 1); + + Y.AttributeObservable = AttributeObservable; + + /** + The `AttributeEvents` class extension was deprecated in YUI 3.8.0 and is now + an alias for the `AttributeObservable` class extension. Use that class + extnesion instead. This alias will be removed in a future version of YUI. + + @class AttributeEvents + @uses EventTarget + @deprecated Use `AttributeObservable` instead. + @see AttributeObservable + **/ + Y.AttributeEvents = AttributeObservable; + + +}, '3.9.0', {"requires": ["event-custom"]}); diff --git a/src/errors/static/js/yui/build/attribute-observable/attribute-observable-min.js b/src/errors/static/js/yui/build/attribute-observable/attribute-observable-min.js new file mode 100644 index 00000000..b989d6dd --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-observable/attribute-observable-min.js @@ -0,0 +1,2 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add("attribute-observable",function(e,t){function o(){this._ATTR_E_FACADE={},n.call(this,{emitFacade:!0})}var n=e.EventTarget,r="Change",i="broadcast",s="published";o._ATTR_CFG=[i],o.prototype={set:function(e,t,n){return this._setAttr(e,t,n)},_set:function(e,t,n){return this._setAttr(e,t,n,!0)},setAttrs:function(e,t){return this._setAttrs(e,t)},_setAttrs:function(e,t){var n;for(n in e)e.hasOwnProperty(n)&&this.set(n,e[n],t);return this},_fireAttrChange:function(t,n,o,u,a){var f=this,l=t+r,c=f._state,h,p,d;c.get(t,s)||(d={queuable:!1,defaultTargetOnly:!0,defaultFn:f._defAttrChangeFn,silent:!0},p=c.get(t,i),p!==undefined&&(d.broadcast=p),f.publish(l,d),c.add(t,s,!0)),h=a?e.merge(a):f._ATTR_E_FACADE,h.attrName=t,h.subAttrName=n,h.prevVal=o,h.newVal=u,f.fire(l,h)},_defAttrChangeFn:function(e){this._setAttrVal(e.attrName,e.subAttrName,e.prevVal,e.newVal,e.opts)?e.newVal=this.get(e.attrName):e.stopImmediatePropagation()}},e.mix(o,n,!1,null,1),e.AttributeObservable=o,e.AttributeEvents=o},"3.9.0",{requires:["event-custom"]}); diff --git a/src/errors/static/js/yui/build/attribute-observable/attribute-observable.js b/src/errors/static/js/yui/build/attribute-observable/attribute-observable.js new file mode 100644 index 00000000..63e5d740 --- /dev/null +++ b/src/errors/static/js/yui/build/attribute-observable/attribute-observable.js @@ -0,0 +1,211 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +YUI.add('attribute-observable', function (Y, NAME) { + + /** + * The attribute module provides an augmentable Attribute implementation, which + * adds configurable attributes and attribute change events to the class being + * augmented. It also provides a State class, which is used internally by Attribute, + * but can also be used independently to provide a name/property/value data structure to + * store state. + * + * @module attribute + */ + + /** + * The `attribute-observable` submodule provides augmentable attribute change event support + * for AttributeCore based implementations. + * + * @module attribute + * @submodule attribute-observable + */ + var EventTarget = Y.EventTarget, + + CHANGE = "Change", + BROADCAST = "broadcast", + PUBLISHED = "published"; + + /** + * Provides an augmentable implementation of attribute change events for + * AttributeCore. + * + * @class AttributeObservable + * @extensionfor AttributeCore + * @uses EventTarget + */ + function AttributeObservable() { + // Perf tweak - avoid creating event literals if not required. + this._ATTR_E_FACADE = {}; + + EventTarget.call(this, {emitFacade:true}); + } + + AttributeObservable._ATTR_CFG = [BROADCAST]; + + AttributeObservable.prototype = { + + /** + * Sets the value of an attribute. + * + * @method set + * @chainable + * + * @param {String} name The name of the attribute. If the + * current value of the attribute is an Object, dot notation can be used + * to set the value of a property within the object (e.g. set("x.y.z", 5)). + * + * @param {Any} value The value to set the attribute to. + * + * @param {Object} opts (Optional) Optional event data to be mixed into + * the event facade passed to subscribers of the attribute's change event. This + * can be used as a flexible way to identify the source of a call to set, allowing + * the developer to distinguish between set called internally by the host, vs. + * set called externally by the application developer. + * + * @return {Object} A reference to the host object. + */ + set : function(name, val, opts) { + return this._setAttr(name, val, opts); + }, + + /** + * Allows setting of readOnly/writeOnce attributes. See set for argument details. + * + * @method _set + * @protected + * @chainable + * + * @param {String} name The name of the attribute. + * @param {Any} val The value to set the attribute to. + * @param {Object} opts (Optional) Optional event data to be mixed into + * the event facade passed to subscribers of the attribute's change event. + * @return {Object} A reference to the host object. + */ + _set : function(name, val, opts) { + return this._setAttr(name, val, opts, true); + }, + + /** + * Sets multiple attribute values. + * + * @method setAttrs + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} opts Properties to mix into the event payload. These are shared and mixed into each set + * @return {Object} A reference to the host object. + * @chainable + */ + setAttrs : function(attrs, opts) { + return this._setAttrs(attrs, opts); + }, + + /** + * Implementation behind the public setAttrs method, to set multiple attribute values. + * + * @method _setAttrs + * @protected + * @param {Object} attrs An object with attributes name/value pairs. + * @param {Object} opts Properties to mix into the event payload. These are shared and mixed into each set + * @return {Object} A reference to the host object. + * @chainable + */ + _setAttrs : function(attrs, opts) { + var attr; + for (attr in attrs) { + if ( attrs.hasOwnProperty(attr) ) { + this.set(attr, attrs[attr], opts); + } + } + return this; + }, + + /** + * Utility method to help setup the event payload and fire the attribute change event. + * + * @method _fireAttrChange + * @private + * @param {String} attrName The name of the attribute + * @param {String} subAttrName The full path of the property being changed, + * if this is a sub-attribute value being change. Otherwise null. + * @param {Any} currVal The current value of the attribute + * @param {Any} newVal The new value of the attribute + * @param {Object} opts Any additional event data to mix into the attribute change event's event facade. + */ + _fireAttrChange : function(attrName, subAttrName, currVal, newVal, opts) { + var host = this, + eventName = attrName + CHANGE, + state = host._state, + facade, + broadcast, + evtCfg; + + if (!state.get(attrName, PUBLISHED)) { + + evtCfg = { + queuable:false, + defaultTargetOnly: true, + defaultFn:host._defAttrChangeFn, + silent:true + }; + + broadcast = state.get(attrName, BROADCAST); + if (broadcast !== undefined) { + evtCfg.broadcast = broadcast; + } + + host.publish(eventName, evtCfg); + + state.add(attrName, PUBLISHED, true); + } + + facade = (opts) ? Y.merge(opts) : host._ATTR_E_FACADE; + + // Not using the single object signature for fire({type:..., newVal:...}), since + // we don't want to override type. Changed to the fire(type, {newVal:...}) signature. + + // facade.type = eventName; + facade.attrName = attrName; + facade.subAttrName = subAttrName; + facade.prevVal = currVal; + facade.newVal = newVal; + + // host.fire(facade); + host.fire(eventName, facade); + }, + + /** + * Default function for attribute change events. + * + * @private + * @method _defAttrChangeFn + * @param {EventFacade} e The event object for attribute change events. + */ + _defAttrChangeFn : function(e) { + if (!this._setAttrVal(e.attrName, e.subAttrName, e.prevVal, e.newVal, e.opts)) { + /*jshint maxlen:200*/ + /*jshint maxlen:150*/ + // Prevent "after" listeners from being invoked since nothing changed. + e.stopImmediatePropagation(); + } else { + e.newVal = this.get(e.attrName); + } + } + }; + + // Basic prototype augment - no lazy constructor invocation. + Y.mix(AttributeObservable, EventTarget, false, null, 1); + + Y.AttributeObservable = AttributeObservable; + + /** + The `AttributeEvents` class extension was deprecated in YUI 3.8.0 and is now + an alias for the `AttributeObservable` class extension. Use that class + extnesion instead. This alias will be removed in a future version of YUI. + + @class AttributeEvents + @uses EventTarget + @deprecated Use `AttributeObservable` instead. + @see AttributeObservable + **/ + Y.AttributeEvents = AttributeObservable; + + +}, '3.9.0', {"requires": ["event-custom"]}); diff --git a/src/errors/static/js/yui/build/autocomplete-base/autocomplete-base-coverage.js b/src/errors/static/js/yui/build/autocomplete-base/autocomplete-base-coverage.js new file mode 100644 index 00000000..e4118485 --- /dev/null +++ b/src/errors/static/js/yui/build/autocomplete-base/autocomplete-base-coverage.js @@ -0,0 +1,1824 @@ +/* YUI 3.9.0 (build 5827) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */ +if (typeof _yuitest_coverage == "undefined"){ + _yuitest_coverage = {}; + _yuitest_coverline = function(src, line){ + var coverage = _yuitest_coverage[src]; + if (!coverage.lines[line]){ + coverage.calledLines++; + } + coverage.lines[line]++; + }; + _yuitest_coverfunc = function(src, name, line){ + var coverage = _yuitest_coverage[src], + funcId = name + ":" + line; + if (!coverage.functions[funcId]){ + coverage.calledFunctions++; + } + coverage.functions[funcId]++; + }; +} +_yuitest_coverage["build/autocomplete-base/autocomplete-base.js"] = { + lines: {}, + functions: {}, + coveredLines: 0, + calledLines: 0, + coveredFunctions: 0, + calledFunctions: 0, + path: "build/autocomplete-base/autocomplete-base.js", + code: [] +}; +_yuitest_coverage["build/autocomplete-base/autocomplete-base.js"].code=["YUI.add('autocomplete-base', function (Y, NAME) {","","/**","Provides automatic input completion or suggestions for text input fields and","textareas.","","@module autocomplete","@main autocomplete","@since 3.3.0","**/","","/**","`Y.Base` extension that provides core autocomplete logic (but no UI","implementation) for a text input field or textarea. Must be mixed into a","`Y.Base`-derived class to be useful.","","@module autocomplete","@submodule autocomplete-base","**/","","/**","Extension that provides core autocomplete logic (but no UI implementation) for a","text input field or textarea.","","The `AutoCompleteBase` class provides events and attributes that abstract away","core autocomplete logic and configuration, but does not provide a widget","implementation or suggestion UI. For a prepackaged autocomplete widget, see","`AutoCompleteList`.","","This extension cannot be instantiated directly, since it doesn't provide an","actual implementation. It's intended to be mixed into a `Y.Base`-based class or","widget.","","`Y.Widget`-based example:",""," YUI().use('autocomplete-base', 'widget', function (Y) {"," var MyAC = Y.Base.create('myAC', Y.Widget, [Y.AutoCompleteBase], {"," // Custom prototype methods and properties."," }, {"," // Custom static methods and properties."," });",""," // Custom implementation code."," });","","`Y.Base`-based example:",""," YUI().use('autocomplete-base', function (Y) {"," var MyAC = Y.Base.create('myAC', Y.Base, [Y.AutoCompleteBase], {"," initializer: function () {"," this._bindUIACBase();"," this._syncUIACBase();"," },",""," // Custom prototype methods and properties."," }, {"," // Custom static methods and properties."," });",""," // Custom implementation code."," });","","@class AutoCompleteBase","**/","","var Escape = Y.Escape,"," Lang = Y.Lang,"," YArray = Y.Array,"," YObject = Y.Object,",""," isFunction = Lang.isFunction,"," isString = Lang.isString,"," trim = Lang.trim,",""," INVALID_VALUE = Y.Attribute.INVALID_VALUE,",""," _FUNCTION_VALIDATOR = '_functionValidator',"," _SOURCE_SUCCESS = '_sourceSuccess',",""," ALLOW_BROWSER_AC = 'allowBrowserAutocomplete',"," INPUT_NODE = 'inputNode',"," QUERY = 'query',"," QUERY_DELIMITER = 'queryDelimiter',"," REQUEST_TEMPLATE = 'requestTemplate',"," RESULTS = 'results',"," RESULT_LIST_LOCATOR = 'resultListLocator',"," VALUE = 'value',"," VALUE_CHANGE = 'valueChange',",""," EVT_CLEAR = 'clear',"," EVT_QUERY = QUERY,"," EVT_RESULTS = RESULTS;","","function AutoCompleteBase() {}","","AutoCompleteBase.prototype = {"," // -- Lifecycle Methods ----------------------------------------------------"," initializer: function () {"," // AOP bindings."," Y.before(this._bindUIACBase, this, 'bindUI');"," Y.before(this._syncUIACBase, this, 'syncUI');",""," // -- Public Events ----------------------------------------------------",""," /**"," Fires after the query has been completely cleared or no longer meets the"," minimum query length requirement.",""," @event clear"," @param {String} prevVal Value of the query before it was cleared."," @param {String} src Source of the event."," @preventable _defClearFn"," **/"," this.publish(EVT_CLEAR, {"," defaultFn: this._defClearFn"," });",""," /**"," Fires when the contents of the input field have changed and the input"," value meets the criteria necessary to generate an autocomplete query.",""," @event query"," @param {String} inputValue Full contents of the text input field or"," textarea that generated the query."," @param {String} query AutoComplete query. This is the string that will"," be used to request completion results. It may or may not be the same"," as `inputValue`."," @param {String} src Source of the event."," @preventable _defQueryFn"," **/"," this.publish(EVT_QUERY, {"," defaultFn: this._defQueryFn"," });",""," /**"," Fires after query results are received from the source. If no source has"," been set, this event will not fire.",""," @event results"," @param {Array|Object} data Raw, unfiltered result data (if available)."," @param {String} query Query that generated these results."," @param {Object[]} results Array of filtered, formatted, and highlighted"," results. Each item in the array is an object with the following"," properties:",""," @param {Node|HTMLElement|String} results.display Formatted result"," HTML suitable for display to the user. If no custom formatter is"," set, this will be an HTML-escaped version of the string in the"," `text` property."," @param {String} [results.highlighted] Highlighted (but not"," formatted) result text. This property will only be set if a"," highlighter is in use."," @param {Any} results.raw Raw, unformatted result in whatever form it"," was provided by the source."," @param {String} results.text Plain text version of the result,"," suitable for being inserted into the value of a text input field"," or textarea when the result is selected by a user. This value is"," not HTML-escaped and should not be inserted into the page using"," `innerHTML` or `Node#setContent()`.",""," @preventable _defResultsFn"," **/"," this.publish(EVT_RESULTS, {"," defaultFn: this._defResultsFn"," });"," },",""," destructor: function () {"," this._acBaseEvents && this._acBaseEvents.detach();",""," delete this._acBaseEvents;"," delete this._cache;"," delete this._inputNode;"," delete this._rawSource;"," },",""," // -- Public Prototype Methods ---------------------------------------------",""," /**"," Clears the result cache.",""," @method clearCache"," @chainable"," @since 3.5.0"," **/"," clearCache: function () {"," this._cache && (this._cache = {});"," return this;"," },",""," /**"," Sends a request to the configured source. If no source is configured, this"," method won't do anything.",""," Usually there's no reason to call this method manually; it will be called"," automatically when user input causes a `query` event to be fired. The only"," time you'll need to call this method manually is if you want to force a"," request to be sent when no user input has occurred.",""," @method sendRequest"," @param {String} [query] Query to send. If specified, the `query` attribute"," will be set to this query. If not specified, the current value of the"," `query` attribute will be used."," @param {Function} [requestTemplate] Request template function. If not"," specified, the current value of the `requestTemplate` attribute will be"," used."," @chainable"," **/"," sendRequest: function (query, requestTemplate) {"," var request,"," source = this.get('source');",""," if (query || query === '') {"," this._set(QUERY, query);"," } else {"," query = this.get(QUERY) || '';"," }",""," if (source) {"," if (!requestTemplate) {"," requestTemplate = this.get(REQUEST_TEMPLATE);"," }",""," request = requestTemplate ?"," requestTemplate.call(this, query) : query;","",""," source.sendRequest({"," query : query,"," request: request,",""," callback: {"," success: Y.bind(this._onResponse, this, query)"," }"," });"," }",""," return this;"," },",""," // -- Protected Lifecycle Methods ------------------------------------------",""," /**"," Attaches event listeners and behaviors.",""," @method _bindUIACBase"," @protected"," **/"," _bindUIACBase: function () {"," var inputNode = this.get(INPUT_NODE),"," tokenInput = inputNode && inputNode.tokenInput;",""," // If the inputNode has a node-tokeninput plugin attached, bind to the"," // plugin's inputNode instead."," if (tokenInput) {"," inputNode = tokenInput.get(INPUT_NODE);"," this._set('tokenInput', tokenInput);"," }",""," if (!inputNode) {"," Y.error('No inputNode specified.');"," return;"," }",""," this._inputNode = inputNode;",""," this._acBaseEvents = new Y.EventHandle(["," // This is the valueChange event on the inputNode, provided by the"," // event-valuechange module, not our own valueChange."," inputNode.on(VALUE_CHANGE, this._onInputValueChange, this),"," inputNode.on('blur', this._onInputBlur, this),",""," this.after(ALLOW_BROWSER_AC + 'Change', this._syncBrowserAutocomplete),"," this.after('sourceTypeChange', this._afterSourceTypeChange),"," this.after(VALUE_CHANGE, this._afterValueChange)"," ]);"," },",""," /**"," Synchronizes the UI state of the `inputNode`.",""," @method _syncUIACBase"," @protected"," **/"," _syncUIACBase: function () {"," this._syncBrowserAutocomplete();"," this.set(VALUE, this.get(INPUT_NODE).get(VALUE));"," },",""," // -- Protected Prototype Methods ------------------------------------------",""," /**"," Creates a DataSource-like object that simply returns the specified array as"," a response. See the `source` attribute for more details.",""," @method _createArraySource"," @param {Array} source"," @return {Object} DataSource-like object."," @protected"," **/"," _createArraySource: function (source) {"," var that = this;",""," return {"," type: 'array',"," sendRequest: function (request) {"," that[_SOURCE_SUCCESS](source.concat(), request);"," }"," };"," },",""," /**"," Creates a DataSource-like object that passes the query to a custom-defined"," function, which is expected to call the provided callback with an array of"," results. See the `source` attribute for more details.",""," @method _createFunctionSource"," @param {Function} source Function that accepts a query and a callback as"," parameters, and calls the callback with an array of results."," @return {Object} DataSource-like object."," @protected"," **/"," _createFunctionSource: function (source) {"," var that = this;",""," return {"," type: 'function',"," sendRequest: function (request) {"," var value;",""," function afterResults(results) {"," that[_SOURCE_SUCCESS](results || [], request);"," }",""," // Allow both synchronous and asynchronous functions. If we get"," // a truthy return value, assume the function is synchronous."," if ((value = source(request.query, afterResults))) {"," afterResults(value);"," }"," }"," };"," },",""," /**"," Creates a DataSource-like object that looks up queries as properties on the"," specified object, and returns the found value (if any) as a response. See"," the `source` attribute for more details.",""," @method _createObjectSource"," @param {Object} source"," @return {Object} DataSource-like object."," @protected"," **/"," _createObjectSource: function (source) {"," var that = this;",""," return {"," type: 'object',"," sendRequest: function (request) {"," var query = request.query;",""," that[_SOURCE_SUCCESS]("," YObject.owns(source, query) ? source[query] : [],"," request"," );"," }"," };"," },",""," /**"," Returns `true` if _value_ is either a function or `null`.",""," @method _functionValidator"," @param {Function|null} value Value to validate."," @protected"," **/"," _functionValidator: function (value) {"," return value === null || isFunction(value);"," },",""," /**"," Faster and safer alternative to `Y.Object.getValue()`. Doesn't bother"," casting the path to an array (since we already know it's an array) and"," doesn't throw an error if a value in the middle of the object hierarchy is"," neither `undefined` nor an object.",""," @method _getObjectValue"," @param {Object} obj"," @param {Array} path"," @return {Any} Located value, or `undefined` if the value was"," not found at the specified path."," @protected"," **/"," _getObjectValue: function (obj, path) {"," if (!obj) {"," return;"," }",""," for (var i = 0, len = path.length; obj && i < len; i++) {"," obj = obj[path[i]];"," }",""," return obj;"," },",""," /**"," Parses result responses, performs filtering and highlighting, and fires the"," `results` event.",""," @method _parseResponse"," @param {String} query Query that generated these results."," @param {Object} response Response containing results."," @param {Object} data Raw response data."," @protected"," **/"," _parseResponse: function (query, response, data) {"," var facade = {"," data : data,"," query : query,"," results: []"," },",""," listLocator = this.get(RESULT_LIST_LOCATOR),"," results = [],"," unfiltered = response && response.results,",""," filters,"," formatted,"," formatter,"," highlighted,"," highlighter,"," i,"," len,"," maxResults,"," result,"," text,"," textLocator;",""," if (unfiltered && listLocator) {"," unfiltered = listLocator.call(this, unfiltered);"," }",""," if (unfiltered && unfiltered.length) {"," filters = this.get('resultFilters');"," textLocator = this.get('resultTextLocator');",""," // Create a lightweight result object for each result to make them"," // easier to work with. The various properties on the object"," // represent different formats of the result, and will be populated"," // as we go."," for (i = 0, len = unfiltered.length; i < len; ++i) {"," result = unfiltered[i];",""," text = textLocator ?"," textLocator.call(this, result) :"," result.toString();",""," results.push({"," display: Escape.html(text),"," raw : result,"," text : text"," });"," }",""," // Run the results through all configured result filters. Each"," // filter returns an array of (potentially fewer) result objects,"," // which is then passed to the next filter, and so on."," for (i = 0, len = filters.length; i < len; ++i) {"," results = filters[i].call(this, query, results.concat());",""," if (!results) {"," return;"," }",""," if (!results.length) {"," break;"," }"," }",""," if (results.length) {"," formatter = this.get('resultFormatter');"," highlighter = this.get('resultHighlighter');"," maxResults = this.get('maxResults');",""," // If maxResults is set and greater than 0, limit the number of"," // results."," if (maxResults && maxResults > 0 &&"," results.length > maxResults) {"," results.length = maxResults;"," }",""," // Run the results through the configured highlighter (if any)."," // The highlighter returns an array of highlighted strings (not"," // an array of result objects), and these strings are then added"," // to each result object."," if (highlighter) {"," highlighted = highlighter.call(this, query,"," results.concat());",""," if (!highlighted) {"," return;"," }",""," for (i = 0, len = highlighted.length; i < len; ++i) {"," result = results[i];"," result.highlighted = highlighted[i];"," result.display = result.highlighted;"," }"," }",""," // Run the results through the configured formatter (if any) to"," // produce the final formatted results. The formatter returns an"," // array of strings or Node instances (not an array of result"," // objects), and these strings/Nodes are then added to each"," // result object."," if (formatter) {"," formatted = formatter.call(this, query, results.concat());",""," if (!formatted) {"," return;"," }",""," for (i = 0, len = formatted.length; i < len; ++i) {"," results[i].display = formatted[i];"," }"," }"," }"," }",""," facade.results = results;"," this.fire(EVT_RESULTS, facade);"," },",""," /**"," Returns the query portion of the specified input value, or `null` if there"," is no suitable query within the input value.",""," If a query delimiter is defined, the query will be the last delimited part"," of of the string.",""," @method _parseValue"," @param {String} value Input value from which to extract the query."," @return {String|null} query"," @protected"," **/"," _parseValue: function (value) {"," var delim = this.get(QUERY_DELIMITER);",""," if (delim) {"," value = value.split(delim);"," value = value[value.length - 1];"," }",""," return Lang.trimLeft(value);"," },",""," /**"," Setter for the `enableCache` attribute.",""," @method _setEnableCache"," @param {Boolean} value"," @protected"," @since 3.5.0"," **/"," _setEnableCache: function (value) {"," // When `this._cache` is an object, result sources will store cached"," // results in it. When it's falsy, they won't. This way result sources"," // don't need to get the value of the `enableCache` attribute on every"," // request, which would be sloooow."," this._cache = value ? {} : null;"," },",""," /**"," Setter for locator attributes.",""," @method _setLocator"," @param {Function|String|null} locator"," @return {Function|null}"," @protected"," **/"," _setLocator: function (locator) {"," if (this[_FUNCTION_VALIDATOR](locator)) {"," return locator;"," }",""," var that = this;",""," locator = locator.toString().split('.');",""," return function (result) {"," return result && that._getObjectValue(result, locator);"," };"," },",""," /**"," Setter for the `requestTemplate` attribute.",""," @method _setRequestTemplate"," @param {Function|String|null} template"," @return {Function|null}"," @protected"," **/"," _setRequestTemplate: function (template) {"," if (this[_FUNCTION_VALIDATOR](template)) {"," return template;"," }",""," template = template.toString();",""," return function (query) {"," return Lang.sub(template, {query: encodeURIComponent(query)});"," };"," },",""," /**"," Setter for the `resultFilters` attribute.",""," @method _setResultFilters"," @param {Array|Function|String|null} filters `null`, a filter"," function, an array of filter functions, or a string or array of strings"," representing the names of methods on `Y.AutoCompleteFilters`."," @return {Function[]} Array of filter functions (empty if filters is"," `null`)."," @protected"," **/"," _setResultFilters: function (filters) {"," var acFilters, getFilterFunction;",""," if (filters === null) {"," return [];"," }",""," acFilters = Y.AutoCompleteFilters;",""," getFilterFunction = function (filter) {"," if (isFunction(filter)) {"," return filter;"," }",""," if (isString(filter) && acFilters &&"," isFunction(acFilters[filter])) {"," return acFilters[filter];"," }",""," return false;"," };",""," if (Lang.isArray(filters)) {"," filters = YArray.map(filters, getFilterFunction);"," return YArray.every(filters, function (f) { return !!f; }) ?"," filters : INVALID_VALUE;"," } else {"," filters = getFilterFunction(filters);"," return filters ? [filters] : INVALID_VALUE;"," }"," },",""," /**"," Setter for the `resultHighlighter` attribute.",""," @method _setResultHighlighter"," @param {Function|String|null} highlighter `null`, a highlighter function, or"," a string representing the name of a method on"," `Y.AutoCompleteHighlighters`."," @return {Function|null}"," @protected"," **/"," _setResultHighlighter: function (highlighter) {"," var acHighlighters;",""," if (this[_FUNCTION_VALIDATOR](highlighter)) {"," return highlighter;"," }",""," acHighlighters = Y.AutoCompleteHighlighters;",""," if (isString(highlighter) && acHighlighters &&"," isFunction(acHighlighters[highlighter])) {"," return acHighlighters[highlighter];"," }",""," return INVALID_VALUE;"," },",""," /**"," Setter for the `source` attribute. Returns a DataSource or a DataSource-like"," object depending on the type of _source_ and/or the value of the"," `sourceType` attribute.",""," @method _setSource"," @param {Any} source AutoComplete source. See the `source` attribute for"," details."," @return {DataSource|Object}"," @protected"," **/"," _setSource: function (source) {"," var sourceType = this.get('sourceType') || Lang.type(source),"," sourceSetter;",""," if ((source && isFunction(source.sendRequest))"," || source === null"," || sourceType === 'datasource') {",""," // Quacks like a DataSource instance (or null). Make it so!"," this._rawSource = source;"," return source;"," }",""," // See if there's a registered setter for this source type."," if ((sourceSetter = AutoCompleteBase.SOURCE_TYPES[sourceType])) {"," this._rawSource = source;"," return Lang.isString(sourceSetter) ?"," this[sourceSetter](source) : sourceSetter(source);"," }",""," Y.error(\"Unsupported source type '\" + sourceType + \"'. Maybe autocomplete-sources isn't loaded?\");"," return INVALID_VALUE;"," },",""," /**"," Shared success callback for non-DataSource sources.",""," @method _sourceSuccess"," @param {Any} data Response data."," @param {Object} request Request object."," @protected"," **/"," _sourceSuccess: function (data, request) {"," request.callback.success({"," data: data,"," response: {results: data}"," });"," },",""," /**"," Synchronizes the UI state of the `allowBrowserAutocomplete` attribute.",""," @method _syncBrowserAutocomplete"," @protected"," **/"," _syncBrowserAutocomplete: function () {"," var inputNode = this.get(INPUT_NODE);",""," if (inputNode.get('nodeName').toLowerCase() === 'input') {"," inputNode.setAttribute('autocomplete',"," this.get(ALLOW_BROWSER_AC) ? 'on' : 'off');"," }"," },",""," /**"," Updates the query portion of the `value` attribute.",""," If a query delimiter is defined, the last delimited portion of the input"," value will be replaced with the specified _value_.",""," @method _updateValue"," @param {String} newVal New value."," @protected"," **/"," _updateValue: function (newVal) {"," var delim = this.get(QUERY_DELIMITER),"," insertDelim,"," len,"," prevVal;",""," newVal = Lang.trimLeft(newVal);",""," if (delim) {"," insertDelim = trim(delim); // so we don't double up on spaces"," prevVal = YArray.map(trim(this.get(VALUE)).split(delim), trim);"," len = prevVal.length;",""," if (len > 1) {"," prevVal[len - 1] = newVal;"," newVal = prevVal.join(insertDelim + ' ');"," }",""," newVal = newVal + insertDelim + ' ';"," }",""," this.set(VALUE, newVal);"," },",""," // -- Protected Event Handlers ---------------------------------------------",""," /**"," Updates the current `source` based on the new `sourceType` to ensure that"," the two attributes don't get out of sync when they're changed separately.",""," @method _afterSourceTypeChange"," @param {EventFacade} e"," @protected"," **/"," _afterSourceTypeChange: function (e) {"," if (this._rawSource) {"," this.set('source', this._rawSource);"," }"," },",""," /**"," Handles change events for the `value` attribute.",""," @method _afterValueChange"," @param {EventFacade} e"," @protected"," **/"," _afterValueChange: function (e) {"," var newVal = e.newVal,"," self = this,"," uiChange = e.src === AutoCompleteBase.UI_SRC,"," delay, fire, minQueryLength, query;",""," // Update the UI if the value was changed programmatically."," if (!uiChange) {"," self._inputNode.set(VALUE, newVal);"," }","",""," minQueryLength = self.get('minQueryLength');"," query = self._parseValue(newVal) || '';",""," if (minQueryLength >= 0 && query.length >= minQueryLength) {"," // Only query on changes that originate from the UI."," if (uiChange) {"," delay = self.get('queryDelay');",""," fire = function () {"," self.fire(EVT_QUERY, {"," inputValue: newVal,"," query : query,"," src : e.src"," });"," };",""," if (delay) {"," clearTimeout(self._delay);"," self._delay = setTimeout(fire, delay);"," } else {"," fire();"," }"," } else {"," // For programmatic value changes, just update the query"," // attribute without sending a query."," self._set(QUERY, query);"," }"," } else {"," clearTimeout(self._delay);",""," self.fire(EVT_CLEAR, {"," prevVal: e.prevVal ? self._parseValue(e.prevVal) : null,"," src : e.src"," });"," }"," },",""," /**"," Handles `blur` events on the input node.",""," @method _onInputBlur"," @param {EventFacade} e"," @protected"," **/"," _onInputBlur: function (e) {"," var delim = this.get(QUERY_DELIMITER),"," delimPos,"," newVal,"," value;",""," // If a query delimiter is set and the input's value contains one or"," // more trailing delimiters, strip them."," if (delim && !this.get('allowTrailingDelimiter')) {"," delim = Lang.trimRight(delim);"," value = newVal = this._inputNode.get(VALUE);",""," if (delim) {"," while ((newVal = Lang.trimRight(newVal)) &&"," (delimPos = newVal.length - delim.length) &&"," newVal.lastIndexOf(delim) === delimPos) {",""," newVal = newVal.substring(0, delimPos);"," }"," } else {"," // Delimiter is one or more space characters, so just trim the"," // value."," newVal = Lang.trimRight(newVal);"," }",""," if (newVal !== value) {"," this.set(VALUE, newVal);"," }"," }"," },",""," /**"," Handles `valueChange` events on the input node and fires a `query` event"," when the input value meets the configured criteria.",""," @method _onInputValueChange"," @param {EventFacade} e"," @protected"," **/"," _onInputValueChange: function (e) {"," var newVal = e.newVal;",""," // Don't query if the internal value is the same as the new value"," // reported by valueChange."," if (newVal !== this.get(VALUE)) {"," this.set(VALUE, newVal, {src: AutoCompleteBase.UI_SRC});"," }"," },",""," /**"," Handles source responses and fires the `results` event.",""," @method _onResponse"," @param {EventFacade} e"," @protected"," **/"," _onResponse: function (query, e) {"," // Ignore stale responses that aren't for the current query."," if (query === (this.get(QUERY) || '')) {"," this._parseResponse(query || '', e.response, e.data);"," }"," },",""," // -- Protected Default Event Handlers -------------------------------------",""," /**"," Default `clear` event handler. Sets the `results` attribute to an empty"," array and `query` to null.",""," @method _defClearFn"," @protected"," **/"," _defClearFn: function () {"," this._set(QUERY, null);"," this._set(RESULTS, []);"," },",""," /**"," Default `query` event handler. Sets the `query` attribute and sends a"," request to the source if one is configured.",""," @method _defQueryFn"," @param {EventFacade} e"," @protected"," **/"," _defQueryFn: function (e) {"," this.sendRequest(e.query); // sendRequest will set the 'query' attribute"," },",""," /**"," Default `results` event handler. Sets the `results` attribute to the latest"," results.",""," @method _defResultsFn"," @param {EventFacade} e"," @protected"," **/"," _defResultsFn: function (e) {"," this._set(RESULTS, e[RESULTS]);"," }","};","","AutoCompleteBase.ATTRS = {"," /**"," Whether or not to enable the browser's built-in autocomplete functionality"," for input fields.",""," @attribute allowBrowserAutocomplete"," @type Boolean"," @default false"," **/"," allowBrowserAutocomplete: {"," value: false"," },",""," /**"," When a `queryDelimiter` is set, trailing delimiters will automatically be"," stripped from the input value by default when the input node loses focus."," Set this to `true` to allow trailing delimiters.",""," @attribute allowTrailingDelimiter"," @type Boolean"," @default false"," **/"," allowTrailingDelimiter: {"," value: false"," },",""," /**"," Whether or not to enable in-memory caching in result sources that support"," it.",""," @attribute enableCache"," @type Boolean"," @default true"," @since 3.5.0"," **/"," enableCache: {"," lazyAdd: false, // we need the setter to run on init"," setter: '_setEnableCache',"," value: true"," },",""," /**"," Node to monitor for changes, which will generate `query` events when"," appropriate. May be either an `` or a `